1*4882a593SmuzhiyunFrom e7ed869dd126463b927f931e2649e7f57c342cf9 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Wed, 27 Feb 2019 16:52:15 +0800 4*4882a593SmuzhiyunSubject: [PATCH 05/17] qwaylandxdgshell: Support setting window position 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunSupport setting window position. 7*4882a593SmuzhiyunNote: 8*4882a593Smuzhiyun1/ (0,0) initial position(default position) would be ignored. 9*4882a593Smuzhiyun2/ The decoration would be ignored when the space not enough. 10*4882a593Smuzhiyun3/ QT would not aware of the wayland position. 11*4882a593Smuzhiyun 12*4882a593SmuzhiyunChange-Id: Ifb1433b3902d44c1b2e43036bc1805a6e00128fb 13*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 14*4882a593Smuzhiyun--- 15*4882a593Smuzhiyun .../xdg-shell/qwaylandxdgshell.cpp | 14 ++++++++++++++ 16*4882a593Smuzhiyun .../xdg-shell/qwaylandxdgshell_p.h | 2 ++ 17*4882a593Smuzhiyun 2 files changed, 16 insertions(+) 18*4882a593Smuzhiyun 19*4882a593Smuzhiyundiff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp 20*4882a593Smuzhiyunindex d7d0ddf..61f7e8c 100644 21*4882a593Smuzhiyun--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp 22*4882a593Smuzhiyun+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp 23*4882a593Smuzhiyun@@ -355,6 +355,20 @@ void QWaylandXdgSurface::propagateSizeHints() 24*4882a593Smuzhiyun void QWaylandXdgSurface::setWindowGeometry(const QRect &rect) 25*4882a593Smuzhiyun { 26*4882a593Smuzhiyun set_window_geometry(rect.x(), rect.y(), rect.width(), rect.height()); 27*4882a593Smuzhiyun+ 28*4882a593Smuzhiyun+ if (m_window) { 29*4882a593Smuzhiyun+ QPoint position = m_window->geometry().topLeft(); 30*4882a593Smuzhiyun+ 31*4882a593Smuzhiyun+ // Also avoid initial position (0,0). 32*4882a593Smuzhiyun+ // What if we do want to be at (0,0)? 33*4882a593Smuzhiyun+ if (m_position == position) 34*4882a593Smuzhiyun+ return; 35*4882a593Smuzhiyun+ m_position = position; 36*4882a593Smuzhiyun+ 37*4882a593Smuzhiyun+ // HACK: Set window position through .set_window_geometry(x, y, 0, 0) 38*4882a593Smuzhiyun+ set_window_geometry(position.x() > 0 ? position.x() : 0, 39*4882a593Smuzhiyun+ position.y() > 0 ? position.y() : 0, 0, 0); 40*4882a593Smuzhiyun+ } 41*4882a593Smuzhiyun } 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun void QWaylandXdgSurface::setSizeHints() 44*4882a593Smuzhiyundiff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h 45*4882a593Smuzhiyunindex 0c98be3..27d4a2e 100644 46*4882a593Smuzhiyun--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h 47*4882a593Smuzhiyun+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h 48*4882a593Smuzhiyun@@ -154,6 +154,8 @@ private: 49*4882a593Smuzhiyun QRegion m_exposeRegion; 50*4882a593Smuzhiyun uint m_pendingConfigureSerial = 0; 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun+ QPoint m_position; 53*4882a593Smuzhiyun+ 54*4882a593Smuzhiyun friend class QWaylandXdgShell; 55*4882a593Smuzhiyun }; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun-- 58*4882a593Smuzhiyun2.20.1 59*4882a593Smuzhiyun 60