xpra icon
Bug tracker and wiki

Opened 3 weeks ago

Closed 3 weeks ago

Last modified 2 weeks ago

#2482 closed defect (fixed)

macos GTK3 maximize does not stick

Reported by: Antoine Martin Owned by: Antoine Martin
Priority: major Milestone: 4.0
Component: platforms Version: 3.0.x
Keywords: macos Cc:

Description

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.

Attachments (2)

GTK_info.txt (3.5 KB) - added by mjlbach 3 weeks ago.
GTK_info
native_gui_info.txt (128.6 KB) - added by mjlbach 3 weeks ago.
native_gui_info

Download all attachments as: .zip

Change History (7)

comment:1 in reply to:  description Changed 3 weeks ago by mjlbach

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
Last edited 3 weeks ago by Antoine Martin (previous) (diff)

comment:2 Changed 3 weeks ago by Antoine Martin

Owner: changed from Antoine Martin to mjlbach

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?

Last edited 3 weeks ago by Antoine Martin (previous) (diff)

Changed 3 weeks ago by mjlbach

Attachment: GTK_info.txt added

GTK_info

Changed 3 weeks ago by mjlbach

Attachment: native_gui_info.txt added

native_gui_info

comment:3 Changed 3 weeks ago by Antoine Martin

Owner: changed from mjlbach to Antoine Martin
Status: newassigned

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.

comment:4 Changed 3 weeks ago by Antoine Martin

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
  • we get a wake_callback - even though we never went to sleep?
  • not sure why we get so many update_metadata
  • the only flag changed on that window is GDK_WINDOW_STATE_FOCUSED - we ignore GDK_WINDOW_STATE_WITHDRAWN
Last edited 3 weeks ago by Antoine Martin (previous) (diff)

comment:5 Changed 3 weeks ago by Antoine Martin

Resolution: fixed
Status: assignedclosed

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.

Last edited 2 weeks ago by Antoine Martin (previous) (diff)
Note: See TracTickets for help on using tickets.