commit:     854fdba3048965bfa65fdb9d0d827c3cf86283e7
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Wed May 25 19:30:12 2022 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Wed May 25 21:10:11 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=854fdba3

kde-plasma/kwin: Backport several 5.24.6 fixes

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

 .../kwin-5.24.5-fix-plasmashell-crash-1.patch      | 307 +++++++++++++++++++++
 .../kwin-5.24.5-fix-plasmashell-crash-2.patch      |  35 +++
 .../kwin-5.24.5-update-device-outputName.patch     |  32 +++
 kde-plasma/kwin/kwin-5.24.5-r2.ebuild              | 142 ++++++++++
 4 files changed, 516 insertions(+)

diff --git a/kde-plasma/kwin/files/kwin-5.24.5-fix-plasmashell-crash-1.patch 
b/kde-plasma/kwin/files/kwin-5.24.5-fix-plasmashell-crash-1.patch
new file mode 100644
index 000000000000..46b6f0ad9c71
--- /dev/null
+++ b/kde-plasma/kwin/files/kwin-5.24.5-fix-plasmashell-crash-1.patch
@@ -0,0 +1,307 @@
+From 4c3195270d6c8e1da8c3e2e3abe5aae75d5bf3c2 Mon Sep 17 00:00:00 2001
+From: Vlad Zahorodnii <vlad.zahorod...@kde.org>
+Date: Fri, 26 Nov 2021 12:03:14 +0200
+Subject: [PATCH] Ensure that Toplevel::output() stays always in sync with
+ geometry
+
+Currently, if geometry updates are blocked, the Toplevel.output property
+won't be updated. On the other hand, it's reasonable to use the output
+property instead of manually looking up the output in window management
+code, e.g. Workspace::clientArea().
+
+In other words, using the Toplevel.output property is like walking on a
+mine field, things can blow up. You can't use Toplevel.output even if it
+makes perfect sense.
+
+This change ensures that Toplevel.output property is always kept in sync
+with the frame geometry. Unfortunately, this means that the output
+property no longer can be updated when the frameGeometryChanged() signal
+is emitted. It has to be done in moveResizeInternal() method.
+
+BUG: 448064
+
+(cherry picked from 510a41eeb89f51843405fa0258c852ab06d05bb8)
+
+Part-of: <https://invent.kde.org/plasma/kwin/-/merge_requests/2448>
+---
+ src/abstract_client.cpp |  3 ---
+ src/events.cpp          |  1 +
+ src/internal_client.cpp |  6 ++++++
+ src/toplevel.cpp        | 17 -----------------
+ src/toplevel.h          | 10 ++--------
+ src/unmanaged.cpp       |  6 ++++++
+ src/unmanaged.h         |  1 +
+ src/waylandclient.cpp   |  6 ++++++
+ src/x11client.cpp       |  7 +++++++
+ src/x11client.h         |  1 +
+ 10 files changed, 30 insertions(+), 28 deletions(-)
+
+diff --git a/src/abstract_client.cpp b/src/abstract_client.cpp
+index 0714b9ac3f..ddff11e53c 100644
+--- a/src/abstract_client.cpp
++++ b/src/abstract_client.cpp
+@@ -63,8 +63,6 @@ AbstractClient::AbstractClient()
+ {
+     connect(this, &AbstractClient::clientStartUserMovedResized,  this, 
&AbstractClient::moveResizedChanged);
+     connect(this, &AbstractClient::clientFinishUserMovedResized, this, 
&AbstractClient::moveResizedChanged);
+-    connect(this, &AbstractClient::clientStartUserMovedResized,  this, 
&AbstractClient::removeCheckOutputConnection);
+-    connect(this, &AbstractClient::clientFinishUserMovedResized, this, 
&AbstractClient::setupCheckOutputConnection);
+ 
+     connect(this, &AbstractClient::windowShown, this, 
&AbstractClient::hiddenChanged);
+     connect(this, &AbstractClient::windowHidden, this, 
&AbstractClient::hiddenChanged);
+@@ -1011,7 +1009,6 @@ void AbstractClient::finishInteractiveMoveResize(bool 
cancel)
+     if (cancel) {
+         moveResize(initialInteractiveMoveResizeGeometry());
+     }
+-    checkOutput(); // needs to be done because clientFinishUserMovedResized 
has not yet re-activated online alignment
+     if (output() != interactiveMoveResizeStartOutput()) {
+         workspace()->sendClientToOutput(this, output()); // checks rule 
validity
+         if (isFullScreen() || maximizeMode() != MaximizeRestore) {
+diff --git a/src/events.cpp b/src/events.cpp
+index b9bb9bbd36..a22960f0d0 100644
+--- a/src/events.cpp
++++ b/src/events.cpp
+@@ -1261,6 +1261,7 @@ void 
Unmanaged::configureNotifyEvent(xcb_configure_notify_event_t *e)
+         m_clientGeometry = newgeom;
+         m_frameGeometry = newgeom;
+         m_bufferGeometry = newgeom;
++        checkOutput();
+         Q_EMIT bufferGeometryChanged(this, old);
+         Q_EMIT clientGeometryChanged(this, old);
+         Q_EMIT frameGeometryChanged(this, old);
+diff --git a/src/internal_client.cpp b/src/internal_client.cpp
+index 3be51ff27b..b4c9250fd3 100644
+--- a/src/internal_client.cpp
++++ b/src/internal_client.cpp
+@@ -10,6 +10,7 @@
+ #include "internal_client.h"
+ #include "decorations/decorationbridge.h"
+ #include "deleted.h"
++#include "platform.h"
+ #include "surfaceitem.h"
+ #include "workspace.h"
+ 
+@@ -477,6 +478,7 @@ void InternalClient::commitGeometry(const QRect &rect)
+     // The client geometry and the buffer geometry are the same.
+     const QRect oldClientGeometry = m_clientGeometry;
+     const QRect oldFrameGeometry = m_frameGeometry;
++    const AbstractOutput *oldOutput = m_output;
+ 
+     m_clientGeometry = frameRectToClientRect(rect);
+     m_frameGeometry = rect;
+@@ -486,6 +488,7 @@ void InternalClient::commitGeometry(const QRect &rect)
+         return;
+     }
+ 
++    m_output = kwinApp()->platform()->outputAt(rect.center());
+     syncGeometryToInternalWindow();
+ 
+     if (oldClientGeometry != m_clientGeometry) {
+@@ -495,6 +498,9 @@ void InternalClient::commitGeometry(const QRect &rect)
+     if (oldFrameGeometry != m_frameGeometry) {
+         Q_EMIT frameGeometryChanged(this, oldFrameGeometry);
+     }
++    if (oldOutput != m_output) {
++        Q_EMIT screenChanged();
++    }
+     Q_EMIT geometryShapeChanged(this, oldFrameGeometry);
+ }
+ 
+diff --git a/src/toplevel.cpp b/src/toplevel.cpp
+index 698f6998e5..ff216835c4 100644
+--- a/src/toplevel.cpp
++++ b/src/toplevel.cpp
+@@ -47,7 +47,6 @@ Toplevel::Toplevel()
+     , m_skipCloseAnimation(false)
+ {
+     connect(screens(), &Screens::changed, this, &Toplevel::screenChanged);
+-    setupCheckOutputConnection();
+     connect(this, &Toplevel::bufferGeometryChanged, this, 
&Toplevel::inputTransformationChanged);
+ 
+     // Only for compatibility reasons, drop in the next major release.
+@@ -379,22 +378,6 @@ void Toplevel::deleteEffectWindow()
+     effect_window = nullptr;
+ }
+ 
+-void Toplevel::checkOutput()
+-{
+-    setOutput(kwinApp()->platform()->outputAt(frameGeometry().center()));
+-}
+-
+-void Toplevel::setupCheckOutputConnection()
+-{
+-    connect(this, &Toplevel::frameGeometryChanged, this, 
&Toplevel::checkOutput);
+-    checkOutput();
+-}
+-
+-void Toplevel::removeCheckOutputConnection()
+-{
+-    disconnect(this, &Toplevel::frameGeometryChanged, this, 
&Toplevel::checkOutput);
+-}
+-
+ int Toplevel::screen() const
+ {
+     return kwinApp()->platform()->enabledOutputs().indexOf(m_output);
+diff --git a/src/toplevel.h b/src/toplevel.h
+index f6b5dd4e61..3309647eb4 100644
+--- a/src/toplevel.h
++++ b/src/toplevel.h
+@@ -636,13 +636,6 @@ Q_SIGNALS:
+     void visibleGeometryChanged();
+ 
+ protected Q_SLOTS:
+-    /**
+-     * Checks whether the screen number for this Toplevel changed and updates 
if needed.
+-     * Any method changing the geometry of the Toplevel should call this 
method.
+-     */
+-    void checkOutput();
+-    void setupCheckOutputConnection();
+-    void removeCheckOutputConnection();
+     void setReadyForPainting();
+ 
+ protected:
+@@ -673,6 +666,8 @@ protected:
+     void deleteShadow();
+     void deleteEffectWindow();
+     void setDepth(int depth);
++
++    AbstractOutput *m_output = nullptr;
+     QRect m_frameGeometry;
+     QRect m_clientGeometry;
+     QRect m_bufferGeometry;
+@@ -700,7 +695,6 @@ private:
+     QRegion opaque_region;
+     mutable QRegion m_shapeRegion;
+     mutable bool m_shapeRegionIsValid = false;
+-    AbstractOutput *m_output = nullptr;
+     bool m_skipCloseAnimation;
+     quint32 m_pendingSurfaceId = 0;
+     QPointer<KWaylandServer::SurfaceInterface> m_surface;
+diff --git a/src/unmanaged.cpp b/src/unmanaged.cpp
+index de3caa303d..3164813a75 100644
+--- a/src/unmanaged.cpp
++++ b/src/unmanaged.cpp
+@@ -12,6 +12,7 @@
+ #include "workspace.h"
+ #include "effects.h"
+ #include "deleted.h"
++#include "platform.h"
+ #include "surfaceitem_x11.h"
+ #include "utils/common.h"
+ 
+@@ -206,6 +207,11 @@ QWindow *Unmanaged::findInternalWindow() const
+     return nullptr;
+ }
+ 
++void Unmanaged::checkOutput()
++{
++    setOutput(kwinApp()->platform()->outputAt(frameGeometry().center()));
++}
++
+ void Unmanaged::damageNotifyEvent()
+ {
+     Q_ASSERT(kwinApp()->operationMode() == Application::OperationModeX11);
+diff --git a/src/unmanaged.h b/src/unmanaged.h
+index e874fc1724..fa543eb0b8 100644
+--- a/src/unmanaged.h
++++ b/src/unmanaged.h
+@@ -45,6 +45,7 @@ private:
+     void configureNotifyEvent(xcb_configure_notify_event_t *e);
+     void damageNotifyEvent();
+     QWindow *findInternalWindow() const;
++    void checkOutput();
+     void associate();
+     void initialize();
+     bool m_outline = false;
+diff --git a/src/waylandclient.cpp b/src/waylandclient.cpp
+index 39d6ea22bc..9d8070c7f8 100644
+--- a/src/waylandclient.cpp
++++ b/src/waylandclient.cpp
+@@ -7,6 +7,7 @@
+ */
+ 
+ #include "waylandclient.h"
++#include "platform.h"
+ #include "screens.h"
+ #include "wayland_server.h"
+ #include "workspace.h"
+@@ -289,6 +290,7 @@ void WaylandClient::updateGeometry(const QRect &rect)
+     const QRect oldClientGeometry = m_clientGeometry;
+     const QRect oldFrameGeometry = m_frameGeometry;
+     const QRect oldBufferGeometry = m_bufferGeometry;
++    const AbstractOutput *oldOutput = m_output;
+ 
+     m_clientGeometry = frameRectToClientRect(rect);
+     m_frameGeometry = rect;
+@@ -310,6 +312,7 @@ void WaylandClient::updateGeometry(const QRect &rect)
+         return;
+     }
+ 
++    m_output = kwinApp()->platform()->outputAt(rect.center());
+     updateWindowRules(Rules::Position | Rules::Size);
+ 
+     if (changedGeometries & WaylandGeometryBuffer) {
+@@ -321,6 +324,9 @@ void WaylandClient::updateGeometry(const QRect &rect)
+     if (changedGeometries & WaylandGeometryFrame) {
+         Q_EMIT frameGeometryChanged(this, oldFrameGeometry);
+     }
++    if (oldOutput != m_output) {
++        Q_EMIT screenChanged();
++    }
+     Q_EMIT geometryShapeChanged(this, oldFrameGeometry);
+ }
+ 
+diff --git a/src/x11client.cpp b/src/x11client.cpp
+index ce275fff1b..d7ed823128 100644
+--- a/src/x11client.cpp
++++ b/src/x11client.cpp
+@@ -4062,6 +4062,8 @@ void X11Client::moveResizeInternal(const QRect &rect, 
MoveResizeMode mode)
+             m_lastClientGeometry == m_clientGeometry) {
+         return;
+     }
++
++    m_output = kwinApp()->platform()->outputAt(frameGeometry.center());
+     if (areGeometryUpdatesBlocked()) {
+         setPendingMoveResizeMode(mode);
+         return;
+@@ -4070,6 +4072,7 @@ void X11Client::moveResizeInternal(const QRect &rect, 
MoveResizeMode mode)
+     const QRect oldBufferGeometry = m_lastBufferGeometry;
+     const QRect oldFrameGeometry = m_lastFrameGeometry;
+     const QRect oldClientGeometry = m_lastClientGeometry;
++    const AbstractOutput *oldOutput = m_lastOutput;
+ 
+     updateServerGeometry();
+     updateWindowRules(Rules::Position|Rules::Size);
+@@ -4077,6 +4080,7 @@ void X11Client::moveResizeInternal(const QRect &rect, 
MoveResizeMode mode)
+     m_lastBufferGeometry = m_bufferGeometry;
+     m_lastFrameGeometry = m_frameGeometry;
+     m_lastClientGeometry = m_clientGeometry;
++    m_lastOutput = m_output;
+ 
+     if (isActive()) {
+         workspace()->setActiveOutput(output());
+@@ -4092,6 +4096,9 @@ void X11Client::moveResizeInternal(const QRect &rect, 
MoveResizeMode mode)
+     if (oldFrameGeometry != m_frameGeometry) {
+         Q_EMIT frameGeometryChanged(this, oldFrameGeometry);
+     }
++    if (oldOutput != m_output) {
++        Q_EMIT screenChanged();
++    }
+     Q_EMIT geometryShapeChanged(this, oldFrameGeometry);
+ }
+ 
+diff --git a/src/x11client.h b/src/x11client.h
+index b523044d3d..adb8b0e8df 100644
+--- a/src/x11client.h
++++ b/src/x11client.h
+@@ -524,6 +524,7 @@ private:
+     QMetaObject::Connection m_edgeGeometryTrackingConnection;
+ 
+     QMargins m_clientFrameExtents;
++    AbstractOutput *m_lastOutput = nullptr;
+     QRect m_lastBufferGeometry;
+     QRect m_lastFrameGeometry;
+     QRect m_lastClientGeometry;
+-- 
+GitLab
+

diff --git a/kde-plasma/kwin/files/kwin-5.24.5-fix-plasmashell-crash-2.patch 
b/kde-plasma/kwin/files/kwin-5.24.5-fix-plasmashell-crash-2.patch
new file mode 100644
index 000000000000..026efdf9465b
--- /dev/null
+++ b/kde-plasma/kwin/files/kwin-5.24.5-fix-plasmashell-crash-2.patch
@@ -0,0 +1,35 @@
+From a8477c1cf7acbf3358c85e53b236150dd43b4640 Mon Sep 17 00:00:00 2001
+From: Xaver Hugl <xaver.h...@gmail.com>
+Date: Thu, 14 Apr 2022 18:48:56 +0200
+Subject: [PATCH] toplevel: set valid output in the constructor
+
+This makes it less easy to cause crashes and fixes some segfaults.
+
+BUG: 452433
+BUG: 448064
+
+(cherry picked from commit e48a5c0535f01dc380449ba8481c869ff23e5558)
+
+Tested-by: Merge Service 
<https://invent.kde.org/plasma/kwin/-/merge_requests/2448>
+Part-of: <https://invent.kde.org/plasma/kwin/-/merge_requests/2448>
+---
+ src/toplevel.cpp | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/toplevel.cpp b/src/toplevel.cpp
+index ff216835c4..5d3d7a5dde 100644
+--- a/src/toplevel.cpp
++++ b/src/toplevel.cpp
+@@ -34,7 +34,8 @@ namespace KWin
+ {
+ 
+ Toplevel::Toplevel()
+-    : m_visual(XCB_NONE)
++    : m_output(workspace()->activeOutput())
++    , m_visual(XCB_NONE)
+     , bit_depth(24)
+     , info(nullptr)
+     , ready_for_painting(false)
+-- 
+GitLab
+

diff --git a/kde-plasma/kwin/files/kwin-5.24.5-update-device-outputName.patch 
b/kde-plasma/kwin/files/kwin-5.24.5-update-device-outputName.patch
new file mode 100644
index 000000000000..d1dbb3fb9bb8
--- /dev/null
+++ b/kde-plasma/kwin/files/kwin-5.24.5-update-device-outputName.patch
@@ -0,0 +1,32 @@
+From 1b96d21507a3b6b0a9ac6eac424d4e4db5602839 Mon Sep 17 00:00:00 2001
+From: David Redondo <k...@david-redondo.de>
+Date: Wed, 18 May 2022 13:34:45 +0200
+Subject: [PATCH] Update device outputName when setting output
+
+BUG:451279
+FIXED-IN:5.25.0
+
+
+(cherry picked from commit d3a37aa9aef58fbaedcef77d2797c22a015dc9c0)
+---
+ src/backends/libinput/device.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/backends/libinput/device.cpp 
b/src/backends/libinput/device.cpp
+index f247b66d74..30f51aca3c 100644
+--- a/src/backends/libinput/device.cpp
++++ b/src/backends/libinput/device.cpp
+@@ -668,8 +668,10 @@ void Device::setOutput(AbstractOutput *output)
+ {
+     m_output = output;
+     if (m_output) {
++        m_outputName = output->name();
+         writeEntry(ConfigKey::OutputName, output->name());
+     } else {
++        m_outputName = QString();
+         writeEntry(ConfigKey::OutputName, QString());
+     }
+     Q_EMIT outputNameChanged();
+-- 
+GitLab
+

diff --git a/kde-plasma/kwin/kwin-5.24.5-r2.ebuild 
b/kde-plasma/kwin/kwin-5.24.5-r2.ebuild
new file mode 100644
index 000000000000..c4afd02c8fc6
--- /dev/null
+++ b/kde-plasma/kwin/kwin-5.24.5-r2.ebuild
@@ -0,0 +1,142 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+ECM_HANDBOOK="optional"
+ECM_TEST="optional"
+KFMIN=5.90.0
+PVCUT=$(ver_cut 1-3)
+QTMIN=5.15.2
+VIRTUALX_REQUIRED="test"
+inherit ecm kde.org optfeature
+
+DESCRIPTION="Flexible, composited Window Manager for windowing systems on 
Linux"
+
+LICENSE="GPL-2+"
+SLOT="5"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86"
+IUSE="accessibility caps gles2-only multimedia plasma screencast"
+
+RESTRICT="test"
+
+COMMON_DEPEND="
+       >=dev-libs/libinput-1.19
+       >=dev-libs/wayland-1.2
+       >=dev-qt/qtdbus-${QTMIN}:5
+       >=dev-qt/qtdeclarative-${QTMIN}:5
+       >=dev-qt/qtgui-${QTMIN}:5=[gles2-only=,libinput]
+       >=dev-qt/qtwidgets-${QTMIN}:5
+       >=dev-qt/qtx11extras-${QTMIN}:5
+       >=kde-frameworks/kactivities-${KFMIN}:5
+       >=kde-frameworks/kauth-${KFMIN}:5
+       >=kde-frameworks/kcmutils-${KFMIN}:5
+       >=kde-frameworks/kcompletion-${KFMIN}:5
+       >=kde-frameworks/kconfig-${KFMIN}:5
+       >=kde-frameworks/kconfigwidgets-${KFMIN}:5
+       >=kde-frameworks/kcoreaddons-${KFMIN}:5
+       >=kde-frameworks/kcrash-${KFMIN}:5
+       >=kde-frameworks/kdbusaddons-${KFMIN}:5
+       >=kde-frameworks/kdeclarative-${KFMIN}:5
+       >=kde-frameworks/kglobalaccel-${KFMIN}:5=
+       >=kde-frameworks/ki18n-${KFMIN}:5
+       >=kde-frameworks/kiconthemes-${KFMIN}:5
+       >=kde-frameworks/kidletime-${KFMIN}:5=
+       >=kde-frameworks/knewstuff-${KFMIN}:5
+       >=kde-frameworks/knotifications-${KFMIN}:5
+       >=kde-frameworks/kpackage-${KFMIN}:5
+       >=kde-frameworks/kservice-${KFMIN}:5
+       >=kde-frameworks/ktextwidgets-${KFMIN}:5
+       >=kde-frameworks/kwayland-${KFMIN}:5
+       >=kde-frameworks/kwidgetsaddons-${KFMIN}:5
+       >=kde-frameworks/kwindowsystem-${KFMIN}:5=[X]
+       >=kde-frameworks/kxmlgui-${KFMIN}:5
+       >=kde-frameworks/plasma-${KFMIN}:5
+       >=kde-plasma/breeze-${PVCUT}:5
+       >=kde-plasma/kdecoration-${PVCUT}:5
+       >=kde-plasma/kscreenlocker-${PVCUT}:5
+       >=kde-plasma/kwayland-server-${PVCUT}:5
+       media-libs/fontconfig
+       media-libs/freetype
+       media-libs/lcms:2
+       media-libs/libepoxy
+       >=media-libs/mesa-21.1[egl(+),gbm(+),wayland,X]
+       virtual/libudev:=
+       x11-libs/libX11
+       x11-libs/libXi
+       x11-libs/libdrm
+       >=x11-libs/libxcb-1.10
+       >=x11-libs/libxkbcommon-0.7.0
+       x11-libs/xcb-util-cursor
+       x11-libs/xcb-util-image
+       x11-libs/xcb-util-keysyms
+       x11-libs/xcb-util-wm
+       accessibility? ( media-libs/libqaccessibilityclient:5 )
+       caps? ( sys-libs/libcap )
+       gles2-only? ( media-libs/mesa[gles2] )
+       plasma? ( >=kde-frameworks/krunner-${KFMIN}:5 )
+       screencast? ( >=media-video/pipewire-0.3:= )
+"
+RDEPEND="${COMMON_DEPEND}
+       >=dev-qt/qtquickcontrols-${QTMIN}:5
+       >=dev-qt/qtquickcontrols2-${QTMIN}:5
+       >=dev-qt/qtvirtualkeyboard-${QTMIN}:5
+       >=kde-frameworks/kirigami-${KFMIN}:5
+       >=kde-frameworks/kitemmodels-${KFMIN}:5[qml]
+       sys-apps/hwdata
+       x11-base/xwayland
+       multimedia? ( >=dev-qt/qtmultimedia-${QTMIN}:5[gstreamer,qml] )
+"
+DEPEND="${COMMON_DEPEND}
+       >=dev-qt/designer-${QTMIN}:5
+       >=dev-qt/qtconcurrent-${QTMIN}:5
+       x11-base/xorg-proto
+       test? (
+               dev-libs/plasma-wayland-protocols
+               >=dev-libs/wayland-protocols-1.19
+       )
+"
+BDEPEND="test? ( >=dev-qt/qtwaylandscanner-${QTMIN}:5 )"
+PDEPEND=">=kde-plasma/kde-cli-tools-${PVCUT}:5"
+
+PATCHES=(
+       "${FILESDIR}"/${P}-fix-multi-gpu-double-copy.patch # KDE-bug 453386
+       "${FILESDIR}"/${P}-tabbox-dont-dismiss-popups.patch # KDE-bug 446318
+       "${FILESDIR}"/${P}-effects-overview-hide-panels.patch # KDE-bug 444274
+       "${FILESDIR}"/${P}-fix-nvidia-render-glitches.patch
+       "${FILESDIR}"/${P}-update-device-outputName.patch # KDE-bug 451279
+       "${FILESDIR}"/${P}-fix-plasmashell-crash-{1,2}.patch # KDE-bugs 448064, 
452433
+)
+
+src_prepare() {
+       ecm_src_prepare
+       use multimedia || eapply 
"${FILESDIR}/${PN}-5.21.80-gstreamer-optional.patch"
+
+       # TODO: try to get a build switch upstreamed
+       if ! use screencast; then
+               sed -e "s/^pkg_check_modules.*PipeWire/#&/" -i CMakeLists.txt 
|| die
+       fi
+}
+
+src_configure() {
+       local mycmakeargs=(
+               $(cmake_use_find_package accessibility QAccessibilityClient)
+               $(cmake_use_find_package caps Libcap)
+               $(cmake_use_find_package plasma KF5Runner)
+       )
+
+       ecm_src_configure
+}
+
+pkg_postinst() {
+       ecm_pkg_postinst
+       optfeature "color management support" x11-misc/colord
+       elog
+       elog "In Plasma 5.20, default behavior of the Task Switcher to move 
minimised"
+       elog "windows to the end of the list was changed so that it remains in 
the"
+       elog "original order. To revert to the well established behavior:"
+       elog
+       elog " - Edit ~/.config/kwinrc"
+       elog " - Find [TabBox] section"
+       elog " - Add \"MoveMinimizedWindowsToEndOfTabBoxFocusChain=true\""
+}

Reply via email to