From c613c5ce22d65892a9e344ee415aa5d7abe9afaa Mon Sep 17 00:00:00 2001 From: Mikolaj Boc Date: Wed, 28 Dec 2022 15:46:08 +0100 Subject: [PATCH] Return to the two-step destruction in compositor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The two-step destruction we used to employ is needed as destroying a screen which contains a window crashes. Change-Id: I722828be5408a7f079d66e845eeee34ed19cbf34 Reviewed-by: Lorn Potter (cherry picked from commit 644036b597137306959d875127cc819612ee9217) Reviewed-by: Morten Johan Sørvig Reviewed-by: Qt Cherry-pick Bot --- src/plugins/platforms/wasm/qwasmcompositor.cpp | 6 +++++- src/plugins/platforms/wasm/qwasmcompositor.h | 2 ++ src/plugins/platforms/wasm/qwasmscreen.cpp | 6 +----- 3 files changed, 8 insertions(+), 6 deletions(-) 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); }