diff --git a/src/include/xcb.h b/src/include/xcb.h index 899ff79..89dd3b8 100644 --- a/src/include/xcb.h +++ b/src/include/xcb.h @@ -22,3 +22,4 @@ typedef struct window_list_t { } window_list_t; window_list_t *scan_window_list(void); void free_window_list(window_list_t *window_list); +void clean_xcb(void); diff --git a/src/main.c b/src/main.c index aaae239..2292183 100644 --- a/src/main.c +++ b/src/main.c @@ -31,6 +31,7 @@ int main(int argc, char *argv[]) { } free_window_list(window_list); + clean_xcb(); return 0; } diff --git a/src/xcb/xcb.c b/src/xcb/xcb.c index 5cb01ee..7bdf2b8 100644 --- a/src/xcb/xcb.c +++ b/src/xcb/xcb.c @@ -225,3 +225,22 @@ void free_window_list(window_list_t *window_list) { free(window_list->list); free(window_list); } + +void clean_xcb(void) { + if (wm_check_window != XCB_NONE) { + xcb_destroy_window(conn, wm_check_window); + wm_check_window = XCB_NONE; + } + + if (ewmh) { + if (!ewmh_init_failed) { + xcb_ewmh_connection_wipe(ewmh); + } + ewmh_init_failed = false; + ewmh = NULL; + } + + xcb_disconnect(conn); + conn = NULL; + screen = NULL; +}