On Tue, 21 Jan 2025 20:27:53 +0100 Hiltjo Posthuma <hil...@codemadness.org> wrote:
> On Tue, Jan 21, 2025 at 08:28:42PM +0300, Mikhail Pchelin wrote: > > On Tue, Jan 21, 2025 at 05:03:25PM +0000, NRK wrote: > > > > + if (clients[c]->urgent && (wmh = XGetWMHints(dpy, > > > > clients[c]->win)) && > > > > + (win_wmh = XGetWMHints(dpy, win))) { > > > > > > This will leak if the first XGetWMHints succeeds but the 2nd one > > > fails. > > > > Thank you for the review, updated version bellow. > > > > From 155a030ea55845e5ec81d08b3cf3f9f08fb876d1 Mon Sep 17 00:00:00 > > 2001 From: Mikhail Pchelin <mi...@freebsd.org> > > Date: Tue, 21 Jan 2025 19:01:13 +0300 > > Subject: [PATCH] focus(): clear XUrgencyHint from the container > > window > > > > --- > > tabbed.c | 12 ++++++++++++ > > 1 file changed, 12 insertions(+) > > > > diff --git a/tabbed.c b/tabbed.c > > index e5664aa..aa45716 100644 > > --- a/tabbed.c > > +++ b/tabbed.c > > @@ -447,6 +447,7 @@ focus(int c) > > char buf[BUFSIZ] = "tabbed-"VERSION" ::"; > > size_t i, n; > > XWMHints* wmh; > > + XWMHints* win_wmh; > > > > /* If c, sel and clients are -1, raise tabbed-win itself */ > > if (nclients == 0) { > > @@ -480,6 +481,17 @@ focus(int c) > > XSetWMHints(dpy, clients[c]->win, wmh); > > clients[c]->urgent = False; > > XFree(wmh); > > + > > + /* > > + * gnome-shell will not stop notifying us about > > urgency, > > + * if we clear only the client hint and don't > > clear the > > + * hint from the main container window > > + */ > > + if ((win_wmh = XGetWMHints(dpy, win))) { > > + win_wmh->flags &= ~XUrgencyHint; > > + XSetWMHints(dpy, win, win_wmh); > > + XFree(win_wmh); > > + } > > } > > > > drawbar(); > > -- > > 2.45.2 > > > > > > Hi, > > Thanks for the patch, at a glance it looks good. > > Can anyone confirm this makes sense. I do not use gnome-shell myself. > > Thank you, > Hi, as far as I understand it, the way urgency was handled by tabbed even before this patch was wrong. The correct way for urgency to work is: - client wants attention - client sets XUrgencyHint - user focuses client - client receives FocusEvent, notifying it that it has gotten attention - client removes XUrgencyHint, as it is now satisfied The WM should at no point be setting or removing a clients XUrgencyHint. The WM_HINTS property as a whole is meant as one way communication from the client to the WM. Compare the ICCCM: >The WM_HINTS property (whose type is WM_HINTS) is used to communicate >to the window manager. and >Clients must provide some means by which the user can cause the >UrgencyHint flag to be set to zero or the window to be withdrawn. The only urgency hint tabbed should be modifying is its own. dwm does the same mistake, btw.