View Full Version : _NET_WM_WINDOW_TYPE_DOCK and _NET_WM_STATE_BELOW
ngolian
May 12th, 2008, 11:10 PM
If a panel has _NET_WM_STATE_BELOW set as well as _NET_WM_WINDOW_TYPE_DOCK compiz ignores the dock condition altogether, instead of overriding just the keep on top nature. This means struts are applied to "BELOW" docks in compiz, contrary to other window managers.
ROX-Filer's panels use these two properties together, allowing windows to be manually positioned over panels instead of under them, while using struts to avoid placement or maximization covering panels. This means that the panels' own struts force them away from the screen edge. There's more discussion about that on one of ROX's mailing lists: <http://thread.gmane.org/gmane.comp.desktop.rox.devel/9799>.
maniac
May 13th, 2008, 06:34 AM
If a panel has _NET_WM_STATE_BELOW set as well as _NET_WM_WINDOW_TYPE_DOCK compiz ignores the dock condition altogether, instead of overriding just the keep on top nature. This means struts are applied to "BELOW" docks in compiz, contrary to other window managers.
ROX-Filer's panels use these two properties together, allowing windows to be manually positioned over panels instead of under them, while using struts to avoid placement or maximization covering panels. This means that the panels' own struts force them away from the screen edge. There's more discussion about that on one of ROX's mailing lists: <http://thread.gmane.org/gmane.comp.desktop.rox.devel/9799>.
Looking at this one (http://article.gmane.org/gmane.comp.desktop.rox.devel/9804): Panels are not placed by the WM with (at least) most window managers. Personally I have looked at Metacity and xfwm4 which both don't place docks.
So if the ROX panel just would move itself to the screen edge, everything should be fine.
Looking at this (http://thread.gmane.org/gmane.comp.desktop.rox.devel/9799): This code piece is unrelated and does _not_ influence strut handling. w->type is e.g. used for stacking. You can find similar code in other window managers, e.g. in kwin (layers.cpp):
if( isDock() && keepBelow())
// slight hack for the 'allow window to cover panel' Kicker setting
// don't move keepbelow docks below normal window, but only to the same
// layer, so that both may be raised to cover the other
return NormalLayer;
EDIT: Disregard that - I forgot that w->type is also used for determining if a window should be placed or not, so that Compiz moves the panel away from the position it had before.
This should now be fixed: click (http://gitweb.freedesktop.org/?p=xorg/app/compiz.git;a=commit;h=9e3487d61f884d2e68437c72bb02 d920ee89c707), click (http://gitweb.freedesktop.org/?p=xorg/app/compiz.git;a=commit;h=ff34f7b00f88ea2026879a905f50 fd211fa528f6).
ngolian
May 13th, 2008, 09:25 PM
Thanks. I'll pass this news on to the ROX mailing list.
vBulletin® v3.7.1, Copyright ©2000-2008, Jelsoft Enterprises Ltd.