fix not updating _NET_ACTIVE_WINDOW

currently clients that set the input field of WM_HINTS to true
(c->neverfocus) will never be updated as _NET_ACTIVE_WINDOW even
when they are focused. according to the ICCCM [0] the input
field of WM_HINTS tells the WM to either use or not use
XSetInputFocus(), it shouldn't have any relation to
_NET_ACTIVE_WINDOW. EWMH spec [1] also does not mention any
relationship between the two.

this issue was noticed when launching games via steam/proton and
noticing that _NET_ACTIVE_WINDOW was always wrong/stale (i.e not
updated to the game window).

for reference I've looked at bspwm [2] and it also seems to set
_NET_ACTIVE_WINDOW regardless of whether the client has WM_HINTS
input true or not.

[0]: https://x.org/releases/X11R7.6/doc/xorg-docs/specs/ICCCM/icccm.html#input_focus
[1]: https://specifications.freedesktop.org/wm/1.5/ar01s03.html#id-1.4.10
[2]: c5cf7d3943/src/tree.c (L659-L662)
This commit is contained in:
NRK
2026-02-12 22:28:02 +00:00
committed by Hiltjo Posthuma
parent f63cde9354
commit 397d618f1c

8
dwm.c
View File

@@ -1470,12 +1470,10 @@ sendevent(Client *c, Atom proto)
void void
setfocus(Client *c) setfocus(Client *c)
{ {
if (!c->neverfocus) { if (!c->neverfocus)
XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime); XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
XChangeProperty(dpy, root, netatom[NetActiveWindow], XChangeProperty(dpy, root, netatom[NetActiveWindow], XA_WINDOW, 32,
XA_WINDOW, 32, PropModeReplace, PropModeReplace, (unsigned char *)&c->win, 1);
(unsigned char *) &(c->win), 1);
}
sendevent(c, wmatom[WMTakeFocus]); sendevent(c, wmatom[WMTakeFocus]);
} }