X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=83d1bfac9966812199c7b883b43da0ca145facc3;hb=e33b66766fa2abe825742dc891385468d7f3ab37;hp=5ea7095429b62619367d05177cc2c8a622395fe0;hpb=0943667cdc5a86458c17ce6ce223c546cf86c7e6;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index 5ea7095..83d1bfa 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -747,29 +747,45 @@ 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); } } @@ -951,9 +967,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 +981,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 +1988,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); } @@ -2204,7 +2227,6 @@ restart(struct swm_region *r, union arg *args) bar_extra_stop(); bar_extra = 1; unmap_all(); - xcb_disconnect(conn); XCloseDisplay(display); execvp(start_argv[0], start_argv); warn("execvp failed"); @@ -5400,7 +5422,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++)