[openbox] Bug: NETWM_CLIENT_LIST, NETWM_CLIENT_LIST_STACKING

Jason 'vanRijn' Kasper vR at movingparts.net
Tue Dec 24 08:34:07 EST 2002


You rock, xOr!  =:D  Seriously.

Merry Christmas, all.



On Tue, 2002-12-24 at 02:51, Ben Jansens wrote:
> On Tue, Dec 24, 2002 at 01:19:42AM -0600, Ben Jansens wrote:
> > On Mon, Dec 23, 2002 at 07:17:57PM -0600, Ava Arachne Jarvis wrote:
> > > Openbox version 2.2.2 (and, as far as I know, all versions before that 
> > > which were NETWM compliant).
> > > 
> > > This is the bug that is tripping up libwnck operation, which affects the
> > > GNOME2 desktop and other libwnck related utilities, like devilspie[1],
> > > and I don't blame it.  According to the NETWM specs:
> > > 
> > >   http://www.freedesktop.org/standards/wm-spec/x107.html
> > >   3.2. _NET_CLIENT_LIST
> > > 
> > >   _NET_CLIENT_LIST, WINDOW[]/32
> > >   _NET_CLIENT_LIST_STACKING, WINDOW[]/32
> > > 
> > >   These arrays contain all X Windows managed by the Window Manager.
> > >   _NET_CLIENT_LIST has initial mapping order, starting with the oldest
> > >   window. _NET_CLIENT_LIST_STACKING has bottom-to-top stacking order.
> > >   These properties SHOULD be set and updated by the Window Manager. 
> > > 
> > > However, while Openbox (and, I imagine, Blackbox and Fluxbox code as
> > > well) do put all windows into NET_CLIENT_LIST, NET_CLIENT_LIST_STACKING
> > > only contains windows with an associated workspace -- which excludes
> > > iconified windows.  Since these two lists are not the same in Openbox
> > > when there are iconified windows, libwnck contains to wait for them to
> > > be so (since a difference between the two lists is, by the specs, not a
> > > stable state)[2].
> > > 
> > > That's why the pager/window list/devilspie/etc stop working when there's
> > > something iconified in Openbox.
> > > 
> > > I would send in a patch, but I'm not sure how to fix this exactly.  I
> > > think the iconified windows should go in at the bottom of the stacking
> > > list, if only because I can't think of anywhere else they should go that
> > > would be sane.
> > > 
> > > 
> > > [1] Devilspie is a NETWM-compliant daemon that takes care of
> > >     application-specific NETWM properties like stickiness, which 
> > >     workspace(s) they're on, etc.  Very nice.  You can get read 
> > >     a little more about it here:
> > > 
> > >       http://www.burtonini.com/computing/devilspie
> > > 
> > >     see the GNOME software map entry and download the tarball from here:
> > > 
> > >       http://www.gnome.org/softwaremap/
> > > 
> > >     and download Debian packages and source from here:
> > > 
> > >       http://www.burtonini.com/debian/
> > > 
> > > [2] Relevant code bits:
> > > 
> > >     - Screen.cc: updateClientList() versus updateStackingList()
> > >         in particular, updateStackingList() does this:
> > > 
> > >         getCurrentWorkspace()->appendStackOrder(stack_order);
> > >         for (unsigned int i = 0; i < getWorkspaceCount(); ++i)
> > >            if (i != getCurrentWorkspaceID())
> > >               getWorkspace(i)->appendStackOrder(stack_order);
> > > 
> > >         and never adds iconified windows separately.
> > > 
> > >     - Window.cc: BlackboxWindow::iconify()
> > >         in particular, this line in this function 
> > > 
> > >           screen->getWorkspace(blackbox_attrib.workspace)->removeWindow(this);
> > >       
> > >         which leaves iconified windows with no workspace, and thus they 
> > >         are not added in updateStackingList().
> > > 
> > 
> > Wow thanks for the excellent report. Guess thats what was causing
> > problems with the gnome panel. Woot. I'll have a fix out soon.
> > 
> > Ben
> 
> Fixed in the openbox-2_2 branch in CVS. If you could try it out and
> confirm this for me I'd be much obliged. :)
> 
> Ben
-- 

,-----------------------------------------------------------------//
| Jason 'vanRijn' Kasper ::  Numbers 6:22-26 
 `
 | All brontosauruses are thin at one end, much MUCH thicker 
 | in the middle, and then thin again at the far end.  That is 
 | the theory that I have and which is mine, and what it is too.  
 ,
| bash$ :(){ :|:&};:
`----------------------//



More information about the openbox mailing list