diff options
| author | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2024-12-30 16:11:23 +0200 |
|---|---|---|
| committer | Assam Boudjelthia <assam.boudjelthia@qt.io> | 2025-01-07 19:26:24 +0200 |
| commit | d7860d445d462dae853358c8b956fa6b1b6a2fc7 (patch) | |
| tree | fbd0776b6e0e081147d8be82739a7acc44c6b798 /src/plugins/platforms/android/qandroidplatformwindow.cpp | |
| parent | 30ae70a110ee2460744e4fb78bae29b75effbf72 (diff) | |
Android: pass safe area margins to relevant windows only
Instead of passing the safe area margins to all windows
or top windows, we can instead call the listener for
setOnApplyWindowInsetsListener() on specific QtWindow
and have it pass the windowId with the callback to C++.
What was missing before was that the listner was not reset
after removing the window and also, we don't need to
necessarily require a window matching the id to be found,
so that if no window is found we can assume that the callback
is not valid.
Task-number: QTBUG-131519
Pick-to: 6.9
Change-Id: Idd411e407ac8f5992aa6684ece70329198de1bc2
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/plugins/platforms/android/qandroidplatformwindow.cpp')
| -rw-r--r-- | src/plugins/platforms/android/qandroidplatformwindow.cpp | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformwindow.cpp b/src/plugins/platforms/android/qandroidplatformwindow.cpp index 51e5f95605f..b83b1df88f1 100644 --- a/src/plugins/platforms/android/qandroidplatformwindow.cpp +++ b/src/plugins/platforms/android/qandroidplatformwindow.cpp @@ -383,7 +383,8 @@ void QAndroidPlatformWindow::windowFocusChanged(JNIEnv *env, jobject object, } } -void QAndroidPlatformWindow::safeAreaMarginsChanged(JNIEnv *env, jobject object, QtJniTypes::Insets insets) +void QAndroidPlatformWindow::safeAreaMarginsChanged(JNIEnv *env, jobject object, + QtJniTypes::Insets insets, jint id) { Q_UNUSED(env) Q_UNUSED(object) @@ -391,10 +392,6 @@ void QAndroidPlatformWindow::safeAreaMarginsChanged(JNIEnv *env, jobject object, if (!qGuiApp) return; - const auto tlw = qGuiApp->topLevelWindows(); - if (tlw.isEmpty()) - return; - QMargins safeMargins; if (insets.isValid()) { safeMargins = QMargins( @@ -404,17 +401,17 @@ void QAndroidPlatformWindow::safeAreaMarginsChanged(JNIEnv *env, jobject object, insets.getField<int>("bottom")); } - for (QWindow *window : qGuiApp->topLevelWindows()) { + for (QWindow *window : qGuiApp->allWindows()) { if (!window->handle()) continue; - - auto *pWindow = static_cast<QAndroidPlatformWindow *>(window->handle()); - if (!pWindow) - return; + QAndroidPlatformWindow *pWindow = static_cast<QAndroidPlatformWindow *>(window->handle()); + if (pWindow->nativeViewId() != id) + continue; if (safeMargins != pWindow->safeAreaMargins()) { pWindow->setSafeAreaMargins(safeMargins); QWindowSystemInterface::handleSafeAreaMarginsChanged(window); + break; } } } |
