diff options
Diffstat (limited to 'src/plugins/platforms/xcb/qxcbwindow.cpp')
-rw-r--r-- | src/plugins/platforms/xcb/qxcbwindow.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 7451090cbf..1a360239c3 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -156,6 +156,14 @@ QXcbScreen *QXcbWindow::parentScreen() return parent() ? static_cast<QXcbWindow*>(parent())->parentScreen() : xcbScreen(); } +//QPlatformWindow::screenForGeometry version that uses deviceIndependentGeometry +QXcbScreen *QXcbWindow::initialScreen() const +{ + QWindowPrivate *windowPrivate = qt_window_private(window()); + QScreen *screen = windowPrivate->screenForGeometry(window()->geometry()); + return static_cast<QXcbScreen*>(screen->handle()); +} + // Returns \c true if we should set WM_TRANSIENT_FOR on \a w static inline bool isTransient(const QWindow *w) { @@ -356,8 +364,8 @@ void QXcbWindow::create() Qt::WindowType type = window()->type(); QXcbScreen *currentScreen = xcbScreen(); - QRect rect = windowGeometry(); - QXcbScreen *platformScreen = parent() ? parentScreen() : static_cast<QXcbScreen*>(screenForGeometry(rect)); + QXcbScreen *platformScreen = parent() ? parentScreen() : initialScreen(); + QRect rect = QHighDpi::toNativePixels(window()->geometry(), platformScreen); if (type == Qt::Desktop) { m_window = platformScreen->root(); |