summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/android
diff options
context:
space:
mode:
authorAssam Boudjelthia <[email protected]>2025-08-30 04:59:52 +0300
committerAssam Boudjelthia <[email protected]>2025-09-06 01:27:38 +0300
commite2a9ab46d39d442b198fe77d13153b8fc6b64a35 (patch)
tree381642a97e1c2ccb742034e252b31b0ae4073813 /src/plugins/platforms/android
parent357580c2253b2e1e5c09170a249cc59b2da30677 (diff)
Android: report margins only when window is under unsafe area
To avoid reporting margins/insets when it's not needed, like for some older Android versions, or to avoid wrong or improperly handled resize events, we only report the margins values for a window to reach the safe, otherwise, we could end up with extra padding from Qt safe margins and the system padding. Also, to ensure the root view location is up-to-date and avoid going into a race condition, we post() the safe margins reporting to the root view that way we ensure it's done after the root view has gone through the resize event. On safeAreaMarginsChanged() JNI implementation, don't do JNI calls to get the margin values unless the relevant platform window is found. Fixes: QTBUG-135808 Pick-to: 6.9 6.10 Change-Id: Idda072b8ebbd019c54ae6ae45f672bc7abb195b7 Reviewed-by: Tor Arne Vestbø <[email protected]>
Diffstat (limited to 'src/plugins/platforms/android')
-rw-r--r--src/plugins/platforms/android/qandroidplatformwindow.cpp35
1 files changed, 20 insertions, 15 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformwindow.cpp b/src/plugins/platforms/android/qandroidplatformwindow.cpp
index 1989ecdee3c..de0271edb56 100644
--- a/src/plugins/platforms/android/qandroidplatformwindow.cpp
+++ b/src/plugins/platforms/android/qandroidplatformwindow.cpp
@@ -397,28 +397,33 @@ void QAndroidPlatformWindow::safeAreaMarginsChanged(JNIEnv *env, jobject object,
if (!qGuiApp)
return;
- QMargins safeMargins;
- if (insets.isValid()) {
- safeMargins = QMargins(
- insets.getField<int>("left"),
- insets.getField<int>("top"),
- insets.getField<int>("right"),
- insets.getField<int>("bottom"));
- }
+ if (!insets.isValid())
+ return;
+ QAndroidPlatformWindow *pWindow = nullptr;
for (QWindow *window : qGuiApp->allWindows()) {
if (!window->handle())
continue;
- QAndroidPlatformWindow *pWindow = static_cast<QAndroidPlatformWindow *>(window->handle());
- if (pWindow->nativeViewId() != id)
- continue;
-
- if (safeMargins != pWindow->safeAreaMargins()) {
- pWindow->setSafeAreaMargins(safeMargins);
- QWindowSystemInterface::handleSafeAreaMarginsChanged(window);
+ QAndroidPlatformWindow *pw = static_cast<QAndroidPlatformWindow *>(window->handle());
+ if (pw->nativeViewId() == id) {
+ pWindow = pw;
break;
}
}
+
+ if (!pWindow)
+ return;
+
+ QMargins safeMargins = QMargins(
+ insets.getField<int>("left"),
+ insets.getField<int>("top"),
+ insets.getField<int>("right"),
+ insets.getField<int>("bottom"));
+
+ if (safeMargins != pWindow->safeAreaMargins()) {
+ pWindow->setSafeAreaMargins(safeMargins);
+ QWindowSystemInterface::handleSafeAreaMarginsChanged(pWindow->window());
+ }
}
static void updateWindows(JNIEnv *env, jobject object)