From 08f268ba22ddb129ab0bb29cef7494be067d8dfc Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 18 Mar 2015 16:36:34 +0100 Subject: Proper screen change handling for devicePixelRatio MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We need to make sure that we know which screen we are on, and use the correct devicePixelRatio, depending on the screen. Task-number: QTBUG-45076 Change-Id: Ic56ad4ca8a807d584ce4938b64905ce4dd10f7aa Reviewed-by: Morten Johan Sørvig --- src/plugins/platforms/xcb/qxcbwindow.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src/plugins/platforms/xcb/qxcbwindow.cpp') diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp index 41b24e302f..78ccf8a3e9 100644 --- a/src/plugins/platforms/xcb/qxcbwindow.cpp +++ b/src/plugins/platforms/xcb/qxcbwindow.cpp @@ -318,6 +318,12 @@ void QXcbWindow::create() // currently no way to implement it for frame-exclusive geometries. QRect rect = window()->geometry(); QPlatformWindow::setGeometry(rect); + QXcbScreen *currentScreen = xcbScreen(); + QPlatformScreen *newScreen = screenForGeometry(rect); + + if (newScreen != currentScreen) + QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->screen()); + const int dpr = int(devicePixelRatio()); QSize minimumSize = window()->minimumSize(); @@ -582,9 +588,18 @@ void QXcbWindow::setGeometry(const QRect &rect) propagateSizeHints(); - const QRect xRect = mapToNative(rect, int(devicePixelRatio())); + QXcbScreen *currentScreen = xcbScreen(); + QPlatformScreen *newScreen = screenForGeometry(rect); + if (!newScreen) + newScreen = currentScreen; + + const QRect xRect = mapToNative(rect, int(newScreen->devicePixelRatio())); const QRect wmGeometry = windowToWmGeometry(xRect); + + if (newScreen != currentScreen) + QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->screen()); + if (qt_window_private(window())->positionAutomatic) { const quint32 mask = XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT; const qint32 values[] = { @@ -1858,7 +1873,7 @@ void QXcbWindow::handleConfigureNotifyEvent(const xcb_configure_notify_event_t * if (newScreen != screen()) { if (newScreen) QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->screen()); - int newDpr = devicePixelRatio(); + int newDpr = newScreen->devicePixelRatio(); if (newDpr != dpr) { QRect newRect = mapGeometryFromNative(nativeRect, newDpr); QPlatformWindow::setGeometry(newRect); -- cgit v1.2.3