summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/platforms/wasm/qwasmcompositor.cpp16
-rw-r--r--src/plugins/platforms/wasm/qwasmcompositor.h3
-rw-r--r--src/plugins/platforms/wasm/qwasmwindow.cpp7
3 files changed, 15 insertions, 11 deletions
diff --git a/src/plugins/platforms/wasm/qwasmcompositor.cpp b/src/plugins/platforms/wasm/qwasmcompositor.cpp
index ad8a4508cee..b68f380fe7b 100644
--- a/src/plugins/platforms/wasm/qwasmcompositor.cpp
+++ b/src/plugins/platforms/wasm/qwasmcompositor.cpp
@@ -149,11 +149,6 @@ void QWasmCompositor::initEventHandlers()
emscripten::val(quintptr(reinterpret_cast<void *>(screen()))));
}
-void QWasmCompositor::setEnabled(bool enabled)
-{
- m_isEnabled = enabled;
-}
-
void QWasmCompositor::startResize(Qt::Edges edges)
{
m_windowManipulation.startResize(edges);
@@ -163,6 +158,8 @@ void QWasmCompositor::addWindow(QWasmWindow *window)
{
m_windowStack.pushWindow(window);
m_windowStack.topWindow()->requestActivateWindow();
+
+ updateEnabledState();
}
void QWasmCompositor::removeWindow(QWasmWindow *window)
@@ -171,6 +168,15 @@ void QWasmCompositor::removeWindow(QWasmWindow *window)
m_windowStack.removeWindow(window);
if (m_windowStack.topWindow())
m_windowStack.topWindow()->requestActivateWindow();
+
+ updateEnabledState();
+}
+
+void QWasmCompositor::updateEnabledState()
+{
+ m_isEnabled = std::any_of(m_windowStack.begin(), m_windowStack.end(), [](QWasmWindow *window) {
+ return !window->context2d().isUndefined();
+ });
}
void QWasmCompositor::raise(QWasmWindow *window)
diff --git a/src/plugins/platforms/wasm/qwasmcompositor.h b/src/plugins/platforms/wasm/qwasmcompositor.h
index 9ea07617711..c1fc62d3809 100644
--- a/src/plugins/platforms/wasm/qwasmcompositor.h
+++ b/src/plugins/platforms/wasm/qwasmcompositor.h
@@ -43,7 +43,6 @@ public:
QPalette palette;
};
- void setEnabled(bool enabled);
void startResize(Qt::Edges edges);
void addWindow(QWasmWindow *window);
@@ -146,6 +145,8 @@ private:
void enterWindow(QWindow *window, const QPoint &localPoint, const QPoint &globalPoint);
void leaveWindow(QWindow *window);
+ void updateEnabledState();
+
WindowManipulation m_windowManipulation;
QWasmWindowStack m_windowStack;
diff --git a/src/plugins/platforms/wasm/qwasmwindow.cpp b/src/plugins/platforms/wasm/qwasmwindow.cpp
index 182ae38fea4..4f9a9272778 100644
--- a/src/plugins/platforms/wasm/qwasmwindow.cpp
+++ b/src/plugins/platforms/wasm/qwasmwindow.cpp
@@ -232,8 +232,8 @@ QWasmWindow::QWasmWindow(QWindow *w, QWasmCompositor *compositor, QWasmBackingSt
compositor->screen()->element().call<void>("appendChild", m_qtWindow);
- m_needsCompositor = w->surfaceType() != QSurface::OpenGLSurface;
- if (m_needsCompositor)
+ const bool rendersTo2dContext = w->surfaceType() != QSurface::OpenGLSurface;
+ if (rendersTo2dContext)
m_context2d = m_canvas.call<emscripten::val>("getContext", emscripten::val("2d"));
static int serialNo = 0;
m_winId = ++serialNo;
@@ -241,9 +241,6 @@ QWasmWindow::QWasmWindow(QWindow *w, QWasmCompositor *compositor, QWasmBackingSt
emscripten::val::module_property("specialHTMLTargets").set(canvasSelector(), m_canvas);
m_compositor->addWindow(this);
-
- // Pure OpenGL windows draw directly using egl, disable the compositor.
- m_compositor->setEnabled(w->surfaceType() != QSurface::OpenGLSurface);
}
QWasmWindow::~QWasmWindow()