GNOME Bugzilla – Bug 648080
Window in _NET_WM_STATE_FULLSCREEN state always stays in z-order above a window with transient_for hint set to that fullscreen window.
Last modified: 2021-07-05 13:48:45 UTC
I'm filing this report against Metacity 2.28.x, but as far as I see current git sources have the same problem. Recently Wine stopped to use _NET_WM_WINDOW_TYPE_DIALOG type for windows (because of strange limitations on them, including inability to make them fullscreen), and now uses _NET_WM_WINDOW_TYPE_NORMAL for all kinds of windows. This led to a regression in windows z-order reported in http://bugs.winehq.org/show_bug.cgi?id=26693. While investigating that bug I found another problem with transient_for hint, it was reported in the bug 648079. After adding a workaround for the transient_for bug (by simply commenting out setting a specifyied in the request window to None), I see another problem: a window in _NET_WM_STATE_FULLSCREEN state always stays in z-order above a window with transient_for hint set to that fullscreen window. Once I set window type of the latter window to DIALOG the problem disappears. Here are some snippets from the logs: For DIALOG window type: WINDOW_OPS: Fullscreening 0x3e00004 (Bionic Hea) WINDOW_OPS: Raising window 0x3e00004 (Bionic Hea), ancestor of 0x3e00004 (Bionic Hea) STACK: Window 0x3e00004 (Bionic Hea) already has position 8 ... STACK: Syncing window stack to server STACK: Adding 1 windows to sorted list STACK: Recomputing layers STACK: Window 0x3e00004 (Bionic Hea) on layer 2 type = 0 has_focus = 0 STACK: Window 0x3e00004 (Bionic Hea) moved from layer 7 to 2 STACK: Window 0x1a00003 (Bottom Pan) on layer 4 type = 2 has_focus = 0 STACK: Window 0x1a00025 (Top Panel) on layer 4 type = 2 has_focus = 0 STACK: Window 0x3e00001 () on layer 2 type = 3 has_focus = 0 STACK: Window 0x1e0008b (dmitry@ubu) on layer 2 type = 0 has_focus = 1 STACK: Window 0x1e00146 (dmitry@ubu) on layer 2 type = 0 has_focus = 0 STACK: Window 0x1e00003 (dmitry@ubu) on layer 2 type = 0 has_focus = 0 STACK: Window 0x1e00030 (dmitry@ubu) on layer 2 type = 0 has_focus = 0 STACK: Window 0x1c0001c (x-nautilus) on layer 0 type = 1 has_focus = 0 STACK: Reapplying constraints STACK: Constraining 0x3e00001 () above 0x3e00004 (Bionic Hea) as it's transient for its group STACK: Window 0x3e00001 () had stack_position set to 8 STACK: 0x3e00001 () above at 8 > 0x3e00004 (Bionic Hea) below at 7 STACK: Sorting stack list STACK: Top to bottom: 4:2 - 0x1a00003 (Bottom Pan) 4:0 - 0x1a00025 (Top Panel) 2:8 - 0x3e00001 () 2:7 - 0x3e00004 (Bionic Hea) 2:6 - 0x1e0008b (dmitry@ubu) 2:5 - 0x1e00146 (dmitry@ubu) 2:4 - 0x1e00003 (dmitry@ubu) 2:3 - 0x1e00030 (dmitry@ubu) 0:1 - 0x1c0001c (x-nautilus) ... STACK: Syncing window stack to server STACK: Recomputing layers STACK: Window 0x1a00003 (Bottom Pan) on layer 4 type = 2 has_focus = 0 STACK: Window 0x1a00025 (Top Panel) on layer 4 type = 2 has_focus = 0 STACK: Window 0x3e00001 (Bionic Hea) on layer 2 type = 3 has_focus = 0 STACK: Window 0x3e00004 (Bionic Hea) on layer 2 type = 0 has_focus = 0 STACK: Window 0x1e0008b (dmitry@ubu) on layer 2 type = 0 has_focus = 0 STACK: Window 0x1e00146 (dmitry@ubu) on layer 2 type = 0 has_focus = 0 STACK: Window 0x1e00003 (dmitry@ubu) on layer 2 type = 0 has_focus = 0 STACK: Window 0x1e00030 (dmitry@ubu) on layer 2 type = 0 has_focus = 0 STACK: Window 0x1c0001c (x-nautilus) on layer 0 type = 1 has_focus = 0 STACK: Top to bottom: 4:2 - 0x1a00003 (Bottom Pan) 4:0 - 0x1a00025 (Top Panel) 2:8 - 0x3e00001 (Bionic Hea) 2:7 - 0x3e00004 (Bionic Hea) 2:6 - 0x1e0008b (dmitry@ubu) 2:5 - 0x1e00146 (dmitry@ubu) 2:4 - 0x1e00003 (dmitry@ubu) 2:3 - 0x1e00030 (dmitry@ubu) 0:1 - 0x1c0001c (x-nautilus) For NORMAL window type: WINDOW_OPS: Fullscreening 0x3e00004 (Bionic Hea) WINDOW_OPS: Raising window 0x3e00004 (Bionic Hea), ancestor of 0x3e00004 (Bionic Hea) STACK: Window 0x3e00004 (Bionic Hea) already has position 8 ... STACK: Syncing window stack to server STACK: Adding 1 windows to sorted list STACK: Recomputing layers STACK: Window 0x3e00004 (Bionic Hea) on layer 2 type = 0 has_focus = 0 STACK: Window 0x3e00004 (Bionic Hea) moved from layer 7 to 2 STACK: Window 0x1a00003 (Bottom Pan) on layer 4 type = 2 has_focus = 0 STACK: Window 0x1a00025 (Top Panel) on layer 4 type = 2 has_focus = 0 STACK: Window 0x3e00001 () on layer 2 type = 0 has_focus = 0 STACK: Window 0x1e0008b (dmitry@ubu) on layer 2 type = 0 has_focus = 1 STACK: Window 0x1e000a0 (dmitry@ubu) on layer 2 type = 0 has_focus = 0 STACK: Window 0x1e00003 (dmitry@ubu) on layer 2 type = 0 has_focus = 0 STACK: Window 0x1e00030 (dmitry@ubu) on layer 2 type = 0 has_focus = 0 STACK: Window 0x1c0001c (x-nautilus) on layer 0 type = 1 has_focus = 0 STACK: Reapplying constraints STACK: Constraining 0x3e00001 () above 0x3e00004 (Bionic Hea) due to transiency STACK: Window 0x3e00001 () had stack_position set to 8 STACK: 0x3e00001 () above at 8 > 0x3e00004 (Bionic Hea) below at 7 STACK: Sorting stack list STACK: Top to bottom: 4:2 - 0x1a00003 (Bottom Pan) 4:1 - 0x1a00025 (Top Panel) 2:8 - 0x3e00001 () 2:7 - 0x3e00004 (Bionic Hea) 2:6 - 0x1e0008b (dmitry@ubu) 2:5 - 0x1e000a0 (dmitry@ubu) 2:4 - 0x1e00003 (dmitry@ubu) 2:3 - 0x1e00030 (dmitry@ubu) 0:0 - 0x1c0001c (x-nautilus) ... so far so good ... STACK: Syncing window stack to server STACK: Recomputing layers STACK: Window 0x1a00003 (Bottom Pan) on layer 4 type = 2 has_focus = 0 STACK: Window 0x1a00025 (Top Panel) on layer 4 type = 2 has_focus = 0 STACK: Window 0x3e00001 (Bionic Hea) on layer 2 type = 0 has_focus = 0 STACK: Window 0x3e00004 (Bionic Hea) on layer 5 type = 0 has_focus = 0 STACK: Window 0x3e00004 (Bionic Hea) moved from layer 2 to 5 STACK: Window 0x1e0008b (dmitry@ubu) on layer 2 type = 0 has_focus = 0 STACK: Window 0x1e000a0 (dmitry@ubu) on layer 2 type = 0 has_focus = 0 STACK: Window 0x1e00003 (dmitry@ubu) on layer 2 type = 0 has_focus = 0 STACK: Window 0x1e00030 (dmitry@ubu) on layer 2 type = 0 has_focus = 0 STACK: Window 0x1c0001c (x-nautilus) on layer 0 type = 1 has_focus = 0 STACK: Reapplying constraints STACK: Constraining 0x3e00001 (Bionic Hea) above 0x3e00004 (Bionic Hea) due to transiency STACK: 0x3e00001 (Bionic Hea) above at 8 > 0x3e00004 (Bionic Hea) below at 7 STACK: Sorting stack list STACK: Top to bottom: 5:7 - 0x3e00004 (Bionic Hea) 4:2 - 0x1a00003 (Bottom Pan) 4:1 - 0x1a00025 (Top Panel) 2:8 - 0x3e00001 (Bionic Hea) 2:6 - 0x1e0008b (dmitry@ubu) 2:5 - 0x1e000a0 (dmitry@ubu) 2:4 - 0x1e00003 (dmitry@ubu) 2:3 - 0x1e00030 (dmitry@ubu) 0:0 - 0x1c0001c (x-nautilus) now it's broken.
Obviously mutter has the same codebase and exactly the same problem. Changing component in the hope that this bug report takes more attention.
Is there any hope to get at least some comment to this bug report?
Wine bug was fixed so I assume the issue was on that side. Reopen if I'm wrong.
(In reply to Jonas Ådahl from comment #3) > Wine bug was fixed so I assume the issue was on that side. Reopen if I'm > wrong. While the Wine bug is marked as fixed, that's because a workaround for this Gnome bug was committed to Wine code. It would be better to have a real fix in Gnome instead, for correct handling of a window with _NET_WM_STATE_FULLSCREEN and its z-order to a window with transient_for hint.
Could you provide a minimal test case that illustrates the issue?
(In reply to Jonas Ådahl from comment #5) > Could you provide a minimal test case that illustrates the issue? Thanks for your interest in fixing this bug. I'm afraid that I have no a minimal test case. The problem could be reproduced by running under Wine the program, mentioned in the bug https://bugs.winehq.org/show_bug.cgi?id=26693, after reverting a workaround. For the reference here is a Wine commit with a workaround: https://source.winehq.org/git/wine.git/commitdiff/fd043c56443430ee993c7d7281845b9b726b48d6
GNOME is going to shut down bugzilla.gnome.org in favor of gitlab.gnome.org. As part of that, we are mass-closing older open tickets in bugzilla.gnome.org which have not seen updates for a longer time (resources are unfortunately quite limited so not every ticket can get handled). If you can still reproduce the situation described in this ticket in a recent and supported software version, then please follow https://wiki.gnome.org/GettingInTouch/BugReportingGuidelines and create a new ticket at https://gitlab.gnome.org/GNOME/mutter/-/issues/ Thank you for your understanding and your help.