summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wasm/qwasmintegration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmintegration.cpp')
-rw-r--r--src/plugins/platforms/wasm/qwasmintegration.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/plugins/platforms/wasm/qwasmintegration.cpp b/src/plugins/platforms/wasm/qwasmintegration.cpp
index 031128563e..01fb9f1cd0 100644
--- a/src/plugins/platforms/wasm/qwasmintegration.cpp
+++ b/src/plugins/platforms/wasm/qwasmintegration.cpp
@@ -106,6 +106,22 @@ QWasmIntegration::QWasmIntegration()
{
s_instance = this;
+ touchPoints = emscripten::val::global("navigator")["maxTouchPoints"].as<int>();
+ // The Platform Detect: expand coverage as needed
+ platform = GenericPlatform;
+ emscripten::val rawPlatform = emscripten::val::global("navigator")["platform"];
+
+ if (rawPlatform.call<bool>("includes", emscripten::val("Mac")))
+ platform = MacOSPlatform;
+ if (rawPlatform.call<bool>("includes", emscripten::val("Win32")))
+ platform = WindowsPlatform;
+ if (rawPlatform.call<bool>("includes", emscripten::val("Linux"))) {
+ platform = LinuxPlatform;
+ emscripten::val uAgent = emscripten::val::global("navigator")["userAgent"];
+ if (uAgent.call<bool>("includes", emscripten::val("Android")))
+ platform = AndroidPlatform;
+ }
+
// We expect that qtloader.js has populated Module.qtCanvasElements with one or more canvases.
emscripten::val qtCanvaseElements = val::module_property("qtCanvasElements");
emscripten::val canvas = val::module_property("canvas"); // TODO: remove for Qt 6.0
@@ -156,6 +172,8 @@ QWasmIntegration::~QWasmIntegration()
delete m_fontDb;
delete m_desktopServices;
+ if (m_platformInputContext)
+ delete m_platformInputContext;
for (const auto &canvasAndScreen : m_screens)
QWindowSystemInterface::handleScreenRemoved(canvasAndScreen.second);
@@ -210,9 +228,14 @@ QPlatformOpenGLContext *QWasmIntegration::createPlatformOpenGLContext(QOpenGLCon
void QWasmIntegration::initialize()
{
+ if (touchPoints < 1) // only touchscreen need inputcontexts
+ return;
+
QString icStr = QPlatformInputContextFactory::requested();
if (!icStr.isNull())
m_inputContext.reset(QPlatformInputContextFactory::create(icStr));
+ else
+ m_inputContext.reset(new QWasmInputContext());
}
QPlatformInputContext *QWasmIntegration::inputContext() const