itButton passthrough when client is not focused - dwm - [fork] customized build of dwm, the dynamic window manager Err adamsgaard.dk 70 hgit clone git://src.adamsgaard.dk/dwm URL:git://src.adamsgaard.dk/dwm adamsgaard.dk 70 1Log /src/dwm/log.gph adamsgaard.dk 70 1Files /src/dwm/files.gph adamsgaard.dk 70 1Refs /src/dwm/refs.gph adamsgaard.dk 70 1README /src/dwm/file/README.gph adamsgaard.dk 70 1LICENSE /src/dwm/file/LICENSE.gph adamsgaard.dk 70 i--- Err adamsgaard.dk 70 1commit 022d07605412bc5bd9726f74af9355c562ba4957 /src/dwm/commit/022d07605412bc5bd9726f74af9355c562ba4957.gph adamsgaard.dk 70 1parent 2952b68db88f38be8d34b80c7a7d2c7eb5b2484d /src/dwm/commit/2952b68db88f38be8d34b80c7a7d2c7eb5b2484d.gph adamsgaard.dk 70 hAuthor: Markus Teich URL:mailto:markus.teich@stusta.mhn.de adamsgaard.dk 70 iDate: Sat, 7 Jan 2017 17:21:29 +0100 Err adamsgaard.dk 70 i Err adamsgaard.dk 70 iButton passthrough when client is not focused Err adamsgaard.dk 70 i Err adamsgaard.dk 70 iBefore this change it is not possible to press a button in a client on the first Err adamsgaard.dk 70 iclick if the client is not yet focused. The first click on the button would Err adamsgaard.dk 70 ionly focus the client and a second click on the button is needed to activate it. Err adamsgaard.dk 70 iThis situation can occur when moving the mouse over a client (therefore focusing Err adamsgaard.dk 70 iit) and then moving the focus to another client with keyboard shortcuts. Err adamsgaard.dk 70 i Err adamsgaard.dk 70 iAfter this commit the behavior is fixed and button presses on unfocused clients Err adamsgaard.dk 70 iare passed to the client correctly. Err adamsgaard.dk 70 i Err adamsgaard.dk 70 iDiffstat: Err adamsgaard.dk 70 i M dwm.c | 21 +++++++++++---------- Err adamsgaard.dk 70 i Err adamsgaard.dk 70 i1 file changed, 11 insertions(+), 10 deletions(-) Err adamsgaard.dk 70 i--- Err adamsgaard.dk 70 1diff --git a/dwm.c b/dwm.c /src/dwm/file/dwm.c.gph adamsgaard.dk 70 it@@ -446,6 +446,8 @@ buttonpress(XEvent *e) Err adamsgaard.dk 70 i click = ClkWinTitle; Err adamsgaard.dk 70 i } else if ((c = wintoclient(ev->window))) { Err adamsgaard.dk 70 i focus(c); Err adamsgaard.dk 70 i+ restack(selmon); Err adamsgaard.dk 70 i+ XAllowEvents(dpy, ReplayPointer, CurrentTime); Err adamsgaard.dk 70 i click = ClkClientWin; Err adamsgaard.dk 70 i } Err adamsgaard.dk 70 i for (i = 0; i < LENGTH(buttons); i++) Err adamsgaard.dk 70 it@@ -932,17 +934,16 @@ grabbuttons(Client *c, int focused) Err adamsgaard.dk 70 i unsigned int i, j; Err adamsgaard.dk 70 i unsigned int modifiers[] = { 0, LockMask, numlockmask, numlockmask|LockMask }; Err adamsgaard.dk 70 i XUngrabButton(dpy, AnyButton, AnyModifier, c->win); Err adamsgaard.dk 70 i- if (focused) { Err adamsgaard.dk 70 i- for (i = 0; i < LENGTH(buttons); i++) Err adamsgaard.dk 70 i- if (buttons[i].click == ClkClientWin) Err adamsgaard.dk 70 i- for (j = 0; j < LENGTH(modifiers); j++) Err adamsgaard.dk 70 i- XGrabButton(dpy, buttons[i].button, Err adamsgaard.dk 70 i- buttons[i].mask | modifiers[j], Err adamsgaard.dk 70 i- c->win, False, BUTTONMASK, Err adamsgaard.dk 70 i- GrabModeAsync, GrabModeSync, None, None); Err adamsgaard.dk 70 i- } else Err adamsgaard.dk 70 i+ if (!focused) Err adamsgaard.dk 70 i XGrabButton(dpy, AnyButton, AnyModifier, c->win, False, Err adamsgaard.dk 70 i- BUTTONMASK, GrabModeAsync, GrabModeSync, None, None); Err adamsgaard.dk 70 i+ BUTTONMASK, GrabModeSync, GrabModeSync, None, None); Err adamsgaard.dk 70 i+ for (i = 0; i < LENGTH(buttons); i++) Err adamsgaard.dk 70 i+ if (buttons[i].click == ClkClientWin) Err adamsgaard.dk 70 i+ for (j = 0; j < LENGTH(modifiers); j++) Err adamsgaard.dk 70 i+ XGrabButton(dpy, buttons[i].button, Err adamsgaard.dk 70 i+ buttons[i].mask | modifiers[j], Err adamsgaard.dk 70 i+ c->win, False, BUTTONMASK, Err adamsgaard.dk 70 i+ GrabModeAsync, GrabModeSync, None, None); Err adamsgaard.dk 70 i } Err adamsgaard.dk 70 i } Err adamsgaard.dk 70 i Err adamsgaard.dk 70 .