X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=4c8387f27074cfdde17c1854cf8aaa50e3035602;hb=efd9be3bdbee0d9866fd09837770c768f3010708;hp=e65356f1e000cd01fcc915fd532b35097abdeccf;hpb=1db012198154c5d5957ecaeaa0f194de32723800;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index e65356f..4c8387f 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -2044,8 +2044,9 @@ void drain_enter_notify(void) { int i = 0; + XEvent cne; - while (xcb_poll_for_event(conn)) + while (XCheckMaskEvent(display, EnterWindowMask, &cne)) i++; DNPRINTF(SWM_D_EVENT, "drain_enter_notify: drained: %d\n", i); @@ -2304,7 +2305,8 @@ restart(struct swm_region *r, union arg *args) bar_extra_stop(); bar_extra = 1; unmap_all(); - XCloseDisplay(display); + xcb_flush(conn); + execvp(start_argv[0], start_argv); warn("execvp failed"); quit(NULL, NULL); @@ -3304,7 +3306,6 @@ adjust_font(struct ws_win *win) void stack_master(struct workspace *ws, struct swm_geometry *g, int rot, int flip) { - XWindowAttributes wa; struct swm_geometry win_g, r_g = *g; struct ws_win *win, *fs_win = NULL; int i, j, s, stacks; @@ -3313,6 +3314,7 @@ stack_master(struct workspace *ws, struct swm_geometry *g, int rot, int flip) int split, colno, winno, mwin, msize, mscale; int remain, missing, v_slice, reconfigure; int bordered = 1; + xcb_get_window_attributes_reply_t *war; DNPRINTF(SWM_D_STACK, "stack_master: workspace: %d, rot: %s, " "flip: %s\n", ws->idx, YESNO(rot), YESNO(flip)); @@ -3475,9 +3477,14 @@ stack_master(struct workspace *ws, struct swm_geometry *g, int rot, int flip) update_window(win); } - if (XGetWindowAttributes(display, win->id, &wa)) - if (wa.map_state == IsUnmapped) + war = xcb_get_window_attributes_reply(conn, + xcb_get_window_attributes(conn, win->id), + NULL); + if (war) { + if (war->map_state == XCB_MAP_STATE_UNMAPPED) map_window_raised(win->id); + free(war); + } last_h = win_g.h; i++; @@ -5521,19 +5528,36 @@ setkeymapping(char *selector, char *value, int flags) void updatenumlockmask(void) { - unsigned int i, j; - XModifierKeymap *modmap; + 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; - modmap = XGetModifierMapping(display); - for (i = 0; i < 8; i++) - for (j = 0; j < modmap->max_keypermod; j++) - if (modmap->modifiermap[i * modmap->max_keypermod + j] - == XKeysymToKeycode(display, XK_Num_Lock)) - numlockmask = (1 << i); - XFreeModifiermap(modmap); + syms = xcb_key_symbols_alloc(conn); + if (!syms) + return; + + modmap_r = xcb_get_modifier_mapping_reply(conn, + xcb_get_modifier_mapping(conn), + NULL); + if (modmap_r) { + modmap = xcb_get_modifier_mapping_keycodes(modmap_r); + for (i = 0; i < 8; i++) { + for (j = 0; j < modmap_r->keycodes_per_modifier; j++) { + kc = modmap[i * modmap_r->keycodes_per_modifier + + j]; + + if (kc == *((xcb_keycode_t *)xcb_key_symbols_get_keycode(syms, + XK_Num_Lock))) + numlockmask = (1 << i); + } + } + free(modmap_r); + } + xcb_key_symbols_free(syms); } void @@ -7187,8 +7211,8 @@ propertynotify(XEvent *e) XMoveResizeWindow(display, win->id, X(win), Y(win), WIDTH(win), HEIGHT(win)); #endif - case XA_WM_CLASS: - case XA_WM_NAME: + case XCB_ATOM_WM_CLASS: + case XCB_ATOM_WM_NAME: bar_update(); break; default: @@ -7225,7 +7249,7 @@ unmapnotify(XEvent *e) SubstructureNotifyMask, &cne)) ; /* resend unmap because we ated it */ - XUnmapWindow(display, e->xunmap.window); + xcb_unmap_window(conn, e->xunmap.window); } if (focus_mode == SWM_FOCUS_DEFAULT) @@ -7945,7 +7969,6 @@ done: xcb_free_gc(conn, screens[i].bar_gc); XFreeFontSet(display, bar_fs); xcb_disconnect(conn); - XCloseDisplay(display); return (0); }