diff --git a/src/plugins/platforms/wasm/qwasmcompositor.cpp b/src/plugins/platforms/wasm/qwasmcompositor.cpp index a530cd1f7ae..ebcec4fa360 100644 --- a/src/plugins/platforms/wasm/qwasmcompositor.cpp +++ b/src/plugins/platforms/wasm/qwasmcompositor.cpp @@ -65,10 +65,14 @@ QWasmCompositor::~QWasmCompositor() if (m_requestAnimationFrameId != -1) emscripten_cancel_animation_frame(m_requestAnimationFrameId); - deregisterEventHandlers(); destroy(); } +void QWasmCompositor::onScreenDeleting() +{ + deregisterEventHandlers(); +} + void QWasmCompositor::deregisterEventHandlers() { QByteArray screenElementSelector = screen()->eventTargetId().toUtf8(); diff --git a/src/plugins/platforms/wasm/qwasmcompositor.h b/src/plugins/platforms/wasm/qwasmcompositor.h index 2c0ab6ae260..4d7773c4ecd 100644 --- a/src/plugins/platforms/wasm/qwasmcompositor.h +++ b/src/plugins/platforms/wasm/qwasmcompositor.h @@ -50,6 +50,8 @@ public: void raise(QWasmWindow *window); void lower(QWasmWindow *window); + void onScreenDeleting(); + QWindow *windowAt(QPoint globalPoint, int padding = 0) const; QWindow *keyWindow() const; diff --git a/src/plugins/platforms/wasm/qwasmscreen.cpp b/src/plugins/platforms/wasm/qwasmscreen.cpp index e50afe652fa..3300449ae46 100644 --- a/src/plugins/platforms/wasm/qwasmscreen.cpp +++ b/src/plugins/platforms/wasm/qwasmscreen.cpp @@ -92,8 +92,6 @@ QWasmScreen::QWasmScreen(const emscripten::val &containerOrCanvas) QWasmScreen::~QWasmScreen() { - Q_ASSERT(!m_compositor); // deleteScreen should have been called to remove this screen - emscripten::val::module_property("specialHTMLTargets") .set(eventTargetId().toStdString(), emscripten::val::undefined()); @@ -103,9 +101,7 @@ QWasmScreen::~QWasmScreen() void QWasmScreen::deleteScreen() { - // Delete the compositor before removing the screen, since its destruction routine needs to use - // the fully operational screen. - m_compositor.reset(); + m_compositor->onScreenDeleting(); // Deletes |this|! QWindowSystemInterface::handleScreenRemoved(this); }