1*4882a593SmuzhiyunFrom b3be9051f1ad37160d412cb215e7230257d0919a Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jeffy Chen <jeffy.chen@rock-chips.com> 3*4882a593SmuzhiyunDate: Wed, 3 Nov 2021 17:55:58 +0800 4*4882a593SmuzhiyunSubject: [PATCH 15/17] qwaylandwindow: Support lower() and raise() 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunSupport lower() and raise() through hacked subsurface::place_below() and 7*4882a593Smuzhiyunsubsurface::place_below(). 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> 10*4882a593Smuzhiyun--- 11*4882a593Smuzhiyun src/client/qwaylandsubsurface.cpp | 10 ++++++++++ 12*4882a593Smuzhiyun src/client/qwaylandsubsurface_p.h | 3 +++ 13*4882a593Smuzhiyun src/client/qwaylandwindow.cpp | 12 ++++++++++-- 14*4882a593Smuzhiyun 3 files changed, 23 insertions(+), 2 deletions(-) 15*4882a593Smuzhiyun 16*4882a593Smuzhiyundiff --git a/src/client/qwaylandsubsurface.cpp b/src/client/qwaylandsubsurface.cpp 17*4882a593Smuzhiyunindex 2ff966c..2fcb79e 100644 18*4882a593Smuzhiyun--- a/src/client/qwaylandsubsurface.cpp 19*4882a593Smuzhiyun+++ b/src/client/qwaylandsubsurface.cpp 20*4882a593Smuzhiyun@@ -62,6 +62,16 @@ QWaylandSubSurface::~QWaylandSubSurface() 21*4882a593Smuzhiyun destroy(); 22*4882a593Smuzhiyun } 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun+void QWaylandSubSurface::placeAbove(struct ::wl_surface *sibling) 25*4882a593Smuzhiyun+{ 26*4882a593Smuzhiyun+ QtWayland::wl_subsurface::place_above(sibling); 27*4882a593Smuzhiyun+} 28*4882a593Smuzhiyun+ 29*4882a593Smuzhiyun+void QWaylandSubSurface::placeBelow(struct ::wl_surface *sibling) 30*4882a593Smuzhiyun+{ 31*4882a593Smuzhiyun+ QtWayland::wl_subsurface::place_below(sibling); 32*4882a593Smuzhiyun+} 33*4882a593Smuzhiyun+ 34*4882a593Smuzhiyun void QWaylandSubSurface::setSync() 35*4882a593Smuzhiyun { 36*4882a593Smuzhiyun QMutexLocker l(&m_syncLock); 37*4882a593Smuzhiyundiff --git a/src/client/qwaylandsubsurface_p.h b/src/client/qwaylandsubsurface_p.h 38*4882a593Smuzhiyunindex 76da10b..1c38151 100644 39*4882a593Smuzhiyun--- a/src/client/qwaylandsubsurface_p.h 40*4882a593Smuzhiyun+++ b/src/client/qwaylandsubsurface_p.h 41*4882a593Smuzhiyun@@ -73,6 +73,9 @@ public: 42*4882a593Smuzhiyun QWaylandWindow *window() const { return m_window; } 43*4882a593Smuzhiyun QWaylandWindow *parent() const { return m_parent; } 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun+ void placeAbove(struct ::wl_surface *sibling); 46*4882a593Smuzhiyun+ void placeBelow(struct ::wl_surface *sibling); 47*4882a593Smuzhiyun+ 48*4882a593Smuzhiyun void setSync(); 49*4882a593Smuzhiyun void setDeSync(); 50*4882a593Smuzhiyun bool isSync() const { return m_synchronized; } 51*4882a593Smuzhiyundiff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp 52*4882a593Smuzhiyunindex ef308c5..b8d19a4 100644 53*4882a593Smuzhiyun--- a/src/client/qwaylandwindow.cpp 54*4882a593Smuzhiyun+++ b/src/client/qwaylandwindow.cpp 55*4882a593Smuzhiyun@@ -501,18 +501,26 @@ void QWaylandWindow::setVisible(bool visible) 56*4882a593Smuzhiyun } 57*4882a593Smuzhiyun } 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun- 60*4882a593Smuzhiyun void QWaylandWindow::raise() 61*4882a593Smuzhiyun { 62*4882a593Smuzhiyun if (mShellSurface) 63*4882a593Smuzhiyun mShellSurface->raise(); 64*4882a593Smuzhiyun-} 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun+ if (mSubSurfaceWindow && wlSurface()) { 67*4882a593Smuzhiyun+ mSubSurfaceWindow->placeAbove(wlSurface()); 68*4882a593Smuzhiyun+ mSubSurfaceWindow->parent()->commit(); 69*4882a593Smuzhiyun+ } 70*4882a593Smuzhiyun+} 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun void QWaylandWindow::lower() 73*4882a593Smuzhiyun { 74*4882a593Smuzhiyun if (mShellSurface) 75*4882a593Smuzhiyun mShellSurface->lower(); 76*4882a593Smuzhiyun+ 77*4882a593Smuzhiyun+ if (mSubSurfaceWindow && wlSurface()) { 78*4882a593Smuzhiyun+ mSubSurfaceWindow->placeBelow(wlSurface()); 79*4882a593Smuzhiyun+ mSubSurfaceWindow->parent()->commit(); 80*4882a593Smuzhiyun+ } 81*4882a593Smuzhiyun } 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun void QWaylandWindow::setOpacity(qreal level) 84*4882a593Smuzhiyun-- 85*4882a593Smuzhiyun2.20.1 86*4882a593Smuzhiyun 87