From 11f12521bcd9c76f0ff5c60fb8785aba33ec7ca7 Mon Sep 17 00:00:00 2001 From: Mikolaj Boc Date: Tue, 23 Aug 2022 14:24:36 +0200 Subject: Resolve window focusing problems on WASM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Moved the modal window resolution to QWasmWindow::requestActivateWindow so that multiple async activation events are not issued in unpredictable patterns. - Request activation on added windows and on stack top in case of window removal Pick-to: 6.4 Change-Id: I6f02cf1b7e83abb7961caf311ffc83e91c8bf810 Reviewed-by: Morten Johan Sørvig --- src/plugins/platforms/wasm/qwasmcompositor.cpp | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) (limited to 'src/plugins/platforms/wasm/qwasmcompositor.cpp') diff --git a/src/plugins/platforms/wasm/qwasmcompositor.cpp b/src/plugins/platforms/wasm/qwasmcompositor.cpp index fff448ddef8..270f8e65e70 100644 --- a/src/plugins/platforms/wasm/qwasmcompositor.cpp +++ b/src/plugins/platforms/wasm/qwasmcompositor.cpp @@ -53,7 +53,7 @@ EMSCRIPTEN_BINDINGS(qtMouseModule) { QWasmCompositor::QWasmCompositor(QWasmScreen *screen) : QObject(screen), m_windowManipulation(screen), - m_windowStack(std::bind(&QWasmCompositor::onTopWindowChanged, this, std::placeholders::_1)), + m_windowStack(std::bind(&QWasmCompositor::onTopWindowChanged, this)), m_blitter(new QOpenGLTextureBlitter), m_eventTranslator(std::make_unique()) { @@ -174,6 +174,7 @@ void QWasmCompositor::addWindow(QWasmWindow *window) { m_windowVisibility.insert(window, false); m_windowStack.pushWindow(window); + m_windowStack.topWindow()->requestActivateWindow(); } void QWasmCompositor::removeWindow(QWasmWindow *window) @@ -181,6 +182,8 @@ void QWasmCompositor::removeWindow(QWasmWindow *window) m_windowVisibility.remove(window); m_requestUpdateWindows.remove(window); m_windowStack.removeWindow(window); + if (m_windowStack.topWindow()) + m_windowStack.topWindow()->requestActivateWindow(); } void QWasmCompositor::setVisible(QWasmWindow *window, bool visible) @@ -755,21 +758,8 @@ void QWasmCompositor::WindowManipulation::resizeWindow(const QPoint& amount) )); } -void QWasmCompositor::onTopWindowChanged(QWasmWindow *window) +void QWasmCompositor::onTopWindowChanged() { - if (!QGuiApplication::focusWindow()) - window->requestActivateWindow(); - - QWindow *modalWindow; - const bool isTargetWindowBlocked = - QGuiApplicationPrivate::instance()->isWindowBlocked(window->window(), &modalWindow); - - if (isTargetWindowBlocked) { - modalWindow->requestActivate(); - raise(asWasmWindow(modalWindow)); - return; - } - requestUpdate(); } -- cgit v1.2.3