X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=7fd6790fc40a87deb686d355fcd445c7eba768d9;hb=8d3f2ce997f12b5d93ff31e256c9ac42eb0faab3;hp=0f6b1313b6cc8e2b00a27c93e91171d2089d8265;hpb=180a95437521c4aa872faf0fda3b18230e297948;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index 0f6b131..7fd6790 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -123,17 +123,32 @@ static const char *buildstr = SPECTRWM_VERSION; #endif #if defined(__OpenBSD__) -#define xcb_icccm_wm_hints_t xcb_wm_hints_t -#define xcb_icccm_get_wm_hints xcb_get_wm_hints -#define xcb_icccm_get_wm_hints_reply xcb_get_wm_hints_reply +#define XCB_ICCCM_SIZE_HINT_P_MIN_SIZE XCB_SIZE_HINT_P_MIN_SIZE +#define XCB_ICCCM_SIZE_HINT_P_MAX_SIZE XCB_SIZE_HINT_P_MAX_SIZE +#define XCB_ICCCM_SIZE_HINT_P_RESIZE_INC XCB_SIZE_HINT_P_RESIZE_INC #define XCB_ICCCM_WM_HINT_X_URGENCY XCB_WM_HINT_X_URGENCY #define XCB_ICCCM_WM_STATE_ICONIC XCB_WM_STATE_ICONIC #define XCB_ICCCM_WM_STATE_WITHDRAWN XCB_WM_STATE_WITHDRAWN #define XCB_ICCCM_WM_STATE_NORMAL XCB_WM_STATE_NORMAL +#define xcb_icccm_get_text_property_reply_t xcb_get_text_property_reply_t +#define xcb_icccm_get_text_property_reply_wipe xcb_get_text_property_reply_wipe +#define xcb_icccm_get_wm_class xcb_get_wm_class +#define xcb_icccm_get_wm_class_reply xcb_get_wm_class_reply +#define xcb_icccm_get_wm_class_reply_t xcb_get_wm_class_reply_t +#define xcb_icccm_get_wm_class_reply_wipe xcb_get_wm_class_reply_wipe +#define xcb_icccm_get_wm_hints xcb_get_wm_hints +#define xcb_icccm_get_wm_hints_reply xcb_get_wm_hints_reply #define xcb_icccm_get_wm_name xcb_get_wm_name #define xcb_icccm_get_wm_name_reply xcb_get_wm_name_reply +#define xcb_icccm_get_wm_normal_hints xcb_get_wm_normal_hints +#define xcb_icccm_get_wm_normal_hints_reply xcb_get_wm_normal_hints_reply +#define xcb_icccm_get_wm_protocols xcb_get_wm_protocols +#define xcb_icccm_get_wm_protocols_reply xcb_get_wm_protocols_reply +#define xcb_icccm_get_wm_protocols_reply_t xcb_get_wm_protocols_reply_t +#define xcb_icccm_get_wm_protocols_reply_wipe xcb_get_wm_protocols_reply_wipe #define xcb_icccm_get_wm_transient_for xcb_get_wm_transient_for #define xcb_icccm_get_wm_transient_for_reply xcb_get_wm_transient_for_reply +#define xcb_icccm_wm_hints_t xcb_wm_hints_t #endif /*#define SWM_DEBUG*/ @@ -194,13 +209,13 @@ u_int32_t swm_debug = 0 #define BORDER(w) (w->bordered ? border_width : 0) #define MAX_X(r) ((r)->g.x + (r)->g.w) #define MAX_Y(r) ((r)->g.y + (r)->g.h) -#define SH_MIN(w) (w)->sh.flags & XCB_SIZE_HINT_P_MIN_SIZE +#define SH_MIN(w) (w)->sh.flags & XCB_ICCCM_SIZE_HINT_P_MIN_SIZE #define SH_MIN_W(w) (w)->sh.min_width #define SH_MIN_H(w) (w)->sh.min_height -#define SH_MAX(w) (w)->sh.flags & XCB_SIZE_HINT_P_MAX_SIZE +#define SH_MAX(w) (w)->sh.flags & XCB_ICCCM_SIZE_HINT_P_MAX_SIZE #define SH_MAX_W(w) (w)->sh.max_width #define SH_MAX_H(w) (w)->sh.max_height -#define SH_INC(w) (w)->sh.flags & XCB_SIZE_HINT_P_RESIZE_INC +#define SH_INC(w) (w)->sh.flags & XCB_ICCCM_SIZE_HINT_P_RESIZE_INC #define SH_INC_W(w) (w)->sh.width_inc #define SH_INC_H(w) (w)->sh.height_inc #define SWM_MAX_FONT_STEPS (3) @@ -240,6 +255,7 @@ int xrandr_eventbase; unsigned int numlockmask = 0; Display *display; xcb_connection_t *conn; +xcb_key_symbols_t *syms; int cycle_empty = 0; int cycle_visible = 0; @@ -389,8 +405,8 @@ struct ws_win { struct swm_screen *s; /* always valid, never changes */ xcb_get_geometry_reply_t *wa; xcb_size_hints_t sh; - xcb_get_wm_class_reply_t ch; - xcb_wm_hints_t hints; + xcb_icccm_get_wm_class_reply_t ch; + xcb_icccm_wm_hints_t hints; }; TAILQ_HEAD(ws_win_list, ws_win); @@ -1486,6 +1502,8 @@ bar_print(struct swm_region *r, const char *s) sizeof(rect), &rect); /* draw back buffer */ + gcv[0] = r->s->c[SWM_S_COLOR_BAR].color; + xcb_change_gc(conn, r->s->bar_gc, XCB_GC_BACKGROUND, gcv); gcv[0] = r->s->c[SWM_S_COLOR_BAR_FONT].color; xcb_change_gc(conn, r->s->bar_gc, XCB_GC_FOREGROUND, gcv); xcb_image_text_8(conn, len, r->bar->buffer, r->s->bar_gc, x, @@ -2259,13 +2277,11 @@ void fake_keypress(struct ws_win *win, xcb_keysym_t keysym, uint16_t modifiers) { xcb_key_press_event_t event; - xcb_key_symbols_t *syms; xcb_keycode_t *keycode; if (win == NULL) return; - syms = xcb_key_symbols_alloc(conn); keycode = xcb_key_symbols_get_keycode(syms, keysym); event.event = win->id; @@ -2288,8 +2304,6 @@ fake_keypress(struct ws_win *win, xcb_keysym_t keysym, uint16_t modifiers) xcb_send_event(conn, True, win->id, XCB_EVENT_MASK_KEY_RELEASE, (char *)&event); xcb_flush(conn); - - xcb_key_symbols_free(syms); } void @@ -2305,6 +2319,8 @@ restart(struct swm_region *r, union arg *args) bar_extra_stop(); bar_extra = 1; unmap_all(); + + xcb_key_symbols_free(syms); xcb_flush(conn); xcb_disconnect(conn); @@ -3781,20 +3797,20 @@ get_win_name(xcb_window_t win) { char *name = NULL; xcb_get_property_cookie_t c; - xcb_get_text_property_reply_t r; + xcb_icccm_get_text_property_reply_t r; c = xcb_icccm_get_wm_name(conn, win); if (xcb_icccm_get_wm_name_reply(conn, c, &r, NULL)) { if (r.name_len > 0) { name = malloc(r.name_len + 1); if (!name) { - xcb_get_text_property_reply_wipe(&r); + xcb_icccm_get_text_property_reply_wipe(&r); return (NULL); } memcpy(name, r.name, r.name_len); name[r.name_len] = '\0'; } - xcb_get_text_property_reply_wipe(&r); + xcb_icccm_get_text_property_reply_wipe(&r); } return (name); @@ -5532,15 +5548,10 @@ updatenumlockmask(void) unsigned int i, j; xcb_get_modifier_mapping_reply_t *modmap_r; xcb_keycode_t *modmap, kc; - xcb_key_symbols_t *syms; DNPRINTF(SWM_D_MISC, "updatenumlockmask\n"); numlockmask = 0; - syms = xcb_key_symbols_alloc(conn); - if (!syms) - return; - modmap_r = xcb_get_modifier_mapping_reply(conn, xcb_get_modifier_mapping(conn), NULL); @@ -5558,7 +5569,6 @@ updatenumlockmask(void) } free(modmap_r); } - xcb_key_symbols_free(syms); } void @@ -5566,7 +5576,7 @@ grabkeys(void) { int num_screens; unsigned int j, k; - KeyCode code; + xcb_keycode_t *code; unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask | LockMask }; struct key *kp; @@ -5581,12 +5591,14 @@ grabkeys(void) 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))) + if ((code = xcb_key_symbols_get_keycode(syms, + kp->keysym))) for (j = 0; j < LENGTH(modifiers); j++) - XGrabKey(display, code, + xcb_grab_key(conn, True, + screens[k].root, kp->mod | modifiers[j], - screens[k].root, True, - GrabModeAsync, GrabModeAsync); + *code, XCB_GRAB_MODE_ASYNC, + XCB_GRAB_MODE_ASYNC); } } } @@ -6336,7 +6348,7 @@ set_child_transient(struct ws_win *win, xcb_window_t *trans) struct ws_win *parent, *w; struct swm_region *r; struct workspace *ws; - xcb_wm_hints_t wmh; + xcb_icccm_wm_hints_t wmh; parent = find_window(win->transient); if (parent) @@ -6427,7 +6439,7 @@ manage_window(xcb_window_t id) uint32_t event_mask; xcb_atom_t prot; xcb_get_property_reply_t *gpr; - xcb_get_wm_protocols_reply_t wpr; + xcb_icccm_get_wm_protocols_reply_t wpr; if ((win = find_window(id)) != NULL) return (win); /* already being managed */ @@ -6497,14 +6509,14 @@ manage_window(xcb_window_t id) win->wa = xcb_get_geometry_reply(conn, xcb_get_geometry(conn, id), NULL); - xcb_get_wm_normal_hints_reply(conn, - xcb_get_wm_normal_hints(conn, id), + xcb_icccm_get_wm_normal_hints_reply(conn, + xcb_icccm_get_wm_normal_hints(conn, id), &win->sh, NULL); xcb_icccm_get_wm_hints_reply(conn, xcb_icccm_get_wm_hints(conn, id), &win->hints, NULL); - xcb_get_wm_transient_for_reply(conn, - xcb_get_wm_transient_for(conn, id), + xcb_icccm_get_wm_transient_for_reply(conn, + xcb_icccm_get_wm_transient_for(conn, id), &trans, NULL); if (trans) { win->transient = trans; @@ -6513,13 +6525,11 @@ manage_window(xcb_window_t id) "transient: 0x%x\n", win->id, win->transient); } - prot = xcb_atom_get_fast_reply(conn, - xcb_atom_get_fast(conn, False, strlen("WM_PROTOCOLS"), - "WM_PROTOCOLS"), - NULL); + prot = get_atom_from_string("WM_PROTOCOLS"); + /* get supported protocols */ - if (xcb_get_wm_protocols_reply(conn, - xcb_get_wm_protocols(conn, id, prot), + if (xcb_icccm_get_wm_protocols_reply(conn, + xcb_icccm_get_wm_protocols(conn, id, prot), &wpr, NULL)) { for (i = 0; i < wpr.atoms_len; i++) { if (wpr.atoms[i] == takefocus) @@ -6527,7 +6537,7 @@ manage_window(xcb_window_t id) if (wpr.atoms[i] == adelete) win->can_delete = 1; } - xcb_get_wm_protocols_reply_wipe(&wpr); + xcb_icccm_get_wm_protocols_reply_wipe(&wpr); } win->iconic = get_iconic(win); @@ -6621,8 +6631,8 @@ manage_window(xcb_window_t id) ewmh_autoquirk(win); - if (xcb_get_wm_class_reply(conn, - xcb_get_wm_class(conn, win->id), + if (xcb_icccm_get_wm_class_reply(conn, + xcb_icccm_get_wm_class(conn, win->id), &win->ch, NULL)) { DNPRINTF(SWM_D_CLASS, "manage_window: class: %s, name: %s\n", win->ch.class_name, win->ch.instance_name); @@ -6707,7 +6717,7 @@ free_window(struct ws_win *win) if (win->wa) free(win->wa); - xcb_get_wm_class_reply_wipe(&win->ch); + xcb_icccm_get_wm_class_reply_wipe(&win->ch); kill_refs(win); @@ -6875,7 +6885,7 @@ configurerequest(XEvent *e) DNPRINTF(SWM_D_EVENT, "configurerequest: new window: 0x%lx, " "new: %s, (x,y) w x h: (%d,%d) %d x %d\n", ev->window, - YESNO(new), wc.x, wc.y, wc.width, wc.height); + YESNO(new), wc[0], wc[1], wc[2], wc[3]); xcb_configure_window(conn, ev->window, mask, wc); } else if ((!win->manual || win->quirks & SWM_Q_ANYWHERE) && @@ -6909,8 +6919,8 @@ configurenotify(XEvent *e) win = find_window(e->xconfigure.window); if (win) { - xcb_get_wm_normal_hints_reply(conn, - xcb_get_wm_normal_hints(conn, win->id), + xcb_icccm_get_wm_normal_hints_reply(conn, + xcb_icccm_get_wm_normal_hints(conn, win->id), &win->sh, NULL); adjust_font(win); if (font_adjusted) @@ -7842,6 +7852,10 @@ main(int argc, char *argv[]) if (pwd == NULL) errx(1, "invalid user: %d", getuid()); + syms = xcb_key_symbols_alloc(conn); + if (syms == NULL) + errx(1, "unable to allocate key symbols"); + setup_globals(); setup_screens(); setup_keys(); @@ -7989,6 +8003,8 @@ done: if (screens[i].bar_gc != 0) xcb_free_gc(conn, screens[i].bar_gc); XFreeFontSet(display, bar_fs); + + xcb_key_symbols_free(syms); xcb_disconnect(conn); return (0);