summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/android/qandroidplatformwindow.cpp
diff options
context:
space:
mode:
authorAssam Boudjelthia <assam.boudjelthia@qt.io>2024-12-30 16:11:23 +0200
committerAssam Boudjelthia <assam.boudjelthia@qt.io>2025-01-07 19:26:24 +0200
commitd7860d445d462dae853358c8b956fa6b1b6a2fc7 (patch)
treefbd0776b6e0e081147d8be82739a7acc44c6b798 /src/plugins/platforms/android/qandroidplatformwindow.cpp
parent30ae70a110ee2460744e4fb78bae29b75effbf72 (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.cpp17
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;
}
}
}