summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/android/qandroidplatformwindow.cpp
diff options
context:
space:
mode:
authorTinja Paavoseppä <tinja.paavoseppa@qt.io>2023-10-31 14:52:30 +0200
committerSoheil Armin <soheil.armin@qt.io>2023-12-14 00:26:55 +0200
commit5ba91c9decb4d13d7f7176bc7ce29b40007a19c5 (patch)
tree284bab02308d137efcb6259c7fd7d20821b787b4 /src/plugins/platforms/android/qandroidplatformwindow.cpp
parentc1a79b442ce0a50e176f72f3c738ea1263e8dd98 (diff)
Android: Add support for foreign window acting as embedding container
In the case when our foreign window is created to act as a parent for embedding Qt content into a native Android app, we need a more "hands off" approach. If the foreign window represents an Android view which the user has created outside of Qt, we should not try to reparent it since it already has a parent in the view hierarchy. Neither should we try to remove it from the hierarchy, or set its visibility. Pick-to: 6.7 Change-Id: Iea496578a40f45ebdd73947a1bb0e46a7131108c Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io> 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.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformwindow.cpp b/src/plugins/platforms/android/qandroidplatformwindow.cpp
index 0756fb115f..8196809772 100644
--- a/src/plugins/platforms/android/qandroidplatformwindow.cpp
+++ b/src/plugins/platforms/android/qandroidplatformwindow.cpp
@@ -45,6 +45,9 @@ QAndroidPlatformWindow::QAndroidPlatformWindow(QWindow *window)
setGeometry(finalNativeGeometry);
}
+ if (isEmbeddingContainer())
+ return;
+
if (parent())
m_nativeParentQtWindow = static_cast<QAndroidPlatformWindow*>(parent())->nativeWindow();
@@ -306,6 +309,13 @@ bool QAndroidPlatformWindow::blockedByModal() const
return modalWindow && modalWindow != window();
}
+bool QAndroidPlatformWindow::isEmbeddingContainer() const
+{
+ // Returns true if the window is a wrapper for a foreign window solely to allow embedding Qt
+ // into a native Android app, in which case we should not try to control it more than we "need" to
+ return !QtAndroid::isQtApplication() && window()->isTopLevel();
+}
+
void QAndroidPlatformWindow::setSurface(JNIEnv *env, jobject object, jint windowId,
QtJniTypes::Surface surface)
{