diff options
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmwindow.cpp')
-rw-r--r-- | src/plugins/platforms/wasm/qwasmwindow.cpp | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/src/plugins/platforms/wasm/qwasmwindow.cpp b/src/plugins/platforms/wasm/qwasmwindow.cpp index 4206ede1bb..ce4a2fa631 100644 --- a/src/plugins/platforms/wasm/qwasmwindow.cpp +++ b/src/plugins/platforms/wasm/qwasmwindow.cpp @@ -84,11 +84,18 @@ void QWasmWindow::setGeometry(const QRect &rect) if (r.y() < yMin) r.moveTop(yMin); } - if (!m_windowState.testFlag(Qt::WindowFullScreen) && !m_windowState.testFlag(Qt::WindowMaximized)) + bool shouldInvalidate = true; + if (!m_windowState.testFlag(Qt::WindowFullScreen) + && !m_windowState.testFlag(Qt::WindowMaximized)) { + shouldInvalidate = m_normalGeometry.size() != r.size(); m_normalGeometry = r; + } QPlatformWindow::setGeometry(r); QWindowSystemInterface::handleGeometryChange(window(), r); - invalidate(); + if (shouldInvalidate) + invalidate(); + else + m_compositor->requestUpdate(); } void QWasmWindow::setVisible(bool visible) @@ -120,14 +127,16 @@ QMargins QWasmWindow::frameMargins() const void QWasmWindow::raise() { m_compositor->raise(this); - QWindowSystemInterface::handleExposeEvent(window(), QRect(QPoint(0, 0), geometry().size())); + if (window()->isVisible()) + QWindowSystemInterface::handleExposeEvent(window(), QRect(QPoint(0, 0), geometry().size())); invalidate(); } void QWasmWindow::lower() { m_compositor->lower(this); - QWindowSystemInterface::handleExposeEvent(window(), QRect(QPoint(0, 0), geometry().size())); + if (window()->isVisible()) + QWindowSystemInterface::handleExposeEvent(window(), QRect(QPoint(0, 0), geometry().size())); invalidate(); } @@ -229,15 +238,17 @@ QRegion QWasmWindow::resizeRegion() const bool QWasmWindow::isPointOnTitle(QPoint point) const { - bool ok = titleGeometry().contains(point); - return ok; + return hasTitleBar() ? titleGeometry().contains(point) : false; } bool QWasmWindow::isPointOnResizeRegion(QPoint point) const { - if (window()->flags().testFlag(Qt::Popup)) + // Certain windows, like undocked dock widgets, are both popups and dialogs. Those should be + // resizable. + if (windowIsPopupType(window()->flags())) return false; - return resizeRegion().contains(point); + return (window()->maximumSize().isEmpty() || window()->minimumSize() != window()->maximumSize()) + && resizeRegion().contains(point); } QWasmCompositor::ResizeMode QWasmWindow::resizeModeAtPoint(QPoint point) const @@ -433,4 +444,13 @@ void QWasmWindow::requestActivateWindow() QPlatformWindow::requestActivateWindow(); } +bool QWasmWindow::setMouseGrabEnabled(bool grab) +{ + if (grab) + m_compositor->setCapture(this); + else + m_compositor->releaseCapture(); + return true; +} + QT_END_NAMESPACE |