commit:     a60d9305d2a70497122ceeb0e32dc2c6ac1f9540
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Thu Jan 20 11:25:24 2022 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Thu Jan 20 13:24:17 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=a60d9305

kde-frameworks/plasma: Always sync the setPanelBehavior to wayland

Upstream commit d40d36057a0ee9fcb4badc7ff8b56844da79dfc8
KDE-bug: https://bugs.kde.org/show_bug.cgi?id=426969

Package-Manager: Portage-3.0.30, Repoman-3.0.3
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 .../plasma/files/plasma-5.90.0-KDEBUG-426969.patch | 90 ++++++++++++++++++++++
 kde-frameworks/plasma/plasma-5.90.0-r1.ebuild      |  1 +
 2 files changed, 91 insertions(+)

diff --git a/kde-frameworks/plasma/files/plasma-5.90.0-KDEBUG-426969.patch 
b/kde-frameworks/plasma/files/plasma-5.90.0-KDEBUG-426969.patch
new file mode 100644
index 000000000000..bccc097a3b99
--- /dev/null
+++ b/kde-frameworks/plasma/files/plasma-5.90.0-KDEBUG-426969.patch
@@ -0,0 +1,90 @@
+From d40d36057a0ee9fcb4badc7ff8b56844da79dfc8 Mon Sep 17 00:00:00 2001
+From: David Edmundson <[email protected]>
+Date: Wed, 12 Jan 2022 22:21:34 +0000
+Subject: [PATCH] Always sync the setPanelBehavior to wayland
+
+Currently this code is in the else statement to if (type !=
+Dialog::Normal) {
+
+This doesn't make sense as panel roles apply explicitly to other types,
+like Dialog::Dock. On X11 the equivalent always applies.
+
+BUG: 426969
+
+* asturm 2022-01-22: Merged with below fixup:
+
+From b882b34d7b55975f679133ef86cfd12869e8bba5 Mon Sep 17 00:00:00 2001
+From: David Edmundson <[email protected]>
+Date: Thu, 13 Jan 2022 17:03:38 +0000
+Subject: [PATCH] Always sync the setPanelBehavior to wayland
+
+The previous patch moved some code that reapplied setRole in a way that
+caused issues.
+
+BUG: 448373
+
+--- a/src/plasmaquick/dialog.cpp
++++ b/src/plasmaquick/dialog.cpp
+@@ -693,14 +693,13 @@
+ 
+ void DialogPrivate::applyType()
+ {
+-    if (type != Dialog::Normal) {
+         /*QXcbWindowFunctions::WmWindowType*/ int wmType = 0;
+ 
+ #if HAVE_X11
+         if (KWindowSystem::isPlatformX11()) {
+             switch (type) {
+             case Dialog::Normal:
+-                Q_UNREACHABLE();
++                q->setFlags(Qt::FramelessWindowHint | q->flags());
+                 break;
+             case Dialog::Dock:
+                 wmType = QXcbWindowFunctions::WmWindowType::Dock;
+@@ -729,11 +728,15 @@
+         }
+ #endif
+ 
+-        if (!wmType) {
++        if (!wmType && type != Dialog::Normal) {
+             KWindowSystem::setType(q->winId(), 
static_cast<NET::WindowType>(type));
+         }
+ #if HAVE_KWAYLAND
+         if (shellSurface) {
++            if (q->flags() & Qt::WindowStaysOnTopHint) {
++                type = Dialog::Dock;
++                
shellSurface->setPanelBehavior(KWayland::Client::PlasmaShellSurface::PanelBehavior::WindowsGoBelow);
++            }
+             switch (type) {
+                 case Dialog::Dock:
+                 
shellSurface->setRole(KWayland::Client::PlasmaShellSurface::Role::Panel);
+@@ -750,27 +753,13 @@
+             case Dialog::CriticalNotification:
+                 
shellSurface->setRole(KWayland::Client::PlasmaShellSurface::Role::CriticalNotification);
+                 break;
++            case Dialog::Normal:
++                
shellSurface->setRole(KWayland::Client::PlasmaShellSurface::Role::Normal);
+             default:
+                 break;
+             }
+         }
+ #endif
+-    } else {
+-        q->setFlags(Qt::FramelessWindowHint | q->flags());
+-
+-#if HAVE_KWAYLAND
+-        // Only possible after setup
+-        if (shellSurface) {
+-            if (q->flags() & Qt::WindowStaysOnTopHint) {
+-                
shellSurface->setRole(KWayland::Client::PlasmaShellSurface::Role::Panel);
+-                
shellSurface->setPanelBehavior(KWayland::Client::PlasmaShellSurface::PanelBehavior::WindowsGoBelow);
+-            } else {
+-                
shellSurface->setRole(KWayland::Client::PlasmaShellSurface::Role::Normal);
+-                
shellSurface->setPanelBehavior(KWayland::Client::PlasmaShellSurface::PanelBehavior::AlwaysVisible);
+-            }
+-        }
+-#endif
+-    }
+ 
+     // an OSD can't be a Dialog, as qt xcb would attempt to set a transient 
parent for it
+     // see bug 370433

diff --git a/kde-frameworks/plasma/plasma-5.90.0-r1.ebuild 
b/kde-frameworks/plasma/plasma-5.90.0-r1.ebuild
index fa06b05e874f..a59a50636a36 100644
--- a/kde-frameworks/plasma/plasma-5.90.0-r1.ebuild
+++ b/kde-frameworks/plasma/plasma-5.90.0-r1.ebuild
@@ -60,6 +60,7 @@ DEPEND="${RDEPEND}
 BDEPEND="man? ( >=kde-frameworks/kdoctools-${PVCUT}:5 )"
 
 PATCHES=(
+       "${FILESDIR}/${P}-KDEBUG-426969.patch"
        "${FILESDIR}/${P}-KDEBUG-447752.patch"
        "${FILESDIR}/${P}-KDEBUG-448590.patch"
 )

Reply via email to