diff options
| author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2024-07-04 11:59:38 +0200 |
|---|---|---|
| committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2024-08-08 01:48:35 +0200 |
| commit | 7150c79d0ee10d6aca330e6a0862b0fbfec071fc (patch) | |
| tree | efc427638c53960f25b703092144a26a2216709e /src | |
| parent | a041cd35214e57a189aaa1f1f77199ff42303f83 (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')
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; |
