GNOME Bugzilla – Bug 723029
glxgears fullscreen not rendered full
Last modified: 2014-03-11 17:04:45 UTC
When using # glxgears -fullscreen on Gnome 3.10, the window is not rendered in fullscreen. There is always the top panel visible. Don't know if this problem has impact of the glxgears performance while measuring FPS.
(In reply to comment #0) > When using > # glxgears -fullscreen > on Gnome 3.10, the window is not rendered in fullscreen. > There is always the top panel visible. I can reproduce that will have a look. > Don't know if this problem has impact of the glxgears performance while > measuring FPS. glxgears is the wrong tool if your aim is to measure performance. The numbers you get are meaningless.
_NET_WM_STATE(ATOM) = _NET_WM_STATE_MAXIMIZED_HORZ, _NET_WM_STATE_MAXIMIZED_VERT WM_STATE(WM_STATE): window state: Normal icon window: 0x0 _NET_WM_DESKTOP(CARDINAL) = 0 _NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_CLOSE, _NET_WM_ACTION_ABOVE, _NET_WM_ACTION_BELOW WM_ICON_NAME(STRING) = "glxgears" WM_NAME(STRING) = "glxgears" WM_NORMAL_HINTS(WM_SIZE_HINTS): user specified location: 0, 0 user specified size: 3600 by 1080 _MOTIF_WM_HINTS(_MOTIF_WM_HINTS) = 0x2, 0x172d200, 0x0, 0x4a242030, 0x172be40 So it does not mark the window as fullscreen it just re sized it to an the full screen size and is not an override redirect window. So it does not match anything we consider fullscreen.
We have heuristics to solve this case: https://git.gnome.org/browse/mutter/tree/src/core/constraints.c#n420 Why aren't they working?
(In reply to comment #3) > We have heuristics to solve this case: > > https://git.gnome.org/browse/mutter/tree/src/core/constraints.c#n420 > > Why aren't they working? Because of: commit 4eeeb1557a3a0caff6ef1debd92aeb541ae1b556 Author: Giovanni Campagna <gcampagn@redhat.com> Date: Thu Sep 26 10:33:06 2013 +0200 constraints: don't apply fullscreen workarounds for CSD windows If you maximize a CSD window on a monitor without struts, it ends up taking the whole monitor size, but it doesn't mean that the application wants to fullscreen. https://bugzilla.gnome.org/show_bug.cgi?id=708718 That added a check on window->decorated to the heuristic, but a window which is !window->decorated is *not* necessarily CSD window - in fact, a window doing old-style fullscreen very likely turns off decoration. I'm not really sure what to do here - probably if a CSD window actually set a property declaring it as such, and maybe also giving decoration size (useful for cascading) that would be good. A *hack* is that any GTK+ CSD window will have _GTK_FRAME_EXTENTS set, even if the extents are zero. Maybe that's good enough for now.
*** Bug 722977 has been marked as a duplicate of this bug. ***
Created attachment 271052 [details] [review] Fix identification of CSD windows when checking whether to force fullscreen We try to exempt CSD windows from being forced fullscreen if they are undecorated and the size of the screen; however, we also catch almost all windows that *do* need to be forced fullscreen in this check, since they also have decorations turned off. Identify actual CSD windows by checking whether _GTK_FRAME_EXTENTS is set - GTK+ will always set this on CSD windows even if they have no invisible borders or shadows at the current time.
Review of attachment 271052 [details] [review]: OK.
Review of attachment 271052 [details] [review]: I think we should probably have meta_window_is_client_decorated so we can adjust the heuristics in the future. Martin Graesslin discussed such a "proper" property here: https://mail.gnome.org/archives/wm-spec-list/2014-February/msg00000.html
Created attachment 271536 [details] [review] Fix identification of CSD windows when checking whether to force fullscreen We try to exempt CSD windows from being forced fullscreen if they are undecorated and the size of the screen; however, we also catch almost all windows that *do* need to be forced fullscreen in this check, since they also have decorations turned off. Identify actual CSD windows by checking whether _GTK_FRAME_EXTENTS is set - GTK+ will always set this on CSD windows even if they have no invisible borders or shadows at the current time. We explicitly turn off the legacy-fullscreen check for native wayland windows so we don't start legacy-fullscreening them if the new meta_window_is_client_decorated() is later made more accurate.
Created attachment 271537 [details] [review] Fix identification of CSD windows when checking whether to force fullscreen We try to exempt CSD windows from being forced fullscreen if they are undecorated and the size of the screen; however, we also catch almost all windows that *do* need to be forced fullscreen in this check, since they also have decorations turned off. Identify actual CSD windows by checking whether _GTK_FRAME_EXTENTS is set - GTK+ will always set this on CSD windows even if they have no invisible borders or shadows at the current time.
Review of attachment 271536 [details] [review]: Looks good.
Review of attachment 271537 [details] [review]: Looks good as well.
Attachment 271536 [details] pushed as 2cf80bc - Fix identification of CSD windows when checking whether to force fullscreen Attachment 271537 [details] pushed as 2cf80bc - Fix identification of CSD windows when checking whether to force fullscreen