Details
-
Bug
-
Resolution: Fixed
-
P2: Important
-
5.15.10, 6.3.1
-
-
f2c5b846e (dev), eb7df2d77 (6.6), 98ee3222b (tqtc/lts-6.5), e5247218d (tqtc/lts-6.2), 2c2b74f1b (tqtc/lts-5.15)
Description
If QWidget has child-widgets like QDialogs or floating QDockWidgets,
those secondary Widgets refer to their parent on X Window-Level via X-property "WM_TRANSIENT_FOR". If the parent switches the winId, the new value is currently not written to the secondary's X-property. The secondary continues to refer to a stale window ID, unless it receives a subsequent replacement of its X11 window as well.
This stale window ID produces a mess for Window Managers, which in general make functional use of the ID which is stored in "WM_TRANSIENT_FOR".
- To reproduce the issue, please run the attached example project.
- Switch to "Type Dialog" and check "Window stays on top"
- This switches BOTH the preview and the control window to "stays on top". The consequence of this change for the control window is to receive another window.
- Run the command line utility "xprop" and click on the "Preview" window.
Note the ID which is reported for "WM_TRANSIENT_FOR" - Run the command line utility "xwininfo" and click on the "Window Flags" window.
Note the ID which is reported. It differs from the WM_TRANSIENT_FOR value, but should be the same.
If you repeat the test without checking "window stays on top", then both IDs are identical.
Attachments
Issue Links
- relates to
-
QTBUG-106033 Setting Qt::WindowStaysOnTopHint/Qt::WindowStaysOnBottomHint breaks winId
- Open