summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wasm/qwasmwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmwindow.cpp')
-rw-r--r--src/plugins/platforms/wasm/qwasmwindow.cpp36
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