diff options
author | Liang Qi <liang.qi@qt.io> | 2024-03-19 12:26:00 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2024-03-19 23:31:41 +0000 |
commit | 23a906335e0d8a03388bbd73db43682c724d04a7 (patch) | |
tree | 2960f2687c494f0982a0e9e8e8dfdec99eb17d33 | |
parent | 2da738f03589b2bb53e921b5fec347bdd6b68b16 (diff) |
xcb: Avoid recreating xcb window in QXcbWindow::requestActivateWindow()
12203e94f5a34b59b6a7389402c854e823135a35 exposes the issue in xcb
qpa plugin.
We should not recreate xcb window via the call of focusWindow->winId().
Fixes: QTBUG-123032
Pick-to: 6.7 6.6 6.5 6.2 5.15
Change-Id: I6da4f3e64a9d7a92a2aab714591986c5d128fbd4
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
-rw-r--r-- | src/plugins/platforms/xcb/qxcbwindow.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 235de0a9e4..87974a61e0 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -1475,6 +1475,11 @@ void QXcbWindow::requestActivateWindow() updateNetWmUserTime(connection()->time()); QWindow *focusWindow = QGuiApplication::focusWindow(); + xcb_window_t current = XCB_NONE; + if (focusWindow) { + if (QPlatformWindow *pw = focusWindow->handle()) + current = pw->winId(); + } if (window()->isTopLevel() && !(window()->flags() & Qt::X11BypassWindowManagerHint) @@ -1489,7 +1494,7 @@ void QXcbWindow::requestActivateWindow() event.type = atom(QXcbAtom::Atom_NET_ACTIVE_WINDOW); event.data.data32[0] = 1; event.data.data32[1] = connection()->time(); - event.data.data32[2] = focusWindow ? focusWindow->winId() : XCB_NONE; + event.data.data32[2] = current; event.data.data32[3] = 0; event.data.data32[4] = 0; |