summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/android/qandroidplatformwindow.cpp
diff options
context:
space:
mode:
authorTinja Paavoseppä <tinja.paavoseppa@qt.io>2024-01-10 12:59:13 +0200
committerTinja Paavoseppä <tinja.paavoseppa@qt.io>2024-01-16 17:55:29 +0200
commit46b86410a9730b099fa350516c3902db0ee01291 (patch)
tree4971e7776552e5f72701770201bcce495cf31e79 /src/plugins/platforms/android/qandroidplatformwindow.cpp
parent8e9918e476430cc30007f2acf69f0c0fe120a03d (diff)
Android: Handle embedding container windows better
Initialize surface container type to TextureView to make sure it's set also for embedding containers. Additional checks for embedding containers when setting parent or changing visibility. Pick-to: 6.7 Change-Id: Iba07bfbb9e8f16804627efbdfe78559ac2580e41 Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
Diffstat (limited to 'src/plugins/platforms/android/qandroidplatformwindow.cpp')
-rw-r--r--src/plugins/platforms/android/qandroidplatformwindow.cpp26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformwindow.cpp b/src/plugins/platforms/android/qandroidplatformwindow.cpp
index 8196809772..8c6158a030 100644
--- a/src/plugins/platforms/android/qandroidplatformwindow.cpp
+++ b/src/plugins/platforms/android/qandroidplatformwindow.cpp
@@ -17,7 +17,8 @@ QT_BEGIN_NAMESPACE
Q_LOGGING_CATEGORY(lcQpaWindow, "qt.qpa.window")
QAndroidPlatformWindow::QAndroidPlatformWindow(QWindow *window)
- : QPlatformWindow(window), m_nativeQtWindow(nullptr), m_nativeParentQtWindow(nullptr),
+ : QPlatformWindow(window), m_nativeQtWindow(nullptr),
+ m_surfaceContainerType(SurfaceContainer::TextureView), m_nativeParentQtWindow(nullptr),
m_androidSurfaceObject(nullptr)
{
m_windowFlags = Qt::Widget;
@@ -48,8 +49,11 @@ QAndroidPlatformWindow::QAndroidPlatformWindow(QWindow *window)
if (isEmbeddingContainer())
return;
- if (parent())
- m_nativeParentQtWindow = static_cast<QAndroidPlatformWindow*>(parent())->nativeWindow();
+ if (parent()) {
+ QAndroidPlatformWindow *androidParent = static_cast<QAndroidPlatformWindow*>(parent());
+ if (!androidParent->isEmbeddingContainer())
+ m_nativeParentQtWindow = androidParent->nativeWindow();
+ }
m_nativeQtWindow = QJniObject::construct<QtJniTypes::QtWindow>(
QNativeInterface::QAndroidApplication::context(),
@@ -62,9 +66,7 @@ QAndroidPlatformWindow::QAndroidPlatformWindow(QWindow *window)
// TODO should handle case where this changes at runtime -> need to change existing window
// into TextureView (or perhaps not, if the parent window would be SurfaceView, as long as
// onTop was false it would stay below the children)
- if (platformScreen()->windows().size() > 1)
- m_surfaceContainerType = SurfaceContainer::TextureView;
- else
+ if (platformScreen()->windows().size() <= 1)
m_surfaceContainerType = SurfaceContainer::SurfaceView;
}
@@ -114,6 +116,8 @@ void QAndroidPlatformWindow::setGeometry(const QRect &rect)
void QAndroidPlatformWindow::setVisible(bool visible)
{
+ if (isEmbeddingContainer())
+ return;
m_nativeQtWindow.callMethod<void>("setVisible", visible);
if (visible) {
@@ -164,20 +168,22 @@ Qt::WindowFlags QAndroidPlatformWindow::windowFlags() const
void QAndroidPlatformWindow::setParent(const QPlatformWindow *window)
{
using namespace QtJniTypes;
+
if (window) {
+ auto androidWindow = static_cast<const QAndroidPlatformWindow*>(window);
+ if (androidWindow->isEmbeddingContainer())
+ return;
// If we were a top level window, remove from screen
if (!m_nativeParentQtWindow.isValid())
platformScreen()->removeWindow(this);
- const QAndroidPlatformWindow *androidWindow =
- static_cast<const QAndroidPlatformWindow*>(window);
const QtWindow parentWindow = androidWindow->nativeWindow();
// If this was a child window of another window, the java method takes care of that
m_nativeQtWindow.callMethod<void, QtWindow>("setParent", parentWindow.object());
m_nativeParentQtWindow = parentWindow;
- } else {
- m_nativeQtWindow.callMethod<void, QtWindow>("setParent", nullptr);
+ } else if (QtAndroid::isQtApplication()) {
platformScreen()->addWindow(this);
+ m_nativeQtWindow.callMethod<void, QtWindow>("setParent", nullptr);
m_nativeParentQtWindow = QJniObject();
}
}