X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=85345d6d85e0984fae71755d6020cd18670c79d5;hb=f2da41ebd0faa4e3e4c80ee22d66aa3e1297a735;hp=bad65b5534ca52f12171b1e565423171131f6a73;hpb=f049b883c13a8374e294fc55bc7ee6b64d4cbc6f;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index bad65b5..85345d6 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -336,8 +336,8 @@ struct swm_screen; struct workspace; struct swm_bar { - Window id; - Pixmap buffer; + xcb_window_t id; + xcb_pixmap_t buffer; struct swm_geometry g; }; @@ -587,34 +587,34 @@ enum { }; struct ewmh_hint { - char *name; - Atom atom; + char *name; + xcb_atom_t atom; } ewmh[SWM_EWMH_HINT_MAX] = { /* must be in same order as in the enum */ - {"_NET_ACTIVE_WINDOW", None}, - {"_NET_CLOSE_WINDOW", None}, - {"_NET_MOVERESIZE_WINDOW", None}, - {"_NET_WM_ACTION_CLOSE", None}, - {"_NET_WM_ACTION_FULLSCREEN", None}, - {"_NET_WM_ACTION_MOVE", None}, - {"_NET_WM_ACTION_RESIZE", None}, - {"_NET_WM_ALLOWED_ACTIONS", None}, - {"_NET_WM_STATE", None}, - {"_NET_WM_STATE_ABOVE", None}, - {"_NET_WM_STATE_FULLSCREEN", None}, - {"_NET_WM_STATE_HIDDEN", None}, - {"_NET_WM_STATE_MAXIMIZED_HORZ", None}, - {"_NET_WM_STATE_MAXIMIZED_VERT", None}, - {"_NET_WM_STATE_SKIP_PAGER", None}, - {"_NET_WM_STATE_SKIP_TASKBAR", None}, - {"_NET_WM_WINDOW_TYPE", None}, - {"_NET_WM_WINDOW_TYPE_DIALOG", None}, - {"_NET_WM_WINDOW_TYPE_DOCK", None}, - {"_NET_WM_WINDOW_TYPE_NORMAL", None}, - {"_NET_WM_WINDOW_TYPE_SPLASH", None}, - {"_NET_WM_WINDOW_TYPE_TOOLBAR", None}, - {"_NET_WM_WINDOW_TYPE_UTILITY", None}, - {"_SWM_WM_STATE_MANUAL", None}, + {"_NET_ACTIVE_WINDOW", XCB_ATOM_NONE}, + {"_NET_CLOSE_WINDOW", XCB_ATOM_NONE}, + {"_NET_MOVERESIZE_WINDOW", XCB_ATOM_NONE}, + {"_NET_WM_ACTION_CLOSE", XCB_ATOM_NONE}, + {"_NET_WM_ACTION_FULLSCREEN", XCB_ATOM_NONE}, + {"_NET_WM_ACTION_MOVE", XCB_ATOM_NONE}, + {"_NET_WM_ACTION_RESIZE", XCB_ATOM_NONE}, + {"_NET_WM_ALLOWED_ACTIONS", XCB_ATOM_NONE}, + {"_NET_WM_STATE", XCB_ATOM_NONE}, + {"_NET_WM_STATE_ABOVE", XCB_ATOM_NONE}, + {"_NET_WM_STATE_FULLSCREEN", XCB_ATOM_NONE}, + {"_NET_WM_STATE_HIDDEN", XCB_ATOM_NONE}, + {"_NET_WM_STATE_MAXIMIZED_HORZ", XCB_ATOM_NONE}, + {"_NET_WM_STATE_MAXIMIZED_VERT", XCB_ATOM_NONE}, + {"_NET_WM_STATE_SKIP_PAGER", XCB_ATOM_NONE}, + {"_NET_WM_STATE_SKIP_TASKBAR", XCB_ATOM_NONE}, + {"_NET_WM_WINDOW_TYPE", XCB_ATOM_NONE}, + {"_NET_WM_WINDOW_TYPE_DIALOG", XCB_ATOM_NONE}, + {"_NET_WM_WINDOW_TYPE_DOCK", XCB_ATOM_NONE}, + {"_NET_WM_WINDOW_TYPE_NORMAL", XCB_ATOM_NONE}, + {"_NET_WM_WINDOW_TYPE_SPLASH", XCB_ATOM_NONE}, + {"_NET_WM_WINDOW_TYPE_TOOLBAR", XCB_ATOM_NONE}, + {"_NET_WM_WINDOW_TYPE_UTILITY", XCB_ATOM_NONE}, + {"_SWM_WM_STATE_MANUAL", XCB_ATOM_NONE}, }; void store_float_geom(struct ws_win *, struct swm_region *); @@ -850,7 +850,7 @@ ewmh_set_win_fullscreen(struct ws_win *win, int fs) void ewmh_update_actions(struct ws_win *win) { - Atom actions[SWM_EWMH_ACTION_COUNT_MAX]; + xcb_atom_t actions[SWM_EWMH_ACTION_COUNT_MAX]; int n = 0; if (win == NULL) @@ -863,8 +863,9 @@ ewmh_update_actions(struct ws_win *win) actions[n++] = ewmh[_NET_WM_ACTION_RESIZE].atom; } - XChangeProperty(display, win->id, ewmh[_NET_WM_ALLOWED_ACTIONS].atom, - XA_ATOM, 32, PropModeReplace, (unsigned char *)actions, n); + xcb_change_property(conn, XCB_PROP_MODE_REPLACE, win->id, + ewmh[_NET_WM_ALLOWED_ACTIONS].atom, XCB_ATOM_ATOM, 32, 1, + actions); } #define _NET_WM_STATE_REMOVE 0 /* remove/unset property */ @@ -1327,13 +1328,15 @@ void custom_region(char *val) { unsigned int sidx, x, y, w, h; + int num_screens; + num_screens = xcb_setup_roots_length(xcb_get_setup(conn)); if (sscanf(val, "screen[%u]:%ux%u+%u+%u", &sidx, &w, &h, &x, &y) != 5) errx(1, "invalid custom region, " "should be 'screen[]:x++"); - if (sidx < 1 || sidx > ScreenCount(display)) + if (sidx < 1 || sidx > num_screens) errx(1, "invalid screen index: %d out of bounds (maximum %d)", - sidx, ScreenCount(display)); + sidx, num_screens); sidx--; if (w < 1 || h < 1) @@ -1934,8 +1937,8 @@ bar_cleanup(struct swm_region *r) { if (r->bar == NULL) return; - XDestroyWindow(display, r->bar->id); - XFreePixmap(display, r->bar->buffer); + xcb_destroy_window(conn, r->bar->id); + xcb_free_pixmap(conn, r->bar->buffer); free(r->bar); r->bar = NULL; } @@ -2399,7 +2402,7 @@ void unfocus_win(struct ws_win *win) { XEvent cne; - Window none = None; + xcb_window_t none = XCB_WINDOW_NONE; DNPRINTF(SWM_D_FOCUS, "unfocus_win: window: 0x%lx\n", WINID(win)); @@ -2441,9 +2444,9 @@ unfocus_win(struct ws_win *win) XSetWindowBorder(display, win->id, win->ws->r->s->c[SWM_S_COLOR_UNFOCUS].color); - XChangeProperty(display, win->s->root, - ewmh[_NET_ACTIVE_WINDOW].atom, XA_WINDOW, 32, - PropModeReplace, (unsigned char *)&none, 1); + xcb_change_property(conn, XCB_PROP_MODE_REPLACE, win->s->root, + ewmh[_NET_ACTIVE_WINDOW].atom, XCB_ATOM_WINDOW, 32, 1, + &none); } void @@ -5395,19 +5398,25 @@ grabbuttons(struct ws_win *win, int focused) { 0, LockMask, numlockmask, numlockmask|LockMask }; updatenumlockmask(); - XUngrabButton(display, AnyButton, AnyModifier, win->id); + xcb_ungrab_button(conn, XCB_BUTTON_INDEX_ANY, win->id, + XCB_BUTTON_MASK_ANY); if (focused) { for (i = 0; i < LENGTH(buttons); i++) if (buttons[i].action == client_click) for (j = 0; j < LENGTH(modifiers); j++) - XGrabButton(display, buttons[i].button, - buttons[i].mask | modifiers[j], - win->id, False, BUTTONMASK, - GrabModeAsync, GrabModeSync, None, - None); + xcb_grab_button(conn, False, win->id, + BUTTONMASK, + XCB_GRAB_MODE_ASYNC, + XCB_GRAB_MODE_SYNC, + XCB_WINDOW_NONE, + XCB_CURSOR_NONE, + buttons[i].button, + buttons[i].mask); } else - XGrabButton(display, AnyButton, AnyModifier, win->id, False, - BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); + xcb_grab_button(conn, False, win->id, BUTTONMASK, + XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_SYNC, + XCB_WINDOW_NONE, XCB_CURSOR_NONE, XCB_BUTTON_INDEX_ANY, + XCB_BUTTON_MASK_ANY); } const char *quirkname[] = { @@ -6170,45 +6179,51 @@ set_child_transient(struct ws_win *win, Window *trans) long window_get_pid(Window win) { - Atom actual_type_return; - int actual_format_return = 0; - unsigned long nitems_return = 0; - unsigned long bytes_after_return = 0; - long *pid = NULL; - long ret = 0; - const char *errstr; - unsigned char *prop = NULL; + long ret = 0; + const char *errstr; + xcb_atom_t apid; + xcb_intern_atom_cookie_t c; + xcb_intern_atom_reply_t *r; + xcb_get_property_cookie_t pc; + xcb_get_property_reply_t *pr; - if (XGetWindowProperty(display, win, - XInternAtom(display, "_NET_WM_PID", False), 0, 1, False, - XA_CARDINAL, &actual_type_return, &actual_format_return, - &nitems_return, &bytes_after_return, - (unsigned char**)(void*)&pid) != Success) + c = xcb_intern_atom(conn, False, strlen("_NET_WM_PID"), "_NET_WM_PID"); + r = xcb_intern_atom_reply(conn, c, NULL); + if (r) { + apid = r->atom; + free(r); + } else goto tryharder; - if (actual_type_return != XA_CARDINAL) + + pc = xcb_get_property(conn, False, win, apid, XCB_ATOM_CARDINAL, 0, 1); + pr = xcb_get_property_reply(conn, pc, NULL); + if (!pr) goto tryharder; - if (pid == NULL) + if (pr->type != XCB_ATOM_CARDINAL) goto tryharder; - ret = *pid; - XFree(pid); + ret = *(long *)xcb_get_property_value(pr); + free(pr); return (ret); tryharder: - if (XGetWindowProperty(display, win, - XInternAtom(display, "_SWM_PID", False), 0, SWM_PROPLEN, False, - XA_STRING, &actual_type_return, &actual_format_return, - &nitems_return, &bytes_after_return, &prop) != Success) - return (0); - if (actual_type_return != XA_STRING) + c = xcb_intern_atom(conn, False, strlen("_SWM_PID"), "_SWM_PID"); + r = xcb_intern_atom_reply(conn, c, NULL); + if (r) { + apid = r->atom; + free(r); + } + pc = xcb_get_property(conn, False, win, apid, XCB_ATOM_STRING, + 0, SWM_PROPLEN); + pr = xcb_get_property_reply(conn, pc, NULL); + if (!pr) return (0); - if (prop == NULL) + if (pr->type != XCB_ATOM_STRING) + free(pr); return (0); - - ret = strtonum((const char *)prop, 0, UINT_MAX, &errstr); - /* ignore error because strtonum returns 0 anyway */ - XFree(prop); + ret = strtonum(xcb_get_property_value(pr), 0, UINT_MAX, &errstr); + free(pr); return (ret); }