From ddd4084789562d7be7ee60dd250b4cada61fb78b Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Fri, 14 Aug 2020 20:03:17 +0400 Subject: [PATCH] Backport setWindowGeometry method from Qt 5.13 --- qtwayland_5_12_8/0007-setwindowgeometry.patch | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 qtwayland_5_12_8/0007-setwindowgeometry.patch diff --git a/qtwayland_5_12_8/0007-setwindowgeometry.patch b/qtwayland_5_12_8/0007-setwindowgeometry.patch new file mode 100644 index 0000000..465907a --- /dev/null +++ b/qtwayland_5_12_8/0007-setwindowgeometry.patch @@ -0,0 +1,103 @@ +diff --git a/src/client/qwaylandshellsurface_p.h b/src/client/qwaylandshellsurface_p.h +index c7d02d16..9632e094 100644 +--- a/src/client/qwaylandshellsurface_p.h ++++ b/src/client/qwaylandshellsurface_p.h +@@ -100,6 +100,8 @@ public: + + virtual void propagateSizeHints() {} + ++ virtual void setWindowGeometry(const QRect &rect) { Q_UNUSED(rect); } ++ + private: + QWaylandWindow *m_window = nullptr; + friend class QWaylandWindow; +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index 39cc5847..fc22010e 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -357,6 +357,9 @@ void QWaylandWindow::setGeometry(const QRect &rect) + QRect exposeGeometry(QPoint(), geometry().size()); + if (isExposed() && !mInResizeFromApplyConfigure && exposeGeometry != mLastExposeGeometry) + sendExposeEvent(exposeGeometry); ++ ++ if (mShellSurface) ++ mShellSurface->setWindowGeometry(QRect(QPoint(0, 0), window()->frameGeometry().size())); + } + + void QWaylandWindow::resizeFromApplyConfigure(const QSize &sizeWithMargins, const QPoint &offset) +diff --git a/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp b/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp +index 9db6d435..822f2a4f 100644 +--- a/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp ++++ b/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6.cpp +@@ -94,9 +94,6 @@ void QWaylandXdgSurfaceV6::Toplevel::applyConfigure() + m_xdgSurface->m_window->resizeFromApplyConfigure(m_pending.size); + } + +- QSize windowGeometrySize = m_xdgSurface->m_window->window()->frameGeometry().size(); +- m_xdgSurface->set_window_geometry(0, 0, windowGeometrySize.width(), windowGeometrySize.height()); +- + m_xdgSurface->setSizeHints(); + + m_applied = m_pending; +@@ -321,6 +318,11 @@ void QWaylandXdgSurfaceV6::propagateSizeHints() + m_window->commit(); + } + ++void QWaylandXdgSurfaceV6::setWindowGeometry(const QRect &rect) ++{ ++ set_window_geometry(rect.x(), rect.y(), rect.width(), rect.height()); ++} ++ + void QWaylandXdgSurfaceV6::setSizeHints() + { + if (m_toplevel && m_window) { +diff --git a/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h b/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h +index 3e473e95..2c6ce0be 100644 +--- a/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h ++++ b/src/plugins/shellintegration/xdg-shell-v6/qwaylandxdgshellv6_p.h +@@ -91,6 +91,7 @@ public: + void applyConfigure() override; + bool wantsDecorations() const override; + void propagateSizeHints() override; ++ void setWindowGeometry(const QRect &rect) override; + + void setSizeHints(); + +diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +index c446430d..14c835f8 100644 +--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp ++++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +@@ -104,9 +104,6 @@ void QWaylandXdgSurface::Toplevel::applyConfigure() + m_xdgSurface->m_window->resizeFromApplyConfigure(m_pending.size); + } + +- QSize windowGeometrySize = m_xdgSurface->m_window->window()->frameGeometry().size(); +- m_xdgSurface->set_window_geometry(0, 0, windowGeometrySize.width(), windowGeometrySize.height()); +- + m_xdgSurface->setSizeHints(); + + m_applied = m_pending; +@@ -355,6 +352,11 @@ void QWaylandXdgSurface::propagateSizeHints() + m_window->commit(); + } + ++void QWaylandXdgSurface::setWindowGeometry(const QRect &rect) ++{ ++ set_window_geometry(rect.x(), rect.y(), rect.width(), rect.height()); ++} ++ + void QWaylandXdgSurface::setSizeHints() + { + if (m_toplevel && m_window) { +diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h +index aec70cd1..2edf8726 100644 +--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h ++++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h +@@ -95,6 +95,7 @@ public: + void applyConfigure() override; + bool wantsDecorations() const override; + void propagateSizeHints() override; ++ void setWindowGeometry(const QRect &rect) override; + + void setSizeHints(); +