Open GoogleCodeExporter opened 9 years ago
I think we can find a better solution. Please let me explain.
The openbox "show desktop" action keeps visible only the desktop window, the
dock windows and splash windows (see
http://git.icculus.org/?p=dana/openbox.git;a=blob;f=openbox/client.c;h=c97abd5ac
184d93428f69a40be7ee64b23dfe20f;hb=HEAD#l2806 ).
So to keep tint2 visible on show desktop, *we have to set the window type to
either dock or splash*.
The layer should remain what the user specifies (bottom, normal or top).
Setting _NET_WM_STATE_ABOVE and _NET_WM_STATE_BELOW at the same time does not
make any sense to me. The standard does not suggest that they should be set at
the same time:
http://standards.freedesktop.org/wm-spec/latest/ar01s05.html
http://standards.freedesktop.org/wm-spec/latest/ar01s09.html#STACKINGORDER
However there is one more thing that is affected by the panel_dock option,
whether the window is focusable:
// Unfocusable
XWMHints wmhints;
if (panel_dock) {
wmhints.icon_window = wmhints.window_group = p->main_win;
wmhints.flags = StateHint | IconWindowHint;
wmhints.initial_state = WithdrawnState;
}
else {
wmhints.flags = InputHint;
wmhints.input = False;
}
XSetWMHints(server.dsp, p->main_win, &wmhints);
To summarize, we have to solve the following problems:
* tint2 should remain visible on "show desktop".
* tint2 should not have a border in openbox (although tint2 is always
indicating to the window manager that it should NOT be decorated, so IMHO it is
openbox's fault that it decides to draw a border; xfwm for instance does not).
* tint2 should be able to stack properly below/above other windows with
"panel_layer = normal" (issue 455).
We have the following options:
* Set the window state to dock, normal or splash. Whether it is set to dock or
not should follow the panel_dock option in the config file (as this is what the
user expects).
* Enable/disable focusability.
* Set the layer to whatever the user indicated in the config file with
panel_layer.
The changes in r677 break the third case (issue 455) for me in both openbox and
xfwm. They also force the dock even if the user disables it.
Instead I propose the following:
// Dock
long val = panel_dock ? server.atom._NET_WM_WINDOW_TYPE_DOCK : server.atom._NET_WM_WINDOW_TYPE_SPLASH;
XChangeProperty (server.dsp, p->main_win, server.atom._NET_WM_WINDOW_TYPE, XA_ATOM, 32, PropModeReplace, (unsigned char *) &val, 1);
val = ALLDESKTOP;
XChangeProperty (server.dsp, p->main_win, server.atom._NET_WM_DESKTOP, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &val, 1);
Atom state[4];
state[0] = server.atom._NET_WM_STATE_SKIP_PAGER;
state[1] = server.atom._NET_WM_STATE_SKIP_TASKBAR;
state[2] = server.atom._NET_WM_STATE_STICKY;
state[3] = panel_layer == BOTTOM_LAYER ? server.atom._NET_WM_STATE_BELOW : server.atom._NET_WM_STATE_ABOVE;
int nb_atoms = panel_layer == NORMAL_LAYER ? 3 : 4;
XChangeProperty (server.dsp, p->main_win, server.atom._NET_WM_STATE, XA_ATOM, 32, PropModeReplace, (unsigned char *) state, nb_atoms);
// Unfocusable
XWMHints wmhints;
wmhints.icon_window = wmhints.window_group = p->main_win;
wmhints.flags = StateHint | IconWindowHint;
wmhints.initial_state = WithdrawnState;
wmhints.flags = InputHint;
wmhints.input = False;
XSetWMHints(server.dsp, p->main_win, &wmhints);
I tested it in both openbox and xfwm, with compton, in all the 6 possible
configurations of panel_dock and panel_layer. All of the 3 problems above are
solved.
What do you think?
Do you know by any chance why the XWMHints were set like that before?
Original comment by mrovi9...@gmail.com
on 31 Jan 2015 at 10:40
Thanks for the analysis and proposal. Tried the code - brilliant. I did try
the TOOLBAR window type but didn't think to try the SPLASH window type -
assumed it would be hardwired as ABOVE (the way DESKTOP is hardwired as BELOW).
I wholeheartedly agree it made no sense to set opposing states ABOVE and BELOW
at the same time. My solution was purely a workaround to do 1) what worked for
openbox, and 2) what didn't break legacy functionality. Using SPLASH is
counter to the designated function, but more sensible than opposing states!
My openbox test results:
panel_dock = 0
and panel_layer = bottom expected behaviour (below)
and panel_layer = normal expected behaviour (floating)
and panel_layer = top expected behaviour (above)
panel_dock = 1 "native dock"
and panel_layer = bottom expected behaviour (below)
and panel_layer = normal FAIL behaves as above
and panel_layer = top expected behaviour (above)
My fluxbox test results:
panel_dock = 0
and panel_layer = bottom expected behaviour (below)
and panel_layer = normal expected behaviour (floating)
and panel_layer = top expected behaviour (above)
panel_dock = 1 "slit"
and panel_layer = bottom expected behaviour (below)
and panel_layer = normal FAIL behaves as above
and panel_layer = top expected behaviour (above)
Normal behaves as ABOVE for both OB and FB using a DOCK window. As far as I can
tell, this *is* the native action for a DOCK in those WMs. It seems acceptable
particularly since the non-dock version follows the panel_layer accurately.
And from my experience distro hopping, I find most openbox/tint2 distros tend
to ignore the native dock anyway.
Thumbs up. Make it happen.
(Mr OV, I'd like your email address - my developer email address is functional
so please get in touch.)
Original comment by goo...@craigoakes.com
on 31 Jan 2015 at 2:11
Also same test results with compton + openbox.
And no, I don't know why the xwmhints were configured with the if statement...
Original comment by goo...@craigoakes.com
on 31 Jan 2015 at 2:20
Issue 228 has been merged into this issue.
Original comment by mrovi9...@gmail.com
on 1 Feb 2015 at 10:16
Committed r680.
Original comment by mrovi9...@gmail.com
on 1 Feb 2015 at 12:36
Original comment by mrovi9...@gmail.com
on 1 Feb 2015 at 5:51
Original comment by mrovi9...@gmail.com
on 1 Feb 2015 at 11:48
See also issue 394
Original comment by mrovi9...@gmail.com
on 2 Feb 2015 at 12:48
Original comment by goo...@craigoakes.com
on 2 Feb 2015 at 1:44
Related: issue 257.
Original comment by mrovi9...@gmail.com
on 8 Feb 2015 at 10:42
With panel_dock = 0 and strut_policy = follow_size, there was some strange
behavior with XFWM, which I think I fixed (issue 472 and r731)
Original comment by mrovi9...@gmail.com
on 20 Mar 2015 at 9:23
Original issue reported on code.google.com by
goo...@craigoakes.com
on 31 Jan 2015 at 4:33