summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@qt.io>2018-10-30 00:50:22 +0100
committerOswald Buddenhagen <oswald.buddenhagen@qt.io>2018-10-30 00:50:22 +0100
commit52876056ff3dcda97f93932bc8c6e1c0fbce9d5e (patch)
tree5bdd3cc28573a90e192b24564d3ed7cc4792f365 /src/plugins
parent9ebe63181ba3504569c75b25862172353b6cfaa8 (diff)
parent16a98829a664403f2fb8962884701f5d4d31cacd (diff)
Merge 5.12 into 5.12.0
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp19
-rw-r--r--src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h2
-rw-r--r--src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp19
-rw-r--r--src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h2
4 files changed, 34 insertions, 8 deletions
diff --git a/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp b/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp
index 447e8fb6a..3d3af6929 100644
--- a/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp
+++ b/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp
@@ -258,9 +258,14 @@ void QWaylandXdgSurfaceV6::setAppId(const QString &appId)
m_toplevel->set_app_id(appId);
}
+bool QWaylandXdgSurfaceV6::isExposed() const
+{
+ return m_configured || m_pendingConfigureSerial;
+}
+
bool QWaylandXdgSurfaceV6::handleExpose(const QRegion &region)
{
- if (!m_configured && !region.isEmpty()) {
+ if (!isExposed() && !region.isEmpty()) {
m_exposeRegion = region;
return true;
}
@@ -333,10 +338,18 @@ void QWaylandXdgSurfaceV6::setPopup(QWaylandWindow *parent, QWaylandInputDevice
void QWaylandXdgSurfaceV6::zxdg_surface_v6_configure(uint32_t serial)
{
- m_window->applyConfigureWhenPossible();
m_pendingConfigureSerial = serial;
+ if (!m_configured) {
+ // We have to do the initial applyConfigure() immediately, since that is the expose.
+ applyConfigure();
+ } else {
+ // Later configures are probably resizes, so we have to queue them up for a time when we
+ // are not painting to the window.
+ m_window->applyConfigureWhenPossible();
+ }
+
if (!m_exposeRegion.isEmpty()) {
- QWindowSystemInterface::handleExposeEvent(m_window->window(), m_exposeRegion);
+ m_window->handleExpose(m_exposeRegion);
m_exposeRegion = QRegion();
}
}
diff --git a/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h b/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h
index 38b711f88..874dba014 100644
--- a/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h
+++ b/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h
@@ -85,7 +85,7 @@ public:
void setTitle(const QString &title) override;
void setAppId(const QString &appId) override;
- bool isExposed() const override { return m_configured; }
+ bool isExposed() const override;
bool handleExpose(const QRegion &) override;
bool handlesActiveState() const { return m_toplevel; }
void applyConfigure() override;
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index 0756e4d02..c723192c8 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -292,9 +292,14 @@ void QWaylandXdgSurface::setWindowFlags(Qt::WindowFlags flags)
m_toplevel->requestWindowFlags(flags);
}
+bool QWaylandXdgSurface::isExposed() const
+{
+ return m_configured || m_pendingConfigureSerial;
+}
+
bool QWaylandXdgSurface::handleExpose(const QRegion &region)
{
- if (!m_configured && !region.isEmpty()) {
+ if (!isExposed() && !region.isEmpty()) {
m_exposeRegion = region;
return true;
}
@@ -367,10 +372,18 @@ void QWaylandXdgSurface::setPopup(QWaylandWindow *parent, QWaylandInputDevice *d
void QWaylandXdgSurface::xdg_surface_configure(uint32_t serial)
{
- m_window->applyConfigureWhenPossible();
m_pendingConfigureSerial = serial;
+ if (!m_configured) {
+ // We have to do the initial applyConfigure() immediately, since that is the expose.
+ applyConfigure();
+ } else {
+ // Later configures are probably resizes, so we have to queue them up for a time when we
+ // are not painting to the window.
+ m_window->applyConfigureWhenPossible();
+ }
+
if (!m_exposeRegion.isEmpty()) {
- QWindowSystemInterface::handleExposeEvent(m_window->window(), m_exposeRegion);
+ m_window->handleExpose(m_exposeRegion);
m_exposeRegion = QRegion();
}
}
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
index 45d7d4b0e..5e97a34b3 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
@@ -89,7 +89,7 @@ public:
void setAppId(const QString &appId) override;
void setWindowFlags(Qt::WindowFlags flags) override;
- bool isExposed() const override { return m_configured; }
+ bool isExposed() const override;
bool handleExpose(const QRegion &) override;
bool handlesActiveState() const { return m_toplevel; }
void applyConfigure() override;