[openbox] Bug: NETWM_CLIENT_LIST, NETWM_CLIENT_LIST_STACKING

Ben Jansens ben at orodu.net
Tue Dec 24 02:19:42 EST 2002


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
-- 
I am damn unsatisfied to be killed in this way.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 232 bytes
Desc: not available
URL: <http://icculus.org/pipermail/openbox/attachments/20021224/c66b7ac1/attachment.pgp>


More information about the openbox mailing list