add sloppy monitor focus
authorConnor Lane Smith <cls@lubutu.com>
Tue, 15 Nov 2011 19:16:58 +0000 (20:16 +0100)
committerConnor Lane Smith <cls@lubutu.com>
Tue, 15 Nov 2011 19:16:58 +0000 (20:16 +0100)
dwm.c

diff --git a/dwm.c b/dwm.c
index fd6f04d..1d78655 100644 (file)
--- a/dwm.c
+++ b/dwm.c
@@ -200,6 +200,7 @@ static void manage(Window w, XWindowAttributes *wa);
 static void mappingnotify(XEvent *e);
 static void maprequest(XEvent *e);
 static void monocle(Monitor *m);
+static void motionnotify(XEvent *e);
 static void movemouse(const Arg *arg);
 static Client *nexttiled(Client *c);
 static void pop(Client *);
@@ -271,6 +272,7 @@ static void (*handler[LASTEvent]) (XEvent *) = {
        [KeyPress] = keypress,
        [MappingNotify] = mappingnotify,
        [MapRequest] = maprequest,
+       [MotionNotify] = motionnotify,
        [PropertyNotify] = propertynotify,
        [UnmapNotify] = unmapnotify
 };
@@ -1201,6 +1203,21 @@ monocle(Monitor *m) {
                resize(c, m->wx, m->wy, m->ww - 2 * c->bw, m->wh - 2 * c->bw, False);
 }
 
+void
+motionnotify(XEvent *e) {
+       static Monitor *mon = NULL;
+       Monitor *m;
+       XMotionEvent *ev = &e->xmotion;
+
+       if(ev->window != root)
+               return;
+       if((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) {
+               selmon = m;
+               focus(NULL);
+       }
+       mon = m;
+}
+
 void
 movemouse(const Arg *arg) {
        int x, y, ocx, ocy, nx, ny;
@@ -1614,9 +1631,8 @@ setup(void) {
                        PropModeReplace, (unsigned char *) netatom, NetLast);
        /* select for events */
        wa.cursor = cursor[CurNormal];
-       wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask|ButtonPressMask
-                       |EnterWindowMask|LeaveWindowMask|StructureNotifyMask
-                       |PropertyChangeMask;
+       wa.event_mask = SubstructureRedirectMask|SubstructureNotifyMask|ButtonPressMask|PointerMotionMask
+                       |EnterWindowMask|LeaveWindowMask|StructureNotifyMask|PropertyChangeMask;
        XChangeWindowAttributes(dpy, root, CWEventMask|CWCursor, &wa);
        XSelectInput(dpy, root, wa.event_mask);
        grabkeys();