commit:     421fd89da5df5796db415c3eb4a294b18fca1277
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Tue May  4 20:00:23 2021 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Tue May  4 20:17:49 2021 +0000
URL:        https://gitweb.gentoo.org/proj/kde.git/commit/?id=421fd89d

kde-plasma/plasma-workspace: Backport 5.22 adaptive opacity feature

This raises the minimum required KDE Frameworks version to 5.82.0
which is carrying the necessary backport in kde-frameworks/plasma.

KDE-bug: https://bugs.kde.org/show_bug.cgi?id=434202
KDe-bug: https://bugs.kde.org/show_bug.cgi?id=434285
Package-Manager: Portage-3.0.18, Repoman-3.0.3
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 ...workspace-5.21.5-transparency-panelConfig.patch |  27 ++
 .../plasma-workspace-5.21.5-transparency.patch     | 376 +++++++++++++++++++++
 .../plasma-workspace-5.21.5.ebuild                 |   6 +-
 3 files changed, 408 insertions(+), 1 deletion(-)

diff --git 
a/kde-plasma/plasma-workspace/files/plasma-workspace-5.21.5-transparency-panelConfig.patch
 
b/kde-plasma/plasma-workspace/files/plasma-workspace-5.21.5-transparency-panelConfig.patch
new file mode 100644
index 0000000000..fb7993e6db
--- /dev/null
+++ 
b/kde-plasma/plasma-workspace/files/plasma-workspace-5.21.5-transparency-panelConfig.patch
@@ -0,0 +1,27 @@
+From 1cf02aad96bfe650a1f4d1465ae15234205fb061 Mon Sep 17 00:00:00 2001
+From: Bharadwaj Raju <bharadwaj.raju...@protonmail.com>
+Date: Mon, 26 Apr 2021 18:47:51 +0000
+Subject: [PATCH] Load panelOpacity from config parent, not from config
+
+BUG: 434285
+FIXED-IN: 5.22
+---
+ shell/panelview.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/shell/panelview.cpp b/shell/panelview.cpp
+index 5ed743024..4533e856f 100644
+--- a/shell/panelview.cpp
++++ b/shell/panelview.cpp
+@@ -633,7 +633,7 @@ void PanelView::restore()
+     // the place for this config key is changed in Plasma 5.9
+     // Do NOT use readConfigValueWithFallBack
+     
setVisibilityMode((VisibilityMode)panelConfig.parent().readEntry<int>("panelVisibility",
 panelConfig.readEntry<int>("panelVisibility", (int)NormalPanel)));
+-    setOpacityMode((OpacityMode)readConfigValueWithFallBack("panelOpacity", 
PanelView::OpacityMode::Adaptive));
++    
setOpacityMode((OpacityMode)config().parent().readEntry<int>("panelOpacity", 
configDefaults().parent().readEntry<int>("panelOpacity", 
PanelView::OpacityMode::Adaptive)));
+     m_initCompleted = true;
+     resizePanel();
+     positionPanel();
+-- 
+GitLab
+

diff --git 
a/kde-plasma/plasma-workspace/files/plasma-workspace-5.21.5-transparency.patch 
b/kde-plasma/plasma-workspace/files/plasma-workspace-5.21.5-transparency.patch
new file mode 100644
index 0000000000..1a925a137c
--- /dev/null
+++ 
b/kde-plasma/plasma-workspace/files/plasma-workspace-5.21.5-transparency.patch
@@ -0,0 +1,376 @@
+From 7db8d5ee551f30576588d31470fe287b6ad2adcd Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Niccol=C3=B2=20Venerandi?= <nicc...@venerandi.com>
+Date: Mon, 1 Mar 2021 22:14:43 +0000
+Subject: [PATCH] Add support for adaptive opacity panels
+
+Co-authored-by: Jan Blackquill <uhh...@gmail.com>
+---
+ libtaskmanager/taskfilterproxymodel.cpp | 26 ++++++++++++++++++
+ libtaskmanager/taskfilterproxymodel.h   | 19 ++++++++++++++
+ libtaskmanager/tasksmodel.cpp           | 11 ++++++++
+ libtaskmanager/tasksmodel.h             | 19 ++++++++++++++
+ shell/panelconfigview.cpp               | 11 ++++++++
+ shell/panelconfigview.h                 |  5 ++++
+ shell/panelview.cpp                     | 35 +++++++++++++++++++++++++
+ shell/panelview.h                       | 28 ++++++++++++++++++++
+ 8 files changed, 154 insertions(+)
+
+diff --git a/libtaskmanager/taskfilterproxymodel.cpp 
b/libtaskmanager/taskfilterproxymodel.cpp
+index 37a3076fd..6bb27537a 100644
+--- a/libtaskmanager/taskfilterproxymodel.cpp
++++ b/libtaskmanager/taskfilterproxymodel.cpp
+@@ -40,6 +40,7 @@ public:
+     bool filterByScreen = false;
+     bool filterByActivity = false;
+     bool filterNotMinimized = false;
++    bool filterNotMaximized = false;
+     bool filterSkipTaskbar = true;
+     bool filterSkipPager = false;
+ 
+@@ -185,6 +186,22 @@ void TaskFilterProxyModel::setFilterNotMinimized(bool 
filter)
+     }
+ }
+ 
++bool TaskFilterProxyModel::filterNotMaximized() const
++{
++    return d->filterNotMaximized;
++}
++
++void TaskFilterProxyModel::setFilterNotMaximized(bool filter)
++{
++    if (d->filterNotMaximized != filter) {
++        d->filterNotMaximized = filter;
++
++        invalidateFilter();
++
++        emit filterNotMaximizedChanged();
++    }
++}
++
+ bool TaskFilterProxyModel::filterSkipTaskbar() const
+ {
+     return d->filterSkipTaskbar;
+@@ -301,6 +318,15 @@ bool TaskFilterProxyModel::acceptsRow(int sourceRow) const
+         }
+     }
+ 
++    // Filter not maximized.
++    if (d->filterNotMaximized) {
++        bool isMaximized = 
sourceIdx.data(AbstractTasksModel::IsMaximized).toBool();
++
++        if (!isMaximized) {
++            return false;
++        }
++    }
++
+     return true;
+ }
+ 
+diff --git a/libtaskmanager/taskfilterproxymodel.h 
b/libtaskmanager/taskfilterproxymodel.h
+index 7ad2cb9ce..88ba3adab 100644
+--- a/libtaskmanager/taskfilterproxymodel.h
++++ b/libtaskmanager/taskfilterproxymodel.h
+@@ -52,6 +52,7 @@ class TASKMANAGER_EXPORT TaskFilterProxyModel : public 
QSortFilterProxyModel, pu
+     Q_PROPERTY(bool filterByScreen READ filterByScreen WRITE 
setFilterByScreen NOTIFY filterByScreenChanged)
+     Q_PROPERTY(bool filterByActivity READ filterByActivity WRITE 
setFilterByActivity NOTIFY filterByActivityChanged)
+     Q_PROPERTY(bool filterNotMinimized READ filterNotMinimized WRITE 
setFilterNotMinimized NOTIFY filterNotMinimizedChanged)
++    Q_PROPERTY(bool filterNotMaximized READ filterNotMaximized WRITE 
setFilterNotMaximized NOTIFY filterNotMaximizedChanged)
+     Q_PROPERTY(bool filterSkipTaskbar READ filterSkipTaskbar WRITE 
setFilterSkipTaskbar NOTIFY filterSkipTaskbarChanged)
+     Q_PROPERTY(bool filterSkipPager READ filterSkipPager WRITE 
setFilterSkipPager NOTIFY filterSkipPagerChanged)
+ 
+@@ -212,6 +213,23 @@ public:
+      **/
+     void setFilterNotMinimized(bool filter);
+ 
++    /**
++     * Whether non-maximized tasks should be filtered. Defaults to
++     * @c false.
++     *
++     * @see setFilterNotMaximized
++     * @returns @c true if non-maximized tasks should be filtered.
++     **/
++    bool filterNotMaximized() const;
++
++    /**
++     * Set whether non-maximized tasks should be filtered.
++     *
++     * @see filterNotMaximized
++     * @param filter Whether non-maximized tasks should be filtered.
++     **/
++    void setFilterNotMaximized(bool filter);
++
+     /**
+      * Whether tasks which should be omitted from 'task bars' should be
+      * filtered. Defaults to @c true.
+@@ -285,6 +303,7 @@ Q_SIGNALS:
+     void filterByScreenChanged() const;
+     void filterByActivityChanged() const;
+     void filterNotMinimizedChanged() const;
++    void filterNotMaximizedChanged() const;
+     void filterSkipTaskbarChanged() const;
+     void filterSkipPagerChanged() const;
+     void demandingAttentionSkipsFiltersChanged() const;
+diff --git a/libtaskmanager/tasksmodel.cpp b/libtaskmanager/tasksmodel.cpp
+index c6e66926b..11eb53fdf 100644
+--- a/libtaskmanager/tasksmodel.cpp
++++ b/libtaskmanager/tasksmodel.cpp
+@@ -302,6 +302,7 @@ void TasksModel::Private::initModels()
+     QObject::connect(filterProxyModel, 
&TaskFilterProxyModel::filterByScreenChanged, q, 
&TasksModel::filterByScreenChanged);
+     QObject::connect(filterProxyModel, 
&TaskFilterProxyModel::filterByActivityChanged, q, 
&TasksModel::filterByActivityChanged);
+     QObject::connect(filterProxyModel, 
&TaskFilterProxyModel::filterNotMinimizedChanged, q, 
&TasksModel::filterNotMinimizedChanged);
++    QObject::connect(filterProxyModel, 
&TaskFilterProxyModel::filterNotMaximizedChanged, q, 
&TasksModel::filterNotMaximizedChanged);
+ 
+     groupingProxyModel = new TaskGroupingProxyModel(q);
+     groupingProxyModel->setSourceModel(filterProxyModel);
+@@ -1152,6 +1153,16 @@ void TasksModel::setFilterNotMinimized(bool filter)
+     d->filterProxyModel->setFilterNotMinimized(filter);
+ }
+ 
++bool TasksModel::filterNotMaximized() const
++{
++    return d->filterProxyModel->filterNotMaximized();
++}
++
++void TasksModel::setFilterNotMaximized(bool filter)
++{
++    d->filterProxyModel->setFilterNotMaximized(filter);
++}
++
+ TasksModel::SortMode TasksModel::sortMode() const
+ {
+     return d->sortMode;
+diff --git a/libtaskmanager/tasksmodel.h b/libtaskmanager/tasksmodel.h
+index 18e3d9bb4..8c84012d0 100644
+--- a/libtaskmanager/tasksmodel.h
++++ b/libtaskmanager/tasksmodel.h
+@@ -73,6 +73,7 @@ class TASKMANAGER_EXPORT TasksModel : public 
QSortFilterProxyModel, public Abstr
+     Q_PROPERTY(bool filterByScreen READ filterByScreen WRITE 
setFilterByScreen NOTIFY filterByScreenChanged)
+     Q_PROPERTY(bool filterByActivity READ filterByActivity WRITE 
setFilterByActivity NOTIFY filterByActivityChanged)
+     Q_PROPERTY(bool filterNotMinimized READ filterNotMinimized WRITE 
setFilterNotMinimized NOTIFY filterNotMinimizedChanged)
++    Q_PROPERTY(bool filterNotMaximized READ filterNotMaximized WRITE 
setFilterNotMaximized NOTIFY filterNotMaximized)
+ 
+     Q_PROPERTY(SortMode sortMode READ sortMode WRITE setSortMode NOTIFY 
sortModeChanged)
+     Q_PROPERTY(bool separateLaunchers READ separateLaunchers WRITE 
setSeparateLaunchers NOTIFY separateLaunchersChanged)
+@@ -295,6 +296,23 @@ public:
+      **/
+     void setFilterNotMinimized(bool filter);
+ 
++    /**
++     * Whether non-maximized tasks should be filtered. Defaults to
++     * @c false.
++     *
++     * @see setFilterNotMaximized
++     * @returns @c true if non-maximized tasks should be filtered.
++     **/
++    bool filterNotMaximized() const;
++
++    /**
++     * Set whether non-maximized tasks should be filtered.
++     *
++     * @see filterNotMaximized
++     * @param filter Whether non-maximized tasks should be filtered.
++     **/
++    void setFilterNotMaximized(bool filter);
++
+     /**
+      * The sort mode used in sorting tasks. Defaults to SortAlpha.
+      *
+@@ -848,6 +866,7 @@ Q_SIGNALS:
+     void filterByScreenChanged() const;
+     void filterByActivityChanged() const;
+     void filterNotMinimizedChanged() const;
++    void filterNotMaximizedChanged() const;
+     void sortModeChanged() const;
+     void separateLaunchersChanged() const;
+     void launchInPlaceChanged() const;
+diff --git a/shell/panelconfigview.cpp b/shell/panelconfigview.cpp
+index a331c0bb2..5637f3233 100644
+--- a/shell/panelconfigview.cpp
++++ b/shell/panelconfigview.cpp
+@@ -289,6 +289,17 @@ PanelView::VisibilityMode 
PanelConfigView::visibilityMode() const
+     return m_panelView->visibilityMode();
+ }
+ 
++void PanelConfigView::setOpacityMode(PanelView::OpacityMode mode)
++{
++    m_panelView->setOpacityMode(mode);
++    emit opacityModeChanged();
++}
++
++PanelView::OpacityMode PanelConfigView::opacityMode() const
++{
++    return m_panelView->opacityMode();
++}
++
+ Plasma::FrameSvg::EnabledBorders PanelConfigView::enabledBorders() const
+ {
+     return m_enabledBorders;
+diff --git a/shell/panelconfigview.h b/shell/panelconfigview.h
+index 8e0abd314..db2af6bf9 100644
+--- a/shell/panelconfigview.h
++++ b/shell/panelconfigview.h
+@@ -51,6 +51,7 @@ class PanelConfigView : public PlasmaQuick::ConfigView
+ {
+     Q_OBJECT
+     Q_PROPERTY(PanelView::VisibilityMode visibilityMode READ visibilityMode 
WRITE setVisibilityMode NOTIFY visibilityModeChanged)
++    Q_PROPERTY(PanelView::OpacityMode opacityMode READ opacityMode WRITE 
setOpacityMode NOTIFY opacityModeChanged)
+     Q_PROPERTY(Plasma::FrameSvg::EnabledBorders enabledBorders READ 
enabledBorders NOTIFY enabledBordersChanged)
+ 
+ public:
+@@ -62,6 +63,9 @@ public:
+     PanelView::VisibilityMode visibilityMode() const;
+     void setVisibilityMode(PanelView::VisibilityMode mode);
+ 
++    PanelView::OpacityMode opacityMode() const;
++    void setOpacityMode(PanelView::OpacityMode mode);
++
+     Plasma::FrameSvg::EnabledBorders enabledBorders() const;
+ 
+ protected:
+@@ -84,6 +88,7 @@ private Q_SLOTS:
+ 
+ Q_SIGNALS:
+     void visibilityModeChanged();
++    void opacityModeChanged();
+     void enabledBordersChanged();
+ 
+ private:
+diff --git a/shell/panelview.cpp b/shell/panelview.cpp
+index 4654a7a72..a699cc84c 100644
+--- a/shell/panelview.cpp
++++ b/shell/panelview.cpp
+@@ -64,6 +64,7 @@ PanelView::PanelView(ShellCorona *corona, QScreen 
*targetScreen, QWindow *parent
+     , m_alignment(Qt::AlignLeft)
+     , m_corona(corona)
+     , m_visibilityMode(NormalPanel)
++    , m_opacityMode(Adaptive)
+     , m_backgroundHints(Plasma::Types::StandardBackground)
+     , m_shellSurface(nullptr)
+ {
+@@ -76,8 +77,10 @@ PanelView::PanelView(ShellCorona *corona, QScreen 
*targetScreen, QWindow *parent
+     setClearBeforeRendering(true);
+     setColor(QColor(Qt::transparent));
+     setFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
++    updateAdaptiveOpacityEnabled();
+ 
+     connect(&m_theme, &Plasma::Theme::themeChanged, this, 
&PanelView::updateMask);
++    connect(&m_theme, &Plasma::Theme::themeChanged, this, 
&PanelView::updateAdaptiveOpacityEnabled);
+     connect(this, &PanelView::backgroundHintsChanged, this, 
&PanelView::updateMask);
+     connect(this, &PanelView::backgroundHintsChanged, this, 
&PanelView::updateEnabledBorders);
+     // TODO: add finished/componentComplete signal to QuickViewSharedEngine,
+@@ -405,6 +408,37 @@ PanelView::VisibilityMode PanelView::visibilityMode() 
const
+     return m_visibilityMode;
+ }
+ 
++PanelView::OpacityMode PanelView::opacityMode() const
++{
++    if (!m_theme.adaptiveTransparencyEnabled()) {
++        return PanelView::Translucent;
++    }
++    return m_opacityMode;
++}
++
++bool PanelView::adaptiveOpacityEnabled()
++{
++    return m_theme.adaptiveTransparencyEnabled();
++}
++
++void PanelView::setOpacityMode(PanelView::OpacityMode mode)
++{
++    if (m_opacityMode != mode) {
++        m_opacityMode = mode;
++        if (config().isValid() && config().parent().isValid()) {
++            config().parent().writeEntry("panelOpacity", (int)mode);
++            m_corona->requestApplicationConfigSync();
++        }
++        emit opacityModeChanged();
++    }
++}
++
++void PanelView::updateAdaptiveOpacityEnabled()
++{
++    emit opacityModeChanged();
++    emit adaptiveOpacityEnabledChanged();
++}
++
+ void PanelView::positionPanel()
+ {
+     if (!containment()) {
+@@ -599,6 +633,7 @@ void PanelView::restore()
+     // the place for this config key is changed in Plasma 5.9
+     // Do NOT use readConfigValueWithFallBack
+     
setVisibilityMode((VisibilityMode)panelConfig.parent().readEntry<int>("panelVisibility",
 panelConfig.readEntry<int>("panelVisibility", (int)NormalPanel)));
++    setOpacityMode((OpacityMode)readConfigValueWithFallBack("panelOpacity", 
PanelView::OpacityMode::Adaptive));
+     m_initCompleted = true;
+     resizePanel();
+     positionPanel();
+diff --git a/shell/panelview.h b/shell/panelview.h
+index 60e4d446e..c312d4907 100644
+--- a/shell/panelview.h
++++ b/shell/panelview.h
+@@ -100,6 +100,18 @@ class PanelView : public PlasmaQuick::ContainmentView
+      */
+     Q_PROPERTY(VisibilityMode visibilityMode READ visibilityMode WRITE 
setVisibilityMode NOTIFY visibilityModeChanged)
+ 
++    /**
++     *  Property that determines how a panel's opacity behaves.
++     *
++     * @see OpacityMode
++     */
++    Q_PROPERTY(OpacityMode opacityMode READ opacityMode WRITE setOpacityMode 
NOTIFY opacityModeChanged)
++
++    /**
++    /*  Property that determines whether adaptive opacity is used.
++     */
++    Q_PROPERTY(bool adaptiveOpacityEnabled READ adaptiveOpacityEnabled NOTIFY 
adaptiveOpacityEnabledChanged)
++
+ public:
+     enum VisibilityMode {
+         NormalPanel = 0, /** default, always visible panel, the windowmanager 
reserves a places for it */
+@@ -109,6 +121,14 @@ public:
+     };
+     Q_ENUM(VisibilityMode)
+ 
++    /** Enumeration of possible opacity modes. */
++    enum OpacityMode {
++        Adaptive = 0, /** The panel will change opacity depending on the 
presence of a maximized window */
++        Opaque, /** The panel will always be opaque */
++        Translucent /** The panel will always be translucent */
++    };
++    Q_ENUM(OpacityMode)
++
+     explicit PanelView(ShellCorona *corona, QScreen *targetScreen = nullptr, 
QWindow *parent = nullptr);
+     ~PanelView() override;
+ 
+@@ -147,6 +167,11 @@ public:
+     VisibilityMode visibilityMode() const;
+     void setVisibilityMode(PanelView::VisibilityMode mode);
+ 
++    PanelView::OpacityMode opacityMode() const;
++      bool adaptiveOpacityEnabled();
++    void setOpacityMode(PanelView::OpacityMode mode);
++    void updateAdaptiveOpacityEnabled();
++
+     /**
+      * @returns the geometry of the panel given a distance
+      */
+@@ -185,6 +210,8 @@ Q_SIGNALS:
+     // QWindow does not have a property for screen. Adding this property 
requires re-implementing the signal
+     void screenToFollowChanged(QScreen *screen);
+     void visibilityModeChanged();
++    void opacityModeChanged();
++    void adaptiveOpacityEnabledChanged();
+ 
+ protected Q_SLOTS:
+     /**
+@@ -235,6 +262,7 @@ private:
+     ShellCorona *m_corona;
+     QTimer m_strutsTimer;
+     VisibilityMode m_visibilityMode;
++    OpacityMode m_opacityMode;
+     Plasma::Theme m_theme;
+     QTimer m_positionPaneltimer;
+     QTimer m_unhideTimer;
+-- 
+GitLab
+

diff --git a/kde-plasma/plasma-workspace/plasma-workspace-5.21.5.ebuild 
b/kde-plasma/plasma-workspace/plasma-workspace-5.21.5.ebuild
index 711dd242a8..31b3b92188 100644
--- a/kde-plasma/plasma-workspace/plasma-workspace-5.21.5.ebuild
+++ b/kde-plasma/plasma-workspace/plasma-workspace-5.21.5.ebuild
@@ -143,7 +143,11 @@ PDEPEND="
        >=kde-plasma/kde-cli-tools-${PVCUT}:5
 "
 
-PATCHES=( "${FILESDIR}/${PN}-5.14.2-split-libkworkspace.patch" )
+PATCHES=(
+       "${FILESDIR}/${PN}-5.14.2-split-libkworkspace.patch"
+       "${FILESDIR}/${P}-transparency.patch" # KDE-bug 434202
+       "${FILESDIR}/${P}-transparency-panelConfig.patch" # KDE-bug 434285
+)
 
 src_prepare() {
        ecm_src_prepare

Reply via email to