X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=781cdd98bd1c296ddaabb7139bf9947286342278;hb=b086f741a61b80d021c0ea7aa0ba8e65049a91d4;hp=8bdecf16e41fd9ab7fd800a97a87df5f3b50c50b;hpb=e18f7c05ed1d3400a9368267ec73b4d1999243db;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index 8bdecf1..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; + + xcb_intern_atom_cookie_t c; + xcb_intern_atom_reply_t *r; + xcb_get_property_cookie_t pc; + xcb_get_property_reply_t *pr; - sup_check = XInternAtom(display, "_NET_SUPPORTING_WM_CHECK", False); - sup_list = XInternAtom(display, "_NET_SUPPORTED", False); + 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) @@ -951,9 +968,10 @@ ewmh_update_win_state(struct ws_win *win, long state, long action) void ewmh_get_win_state(struct ws_win *win) { - int success, i; - unsigned long n; - Atom *states; + xcb_atom_t *states; + xcb_get_property_cookie_t c; + xcb_get_property_reply_t *r; + int i, n; if (win == NULL) return; @@ -964,16 +982,19 @@ ewmh_get_win_state(struct ws_win *win) if (win->manual) win->ewmh_flags |= SWM_F_MANUAL; - success = get_property(win->id, ewmh[_NET_WM_STATE].atom, - (~0L), XA_ATOM, &n, NULL, (void *)&states); - - if (!success) + c = xcb_get_property(conn, False, win->id, ewmh[_NET_WM_STATE].atom, + XCB_ATOM_ATOM, 0, (~0L)); + r = xcb_get_property_reply(conn, c, NULL); + if (!r) return; + + states = xcb_get_property_value(r); + n = xcb_get_property_value_length(r); + + free(r); for (i = 0; i < n; i++) ewmh_update_win_state(win, states[i], _NET_WM_STATE_ADD); - - XFree(states); } /* events */ @@ -1968,29 +1989,32 @@ drain_enter_notify(void) void set_win_state(struct ws_win *win, long state) { - long data[] = {state, None}; + long data[] = {state, XCB_ATOM_NONE}; DNPRINTF(SWM_D_EVENT, "set_win_state: window: 0x%lx\n", win->id); if (win == NULL) return; - XChangeProperty(display, win->id, astate, astate, 32, PropModeReplace, - (unsigned char *)data, 2); + xcb_change_property(conn, XCB_PROP_MODE_REPLACE, win->id, astate, + astate, 32, 2, data); } long getstate(xcb_window_t w) { - long result = -1; - unsigned char *p = NULL; - unsigned long n; + long result = -1; + xcb_get_property_cookie_t c; + xcb_get_property_reply_t *r; - if (!get_property(w, astate, 2L, astate, &n, NULL, &p)) - return (-1); - if (n != 0) - result = *((long *)p); - XFree(p); + c = xcb_get_property(conn, False, w, astate, astate, 0L, 2L); + r = xcb_get_property_reply(conn, c, NULL); + + if (r) { + result = *((long *)xcb_get_property_value(r)); + free(r); + } + return (result); } @@ -5399,7 +5423,8 @@ grabkeys(void) for (k = 0; k < num_screens; k++) { if (TAILQ_EMPTY(&screens[k].rl)) continue; - XUngrabKey(display, AnyKey, AnyModifier, screens[k].root); + xcb_ungrab_key(conn, XCB_GRAB_ANY, screens[k].root, + XCB_MOD_MASK_ANY); RB_FOREACH(kp, key_tree, &keys) { if ((code = XKeysymToKeycode(display, kp->keysym))) for (j = 0; j < LENGTH(modifiers); j++)