summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2023-08-15 21:17:53 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-09-12 21:40:11 +0000
commit18678e3fc7e6f6cd9ac2ace434be80ca499e2126 (patch)
treeed74df9af1f6528dc9a6ced6db1b968025a0b4f1
parentf6720887e6a017b1f8fd0f88f53782f18268eaf9 (diff)
xcb: Reflect geometry of foreign window on creation
Change-Id: I305b256696a32454f64c12c5a8901b65506fc520 Reviewed-by: Liang Qi <liang.qi@qt.io> (cherry picked from commit 4e2e3a6b4fe0ff5e1930707808f02e3be9343312) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.cpp12
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.h3
-rw-r--r--tests/auto/gui/kernel/qwindow/tst_foreignwindow.cpp2
3 files changed, 13 insertions, 4 deletions
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
index 584f1e5406..7e3c32d387 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
@@ -472,6 +472,18 @@ QXcbWindow::~QXcbWindow()
destroy();
}
+QXcbForeignWindow::QXcbForeignWindow(QWindow *window, WId nativeHandle)
+ : QXcbWindow(window)
+{
+ m_window = nativeHandle;
+
+ // Reflect the foreign window's geometry as our own
+ if (auto geometry = Q_XCB_REPLY(xcb_get_geometry, xcb_connection(), m_window)) {
+ QRect nativeGeometry(geometry->x, geometry->y, geometry->width, geometry->height);
+ QPlatformWindow::setGeometry(nativeGeometry);
+ }
+}
+
QXcbForeignWindow::~QXcbForeignWindow()
{
// Clear window so that destroy() does not affect it
diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h
index 54a96a7a0a..6a13c4b676 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.h
+++ b/src/plugins/platforms/xcb/qxcbwindow.h
@@ -258,8 +258,7 @@ protected:
class QXcbForeignWindow : public QXcbWindow
{
public:
- QXcbForeignWindow(QWindow *window, WId nativeHandle)
- : QXcbWindow(window) { m_window = nativeHandle; }
+ QXcbForeignWindow(QWindow *window, WId nativeHandle);
~QXcbForeignWindow();
bool isForeignWindow() const override { return true; }
diff --git a/tests/auto/gui/kernel/qwindow/tst_foreignwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_foreignwindow.cpp
index ce4d9f28c8..c42bb9d974 100644
--- a/tests/auto/gui/kernel/qwindow/tst_foreignwindow.cpp
+++ b/tests/auto/gui/kernel/qwindow/tst_foreignwindow.cpp
@@ -67,8 +67,6 @@ void tst_ForeignWindow::initialState()
// For extra bonus points, the foreign window should actually
// reflect the state of the native window.
- if (!QGuiApplication::platformName().compare(QLatin1String("xcb"), Qt::CaseInsensitive))
- QEXPECT_FAIL("", "QXcbWindow does not pick up foreign window geometry", Continue);
QCOMPARE(foreignWindow->geometry(), initialGeometry);
}