X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=781cdd98bd1c296ddaabb7139bf9947286342278;hb=b086f741a61b80d021c0ea7aa0ba8e65049a91d4;hp=40e5a07265980fc7fad3eca038db3a6925c4a6bb;hpb=0ac5177d7b141380345b6533a13e3cec5b87fd4f;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index 40e5a07..781cdd9 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -747,49 +747,67 @@ setup_ewmh(void) void teardown_ewmh(void) { - int i, success, num_screens; - unsigned char *data = NULL; - unsigned long n; - Atom sup_check, sup_list; - Window id; + int i, num_screens; + xcb_atom_t sup_check, sup_list; + xcb_window_t id; - sup_check = XInternAtom(display, "_NET_SUPPORTING_WM_CHECK", False); - sup_list = XInternAtom(display, "_NET_SUPPORTED", False); + xcb_intern_atom_cookie_t c; + xcb_intern_atom_reply_t *r; + xcb_get_property_cookie_t pc; + xcb_get_property_reply_t *pr; + + c = xcb_intern_atom(conn, False, strlen("_NET_SUPPORTING_WM_CHECK"), + "_NET_SUPPORTING_WM_CHECK"); + r = xcb_intern_atom_reply(conn, c, NULL); + if (r) { + sup_check = r->atom; + free(r); + } + c = xcb_intern_atom(conn, False, strlen("_NET_SUPPORTED"), + "_NET_SUPPORTED"); + r = xcb_intern_atom_reply(conn, c, NULL); + if (r) { + sup_list = r->atom; + free(r); + } num_screens = xcb_setup_roots_length(xcb_get_setup(conn)); for (i = 0; i < num_screens; i++) { /* Get the support check window and destroy it */ - success = get_property(screens[i].root, sup_check, 1, XA_WINDOW, - &n, NULL, &data); - - if (success) { - id = data[0]; - XDestroyWindow(display, id); - XDeleteProperty(display, screens[i].root, sup_check); - XDeleteProperty(display, screens[i].root, sup_list); + pc = xcb_get_property(conn, False, screens[i].root, sup_check, + XCB_ATOM_WINDOW, 0, 1); + pr = xcb_get_property_reply(conn, pc, NULL); + if (pr) { + id = *((xcb_window_t *)xcb_get_property_value(pr)); + + xcb_destroy_window(conn, id); + xcb_delete_property(conn, screens[i].root, sup_check); + xcb_delete_property(conn, screens[i].root, sup_list); + + free(pr); } - - XFree(data); } } void ewmh_autoquirk(struct ws_win *win) { - int success, i; - unsigned long *data = NULL, n; - Atom type; + int i; + unsigned long n; + xcb_atom_t type; - success = get_property(win->id, ewmh[_NET_WM_WINDOW_TYPE].atom, (~0L), - XA_ATOM, &n, NULL, (void *)&data); + xcb_get_property_cookie_t c; + xcb_get_property_reply_t *r; - if (!success) { - XFree(data); + c = xcb_get_property(conn, False, win->id, + ewmh[_NET_WM_WINDOW_TYPE].atom, XCB_ATOM_ATOM, 0, (~0L)); + r = xcb_get_property_reply(conn, c, NULL); + if (!r) return; - } + n = xcb_get_property_value_length(r); for (i = 0; i < n; i++) { - type = data[i]; + type = *((xcb_atom_t *)xcb_get_property_value(r)); if (type == ewmh[_NET_WM_WINDOW_TYPE_NORMAL].atom) break; if (type == ewmh[_NET_WM_WINDOW_TYPE_DOCK].atom || @@ -806,8 +824,7 @@ ewmh_autoquirk(struct ws_win *win) break; } } - - XFree(data); + free(r); } #define SWM_EWMH_ACTION_COUNT_MAX (6)