From f336e871c572071ba9a9e6a69a3e5deee4d129d0 Mon Sep 17 00:00:00 2001
|
From: Jeffy Chen <jeffy.chen@rock-chips.com>
|
Date: Wed, 3 Nov 2021 17:55:58 +0800
|
Subject: [PATCH 15/15] qwaylandwindow: Support lower() and raise()
|
|
Support lower() and raise() through hacked subsurface::place_below() and
|
subsurface::place_below().
|
|
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
|
---
|
src/client/qwaylandsubsurface.cpp | 10 ++++++++++
|
src/client/qwaylandsubsurface_p.h | 3 +++
|
src/client/qwaylandwindow.cpp | 12 ++++++++++--
|
3 files changed, 23 insertions(+), 2 deletions(-)
|
|
diff --git a/src/client/qwaylandsubsurface.cpp b/src/client/qwaylandsubsurface.cpp
|
index 2ff966c..2fcb79e 100644
|
--- a/src/client/qwaylandsubsurface.cpp
|
+++ b/src/client/qwaylandsubsurface.cpp
|
@@ -62,6 +62,16 @@ QWaylandSubSurface::~QWaylandSubSurface()
|
destroy();
|
}
|
|
+void QWaylandSubSurface::placeAbove(struct ::wl_surface *sibling)
|
+{
|
+ QtWayland::wl_subsurface::place_above(sibling);
|
+}
|
+
|
+void QWaylandSubSurface::placeBelow(struct ::wl_surface *sibling)
|
+{
|
+ QtWayland::wl_subsurface::place_below(sibling);
|
+}
|
+
|
void QWaylandSubSurface::setSync()
|
{
|
QMutexLocker l(&m_syncLock);
|
diff --git a/src/client/qwaylandsubsurface_p.h b/src/client/qwaylandsubsurface_p.h
|
index 76da10b..1c38151 100644
|
--- a/src/client/qwaylandsubsurface_p.h
|
+++ b/src/client/qwaylandsubsurface_p.h
|
@@ -73,6 +73,9 @@ public:
|
QWaylandWindow *window() const { return m_window; }
|
QWaylandWindow *parent() const { return m_parent; }
|
|
+ void placeAbove(struct ::wl_surface *sibling);
|
+ void placeBelow(struct ::wl_surface *sibling);
|
+
|
void setSync();
|
void setDeSync();
|
bool isSync() const { return m_synchronized; }
|
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
|
index 8ad3296..4f69dc5 100644
|
--- a/src/client/qwaylandwindow.cpp
|
+++ b/src/client/qwaylandwindow.cpp
|
@@ -496,18 +496,26 @@ void QWaylandWindow::setVisible(bool visible)
|
}
|
}
|
|
-
|
void QWaylandWindow::raise()
|
{
|
if (mShellSurface)
|
mShellSurface->raise();
|
-}
|
|
+ if (mSubSurfaceWindow && wlSurface()) {
|
+ mSubSurfaceWindow->placeAbove(wlSurface());
|
+ mSubSurfaceWindow->parent()->commit();
|
+ }
|
+}
|
|
void QWaylandWindow::lower()
|
{
|
if (mShellSurface)
|
mShellSurface->lower();
|
+
|
+ if (mSubSurfaceWindow && wlSurface()) {
|
+ mSubSurfaceWindow->placeBelow(wlSurface());
|
+ mSubSurfaceWindow->parent()->commit();
|
+ }
|
}
|
|
void QWaylandWindow::setOpacity(qreal level)
|
--
|
2.20.1
|