diff options
Diffstat (limited to 'src/plugins/platforms/android/qandroidplatformwindow.cpp')
-rw-r--r-- | src/plugins/platforms/android/qandroidplatformwindow.cpp | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformwindow.cpp b/src/plugins/platforms/android/qandroidplatformwindow.cpp index 4f691ce112..a88cb9b823 100644 --- a/src/plugins/platforms/android/qandroidplatformwindow.cpp +++ b/src/plugins/platforms/android/qandroidplatformwindow.cpp @@ -67,25 +67,39 @@ void QAndroidPlatformWindow::lower() void QAndroidPlatformWindow::raise() { - updateStatusBarVisibility(); + updateSystemUiVisibility(); platformScreen()->raise(this); } +QMargins QAndroidPlatformWindow::safeAreaMargins() const +{ + if ((m_windowState & Qt::WindowMaximized) && (window()->flags() & Qt::MaximizeUsingFullscreenGeometryHint)) { + QRect availableGeometry = platformScreen()->availableGeometry(); + return QMargins(availableGeometry.left(), availableGeometry.top(), + availableGeometry.right(), availableGeometry.bottom()); + } else { + return QPlatformWindow::safeAreaMargins(); + } +} + void QAndroidPlatformWindow::setGeometry(const QRect &rect) { + QPlatformWindow::setGeometry(rect); QWindowSystemInterface::handleGeometryChange(window(), rect); } void QAndroidPlatformWindow::setVisible(bool visible) { if (visible) - updateStatusBarVisibility(); + updateSystemUiVisibility(); if (visible) { - if (m_windowState & Qt::WindowFullScreen) + if ((m_windowState & Qt::WindowFullScreen) + || ((m_windowState & Qt::WindowMaximized) && (window()->flags() & Qt::MaximizeUsingFullscreenGeometryHint))) { setGeometry(platformScreen()->geometry()); - else if (m_windowState & Qt::WindowMaximized) + } else if (m_windowState & Qt::WindowMaximized) { setGeometry(platformScreen()->availableGeometry()); + } } if (visible) @@ -107,7 +121,7 @@ void QAndroidPlatformWindow::setWindowState(Qt::WindowStates state) m_windowState = state; if (window()->isVisible()) - updateStatusBarVisibility(); + updateSystemUiVisibility(); } void QAndroidPlatformWindow::setWindowFlags(Qt::WindowFlags flags) @@ -143,15 +157,17 @@ void QAndroidPlatformWindow::requestActivateWindow() platformScreen()->topWindowChanged(window()); } -void QAndroidPlatformWindow::updateStatusBarVisibility() +void QAndroidPlatformWindow::updateSystemUiVisibility() { Qt::WindowFlags flags = window()->flags(); bool isNonRegularWindow = flags & (Qt::Popup | Qt::Dialog | Qt::Sheet) & ~Qt::Window; if (!isNonRegularWindow) { if (m_windowState & Qt::WindowFullScreen) - QtAndroid::hideStatusBar(); + QtAndroid::setSystemUiVisibility(QtAndroid::SYSTEM_UI_VISIBILITY_FULLSCREEN); + else if (flags & Qt::MaximizeUsingFullscreenGeometryHint) + QtAndroid::setSystemUiVisibility(QtAndroid::SYSTEM_UI_VISIBILITY_TRANSLUCENT); else - QtAndroid::showStatusBar(); + QtAndroid::setSystemUiVisibility(QtAndroid::SYSTEM_UI_VISIBILITY_NORMAL); } } |