diff options
Diffstat (limited to 'src/plugins/platforms/wasm')
-rw-r--r-- | src/plugins/platforms/wasm/qwasmcompositor.cpp | 6 | ||||
-rw-r--r-- | src/plugins/platforms/wasm/qwasmcursor.cpp | 16 | ||||
-rw-r--r-- | src/plugins/platforms/wasm/qwasmeventtranslator.cpp | 3 | ||||
-rw-r--r-- | src/plugins/platforms/wasm/qwasmeventtranslator.h | 7 | ||||
-rw-r--r-- | src/plugins/platforms/wasm/qwasmscreen.cpp | 1 | ||||
-rw-r--r-- | src/plugins/platforms/wasm/qwasmwindow.cpp | 14 | ||||
-rw-r--r-- | src/plugins/platforms/wasm/qwasmwindow.h | 1 |
7 files changed, 33 insertions, 15 deletions
diff --git a/src/plugins/platforms/wasm/qwasmcompositor.cpp b/src/plugins/platforms/wasm/qwasmcompositor.cpp index 0ece812972..103f3201b2 100644 --- a/src/plugins/platforms/wasm/qwasmcompositor.cpp +++ b/src/plugins/platforms/wasm/qwasmcompositor.cpp @@ -126,7 +126,11 @@ void QWasmCompositor::removeWindow(QWasmWindow *window) m_windowStack.removeAll(window); m_compositedWindows.remove(window); - notifyTopWindowChanged(window); + if (!m_windowStack.isEmpty() && !QGuiApplication::focusWindow()) { + auto lastWindow = m_windowStack.last(); + lastWindow->requestActivateWindow(); + notifyTopWindowChanged(lastWindow); + } } void QWasmCompositor::setVisible(QWasmWindow *window, bool visible) diff --git a/src/plugins/platforms/wasm/qwasmcursor.cpp b/src/plugins/platforms/wasm/qwasmcursor.cpp index 61204517ce..4b4bb61071 100644 --- a/src/plugins/platforms/wasm/qwasmcursor.cpp +++ b/src/plugins/platforms/wasm/qwasmcursor.cpp @@ -41,20 +41,24 @@ using namespace emscripten; void QWasmCursor::changeCursor(QCursor *windowCursor, QWindow *window) { - if (!windowCursor || !window) + if (!window) return; QScreen *screen = window->screen(); if (!screen) return; - // Bitmap and custom cursors are not implemented (will fall back to "auto") - if (windowCursor->shape() == Qt::BitmapCursor || windowCursor->shape() >= Qt::CustomCursor) - qWarning() << "QWasmCursor: bitmap and custom cursors are not supported"; + QByteArray htmlCursorName; + if (windowCursor) { - QByteArray htmlCursorName = cursorShapeToHtml(windowCursor->shape()); + // Bitmap and custom cursors are not implemented (will fall back to "auto") + if (windowCursor->shape() == Qt::BitmapCursor || windowCursor->shape() >= Qt::CustomCursor) + qWarning() << "QWasmCursor: bitmap and custom cursors are not supported"; + + htmlCursorName = cursorShapeToHtml(windowCursor->shape()); + } if (htmlCursorName.isEmpty()) - htmlCursorName = "auto"; + htmlCursorName = "default"; // Set cursor on the canvas val canvas = QWasmScreen::get(screen)->canvas(); diff --git a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp index a3e61adf64..a76b02ce77 100644 --- a/src/plugins/platforms/wasm/qwasmeventtranslator.cpp +++ b/src/plugins/platforms/wasm/qwasmeventtranslator.cpp @@ -450,9 +450,6 @@ void QWasmEventTranslator::processMouse(int eventType, const EmscriptenMouseEven if (resizeMode == QWasmWindow::ResizeNone) window2 = screen()->compositor()->windowAt(globalPoint, 5); - if (lastWindow && lastWindow->cursor() != Qt::ArrowCursor) { - lastWindow->setCursor(Qt::ArrowCursor); - } if (window2 == nullptr) { window2 = lastWindow; } else { diff --git a/src/plugins/platforms/wasm/qwasmeventtranslator.h b/src/plugins/platforms/wasm/qwasmeventtranslator.h index 93a074a51e..c91fee02f3 100644 --- a/src/plugins/platforms/wasm/qwasmeventtranslator.h +++ b/src/plugins/platforms/wasm/qwasmeventtranslator.h @@ -42,6 +42,7 @@ #endif #include <QHash> #include <QCursor> +#include <QPointer> QT_BEGIN_NAMESPACE @@ -86,9 +87,9 @@ private: QMap <int, QPointF> pressedTouchIds; private: - QWindow *draggedWindow; - QWindow *pressedWindow; - QWindow *lastWindow; + QPointer<QWindow> draggedWindow; + QPointer<QWindow> pressedWindow; + QPointer<QWindow> lastWindow; Qt::MouseButtons pressedButtons; QWasmWindow::ResizeMode resizeMode; diff --git a/src/plugins/platforms/wasm/qwasmscreen.cpp b/src/plugins/platforms/wasm/qwasmscreen.cpp index eba7bbecf1..099ab54643 100644 --- a/src/plugins/platforms/wasm/qwasmscreen.cpp +++ b/src/plugins/platforms/wasm/qwasmscreen.cpp @@ -57,7 +57,6 @@ QWasmScreen::QWasmScreen(const emscripten::val &canvas) { m_compositor = new QWasmCompositor(this); m_eventTranslator = new QWasmEventTranslator(this); - installCanvasResizeObserver(); updateQScreenAndCanvasRenderSize(); m_canvas.call<void>("focus"); } diff --git a/src/plugins/platforms/wasm/qwasmwindow.cpp b/src/plugins/platforms/wasm/qwasmwindow.cpp index f95335f891..7c724111e8 100644 --- a/src/plugins/platforms/wasm/qwasmwindow.cpp +++ b/src/plugins/platforms/wasm/qwasmwindow.cpp @@ -171,7 +171,12 @@ WId QWasmWindow::winId() const void QWasmWindow::propagateSizeHints() { -// get rid of base class warning + QRect rect = windowGeometry(); + if (rect.size().width() < windowMinimumSize().width() + && rect.size().height() < windowMinimumSize().height()) { + rect.setSize(windowMinimumSize()); + setGeometry(rect); + } } void QWasmWindow::injectMousePressed(const QPoint &local, const QPoint &global, @@ -408,4 +413,11 @@ bool QWasmWindow::hasTitleBar() const && !window()->flags().testFlag(Qt::Popup); } +void QWasmWindow::requestActivateWindow() +{ + if (window()->isTopLevel()) + raise(); + QPlatformWindow::requestActivateWindow(); +} + QT_END_NAMESPACE diff --git a/src/plugins/platforms/wasm/qwasmwindow.h b/src/plugins/platforms/wasm/qwasmwindow.h index a098172649..2a3eaed8eb 100644 --- a/src/plugins/platforms/wasm/qwasmwindow.h +++ b/src/plugins/platforms/wasm/qwasmwindow.h @@ -74,6 +74,7 @@ public: QRect normalGeometry() const override; qreal devicePixelRatio() const override; void requestUpdate() override; + void requestActivateWindow() override; QWasmScreen *platformScreen() const; void setBackingStore(QWasmBackingStore *store) { m_backingStore = store; } |