dwm-focusonclick-20170104-bb3bd6f.diff (4047B)
1 commit da0e506c6bf3a01d240904f53ae5cbd7c424ebf5 2 Author: Markus Teich <markus.teich@stusta.mhn.de> 3 Date: Thu Dec 22 03:16:35 2016 +0100 4 5 focusonclick 6 7 diff --git a/config.def.h b/config.def.h 8 index ab00f4c..897e852 100644 9 --- a/config.def.h 10 +++ b/config.def.h 11 @@ -5,6 +5,7 @@ static const unsigned int borderpx = 1; /* border pixel of windows */ 12 static const unsigned int snap = 32; /* snap pixel */ 13 static const int showbar = 1; /* 0 means no bar */ 14 static const int topbar = 1; /* 0 means bottom bar */ 15 +static const int focusonwheel = 0; 16 static const char *fonts[] = { "monospace:size=10" }; 17 static const char dmenufont[] = "monospace:size=10"; 18 static const char col_gray1[] = "#222222"; 19 diff --git a/dwm.c b/dwm.c 20 index 7cd8d18..4697618 100644 21 --- a/dwm.c 22 +++ b/dwm.c 23 @@ -164,7 +164,6 @@ static void detachstack(Client *c); 24 static Monitor *dirtomon(int dir); 25 static void drawbar(Monitor *m); 26 static void drawbars(void); 27 -static void enternotify(XEvent *e); 28 static void expose(XEvent *e); 29 static void focus(Client *c); 30 static void focusin(XEvent *e); 31 @@ -182,7 +181,6 @@ static void manage(Window w, XWindowAttributes *wa); 32 static void mappingnotify(XEvent *e); 33 static void maprequest(XEvent *e); 34 static void monocle(Monitor *m); 35 -static void motionnotify(XEvent *e); 36 static void movemouse(const Arg *arg); 37 static Client *nexttiled(Client *c); 38 static void pop(Client *); 39 @@ -252,13 +250,11 @@ static void (*handler[LASTEvent]) (XEvent *) = { 40 [ConfigureRequest] = configurerequest, 41 [ConfigureNotify] = configurenotify, 42 [DestroyNotify] = destroynotify, 43 - [EnterNotify] = enternotify, 44 [Expose] = expose, 45 [FocusIn] = focusin, 46 [KeyPress] = keypress, 47 [MappingNotify] = mappingnotify, 48 [MapRequest] = maprequest, 49 - [MotionNotify] = motionnotify, 50 [PropertyNotify] = propertynotify, 51 [UnmapNotify] = unmapnotify 52 }; 53 @@ -427,7 +423,8 @@ buttonpress(XEvent *e) 54 55 click = ClkRootWin; 56 /* focus monitor if necessary */ 57 - if ((m = wintomon(ev->window)) && m != selmon) { 58 + if ((m = wintomon(ev->window)) && m != selmon 59 + && (focusonwheel || (ev->button != Button4 && ev->button != Button5))) { 60 unfocus(selmon->sel, 1); 61 selmon = m; 62 focus(NULL); 63 @@ -447,7 +444,9 @@ buttonpress(XEvent *e) 64 else 65 click = ClkWinTitle; 66 } else if ((c = wintoclient(ev->window))) { 67 - focus(c); 68 + if (focusonwheel || (ev->button != Button4 && ev->button != Button5)) 69 + focus(c); 70 + XAllowEvents(dpy, ReplayPointer, CurrentTime); 71 click = ClkClientWin; 72 } 73 for (i = 0; i < LENGTH(buttons); i++) 74 @@ -755,25 +754,6 @@ drawbars(void) 75 } 76 77 void 78 -enternotify(XEvent *e) 79 -{ 80 - Client *c; 81 - Monitor *m; 82 - XCrossingEvent *ev = &e->xcrossing; 83 - 84 - if ((ev->mode != NotifyNormal || ev->detail == NotifyInferior) && ev->window != root) 85 - return; 86 - c = wintoclient(ev->window); 87 - m = c ? c->mon : wintomon(ev->window); 88 - if (m != selmon) { 89 - unfocus(selmon->sel, 1); 90 - selmon = m; 91 - } else if (!c || c == selmon->sel) 92 - return; 93 - focus(c); 94 -} 95 - 96 -void 97 expose(XEvent *e) 98 { 99 Monitor *m; 100 @@ -945,10 +925,10 @@ grabbuttons(Client *c, int focused) 101 XGrabButton(dpy, buttons[i].button, 102 buttons[i].mask | modifiers[j], 103 c->win, False, BUTTONMASK, 104 - GrabModeAsync, GrabModeSync, None, None); 105 + GrabModeSync, GrabModeSync, None, None); 106 } else 107 XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, 108 - BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); 109 + BUTTONMASK, GrabModeSync, GrabModeSync, None, None); 110 } 111 } 112 113 @@ -1123,23 +1103,6 @@ monocle(Monitor *m) 114 } 115 116 void 117 -motionnotify(XEvent *e) 118 -{ 119 - static Monitor *mon = NULL; 120 - Monitor *m; 121 - XMotionEvent *ev = &e->xmotion; 122 - 123 - if (ev->window != root) 124 - return; 125 - if ((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) { 126 - unfocus(selmon->sel, 1); 127 - selmon = m; 128 - focus(NULL); 129 - } 130 - mon = m; 131 -} 132 - 133 -void 134 movemouse(const Arg *arg) 135 { 136 int x, y, ocx, ocy, nx, ny;