Re: [hackers] [tabbed][PATCH] focus(): clear XUrgencyHint from the container window
On Tue, 21 Jan 2025 20:27:53 +0100
Hiltjo Posthuma <hiltjo_AT_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 <misha_AT_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
> > _AT_@ -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) {
> > _AT_@ -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.
Received on Wed Jan 22 2025 - 12:12:38 CET
This archive was generated by hypermail 2.3.0
: Wed Jan 22 2025 - 12:48:57 CET