summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2024-07-04 11:59:38 +0200
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2024-08-08 01:48:35 +0200
commit7150c79d0ee10d6aca330e6a0862b0fbfec071fc (patch)
treeefc427638c53960f25b703092144a26a2216709e /src
parenta041cd35214e57a189aaa1f1f77199ff42303f83 (diff)
Android: Initialize window in QPlatformWindow::initialize() override
During the QAndroidPlatformWindow constructor we can't safely call virtual functions of QPlatformWindow and expect them to resolve to subclasses, e.g. QAndroidPlatformForeignWindow. Importantly, this means we can't check isForeignWindow() during construction. QPlatformWindow has a dedicated initialization function for this use-case, so use that instead. The existing order of between QAndroidPlatformForeignWindow and QAndroidPlatformWindow has been kept as is. Pick-to: 6.8 Change-Id: I2a08326fae6a3b079cd153c50a13794310ac3d74 Reviewed-by: Tinja Paavoseppä <tinja.paavoseppa@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/platforms/android/qandroidplatformforeignwindow.cpp11
-rw-r--r--src/plugins/platforms/android/qandroidplatformforeignwindow.h1
-rw-r--r--src/plugins/platforms/android/qandroidplatformwindow.cpp7
-rw-r--r--src/plugins/platforms/android/qandroidplatformwindow.h2
4 files changed, 19 insertions, 2 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp b/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp
index e84a481a2b1..af09c34d0ba 100644
--- a/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp
+++ b/src/plugins/platforms/android/qandroidplatformforeignwindow.cpp
@@ -11,9 +11,16 @@
QT_BEGIN_NAMESPACE
QAndroidPlatformForeignWindow::QAndroidPlatformForeignWindow(QWindow *window, WId nativeHandle)
- : QAndroidPlatformWindow(window), m_view(nullptr), m_nativeViewInserted(false)
+ : QAndroidPlatformWindow(window)
+ , m_view(reinterpret_cast<jobject>(nativeHandle))
+ , m_nativeViewInserted(false)
{
- m_view = reinterpret_cast<jobject>(nativeHandle);
+}
+
+void QAndroidPlatformForeignWindow::initialize()
+{
+ QAndroidPlatformWindow::initialize();
+
if (isEmbeddingContainer()) {
m_nativeViewId = m_view.callMethod<jint>("getId");
return;
diff --git a/src/plugins/platforms/android/qandroidplatformforeignwindow.h b/src/plugins/platforms/android/qandroidplatformforeignwindow.h
index 503524ccedf..6238731a4a1 100644
--- a/src/plugins/platforms/android/qandroidplatformforeignwindow.h
+++ b/src/plugins/platforms/android/qandroidplatformforeignwindow.h
@@ -16,6 +16,7 @@ class QAndroidPlatformForeignWindow : public QAndroidPlatformWindow
{
public:
explicit QAndroidPlatformForeignWindow(QWindow *window, WId nativeHandle);
+ void initialize() override;
~QAndroidPlatformForeignWindow();
void setGeometry(const QRect &rect) override;
void setVisible(bool visible) override;
diff --git a/src/plugins/platforms/android/qandroidplatformwindow.cpp b/src/plugins/platforms/android/qandroidplatformwindow.cpp
index 2482160573e..f5bb5117c30 100644
--- a/src/plugins/platforms/android/qandroidplatformwindow.cpp
+++ b/src/plugins/platforms/android/qandroidplatformwindow.cpp
@@ -25,6 +25,13 @@ QAndroidPlatformWindow::QAndroidPlatformWindow(QWindow *window)
m_surfaceContainerType(SurfaceContainer::TextureView), m_nativeParentQtWindow(nullptr),
m_androidSurfaceObject(nullptr)
{
+ // Please add any initialization in the function below
+}
+
+void QAndroidPlatformWindow::initialize()
+{
+ QWindow *window = QPlatformWindow::window();
+
m_windowFlags = Qt::Widget;
m_windowState = Qt::WindowNoState;
// the surfaceType is overwritten in QAndroidPlatformOpenGLWindow ctor so let's save
diff --git a/src/plugins/platforms/android/qandroidplatformwindow.h b/src/plugins/platforms/android/qandroidplatformwindow.h
index 3f1e8ac992c..3c94dec3ea2 100644
--- a/src/plugins/platforms/android/qandroidplatformwindow.h
+++ b/src/plugins/platforms/android/qandroidplatformwindow.h
@@ -32,6 +32,8 @@ public:
};
explicit QAndroidPlatformWindow(QWindow *window);
+ void initialize() override;
+
~QAndroidPlatformWindow();
void lower() override;
void raise() override;