Remote session is a start-desktop with gnome-shell. 2560 x 1600 on mac vs 2560 x 1440 remote. Server is Fedora 31. Trying to make the desktop window fullscreen temporarily does something that looks like it is going to work, then it snaps back to where it was previously. Works fine without opengl.
OpenGL info
Warning: vendor 'Intel Inc.' is greylisted, you may want to turn off OpenGL if you encounter bugs /Applications/Xpra.app/Contents/Resources/lib/python/xpra/client/gl/gtk3/nativegl_client_window.py:13: Warning: g_object_get_qdata: assertion 'G_IS_OBJECT (object)' failed return GLContext().check_support(force_enable) #pylint: disable=not-callable /Applications/Xpra.app/Contents/Resources/lib/python/xpra/client/gl/gtk3/nativegl_client_window.py:13: Warning: g_object_set_qdata_full: assertion 'G_IS_OBJECT (object)' failed return GLContext().check_support(force_enable) #pylint: disable=not-callable /Applications/Xpra.app/Contents/Resources/lib/python/xpra/client/gl/gtk3/nativegl_client_window.py:13: Warning: g_object_unref: assertion 'G_IS_OBJECT (object)' failed return GLContext().check_support(force_enable) #pylint: disable=not-callable GLU.version=1.3 MacOSX accelerate=3.1.3b1 accum-size=0 alpha-size=8 aux-buffers=0 depth=32 depth-size=24 double-buffered=1 max-viewport-dims=16384, 16384 message= opengl=2.1 pyopengl=3.1.3b1 renderer=Intel Iris OpenGL Engine rgba=True safe=True screen-0={'rgba': True, 'depth': 32, 'alpha-size': 8, 'accum-size': 0, 'depth-size': 24, 'stencil-size': 0, 'aux-buffers': 0, 'double-buffered': 1} screen-1={'rgba': True, 'depth': 32, 'alpha-size': 8, 'accum-size': 0, 'depth-size': 32, 'stencil-size': 0, 'aux-buffers': 0, 'double-buffered': 1} shading-language-version=1.20 stencil-size=0 success=True texture-size-limit=16384 transparency=True vendor=Intel Inc. virtual-screens=2 zerocopy=True
My guess is that this is a bug with GTK3 and multiple screens:
screen-0={'rgba': True, 'depth': 32, 'alpha-size': 8, 'accum-size': 0, 'depth-size': 24, 'stencil-size': 0, 'aux-buffers': 0, 'double-buffered': 1} screen-1={'rgba': True, 'depth': 32, 'alpha-size': 8, 'accum-size': 0, 'depth-size': 32, 'stencil-size': 0, 'aux-buffers': 0, 'double-buffered': 1}
@mjlbach: can you reproduce with a single screen attached?
And if somehow you only have one... run some of the diagnostics scripts in Xpra.app/Contents/Helpers
:
GTK_info NativeGUI_info
Does GTK see the same number of screens? Are the python2 builds also affected by this bug? This is a new regression in 3.0, right?
GTK_info
native_gui_info
OK, so there's only one screen attached, the second one must be just a virtual screen for 32-bit vs 24-bit colours. I'll take it from there and try to reproduce.
Log when hitting the green button:
2019-11-21 12:54:35,027 receiveWorkspaceChangeNotification_(NSConcreteNotification 0x7f8ad3e2a020 {name = NSWorkspaceActiveSpaceDidChangeNotification; object = <NSWorkspace: 0x7f8ad1406fb0>}) 2019-11-21 12:54:35,029 workspace change - our windows on screen: {757: ''} 2019-11-21 12:54:35,030 delegate_cb(wake_callback)=<bound method WindowClient.resume of gtk3.client> 2019-11-21 12:54:35,030 system resumed, was suspended for 2019-11-21 12:54:35,057 popup_types(['NORMAL'])=() 2019-11-21 12:54:35,061 update_metadata({b'xid': b'0x600022', b'client-machine': b'desktop-eth1', b'pid': 16570, b'title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src', b'class-instance': (b'xterm', b'XTerm'), b'window-type': (b'NORMAL',), b'size-constraints': {b'base-size': (19, 4), b'increment': (6, 13), b'gravity': 1, b'minimum-size': (120, 17)}, b'icon-title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src'}) 2019-11-21 12:54:35,061 set_metadata({b'xid': b'0x600022', b'client-machine': b'desktop-eth1', b'pid': 16570, b'title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src', b'class-instance': (b'xterm', b'XTerm'), b'window-type': (b'NORMAL',), b'size-constraints': {b'base-size': (19, 4), b'increment': (6, 13), b'gravity': 1, b'minimum-size': (120, 17)}, b'icon-title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src'}) 2019-11-21 12:54:35,078 popup_types(['NORMAL'])=() 2019-11-21 12:54:35,080 update_metadata({b'xid': b'0x600022', b'client-machine': b'desktop-eth1', b'pid': 16570, b'title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src', b'class-instance': (b'xterm', b'XTerm'), b'window-type': (b'NORMAL',), b'size-constraints': {b'base-size': (19, 4), b'increment': (6, 13), b'gravity': 1, b'minimum-size': (120, 17)}, b'icon-title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src'}) 2019-11-21 12:54:35,080 set_metadata({b'xid': b'0x600022', b'client-machine': b'desktop-eth1', b'pid': 16570, b'title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src', b'class-instance': (b'xterm', b'XTerm'), b'window-type': (b'NORMAL',), b'size-constraints': {b'base-size': (19, 4), b'increment': (6, 13), b'gravity': 1, b'minimum-size': (120, 17)}, b'icon-title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src'}) 2019-11-21 12:54:35,095 popup_types(['NORMAL'])=() 2019-11-21 12:54:35,098 update_metadata({b'xid': b'0x600022', b'client-machine': b'desktop-eth1', b'pid': 16570, b'title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src', b'class-instance': (b'xterm', b'XTerm'), b'window-type': (b'NORMAL',), b'size-constraints': {b'base-size': (19, 4), b'increment': (6, 13), b'gravity': 1, b'minimum-size': (120, 17)}, b'icon-title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src'}) 2019-11-21 12:54:35,098 set_metadata({b'xid': b'0x600022', b'client-machine': b'desktop-eth1', b'pid': 16570, b'title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src', b'class-instance': (b'xterm', b'XTerm'), b'window-type': (b'NORMAL',), b'size-constraints': {b'base-size': (19, 4), b'increment': (6, 13), b'gravity': 1, b'minimum-size': (120, 17)}, b'icon-title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src'}) 2019-11-21 12:54:35,112 popup_types(['NORMAL'])=() 2019-11-21 12:54:35,115 update_metadata({b'xid': b'0x600022', b'client-machine': b'desktop-eth1', b'pid': 16570, b'title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src', b'class-instance': (b'xterm', b'XTerm'), b'window-type': (b'NORMAL',), b'size-constraints': {b'base-size': (19, 4), b'increment': (6, 13), b'gravity': 1, b'minimum-size': (120, 17)}, b'icon-title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src'}) 2019-11-21 12:54:35,116 set_metadata({b'xid': b'0x600022', b'client-machine': b'desktop-eth1', b'pid': 16570, b'title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src', b'class-instance': (b'xterm', b'XTerm'), b'window-type': (b'NORMAL',), b'size-constraints': {b'base-size': (19, 4), b'increment': (6, 13), b'gravity': 1, b'minimum-size': (120, 17)}, b'icon-title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src'}) 2019-11-21 12:54:35,132 popup_types(['NORMAL'])=() 2019-11-21 12:54:35,136 update_metadata({b'xid': b'0x600022', b'client-machine': b'desktop-eth1', b'pid': 16570, b'title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src', b'class-instance': (b'xterm', b'XTerm'), b'window-type': (b'NORMAL',), b'size-constraints': {b'base-size': (19, 4), b'increment': (6, 13), b'gravity': 1, b'minimum-size': (120, 17)}, b'icon-title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src'}) 2019-11-21 12:54:35,136 set_metadata({b'xid': b'0x600022', b'client-machine': b'desktop-eth1', b'pid': 16570, b'title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src', b'class-instance': (b'xterm', b'XTerm'), b'window-type': (b'NORMAL',), b'size-constraints': {b'base-size': (19, 4), b'increment': (6, 13), b'gravity': 1, b'minimum-size': (120, 17)}, b'icon-title': b'antoine@desktop-eth0:~/projects/Xpra/trunk/src'}) 2019-11-21 12:54:35,286 GLClientWindow(1 : GLDrawingArea(1, (1024, 690), None)).window_state_updated(GLClientWindow(1 : GLDrawingArea(1, (1024, 690), None)), <Gdk.EventWindowState object at 0x12646c6b0 (void at 0x7f8ad1c87330)>) changed_mask=<flags GDK_WINDOW_STATE_WITHDRAWN | GDK_WINDOW_STATE_FOCUSED of type Gdk.WindowState>, new_window_state=<flags GDK_WINDOW_STATE_FOCUSED of type Gdk.WindowState> 2019-11-21 12:54:35,287 _focused=True (was False) 2019-11-21 12:54:35,287 window_state_updated(..) state updates: {'focused': True}, actual updates: {'focused': True}, server updates: {'focused': True}
receiveWorkspaceChangeNotification_
is probably because the window is moved to its own workspace - can we tie the window number with our window ids? this would allow us to use workspace suspend + resume code
wake_callback
- even though we never went to sleep?
update_metadata
GDK_WINDOW_STATE_FOCUSED
- we ignore GDK_WINDOW_STATE_WITHDRAWN
Turns out that the spurious wake_callback is what is causing all the problems.
We end up calling reinit_windows
which doesn't know about the fullscreen state of the window (because GTK3 is unaware of it?), so it doesn't restore it.
This is also what's calling update_metadata
.
This is fixed in r24466 by ignoring the zero-length suspend-resume we generate from the workspace change code. The correct fix would be to not call suspend or resume from the workspace change code but to trigger the regular per window refresh change instead. (requires figuring out which windows map to the window number) - but that's harder.
Will attempt later: #2488. See also #2484.
@mjlbach: I'm closing this ticket because I could reproduce the bug you described and now the problem is gone, but feel free to re-open if I've missed anything else. There are Python3 beta 4.0 and 3.0.3-RC builds with this fix here: https://xpra.org/beta/MacOS.
this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/2482