---
Heyho,
while fixing the focusonclick patch I noticed that the latest version on the
wiki[0] breaks some mouse-bindings. After applying the patch to the current git
master, I could not move or resize floating windows with the mouse anymore. I
tried removing the line `XAllowEvents(dpy, ReplayPointer, CurrentTime);` and it
seems to work. I tried to understand why this call was needed in the first
place, but could not figure it out. It would be nice if anyone with more X
knowledge could approve that the removal of this call (as done in my attached
version) is actually the correct solution.
0: http://dwm.suckless.org/patches/dwm-focusonclick-6.0.diff
--Markus
config.def.h | 1 +
dwm.c| 50 ++
2 files changed, 7 insertions(+), 44 deletions(-)
diff --git a/config.def.h b/config.def.h
index ab00f4c..897e852 100644
--- a/config.def.h
+++ b/config.def.h
@@ -5,6 +5,7 @@ static const unsigned int borderpx = 1;/* border pixel
of windows */
static const unsigned int snap = 32; /* snap pixel */
static const int showbar= 1;/* 0 means no bar */
static const int topbar = 1;/* 0 means bottom bar */
+static const int focusonwheel = 0;
static const char *fonts[] = { "monospace:size=10" };
static const char dmenufont[] = "monospace:size=10";
static const char col_gray1[] = "#22";
diff --git a/dwm.c b/dwm.c
index 7cd8d18..897e0fe 100644
--- a/dwm.c
+++ b/dwm.c
@@ -164,7 +164,6 @@ static void detachstack(Client *c);
static Monitor *dirtomon(int dir);
static void drawbar(Monitor *m);
static void drawbars(void);
-static void enternotify(XEvent *e);
static void expose(XEvent *e);
static void focus(Client *c);
static void focusin(XEvent *e);
@@ -182,7 +181,6 @@ 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 *);
@@ -252,13 +250,11 @@ static void (*handler[LASTEvent]) (XEvent *) = {
[ConfigureRequest] = configurerequest,
[ConfigureNotify] = configurenotify,
[DestroyNotify] = destroynotify,
- [EnterNotify] = enternotify,
[Expose] = expose,
[FocusIn] = focusin,
[KeyPress] = keypress,
[MappingNotify] = mappingnotify,
[MapRequest] = maprequest,
- [MotionNotify] = motionnotify,
[PropertyNotify] = propertynotify,
[UnmapNotify] = unmapnotify
};
@@ -427,7 +423,8 @@ buttonpress(XEvent *e)
click = ClkRootWin;
/* focus monitor if necessary */
- if ((m = wintomon(ev->window)) && m != selmon) {
+ if ((m = wintomon(ev->window)) && m != selmon
+ && (focusonwheel || (ev->button != Button4 && ev->button !=
Button5))) {
unfocus(selmon->sel, 1);
selmon = m;
focus(NULL);
@@ -447,7 +444,8 @@ buttonpress(XEvent *e)
else
click = ClkWinTitle;
} else if ((c = wintoclient(ev->window))) {
- focus(c);
+ if (focusonwheel || (ev->button != Button4 && ev->button !=
Button5))
+ focus(c);
click = ClkClientWin;
}
for (i = 0; i < LENGTH(buttons); i++)
@@ -755,25 +753,6 @@ drawbars(void)
}
void
-enternotify(XEvent *e)
-{
- Client *c;
- Monitor *m;
- XCrossingEvent *ev = >xcrossing;
-
- if ((ev->mode != NotifyNormal || ev->detail == NotifyInferior) &&
ev->window != root)
- return;
- c = wintoclient(ev->window);
- m = c ? c->mon : wintomon(ev->window);
- if (m != selmon) {
- unfocus(selmon->sel, 1);
- selmon = m;
- } else if (!c || c == selmon->sel)
- return;
- focus(c);
-}
-
-void
expose(XEvent *e)
{
Monitor *m;
@@ -945,10 +924,10 @@ grabbuttons(Client *c, int focused)
XGrabButton(dpy,
buttons[i].button,
buttons[i].mask |
modifiers[j],
c->win, False,
BUTTONMASK,
- GrabModeAsync,
GrabModeSync, None, None);
+ GrabModeSync,
GrabModeSync, None, None);
} else
XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
- BUTTONMASK, GrabModeAsync, GrabModeSync,
None, None);
+ BUTTONMASK, GrabModeSync, GrabModeSync,
None, None);
}
}
@@ -1123,23 +1102,6 @@ monocle(Monitor *m)
}
void
-motionnotify(XEvent *e)
-{
- static