X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=sys-x11.c;h=7ba9b693ce385a5c698f613c62c4f719a8a947f2;hb=6e0abca515f58cb87c0c0310bc98ed7d84536344;hp=ad12cec699f7e47406839cdc4e45f58d54f59215;hpb=03e529a71c9743ae971d224ba353b5c5f9385366;p=wmpus diff --git a/sys-x11.c b/sys-x11.c index ad12cec..7ba9b69 100644 --- 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); }