Comment 3 for bug 1425690

Revision history for this message
Alistair Buxton (a-j-buxton) wrote :

The problem is caused by Ubiquity sets up the _WM_STRUT and _WM_STRUT_PARTIAL.

It does :

set_strut(GTK_WINDOW(win), width, 0, allocation.height, allocation.height, 0, width);

and these values are put in LEFT, LEFT_START_Y, LEFT_END_Y, TOP, TOP_START_X, START_END_X respectively. It also puts LEFT and TOP in _WM_STRUTS. So they end up like this:

_NET_WM_STRUT_PARTIAL(CARDINAL) = 1024, 0, 28, 0, 0, 28, 0, 0, 0, 1024, 0, 0
_NET_WM_STRUT(CARDINAL) = 1024, 0, 28, 0

This kind of makes sense for the partial struts because the top strut and the left strut cover the exact same screen area. However, if the WM only looks at _WM_STRUT then it sees the left strut as covering the entire screen.

It looks like xfwm4 does not understand partial struts at all, so it sets up the _NET_WORKAREA as having no space at all. Further, it looks like recent changes in xfwm4 window positioning code mean that it only recently started honouring _NET_WORKAREA at all. So now windows get pushed entirely off the screen, because the WM believes there's no space on it.

http://bazaar.launchpad.net/~ubuntu-installer/ubiquity/trunk/view/head:/src/panel/panel.c#L249

http://bazaar.launchpad.net/~ubuntu-installer/ubiquity/trunk/view/head:/src/panel/panel.c#L56

http://git.xfce.org/xfce/xfwm4/tree/src/workspaces.c#n519