diff options
author | Piotr Mikolajczyk <piotr.mikolajczyk@qt.io> | 2020-11-16 11:46:16 +0100 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-11-17 10:48:05 +0000 |
commit | f92e1953699b2529cc6ea2fd399fe4f2b887e83c (patch) | |
tree | afb92b9c1bbaa1f81050a62f861bbbb4aa7d0a16 /src | |
parent | f6f68409a40beaa5f034c411dd7e296c7828d8fd (diff) |
Android: Ensure windows always have a geometry on creation
A QWindow created without an explicit geometry needs to pick up
a default geometry in the platform plugin. If the window has a
maximized of fullscreen window state, it will fill the entire
available geometry of the parent window (or the screen if there's
not parent window).
Fixes: QTBUG-69159
Fixes: QTBUG-69156
Fixes: QTBUG-69154
Pick-to: 5.15
Change-Id: If8565d92a97bb4b3fa44757e68969d54d0bc7ebe
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/platforms/android/qandroidplatformwindow.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformwindow.cpp b/src/plugins/platforms/android/qandroidplatformwindow.cpp index a88cb9b823..c64805b4e2 100644 --- a/src/plugins/platforms/android/qandroidplatformwindow.cpp +++ b/src/plugins/platforms/android/qandroidplatformwindow.cpp @@ -46,6 +46,7 @@ #include <qguiapplication.h> #include <qpa/qwindowsysteminterface.h> +#include <private/qhighdpiscaling_p.h> QT_BEGIN_NAMESPACE @@ -58,6 +59,15 @@ QAndroidPlatformWindow::QAndroidPlatformWindow(QWindow *window) m_windowState = Qt::WindowNoState; m_windowId = winIdGenerator.fetchAndAddRelaxed(1) + 1; setWindowState(window->windowStates()); + + const bool forceMaximize = m_windowState & (Qt::WindowMaximized | Qt::WindowFullScreen); + const QRect requestedGeometry = forceMaximize ? QRect() : window->geometry(); + const QRect availableGeometry = (window->parent()) ? window->parent()->geometry() : platformScreen()->availableGeometry(); + const QRect finalGeometry = QPlatformWindow::initialGeometry(window, requestedGeometry, + availableGeometry.width(), availableGeometry.height()); + + if (requestedGeometry != finalGeometry) + setGeometry(QHighDpi::toNativePixels(finalGeometry, window)); } void QAndroidPlatformWindow::lower() |