]> Pileus Git - wmpus/blobdiff - sys-x11.c
Fix root window mask, change modkey
[wmpus] / sys-x11.c
index ad12cec699f7e47406839cdc4e45f58d54f59215..7ba9b693ce385a5c698f613c62c4f719a8a947f2 100644 (file)
--- a/sys-x11.c
+++ b/sys-x11.c
@@ -181,6 +181,7 @@ void process_event(int type, XEvent *ev, win_t *root)
 {
        Display  *dpy = root->sys->dpy;
        win_t *win = NULL;
+       printf("event: %d\n", type);
 
        /* Common data for all these events ... */
        ptr_t ptr; mod_t mod;
@@ -195,7 +196,6 @@ void process_event(int type, XEvent *ev, win_t *root)
        }
 
        /* Split based on event */
-       printf("event: %d\n", type);
        if (type == KeyPress) {
                while (XCheckTypedEvent(dpy, KeyPress, ev));
                KeySym sym = XKeycodeToKeysym(dpy, ev->xkey.keycode, 0);
@@ -317,16 +317,19 @@ void sys_focus(win_t *win)
 void sys_watch(win_t *win, Key_t key, mod_t mod)
 {
        //printf("sys_watch: %p - %x %hhx\n", win, key, mod);
+       XWindowAttributes attr;
+       XGetWindowAttributes(win->sys->dpy, win->sys->xid, &attr);
+       long mask = attr.your_event_mask;
        if (key_mouse0 <= key && key <= key_mouse7)
                XGrabButton(win->sys->dpy, btn2x(key), mod2x(mod), win->sys->xid, True,
                                mod.up ? ButtonReleaseMask : ButtonPressMask,
                                GrabModeAsync, GrabModeAsync, None, None);
        else if (key == key_enter)
-               XSelectInput(win->sys->dpy, win->sys->xid, EnterWindowMask);
+               XSelectInput(win->sys->dpy, win->sys->xid, EnterWindowMask|mask);
        else if (key == key_leave)
-               XSelectInput(win->sys->dpy, win->sys->xid, LeaveWindowMask);
+               XSelectInput(win->sys->dpy, win->sys->xid, LeaveWindowMask|mask);
        else if (key == key_focus || key == key_unfocus)
-               XSelectInput(win->sys->dpy, win->sys->xid, FocusChangeMask);
+               XSelectInput(win->sys->dpy, win->sys->xid, FocusChangeMask|mask);
        else
                XGrabKey(win->sys->dpy, XKeysymToKeycode(win->sys->dpy, key2x(key)),
                                mod2x(mod), win->sys->xid, True, GrabModeAsync, GrabModeAsync);
@@ -336,7 +339,6 @@ win_t *sys_init(void)
 {
        Display *dpy;
        Window   xid;
-
        if (!(dpy = XOpenDisplay(NULL)))
                error("Unable to get display");
        if (!(xid = DefaultRootWindow(dpy)))
@@ -344,8 +346,7 @@ win_t *sys_init(void)
        atoms[wm_proto] = XInternAtom(dpy, "WM_PROTOCOLS",  False);
        atoms[wm_focus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
        XSelectInput(dpy, xid, SubstructureRedirectMask|SubstructureNotifyMask);
-
-       //XSetInputFocus(dpy, None, RevertToNone, CurrentTime);
+       XSetInputFocus(dpy, None, RevertToNone, CurrentTime);
        return win_find(dpy, xid, 1);
 }