Re: [hackers] [dwm][PATCH] Set the EWMH _NET_SUPPORTING_WM_CHECK atom

From: Anselm R Garbe <garbeam_AT_gmail.com>
Date: Sun, 24 Jan 2016 15:23:23 +0100

Having said this, please provide a decent patch as attachment.

BR,
Anselm

On 24 January 2016 at 15:22, Anselm R Garbe <garbeam_AT_gmail.com> wrote:
> Hi Omar,
>
> On 24 January 2016 at 01:10, Omar Sandoval <osandov_AT_osandov.com> wrote:
>> ---
>> This has been discussed a couple of times [1][2], and I think it's about time
>> that it gets fixed. I noticed this issue because xfce4-screenshooter -w, which
>> is supposed to screenshot the active window, doesn't work with dwm. After
>> digging through the source code, I found that it uses
>> gdk_screen_get_active_window() [3]. According to the documentation, that
>> function looks at _NET_ACTIVE_WINDOW, which dwm sets. Looking at the GDK source
>> code, I found that gdk_x11_screen_supports_net_wm_hint() [4] returns false for
>> _NET_ACTIVE_WINDOW on dwm regardless of the value of _NET_SUPPORTED because
>> _NET_SUPPORTING_WM_CHECK is not set (see fetch_net_wm_check_window() [5]).
>>
>> tl;dr Not setting _NET_SUPPORTING_WM_CHECK breaks real applications, and dwm is
>> already going through the trouble of setting several EWMH atoms, so we should
>> fix this.
>>
>> 1: http://lists.suckless.org/dev/1411/24636.html
>> 2: http://lists.suckless.org/dev/1505/26735.html
>> 3: https://developer.gnome.org/gdk2/stable/GdkScreen.html#gdk-screen-get-active-window
>> 4: https://git.gnome.org/browse/gtk+/tree/gdk/x11/gdkscreen-x11.c?h=3.19.7#n1635
>> 5: https://git.gnome.org/browse/gtk+/tree/gdk/x11/gdkscreen-x11.c?h=3.19.7#n1580
>>
>> dwm.c | 12 +++++++++++-
>> 1 file changed, 11 insertions(+), 1 deletion(-)
>>
>> diff --git a/dwm.c b/dwm.c
>> index ff7e096f61fc..7c12796419ca 100644
>> --- a/dwm.c
>> +++ b/dwm.c
>> _AT_@ -60,7 +60,7 @@
>> /* enums */
>> enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
>> enum { SchemeNorm, SchemeSel, SchemeLast }; /* color schemes */
>> -enum { NetSupported, NetWMName, NetWMState,
>> +enum { NetSupported, NetSupportingWMCheck, NetWMName, NetWMState,
>> NetWMFullscreen, NetActiveWindow, NetWMWindowType,
>> NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */
>> enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */
>> _AT_@ -1574,6 +1574,7 @@ setup(void)
>> wmatom[WMTakeFocus] = XInternAtom(dpy, "WM_TAKE_FOCUS", False);
>> netatom[NetActiveWindow] = XInternAtom(dpy, "_NET_ACTIVE_WINDOW", False);
>> netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
>> + netatom[NetSupportingWMCheck] = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False);
>> netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
>> netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False);
>> netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False);
>> _AT_@ -1806,6 +1807,8 @@ updatebars(void)
>> .background_pixmap = ParentRelative,
>> .event_mask = ButtonPressMask|ExposureMask
>> };
>> + Atom utf8string;
>> + utf8string = XInternAtom(dpy, "UTF8_STRING", False);
>> for (m = mons; m; m = m->next) {
>> if (m->barwin)
>> continue;
>> _AT_@ -1814,7 +1817,14 @@ updatebars(void)
>> CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa);
>> XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor);
>> XMapRaised(dpy, m->barwin);
>> + XChangeProperty(dpy, m->barwin, netatom[NetWMName], utf8string,
>> + 8, PropModeReplace, (unsigned char *)"dwm", 3);
>> }
>> + /* it doesn't matter which bar we use for this, so just use the first one */
>> + XChangeProperty(dpy, root, netatom[NetSupportingWMCheck], XA_WINDOW, 32,
>> + PropModeReplace, (unsigned char *)&mons->barwin, 1);
>> + XChangeProperty(dpy, mons->barwin, netatom[NetSupportingWMCheck], XA_WINDOW,
>> + 32, PropModeReplace, (unsigned char *)&mons->barwin, 1);
>> }
>
> To me it looks like a rather odd interpretation of wm spec that is
> used in the gdkscreen implementation. They query
> _NET_SUPPORTING_WM_CHECK != None for any atom that is queried through
> gdk_x11_screen_supports_net_wm_hint().
>
> I think I can live with re-introducing this atom into dwm.
> Nevertheless EWMH stinks. I did remove this handling back in 2007 btw.
>
> -Anselm
Received on Sun Jan 24 2016 - 15:23:23 CET

This archive was generated by hypermail 2.3.0 : Sun Jan 24 2016 - 15:24:24 CET