JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
convert grabbuttons() and partial unfocus_win to XCB
[spectrwm.git] / spectrwm.c
index c912e3f..85345d6 100644 (file)
@@ -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 */
@@ -2401,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));
 
@@ -2443,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
@@ -5397,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[] = {