summaryrefslogtreecommitdiff
path: root/kde-frameworks/plasma/files
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2021-12-22 14:08:05 +0000
committerV3n3RiX <venerix@koprulu.sector>2021-12-22 14:08:05 +0000
commit93a93e9a3b53c1a73142a305ea1f8136846942ee (patch)
treeb9791a06ab3284e27b568412c59316c66240c682 /kde-frameworks/plasma/files
parent2771f79232c273bc2a57d23bf335dd81ccf6af28 (diff)
gentoo resync : 22.12.2021
Diffstat (limited to 'kde-frameworks/plasma/files')
-rw-r--r--kde-frameworks/plasma/files/plasma-5.85.0-fix-ExpandableListItem-overlapping.patch41
-rw-r--r--kde-frameworks/plasma/files/plasma-5.85.0-fix-cmake.patch48
-rw-r--r--kde-frameworks/plasma/files/plasma-5.85.0-fix-pinned-calendar-dots.patch37
-rw-r--r--kde-frameworks/plasma/files/plasma-5.85.0-fix-plasma-scaling-w-int-scale-factors.patch44
-rw-r--r--kde-frameworks/plasma/files/plasma-5.85.0-fix-svgicon-memleak.patch37
-rw-r--r--kde-frameworks/plasma/files/plasma-5.85.0-fix-theme-memleak.patch86
-rw-r--r--kde-frameworks/plasma/files/plasma-5.88.0-no-double-delete.patch28
-rw-r--r--kde-frameworks/plasma/files/plasma-5.88.0-reload-shared-renderers-if-changed-on-disk.patch269
-rw-r--r--kde-frameworks/plasma/files/plasma-5.88.0-svg-smaller-mask-to-hide-glitches.patch42
-rw-r--r--kde-frameworks/plasma/files/plasma-5.88.0-update-after-clearing-actions.patch29
10 files changed, 368 insertions, 293 deletions
diff --git a/kde-frameworks/plasma/files/plasma-5.85.0-fix-ExpandableListItem-overlapping.patch b/kde-frameworks/plasma/files/plasma-5.85.0-fix-ExpandableListItem-overlapping.patch
deleted file mode 100644
index 8063039b7626..000000000000
--- a/kde-frameworks/plasma/files/plasma-5.85.0-fix-ExpandableListItem-overlapping.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From f393bace87e5fc8c0e68eff9faf0656df64715ed Mon Sep 17 00:00:00 2001
-From: Nate Graham <nate@kde.org>
-Date: Wed, 1 Sep 2021 12:30:01 -0600
-Subject: [PATCH] ExpandableListItem: Fix overlapping entries with many
- expanded items
-
-A previous hack was done wrong, and was not taking into account disabled
-items.
-
-BUG: 428102
-FIXED-IN: 5.86
----
- .../plasmaextracomponents/qml/ExpandableListItem.qml | 5 +++--
- 1 file changed, 3 insertions(+), 2 deletions(-)
-
-diff --git a/src/declarativeimports/plasmaextracomponents/qml/ExpandableListItem.qml b/src/declarativeimports/plasmaextracomponents/qml/ExpandableListItem.qml
-index 47b3e3684..851961a4c 100644
---- a/src/declarativeimports/plasmaextracomponents/qml/ExpandableListItem.qml
-+++ b/src/declarativeimports/plasmaextracomponents/qml/ExpandableListItem.qml
-@@ -523,7 +523,7 @@ Item {
-
- // Container for actions list, so that we can add left and right margins to it
- Item {
-- height: actionsList.contentHeight
-+ height: actionsList.height
- width: mainRowLayout.width
-
- // TODO: Implement keyboard focus
-@@ -538,7 +538,8 @@ Item {
- anchors.leftMargin: listItemIcon.width + PlasmaCore.Units.smallSpacing
- anchors.rightMargin: listItemIcon.width + PlasmaCore.Units.smallSpacing * 2
-
-- height: PlasmaCore.Units.gridUnit * 2 * actionsList.count
-+ // Need to take into account disabled/invisible items
-+ height: PlasmaCore.Units.gridUnit * 2 * Array.from(contextualActionsModel).filter(item => item.enabled).length
-
- focus: true
- clip: true
---
-GitLab
-
diff --git a/kde-frameworks/plasma/files/plasma-5.85.0-fix-cmake.patch b/kde-frameworks/plasma/files/plasma-5.85.0-fix-cmake.patch
deleted file mode 100644
index 0eab0a772c08..000000000000
--- a/kde-frameworks/plasma/files/plasma-5.85.0-fix-cmake.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From e496ef0440c92e119da0b1088f1ab788cebeae33 Mon Sep 17 00:00:00 2001
-From: Andreas Sturmlechner <asturm@gentoo.org>
-Date: Thu, 26 Aug 2021 19:12:00 +0200
-Subject: [PATCH] CMake: do not expand variables beforehand
-
-Fixes build when FindOpenGL is disabled, producing a syntax error:
-"Function invoked with incorrect arguments for function named: ADD_FEATURE_INFO"
-
-See also: https://invent.kde.org/frameworks/plasma-framework/-/merge_requests/267
-
-Downstream report: https://bugs.gentoo.org/809815
-
-Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
----
- CMakeLists.txt | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index e27ebd914..25abbf921 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -110,20 +110,20 @@ set_package_properties(EGL PROPERTIES
- TYPE OPTIONAL
- )
-
--add_feature_info(GLX ${OpenGL_GLX_FOUND} "OpenGL GLX libraries.")
-+add_feature_info(GLX OpenGL_GLX_FOUND "OpenGL GLX libraries.")
- if(OpenGL_GLX_FOUND AND X11_FOUND AND (Qt5Gui_OPENGL_IMPLEMENTATION STREQUAL "GL"))
- set(HAVE_GLX 1)
- else()
- set(HAVE_GLX 0)
- endif()
-
--add_feature_info(EGL ${OpenGL_EGL_FOUND}
-+add_feature_info(EGL OpenGL_EGL_FOUND
- "A platform-agnostic mechanism for creating rendering surfaces for use with other graphics libraries, such as OpenGL|ES and OpenVG.")
- # OpenGL_EGL_FOUND is defined by FindOpenGL
- if(TARGET OpenGL::EGL)
- set(HAVE_EGL ${OpenGL_EGL_FOUND})
- set(EGL_TARGET OpenGL::EGL)
--elseif(${EGL_FOUND})
-+elseif(EGL_FOUND)
- set(HAVE_EGL ${EGL_FOUND})
- set(EGL_TARGET EGL::EGL)
- message(STATUS "Switch to EGL compatibility target EGL::EGL because OpenGL::EGL is not available")
---
-2.33.0
-
diff --git a/kde-frameworks/plasma/files/plasma-5.85.0-fix-pinned-calendar-dots.patch b/kde-frameworks/plasma/files/plasma-5.85.0-fix-pinned-calendar-dots.patch
deleted file mode 100644
index 0342024ca89d..000000000000
--- a/kde-frameworks/plasma/files/plasma-5.85.0-fix-pinned-calendar-dots.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 19fe24ef9377178413438d7749630053995af229 Mon Sep 17 00:00:00 2001
-From: Eugene Popov <popov895@ukr.net>
-Date: Mon, 9 Aug 2021 15:56:02 +0000
-Subject: [PATCH] [Calendar] Fix pinned calendar displaying the wrong number of
- dots
-
-Use assignment instead of binding for the rootIndex property of the DelegateModel.
-
-BUG: 440627
-FIXED-IN: 5.86
----
- src/declarativeimports/calendar/qml/DayDelegate.qml | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/src/declarativeimports/calendar/qml/DayDelegate.qml b/src/declarativeimports/calendar/qml/DayDelegate.qml
-index af31991db..3f7fc681b 100644
---- a/src/declarativeimports/calendar/qml/DayDelegate.qml
-+++ b/src/declarativeimports/calendar/qml/DayDelegate.qml
-@@ -81,13 +81,14 @@ PlasmaComponents3.AbstractButton {
- Repeater {
- model: DelegateModel {
- model: dayStyle.dayModel
-- rootIndex: modelIndex(index)
- delegate: Rectangle {
- width: PlasmaCore.Units.smallSpacing * 1.5
- height: width
- radius: width / 2
- color: model.eventColor ? Kirigami.ColorUtils.linearInterpolation(model.eventColor, PlasmaCore.Theme.textColor, 0.2) : PlasmaCore.Theme.highlightColor
- }
-+
-+ Component.onCompleted: rootIndex = modelIndex(index)
- }
- }
- }
---
-GitLab
-
diff --git a/kde-frameworks/plasma/files/plasma-5.85.0-fix-plasma-scaling-w-int-scale-factors.patch b/kde-frameworks/plasma/files/plasma-5.85.0-fix-plasma-scaling-w-int-scale-factors.patch
deleted file mode 100644
index 9c0e9046496a..000000000000
--- a/kde-frameworks/plasma/files/plasma-5.85.0-fix-plasma-scaling-w-int-scale-factors.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 837bb6975f6a0661d211107823b7587808fc3d4e Mon Sep 17 00:00:00 2001
-From: Nate Graham <nate@kde.org>
-Date: Sun, 15 Aug 2021 09:33:10 -0600
-Subject: [PATCH] Fix Plasma (non-Qt) icon scaling with integer scale factors
-
-An embarrassing error in 4edb830f53aac4833ece024df59441029b01fde6
-caused the function which returns an appropriate scale factor for icons
-to both take and return integer values rather than floating point
-values, preventing it from working properly with any scale factor other
-than an integer scale factor (e.g. 200%). This commit fixes that issue.
----
- src/declarativeimports/core/units.cpp | 2 +-
- src/declarativeimports/core/units.h | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/declarativeimports/core/units.cpp b/src/declarativeimports/core/units.cpp
-index 6788ed952..fbcc6d888 100644
---- a/src/declarativeimports/core/units.cpp
-+++ b/src/declarativeimports/core/units.cpp
-@@ -174,7 +174,7 @@ int Units::roundToIconSize(int size)
- }
- }
-
--int Units::bestIconScaleForDevicePixelRatio(const int ratio)
-+qreal Units::bestIconScaleForDevicePixelRatio(const qreal ratio)
- {
- if (ratio < 1.5) {
- return 1;
-diff --git a/src/declarativeimports/core/units.h b/src/declarativeimports/core/units.h
-index c19cf0dd8..855738e7d 100644
---- a/src/declarativeimports/core/units.h
-+++ b/src/declarativeimports/core/units.h
-@@ -271,7 +271,7 @@ private:
- * Note that this function is only relevant when using Plasma scaling and
- * when using Qt scaling, it always returns 1.
- */
-- static int bestIconScaleForDevicePixelRatio(const int ratio);
-+ static qreal bestIconScaleForDevicePixelRatio(const qreal ratio);
-
- /**
- * @return The dpi-adjusted size for a given icon size
---
-GitLab
-
diff --git a/kde-frameworks/plasma/files/plasma-5.85.0-fix-svgicon-memleak.patch b/kde-frameworks/plasma/files/plasma-5.85.0-fix-svgicon-memleak.patch
deleted file mode 100644
index 89896911d0a2..000000000000
--- a/kde-frameworks/plasma/files/plasma-5.85.0-fix-svgicon-memleak.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 73782c8b39d1cc41fef003acca8df75ccdf384e4 Mon Sep 17 00:00:00 2001
-From: Matt Whitlock <kde@mattwhitlock.name>
-Date: Mon, 16 Aug 2021 19:37:28 -0400
-Subject: [PATCH] avoid holding onto old Svg object when changing source of an
- IconItem
-
-A long-lived IconItem instance can have its source changed many times
-over its lifetime. Because SvgSource parents its internal Plasma::Svg
-instance to the IconItem instance, this means that such Plasma::Svg
-instance was not being destroyed when its responsible SvgSource
-instance is destroyed and indeed would not be destroyed until the
-IconItem instance is eventually destroyed, which could be arbitrarily
-much later. This commit adds an explicit call in the SvgSource
-destructor to delete the Plasma::Svg instance so it does not hang
-around in memory until the IconItem instance is destroyed. This fixes
-one of the major memory "leaks" in plasmashell.
----
- src/declarativeimports/core/iconitem.cpp | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/src/declarativeimports/core/iconitem.cpp b/src/declarativeimports/core/iconitem.cpp
-index 0db750acd..3f06b8b0e 100644
---- a/src/declarativeimports/core/iconitem.cpp
-+++ b/src/declarativeimports/core/iconitem.cpp
-@@ -196,6 +196,9 @@ public:
- {
- if (m_svgIcon) {
- QObject::disconnect(m_iconItem, nullptr, m_svgIcon, nullptr);
-+ // the parent IconItem can outlive this IconItemSource, so delete our Plasma::Svg object
-+ // explicitly to avoid leaving unreferenced Plasma::Svg objects parented to the IconItem
-+ delete m_svgIcon;
- }
- }
-
---
-GitLab
-
diff --git a/kde-frameworks/plasma/files/plasma-5.85.0-fix-theme-memleak.patch b/kde-frameworks/plasma/files/plasma-5.85.0-fix-theme-memleak.patch
deleted file mode 100644
index 1d7dc596c20e..000000000000
--- a/kde-frameworks/plasma/files/plasma-5.85.0-fix-theme-memleak.patch
+++ /dev/null
@@ -1,86 +0,0 @@
-From 14b495f933dadace7832fa6cbc809c3abdb7c682 Mon Sep 17 00:00:00 2001
-From: Matt Whitlock <kde@mattwhitlock.name>
-Date: Mon, 28 Jun 2021 18:01:14 -0400
-Subject: [PATCH] don't make duplicate connections to
- ThemePrivate::onAppExitCleanup
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Plasma::Theme::Theme(…) and Plasma::Theme::setThemeName(…) were
-unconditionally connecting the QCoreApplication::aboutToQuit signal to
-the ThemePrivate::onAppExitCleanup slot, even though the ThemePrivate
-instances are cached and shared across multiple Theme instances. In
-long-running applications that make heavy use of the Svg class (such as
-plasmashell), a single ThemePrivate instance can be reused by huge
-numbers of Theme instances. If the reference count of that ThemePrivate
-instance never reaches zero, then the connections just keep piling up,
-contributing to excessive memory usage. This commit moves the relevant
-connect(…) call so that it only happens in the case that a new
-ThemePrivate instance is constructed. Thus, there will only ever be one
-connection from QCoreApplication::aboutToQuit to
-ThemePrivate::onAppExitCleanup per instance of ThemePrivate.
----
- src/plasma/theme.cpp | 18 +++++++++---------
- 1 file changed, 9 insertions(+), 9 deletions(-)
-
-diff --git a/src/plasma/theme.cpp b/src/plasma/theme.cpp
-index fabf98f4e..f403d393b 100644
---- a/src/plasma/theme.cpp
-+++ b/src/plasma/theme.cpp
-@@ -39,13 +39,13 @@ Theme::Theme(QObject *parent)
- if (!ThemePrivate::globalTheme) {
- ThemePrivate::globalTheme = new ThemePrivate;
- ThemePrivate::globalTheme->settingsChanged(false);
-+ if (QCoreApplication::instance()) {
-+ connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, ThemePrivate::globalTheme, &ThemePrivate::onAppExitCleanup);
-+ }
- }
- ThemePrivate::globalTheme->ref.ref();
- d = ThemePrivate::globalTheme;
-
-- if (QCoreApplication::instance()) {
-- connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, d, &ThemePrivate::onAppExitCleanup);
-- }
- connect(d, &ThemePrivate::themeChanged, this, &Theme::themeChanged);
- connect(d, &ThemePrivate::defaultFontChanged, this, &Theme::defaultFontChanged);
- connect(d, &ThemePrivate::smallestFontChanged, this, &Theme::smallestFontChanged);
-@@ -57,6 +57,9 @@ Theme::Theme(const QString &themeName, QObject *parent)
- auto &priv = ThemePrivate::themes[themeName];
- if (!priv) {
- priv = new ThemePrivate;
-+ if (QCoreApplication::instance()) {
-+ connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, priv, &ThemePrivate::onAppExitCleanup);
-+ }
- }
-
- priv->ref.ref();
-@@ -68,9 +71,6 @@ Theme::Theme(const QString &themeName, QObject *parent)
- d->setThemeName(themeName, false, false);
- d->cacheTheme = useCache;
- d->fixedName = true;
-- if (QCoreApplication::instance()) {
-- connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, d, &ThemePrivate::onAppExitCleanup);
-- }
- connect(d, &ThemePrivate::themeChanged, this, &Theme::themeChanged);
- }
-
-@@ -105,12 +105,12 @@ void Theme::setThemeName(const QString &themeName)
- auto &priv = ThemePrivate::themes[themeName];
- if (!priv) {
- priv = new ThemePrivate;
-+ if (QCoreApplication::instance()) {
-+ connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, priv, &ThemePrivate::onAppExitCleanup);
-+ }
- }
- priv->ref.ref();
- d = priv;
-- if (QCoreApplication::instance()) {
-- connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, d, &ThemePrivate::onAppExitCleanup);
-- }
- connect(d, &ThemePrivate::themeChanged, this, &Theme::themeChanged);
- }
-
---
-GitLab
-
diff --git a/kde-frameworks/plasma/files/plasma-5.88.0-no-double-delete.patch b/kde-frameworks/plasma/files/plasma-5.88.0-no-double-delete.patch
new file mode 100644
index 000000000000..d3a03411b2cf
--- /dev/null
+++ b/kde-frameworks/plasma/files/plasma-5.88.0-no-double-delete.patch
@@ -0,0 +1,28 @@
+From 9b37459570f75e09f17aadf32f7abfe8b8d4d1e0 Mon Sep 17 00:00:00 2001
+From: Fushan Wen <qydwhotmail@gmail.com>
+Date: Sat, 4 Dec 2021 17:16:30 +0800
+Subject: [PATCH] wallpaperinterface: Don't double delete action
+
+`removeAction` already deletes the action, it makes no sense to delete
+the action again and will crash plasmashell.
+
+CCBUG: 446195
+---
+ src/scriptengines/qml/plasmoid/wallpaperinterface.cpp | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/scriptengines/qml/plasmoid/wallpaperinterface.cpp b/src/scriptengines/qml/plasmoid/wallpaperinterface.cpp
+index 570cf8e45..65adf838e 100644
+--- a/src/scriptengines/qml/plasmoid/wallpaperinterface.cpp
++++ b/src/scriptengines/qml/plasmoid/wallpaperinterface.cpp
+@@ -229,7 +229,6 @@ void WallpaperInterface::removeAction(const QString &name)
+
+ if (action) {
+ m_actions->removeAction(action);
+- delete action;
+ }
+ setProperty("contextualActions", QVariant::fromValue(contextualActions()));
+ }
+--
+GitLab
+
diff --git a/kde-frameworks/plasma/files/plasma-5.88.0-reload-shared-renderers-if-changed-on-disk.patch b/kde-frameworks/plasma/files/plasma-5.88.0-reload-shared-renderers-if-changed-on-disk.patch
new file mode 100644
index 000000000000..07d25c836bbf
--- /dev/null
+++ b/kde-frameworks/plasma/files/plasma-5.88.0-reload-shared-renderers-if-changed-on-disk.patch
@@ -0,0 +1,269 @@
+From fe9e118ff2212d48a0ea5fcc0346d6312978f3ed Mon Sep 17 00:00:00 2001
+From: Marco Martin <notmart@gmail.com>
+Date: Mon, 29 Nov 2021 14:40:38 +0000
+Subject: [PATCH] Reload shared renderers when a file changed on disk
+
+When we have to render a new pixmap, compare the file date with the date of the last time the file was cached. if the dates are different (not only older, in order to allow downgrades) then force the svg renderer to be reloaded from the new file, otherwise the renderer with the old file still loaded will save in cache old graphics with the id derived from the date of the new file, causing a wrong cache entry
+
+BUG:445516
+---
+ src/plasma/private/svg_p.h | 15 +++++-
+ src/plasma/svg.cpp | 100 +++++++++++++++++++++++++++----------
+ 2 files changed, 86 insertions(+), 29 deletions(-)
+
+diff --git a/src/plasma/private/svg_p.h b/src/plasma/private/svg_p.h
+index 11b68f21c..d39f274b4 100644
+--- a/src/plasma/private/svg_p.h
++++ b/src/plasma/private/svg_p.h
+@@ -30,8 +30,14 @@ public:
+
+ SharedSvgRenderer(const QByteArray &contents, const QString &styleSheet, QHash<QString, QRectF> &interestingElements, QObject *parent = nullptr);
+
++ void reload();
++
+ private:
+ bool load(const QByteArray &contents, const QString &styleSheet, QHash<QString, QRectF> &interestingElements);
++
++ QString m_filename;
++ QString m_styleSheet;
++ QHash<QString, QRectF> m_interestingElements;
+ };
+
+ class SvgPrivate
+@@ -125,9 +131,8 @@ public:
+ bool findElementRect(SvgPrivate::CacheId cacheId, QRectF &rect);
+ bool findElementRect(uint id, const QString &filePath, QRectF &rect);
+
+- void loadImageFromCache(const QString &path, uint lastModified);
++ bool loadImageFromCache(const QString &path, uint lastModified);
+ void dropImageFromCache(const QString &path);
+- void expireCache(const QString &path);
+
+ void setNaturalSize(const QString &path, qreal scaleFactor, const QSizeF &size);
+ QSizeF naturalSize(const QString &path, qreal scaleFactor);
+@@ -140,10 +145,15 @@ public:
+
+ QStringList cachedKeysForPath(const QString &path) const;
+
++ unsigned int lastModifiedTimeFromCache(const QString &filePath);
++
+ void updateLastModified(const QString &filePath, unsigned int lastModified);
+
+ static const uint s_seed;
+
++Q_SIGNALS:
++ void lastModifiedChanged(const QString &filePath, unsigned int lastModified);
++
+ private:
+ QTimer *m_configSyncTimer = nullptr;
+ QString m_iconThemePath;
+@@ -156,6 +166,7 @@ private:
+ QHash<uint, QRectF> m_localRectCache;
+ QHash<QString, QSet<unsigned int>> m_invalidElements;
+ QHash<QString, QList<QSize>> m_sizeHintsForId;
++ QHash<QString, unsigned int> m_lastModifiedTimes;
+ };
+ }
+
+diff --git a/src/plasma/svg.cpp b/src/plasma/svg.cpp
+index 1749381b7..47cf142e1 100644
+--- a/src/plasma/svg.cpp
++++ b/src/plasma/svg.cpp
+@@ -73,6 +73,9 @@ SharedSvgRenderer::SharedSvgRenderer(const QString &filename, const QString &sty
+ if (!file.open(QIODevice::ReadOnly)) {
+ return;
+ }
++ m_filename = filename;
++ m_styleSheet = styleSheet;
++ m_interestingElements = interestingElements;
+ load(file.readAll(), styleSheet, interestingElements);
+ }
+
+@@ -82,6 +85,16 @@ SharedSvgRenderer::SharedSvgRenderer(const QByteArray &contents, const QString &
+ load(contents, styleSheet, interestingElements);
+ }
+
++void SharedSvgRenderer::reload()
++{
++ KCompressionDevice file(m_filename, KCompressionDevice::GZip);
++ if (!file.open(QIODevice::ReadOnly)) {
++ return;
++ }
++
++ load(file.readAll(), m_styleSheet, m_interestingElements);
++}
++
+ bool SharedSvgRenderer::load(const QByteArray &contents, const QString &styleSheet, QHash<QString, QRectF> &interestingElements)
+ {
+ // Apply the style sheet.
+@@ -161,21 +174,31 @@ void SvgRectsCache::insert(Plasma::SvgPrivate::CacheId cacheId, const QRectF &re
+
+ void SvgRectsCache::insert(uint id, const QString &filePath, const QRectF &rect, unsigned int lastModified)
+ {
+- if (m_localRectCache.contains(id)) {
++ const unsigned int savedTime = lastModifiedTimeFromCache(filePath);
++
++ if (savedTime == lastModified && m_localRectCache.contains(id)) {
+ return;
+ }
+
+ m_localRectCache.insert(id, rect);
+
++
+ KConfigGroup imageGroup(m_svgElementsCache, filePath);
+- imageGroup.writeEntry("LastModified", lastModified);
++
+ if (rect.isValid()) {
+ imageGroup.writeEntry(QString::number(id), rect);
+ } else {
+ m_invalidElements[filePath] << id;
+ imageGroup.writeEntry("Invalidelements", m_invalidElements[filePath].values());
+ }
++
+ QMetaObject::invokeMethod(m_configSyncTimer, qOverload<>(&QTimer::start));
++
++ if (savedTime != lastModified) {
++ m_lastModifiedTimes[filePath] = lastModified;
++ imageGroup.writeEntry("LastModified", lastModified);
++ Q_EMIT lastModifiedChanged(filePath, lastModified);
++ }
+ }
+
+ bool SvgRectsCache::findElementRect(Plasma::SvgPrivate::CacheId cacheId, QRectF &rect)
+@@ -201,20 +224,21 @@ bool SvgRectsCache::findElementRect(uint id, const QString &filePath, QRectF &re
+ return true;
+ }
+
+-void SvgRectsCache::loadImageFromCache(const QString &path, uint lastModified)
++bool SvgRectsCache::loadImageFromCache(const QString &path, uint lastModified)
+ {
+ if (path.isEmpty()) {
+- return;
++ return false;
+ }
+
+ KConfigGroup imageGroup(m_svgElementsCache, path);
+
+- unsigned int savedTime = imageGroup.readEntry("LastModified", 0);
++ unsigned int savedTime = lastModifiedTimeFromCache(path);
+
+- if (lastModified > savedTime) {
++ // Reload even if is older, to support downgrades
++ if (lastModified != savedTime) {
+ imageGroup.deleteGroup();
+ QMetaObject::invokeMethod(m_configSyncTimer, qOverload<>(&QTimer::start));
+- return;
++ return false;
+ }
+
+ auto &elements = m_invalidElements[path];
+@@ -231,6 +255,7 @@ void SvgRectsCache::loadImageFromCache(const QString &path, uint lastModified)
+ }
+ }
+ }
++ return true;
+ }
+
+ void SvgRectsCache::dropImageFromCache(const QString &path)
+@@ -302,22 +327,6 @@ void SvgRectsCache::setIconThemePath(const QString &path)
+ QMetaObject::invokeMethod(m_configSyncTimer, qOverload<>(&QTimer::start));
+ }
+
+-void SvgRectsCache::expireCache(const QString &path)
+-{
+- KConfigGroup imageGroup(m_svgElementsCache, path);
+-
+- unsigned int savedTime = imageGroup.readEntry("LastModified", QDateTime().toSecsSinceEpoch());
+- QFileInfo info(path);
+- if (info.exists()) {
+- unsigned int lastModified = info.lastModified().toSecsSinceEpoch();
+- if (lastModified <= savedTime) {
+- return;
+- }
+- }
+-
+- imageGroup.deleteGroup();
+-}
+-
+ void SvgRectsCache::setNaturalSize(const QString &path, qreal scaleFactor, const QSizeF &size)
+ {
+ KConfigGroup imageGroup(m_svgElementsCache, path);
+@@ -349,11 +358,30 @@ QStringList SvgRectsCache::cachedKeysForPath(const QString &path) const
+ return filtered;
+ }
+
++unsigned int SvgRectsCache::lastModifiedTimeFromCache(const QString &filePath)
++{
++ const auto &i = m_lastModifiedTimes.constFind(filePath);
++ if (i != m_lastModifiedTimes.constEnd()) {
++ return i.value();
++ }
++
++ KConfigGroup imageGroup(m_svgElementsCache, filePath);
++ const unsigned int savedTime = imageGroup.readEntry("LastModified", 0);
++ m_lastModifiedTimes[filePath] = savedTime;
++ return savedTime;
++}
++
+ void SvgRectsCache::updateLastModified(const QString &filePath, unsigned int lastModified)
+ {
+ KConfigGroup imageGroup(m_svgElementsCache, filePath);
+- imageGroup.writeEntry("LastModified", lastModified);
+- QMetaObject::invokeMethod(m_configSyncTimer, qOverload<>(&QTimer::start));
++ const unsigned int savedTime = lastModifiedTimeFromCache(filePath);
++
++ if (savedTime != lastModified) {
++ m_lastModifiedTimes[filePath] = lastModified;
++ imageGroup.writeEntry("LastModified", lastModified);
++ QMetaObject::invokeMethod(m_configSyncTimer, qOverload<>(&QTimer::start));
++ Q_EMIT lastModifiedChanged(filePath, lastModified);
++ }
+ }
+
+ SvgPrivate::SvgPrivate(Svg *svg)
+@@ -463,7 +491,17 @@ bool SvgPrivate::setImagePath(const QString &imagePath)
+
+ lastModified = lastModifiedDate.toSecsSinceEpoch();
+
+- SvgRectsCache::instance()->loadImageFromCache(path, lastModified);
++ const bool imageWasCached = SvgRectsCache::instance()->loadImageFromCache(path, lastModified);
++
++ if (!imageWasCached) {
++ auto i = s_renderers.constBegin();
++ while (i != s_renderers.constEnd()) {
++ if (i.key().contains(path)) {
++ i.value()->reload();
++ }
++ i++;
++ }
++ }
+
+ // check if svg wants colorscheme applied
+ checkColorHints();
+@@ -552,7 +590,8 @@ QPixmap SvgPrivate::findInCache(const QString &elementId, qreal ratio, const QSi
+ const QString id = cachePath(actualElementId, size);
+
+ QPixmap p;
+- if (cacheRendering && cacheAndColorsTheme()->findInCache(id, p, lastModified)) {
++ if (cacheRendering && lastModified == SvgRectsCache::instance()->lastModifiedTimeFromCache(path)
++ && cacheAndColorsTheme()->findInCache(id, p, lastModified)) {
+ p.setDevicePixelRatio(ratio);
+ // qCDebug(LOG_PLASMA) << "found cached version of " << id << p.size();
+ return p;
+@@ -845,6 +884,13 @@ Svg::Svg(QObject *parent)
+ : QObject(parent)
+ , d(new SvgPrivate(this))
+ {
++ connect(SvgRectsCache::instance(), &SvgRectsCache::lastModifiedChanged,
++ this, [this] (const QString &filePath, unsigned int lastModified) {
++ if (d->lastModified != lastModified && filePath == d->path) {
++ d->lastModified = lastModified;
++ Q_EMIT repaintNeeded();
++ }
++ });
+ }
+
+ Svg::~Svg()
+--
+GitLab
+
diff --git a/kde-frameworks/plasma/files/plasma-5.88.0-svg-smaller-mask-to-hide-glitches.patch b/kde-frameworks/plasma/files/plasma-5.88.0-svg-smaller-mask-to-hide-glitches.patch
new file mode 100644
index 000000000000..f735b392667b
--- /dev/null
+++ b/kde-frameworks/plasma/files/plasma-5.88.0-svg-smaller-mask-to-hide-glitches.patch
@@ -0,0 +1,42 @@
+From 9ba4ed4da72a3d1bbec8920d93a547cf633cfacd Mon Sep 17 00:00:00 2001
+From: Marco Martin <notmart@gmail.com>
+Date: Wed, 10 Nov 2021 15:50:10 +0100
+Subject: [PATCH] smaller mask to hide glitches
+
+This makes the mask slightly maller than the frame. Since the svg will have antialiasing and the mask not,
+there will be artifacts at the corners, if they go under the svg they're less evident
+
+CCBUG:438644
+---
+ src/plasmaquick/dialog.cpp | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/src/plasmaquick/dialog.cpp b/src/plasmaquick/dialog.cpp
+index 3254b8320..6b3963303 100644
+--- a/src/plasmaquick/dialog.cpp
++++ b/src/plasmaquick/dialog.cpp
+@@ -237,14 +237,19 @@ void DialogPrivate::updateTheme()
+ frameSvgItem->setImagePath(prefix + QStringLiteral("dialogs/background"));
+ }
+
+- KWindowEffects::enableBlurBehind(q, theme.blurBehindEnabled(), frameSvgItem->mask());
++ // This makes the mask slightly maller than the frame. Since the svg will have antialiasing and the mask not,
++ // there will be artifacts at the corners, if they go under the svg they're less evident
++ frameSvgItem->frameSvg()->resizeFrame(q->size() - QSize(2,2));
++ const QRegion mask = frameSvgItem->frameSvg()->mask().translated(1,1);
++ KWindowEffects::enableBlurBehind(q, theme.blurBehindEnabled(), mask);
+
+ KWindowEffects::enableBackgroundContrast(q,
+ theme.backgroundContrastEnabled(),
+ theme.backgroundContrast(),
+ theme.backgroundIntensity(),
+ theme.backgroundSaturation(),
+- frameSvgItem->mask());
++ mask);
++ frameSvgItem->frameSvg()->resizeFrame(q->size());
+
+ if (KWindowSystem::compositingActive()) {
+ if (hasMask) {
+--
+GitLab
+
diff --git a/kde-frameworks/plasma/files/plasma-5.88.0-update-after-clearing-actions.patch b/kde-frameworks/plasma/files/plasma-5.88.0-update-after-clearing-actions.patch
new file mode 100644
index 000000000000..a30e9b6e5b1d
--- /dev/null
+++ b/kde-frameworks/plasma/files/plasma-5.88.0-update-after-clearing-actions.patch
@@ -0,0 +1,29 @@
+From 77fedf1f9919eb2cc07c8ecccdd70ad2a7343161 Mon Sep 17 00:00:00 2001
+From: Fushan Wen <qydwhotmail@gmail.com>
+Date: Sat, 4 Dec 2021 18:08:43 +0800
+Subject: [PATCH] wallpaperinterface: Update "contextualActions" after clearing
+ actions
+
+After clearing the entire action collection, "contextualActions" needs
+to be updated to remove invalid action pointers.
+
+BUG: 446195
+---
+ src/scriptengines/qml/plasmoid/wallpaperinterface.cpp | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/scriptengines/qml/plasmoid/wallpaperinterface.cpp b/src/scriptengines/qml/plasmoid/wallpaperinterface.cpp
+index 65adf838e..49bdb9512 100644
+--- a/src/scriptengines/qml/plasmoid/wallpaperinterface.cpp
++++ b/src/scriptengines/qml/plasmoid/wallpaperinterface.cpp
+@@ -115,6 +115,7 @@ void WallpaperInterface::syncWallpaperPackage()
+ }
+
+ m_actions->clear();
++ setProperty("contextualActions", QVariant::fromValue(contextualActions()));
+ m_pkg = KPackage::PackageLoader::self()->loadPackage(QStringLiteral("Plasma/Wallpaper"));
+ m_pkg.setPath(m_wallpaperPlugin);
+ if (!m_pkg.isValid()) {
+--
+GitLab
+