Add a new click type ClkAnywhere that matches any click location (bar,
windows, root window). This allows defining mouse button bindings that
work anywhere on the screen with a single config entry, rather than
duplicating bindings for each click location.
---
config.def.h | 2 +-
dwm.c | 7 ++++---
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/config.def.h b/config.def.h
index 81c3fc0..126e561 100644
--- a/config.def.h
+++ b/config.def.h
@@ -99,7 +99,7 @@ static const Key keys[] = {
};
/* button definitions */
-/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
ClkClientWin, or ClkRootWin */
+/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
ClkClientWin, ClkRootWin, or ClkAnywhere */
static const Button buttons[] = {
/* click event mask button function
argument */
{ ClkLtSymbol, 0, Button1, setlayout,
{0} },
diff --git a/dwm.c b/dwm.c
index 53b393e..c260d69 100644
--- a/dwm.c
+++ b/dwm.c
@@ -64,7 +64,7 @@ enum { NetSupported, NetWMName, NetWMState, NetWMCheck,
NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms
*/
enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle,
- ClkClientWin, ClkRootWin, ClkLast }; /* clicks */
+ ClkClientWin, ClkRootWin, ClkAnywhere, ClkLast }; /* clicks */
typedef union {
int i;
@@ -451,7 +451,8 @@ buttonpress(XEvent *e)
click = ClkClientWin;
}
for (i = 0; i < LENGTH(buttons); i++)
- if (click == buttons[i].click && buttons[i].func &&
buttons[i].button == ev->button
+ if ((click == buttons[i].click || buttons[i].click ==
ClkAnywhere)
+ && buttons[i].func && buttons[i].button == ev->button
&& CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state))
buttons[i].func(click == ClkTagBar && buttons[i].arg.i
== 0 ? &arg : &buttons[i].arg);
}
@@ -940,7 +941,7 @@ grabbuttons(Client *c, int focused)
XGrabButton(dpy, AnyButton, AnyModifier, c->win, False,
BUTTONMASK, GrabModeSync, GrabModeSync, None,
None);
for (i = 0; i < LENGTH(buttons); i++)
- if (buttons[i].click == ClkClientWin)
+ if (buttons[i].click == ClkClientWin ||
buttons[i].click == ClkAnywhere)
for (j = 0; j < LENGTH(modifiers); j++)
XGrabButton(dpy, buttons[i].button,
buttons[i].mask | modifiers[j],
--
2.52.0