JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
xcb_flush in restart
[spectrwm.git] / spectrwm.c
index e65356f..4c8387f 100644 (file)
@@ -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);
 }