[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1109693: marked as done (unblock: plasma-workspace/4:6.3.6-2)



Your message dated Tue, 22 Jul 2025 09:23:37 +0000
with message-id <E1ue9Dl-00AyEw-2K@respighi.debian.org>
and subject line unblock plasma-workspace
has caused the Debian Bug report #1109693,
regarding unblock: plasma-workspace/4:6.3.6-2
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
1109693: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1109693
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
X-Debbugs-Cc: plasma-workspace@packages.debian.org, Debian Qt/KDE Maintainers <debian-qt-kde@lists.debian.org>
Control: affects -1 + src:plasma-workspace
User: release.debian.org@packages.debian.org
Usertags: unblock

Dear Release Team,

please unblock package plasma-workspace.

[ Reason ]
It contains the following changes:
* New upstream release (6.3.6).
  - Weather/envcan: Adapt to the new locations list URL.
  - Weather/envcan: Fix handling of non-continuous hourly folder list.
  - Dataengines/weather: Adapt to the new dynamic URLs on envcan.
  - RunCommand: fix "hide faded completion text" calculation. (kde#505698)
  - Klipper: make "Add Actions" dialog only window-modal. (kde#501938)
  - Fix cell height calc in resize handle.
  - Applets/notifications: Don't set a parent for
  WidgetsAskUserActionHandler. (kde#504385)
  - Components/sessionprivate: fix a potential crash in SessionsModel.
  - Libnotificationmanager: fix critical notifications not showing when Do
  not disturb is active.
  - Applets/devicenotifier: fix pointless mount action. (kde#503999)
  - Colorsapplicator: Don't allow extended RGB from OKLabToLinearSRGB.
  (kde#503394)
* Drop backported patches now part of the upstream release.
* Refresh patches.
* Backport upstream commits:
  - Fix fallback name for task manager icons for programs with Comment
  property missing in the desktop file. [45784326] (kde#504431)
  - Fix crash in system settings when removing /usr/share as a wallpaper
  directory. [e9fd71d9] (kde#503593)
  - Fix multiple instances of Plasma shell crash when trying to stop it from
  going to sleep. [88911e82] (kde#487660)
  - Do not track cache partitions with freespacenotifier. [01978f58]
  (kde#504423)
  - Do not show logout screen on power button press when in lockscreen /
  screensaver. [f1605df4] (kde#504575)
  - Fix holding mouse to scroll inside desktop widgets unexpectedly entering
  edit mode. [8e6b79da] (kde#416909)
  - Fix "move to activity" when there are only 2 activities. [e2ae8f54]
  (kde#483148)
  - applets/kicker: fix filenames containing # missing from history
  [ab55c53e] (kde#419449, kde#437960)
  - Klipper: Remove local Configure Klipper action that conflicts
  with global shortcuts. [d286dce3] (kde#501632)
  - Remove unexpected hover icons above user feedback selection labels.
  [a3e153b3] (kde#505761)
  - Fix unablity to remove/unpin documents/apps from Application Menu after
  deleting the document/app from system. [d1896f5a] (kde#402820)
  - Fix unchecking "Show date" in clock settings creating an empty gap on
  the panel until restarting plasmashell [b2e80af5] (kde#505614)
  - Fix systemd services reload reemitting all previous OOM notifications.
  [ec837446] (kde#502279)

The complete debdiff is quite big while including translation updates so
I’m attaching a simple diff trimmed down from these for your
convenience :
    diff -ur --exclude=po plasma-workspace-6.3.[56]

[ Tests ]
- No regression identified after running Plasma for several days with
  the changes.
- The upstream test suite doesn’t regress in sbuild with the same
  failures as for 6.3.5 :
The following tests FAILED:
          3 - tasksmodeltest (Failed)
          5 - xwindowtasksmodeltest (Subprocess aborted)
          6 - waylandtasksmodeltest (Failed)
          7 - fetchinitialplayertest (Subprocess aborted)
          8 - mprisdeclarativetest (Subprocess aborted)
          9 - mediakeystest (Failed)
         10 - dbusservicewatchertest (Failed)
         11 - dbusmethodcalltest (Failed)
         12 - screenpooltest (Subprocess aborted)
         13 - shelltest (Subprocess aborted)
         17 - klippertest (Failed)
         18 - klipper_v3migrationtest (Failed)
         22 - testchromebookmarks (Failed)
         23 - testfirefoxbookmarks (Failed)
         29 - keystatetest (Failed)
         30 - lockedtest (Not Run)
         31 - tst_triangleFilter (Failed)
         33 - systemtraymodeltest (Failed)
         34 - testimagefinder (Failed)
         37 - testimagelistmodel (Failed)
         39 - testimageproxymodel (Failed)
         40 - testslidemodel (Failed)
         42 - testimagebackend (Failed)
         43 - testimagefrontend (Failed)

[ Risks ]
Only contains fixes from the upstream point release and backported
patches. Further fixes can easily be backported or the changes reverted.

[ Checklist ]
  [x] all changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in testing


Thanks !


unblock plasma-workspace/4:6.3.6-2
diff -Nru plasma-workspace-6.3.5/applets/devicenotifier/plugin/actions/mountaction.cpp plasma-workspace-6.3.6/applets/devicenotifier/plugin/actions/mountaction.cpp
--- plasma-workspace-6.3.5/applets/devicenotifier/plugin/actions/mountaction.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/applets/devicenotifier/plugin/actions/mountaction.cpp	2025-07-08 13:48:12.000000000 +0200
@@ -18,6 +18,8 @@
 MountAction::MountAction(const QString &udi, QObject *parent)
     : ActionInterface(udi, parent)
     , m_stateMonitor(DevicesStateMonitor::instance())
+    , m_supportsMTP(false)
+    , m_hasStorageAccess(false)
 {
     Solid::Device device(udi);
 
@@ -39,6 +41,15 @@
 
     m_supportsMTP = supportedProtocols.contains(QLatin1String("mtp"));
 
+    // It's possible for there to be no StorageAccess (e.g. MTP devices don't have one)
+    if (device.is<Solid::StorageAccess>()) {
+        Solid::StorageAccess *access = device.as<Solid::StorageAccess>();
+        if (access) {
+            qCDebug(APPLETS::DEVICENOTIFIER) << "Mount action: have storage access";
+            m_hasStorageAccess = true;
+        }
+    }
+
     connect(m_stateMonitor.get(), &DevicesStateMonitor::stateChanged, this, &MountAction::updateIsValid);
 }
 
@@ -67,7 +78,7 @@
 
 bool MountAction::isValid() const
 {
-    return m_stateMonitor->isRemovable(m_udi) && !m_stateMonitor->isMounted(m_udi) && !m_supportsMTP;
+    return m_hasStorageAccess && m_stateMonitor->isRemovable(m_udi) && !m_stateMonitor->isMounted(m_udi) && !m_supportsMTP;
 }
 
 void MountAction::updateIsValid(const QString &udi)
diff -Nru plasma-workspace-6.3.5/applets/devicenotifier/plugin/actions/mountaction.h plasma-workspace-6.3.6/applets/devicenotifier/plugin/actions/mountaction.h
--- plasma-workspace-6.3.5/applets/devicenotifier/plugin/actions/mountaction.h	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/applets/devicenotifier/plugin/actions/mountaction.h	2025-07-08 13:48:12.000000000 +0200
@@ -33,6 +33,7 @@
 
 private:
     bool m_supportsMTP;
+    bool m_hasStorageAccess;
 
     std::shared_ptr<DevicesStateMonitor> m_stateMonitor;
 };
diff -Nru plasma-workspace-6.3.5/applets/notifications/filemenu.cpp plasma-workspace-6.3.6/applets/notifications/filemenu.cpp
--- plasma-workspace-6.3.5/applets/notifications/filemenu.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/applets/notifications/filemenu.cpp	2025-07-08 13:48:12.000000000 +0200
@@ -151,7 +151,8 @@
     const bool canTrash = itemProperties.isLocal() && itemProperties.supportsMoving();
     if (canTrash) {
         auto moveToTrashLambda = [this] {
-            auto handler = new KIO::WidgetsAskUserActionHandler(this);
+            // No parent since the FileMenu will be destroyed as soon as the user clicked the menu item.
+            auto handler = new KIO::WidgetsAskUserActionHandler();
             connect(handler, &KIO::WidgetsAskUserActionHandler::askUserDeleteResult, [handler](bool allow, const QList<QUrl> &urls) {
                 if (allow) {
                     auto job = KIO::trash(urls);
@@ -172,7 +173,8 @@
 
     if (itemProperties.supportsDeleting() && (!canTrash || showDeleteCommand)) {
         auto deleteLambda = [this] {
-            auto handler = new KIO::WidgetsAskUserActionHandler(this);
+            // No parent since the FileMenu will be destroyed as soon as the user clicked the menu item.
+            auto handler = new KIO::WidgetsAskUserActionHandler();
             connect(handler, &KIO::WidgetsAskUserActionHandler::askUserDeleteResult, [handler](bool allow, const QList<QUrl> &urls) {
                 if (allow) {
                     auto job = KIO::del(urls);
diff -Nru plasma-workspace-6.3.5/CMakeLists.txt plasma-workspace-6.3.6/CMakeLists.txt
--- plasma-workspace-6.3.5/CMakeLists.txt	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/CMakeLists.txt	2025-07-08 13:48:11.000000000 +0200
@@ -1,13 +1,13 @@
 cmake_minimum_required(VERSION 3.16)
 
 project(plasma-workspace)
-set(PROJECT_VERSION "6.3.5")
+set(PROJECT_VERSION "6.3.6")
 string(REPLACE "." ";" VERSION_LIST ${PROJECT_VERSION})
 list(GET VERSION_LIST 0 PROJECT_VERSION_MAJOR)
 list(GET VERSION_LIST 1 PROJECT_VERSION_MINOR)
 list(GET VERSION_LIST 2 PROJECT_VERSION_PATCH)
 
-set(PROJECT_DEP_VERSION "6.3.5")
+set(PROJECT_DEP_VERSION "6.3.6")
 set(QT_MIN_VERSION "6.7.0")
 set(KF6_MIN_VERSION "6.10.0")
 option(PLASMA_X11_DEFAULT_SESSION "Use X11 session by default for Plasma" OFF)
diff -Nru plasma-workspace-6.3.5/components/containmentlayoutmanager/resizehandle.cpp plasma-workspace-6.3.6/components/containmentlayoutmanager/resizehandle.cpp
--- plasma-workspace-6.3.5/components/containmentlayoutmanager/resizehandle.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/components/containmentlayoutmanager/resizehandle.cpp	2025-07-08 13:48:12.000000000 +0200
@@ -156,7 +156,7 @@
 
     // Now make minimumSize an integer number of cells
     minimumSize.setWidth(ceil(minimumSize.width() / layout->cellWidth()) * layout->cellWidth());
-    minimumSize.setHeight(ceil(minimumSize.height() / layout->cellWidth()) * layout->cellHeight());
+    minimumSize.setHeight(ceil(minimumSize.height() / layout->cellHeight()) * layout->cellHeight());
 
     // Horizontal resize
     if (resizeLeft()) {
diff -Nru plasma-workspace-6.3.5/components/sessionsprivate/sessionsmodel.cpp plasma-workspace-6.3.6/components/sessionsprivate/sessionsmodel.cpp
--- plasma-workspace-6.3.5/components/sessionsprivate/sessionsmodel.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/components/sessionsprivate/sessionsmodel.cpp	2025-07-08 13:48:12.000000000 +0200
@@ -187,11 +187,11 @@
     }
 }
 
-void SessionsModel::checkScreenLocked(const std::function<void(bool)> &cb)
+void SessionsModel::checkScreenLocked(std::function<void(bool)> &&cb)
 {
     auto reply = m_screensaverInterface->GetActive();
     QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this);
-    QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [cb](QDBusPendingCallWatcher *watcher) {
+    QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [cb = std::move(cb)](QDBusPendingCallWatcher *watcher) {
         QDBusPendingReply<bool> reply = *watcher;
         if (!reply.isError()) {
             cb(reply.value());
diff -Nru plasma-workspace-6.3.5/components/sessionsprivate/sessionsmodel.h plasma-workspace-6.3.6/components/sessionsprivate/sessionsmodel.h
--- plasma-workspace-6.3.5/components/sessionsprivate/sessionsmodel.h	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/components/sessionsprivate/sessionsmodel.h	2025-07-08 13:48:12.000000000 +0200
@@ -91,7 +91,7 @@
     void aboutToLockScreen();
 
 private:
-    void checkScreenLocked(const std::function<void(bool)> &cb);
+    void checkScreenLocked(std::function<void(bool)> &&cb);
 
     KDisplayManager m_displayManager;
 
diff -Nru plasma-workspace-6.3.5/dataengines/weather/ions/envcan/ion_envcan.cpp plasma-workspace-6.3.6/dataengines/weather/ions/envcan/ion_envcan.cpp
--- plasma-workspace-6.3.5/dataengines/weather/ions/envcan/ion_envcan.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/dataengines/weather/ions/envcan/ion_envcan.cpp	2025-07-08 13:48:12.000000000 +0200
@@ -17,6 +17,8 @@
 #include <QRegularExpression>
 #include <QTimeZone>
 
+using namespace Qt::StringLiterals;
+
 WeatherData::WeatherData()
     : stationLatitude(qQNaN())
     , stationLongitude(qQNaN())
@@ -490,7 +492,7 @@
 void EnvCanadaIon::getXMLSetup()
 {
     // If network is down, we need to spin and wait
-    const QUrl url(QStringLiteral("https://dd.weather.gc.ca/citypage_weather/xml/siteList.xml";));
+    const QUrl url(QStringLiteral("https://dd.weather.gc.ca/today/citypage_weather/siteList.xml";));
     qCDebug(IONENGINE_ENVCAN) << "Fetching station list:" << url;
 
     KIO::TransferJob *getJob = KIO::get(url, KIO::NoReload, KIO::HideProgressInfo);
@@ -516,7 +518,7 @@
     const XMLMapInfo &place = m_places[dataKey];
 
     const QUrl url(QStringLiteral("https://dd.weather.gc.ca/citypage_weather/xml/%1/%2_e.xml";).arg(place.territoryName, place.cityCode));
-    qCDebug(IONENGINE_ENVCAN) << "Fetching weather URL:" << url;
+    qCDebug(IONENGINE_ENVCAN) << "Fetching legacy weather URL:" << url;
 
     if (place.territoryName.isEmpty() && place.cityCode.isEmpty()) {
         setData(source, QStringLiteral("validate"), QStringLiteral("envcan|malformed"));
@@ -532,6 +534,51 @@
     connect(getJob, &KJob::result, this, &EnvCanadaIon::slotJobFinished);
 }
 
+// The weather URL has a dynamic name and path depending on its timestamp:
+// https://dd.weather.gc.ca/today/citypage_weather/{PROV}/{HH}/{YYYYMMDD}T{HHmmss.sss}Z_MSC_CitypageWeather_{SiteCode}_en.xml
+// This method is called iteratively 3 times to get the URL and then the weather report
+void EnvCanadaIon::getWeatherData(const QString &source)
+{
+    WeatherData::UrlInfo &info = m_weatherData[source].urlInfo;
+
+    info.requests++;
+    if (info.requests > 3) {
+        qCWarning(IONENGINE_ENVCAN) << "Too many requests to find the weather URL";
+        return;
+    }
+
+    // We get the place info from the stations list
+    if (info.cityCode.isEmpty()) {
+        QString dataKey = source;
+        dataKey.remove(QStringLiteral("envcan|weather|"));
+        const XMLMapInfo &place = m_places[dataKey];
+
+        info.province = place.territoryName;
+        info.cityCode = place.cityCode;
+    }
+
+    // 1. Base URL, on the territory dir, to get the list of hours
+    QString url = u"https://dd.weather.gc.ca/today/citypage_weather/%1/"_s.arg(info.province);
+    // 2. When we know the hour folder, we check for the weather report files
+    if (!info.hours.isEmpty()) {
+        url += info.hours.at(info.hourIndex) + u"/";
+    }
+    // 3. Now we have the full information to compose the URL
+    if (!info.fileName.isEmpty()) {
+        url += info.fileName;
+    }
+
+    qCDebug(IONENGINE_ENVCAN) << "Fetching weather URL:" << url;
+
+    KIO::TransferJob *getJob = KIO::get(QUrl(url), KIO::Reload, KIO::HideProgressInfo);
+
+    m_jobXml.insert(getJob, new QXmlStreamReader);
+    m_jobList.insert(getJob, source);
+
+    connect(getJob, &KIO::TransferJob::data, this, &EnvCanadaIon::slotDataArrived);
+    connect(getJob, &KJob::result, this, &EnvCanadaIon::slotJobFinished);
+}
+
 void EnvCanadaIon::setup_slotDataArrived(KIO::Job *job, const QByteArray &data)
 {
     Q_UNUSED(job)
@@ -550,7 +597,13 @@
         return;
     }
 
-    // Send to xml.
+    // Remove the HTML doctype line from XML parsing
+    if (data.startsWith("<!DOCTYPE"_ba)) {
+        int newLinePos = data.indexOf('\n');
+        m_jobXml[job]->addData(QByteArrayView(data).slice(newLinePos + 1));
+        return;
+    }
+
     m_jobXml[job]->addData(data);
 }
 
@@ -560,10 +613,16 @@
     const QString source = m_jobList.value(job);
     setData(source, Data());
     QXmlStreamReader *reader = m_jobXml.value(job);
-    if (reader) {
+    if (!job->error() && reader) {
         readXMLData(m_jobList[job], *reader);
     }
 
+    if (job->error() == KIO::ERR_DOES_NOT_EXIST || qobject_cast<KIO::TransferJob *>(job)->isErrorPage()) {
+        qCDebug(IONENGINE_ENVCAN) << "Legacy page not found. Falling back to new API";
+        m_weatherData[source].urlInfo = WeatherData::UrlInfo();
+        getWeatherData(source);
+    }
+
     m_jobList.remove(job);
     delete m_jobXml[job];
     m_jobXml.remove(job);
@@ -686,6 +745,11 @@
         if (xml.isStartElement()) {
             if (xml.name() == QLatin1String("siteData")) {
                 parseWeatherSite(data, xml);
+            } else if (xml.name() == QLatin1String("html")) {
+                auto &urlInfo = m_weatherData[source].urlInfo;
+                parseDirListing(urlInfo, xml);
+                getWeatherData(source);
+                return !xml.hasError();
             } else {
                 parseUnknownElement(xml);
             }
@@ -733,6 +797,53 @@
     return !xml.error();
 }
 
+void EnvCanadaIon::parseDirListing(WeatherData::UrlInfo &info, QXmlStreamReader &xml)
+{
+    const bool expectingFileNames = !info.hours.isEmpty();
+
+    while (!xml.atEnd()) {
+        xml.readNext();
+
+        // We are parsing a directory listing with files or folders as hyperlinks
+        if (xml.isStartElement() && xml.name() == "a"_L1) {
+            QString item = xml.attributes().value(u"href").toString().trimmed();
+
+            // Check for hour folders
+            if (!expectingFileNames && item.endsWith('/'_L1)) {
+                item.slice(0, item.length() - 1);
+
+                bool isHour = false;
+                item.toInt(&isHour);
+                if (isHour) {
+                    info.hours.prepend(item);
+                }
+                continue;
+            }
+
+            // Check just for files that match our city code en English language
+            if (item.endsWith(u"%1_en.xml"_s.arg(info.cityCode))) {
+                info.fileName = item;
+            }
+        }
+    }
+
+    // Sort hours in reverse order (more recent first)
+    if (!expectingFileNames && !info.hours.isEmpty()) {
+        std::sort(info.hours.begin(), info.hours.end(), [](const auto &a, const auto &b) {
+            return a.toInt() > b.toInt();
+        });
+    }
+
+    // If we didn't find the filename in the current hour folder
+    // set up a new requests to search it on the previous one
+    if (expectingFileNames && info.fileName.isEmpty()) {
+        if (info.hourIndex < info.hours.count()) {
+            info.hourIndex++;
+            info.requests--;
+        }
+    }
+}
+
 void EnvCanadaIon::parseFloat(float &value, QXmlStreamReader &xml)
 {
     bool ok = false;
diff -Nru plasma-workspace-6.3.5/dataengines/weather/ions/envcan/ion_envcan.h plasma-workspace-6.3.6/dataengines/weather/ions/envcan/ion_envcan.h
--- plasma-workspace-6.3.5/dataengines/weather/ions/envcan/ion_envcan.h	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/dataengines/weather/ions/envcan/ion_envcan.h	2025-07-08 13:48:12.000000000 +0200
@@ -120,6 +120,18 @@
 
     QString solarDataTimeEngineSourceName;
     bool isNight = false;
+
+    // Fields to get the forecast url
+    struct UrlInfo {
+        QString province;
+        QString cityCode;
+        QStringList hours;
+        int hourIndex = 0;
+        QString fileName;
+        int requests = 0;
+    };
+
+    UrlInfo urlInfo;
 };
 
 Q_DECLARE_TYPEINFO(WeatherData::WeatherEvent, Q_RELOCATABLE_TYPE);
@@ -174,6 +186,11 @@
     void getXMLData(const QString &source);
     bool readXMLData(const QString &source, QXmlStreamReader &xml);
 
+    // New API on envcan: need to get a specifically named file
+    void getWeatherData(const QString &source);
+    // Parse a directory listing with files or folders as hyperlinks
+    void parseDirListing(WeatherData::UrlInfo &info, QXmlStreamReader &xml);
+
     // Check if place specified is valid or not
     QStringList validate(const QString &source) const;
 
diff -Nru plasma-workspace-6.3.5/debian/changelog plasma-workspace-6.3.6/debian/changelog
--- plasma-workspace-6.3.5/debian/changelog	2025-05-20 08:31:26.000000000 +0200
+++ plasma-workspace-6.3.6/debian/changelog	2025-07-21 18:21:10.000000000 +0200
@@ -1,3 +1,61 @@
+plasma-workspace (4:6.3.6-2) unstable; urgency=medium
+
+  [ Aurélien COUDERC ]
+  * Fix incorrectly encoded libplasma dependency version that breaks
+    builds with our mixed 6.3.x packages in trixie.
+
+ -- Aurélien COUDERC <coucouf@debian.org>  Mon, 21 Jul 2025 18:21:10 +0200
+
+plasma-workspace (4:6.3.6-1) unstable; urgency=medium
+
+  [ Aurélien COUDERC ]
+  * New upstream release (6.3.6).
+    - Weather/envcan: Adapt to the new locations list URL.
+    - Weather/envcan: Fix handling of non-continuous hourly folder list.
+    - Dataengines/weather: Adapt to the new dynamic URLs on envcan.
+    - RunCommand: fix "hide faded completion text" calculation. (kde#505698)
+    - Klipper: make "Add Actions" dialog only window-modal. (kde#501938)
+    - Fix cell height calc in resize handle.
+    - Applets/notifications: Don't set a parent for
+    WidgetsAskUserActionHandler. (kde#504385)
+    - Components/sessionprivate: fix a potential crash in SessionsModel.
+    - Libnotificationmanager: fix critical notifications not showing when Do
+    not disturb is active.
+    - Applets/devicenotifier: fix pointless mount action. (kde#503999)
+    - Colorsapplicator: Don't allow extended RGB from OKLabToLinearSRGB.
+    (kde#503394)
+  * Drop backported patches now part of the upstream release.
+  * Refresh patches.
+  * Backport upstream commits:
+    - Fix fallback name for task manager icons for programs with Comment
+    property missing in the desktop file. [45784326] (kde#504431)
+    - Fix crash in system settings when removing /usr/share as a wallpaper
+    directory. [e9fd71d9] (kde#503593)
+    - Fix multiple instances of Plasma shell crash when trying to stop it from
+    going to sleep. [88911e82] (kde#487660)
+    - Do not track cache partitions with freespacenotifier. [01978f58]
+    (kde#504423)
+    - Do not show logout screen on power button press when in lockscreen /
+    screensaver. [f1605df4] (kde#504575)
+    - Fix holding mouse to scroll inside desktop widgets unexpectedly entering
+    edit mode. [8e6b79da] (kde#416909)
+    - Fix "move to activity" when there are only 2 activities. [e2ae8f54]
+    (kde#483148)
+    - applets/kicker: fix filenames containing # missing from history
+    [ab55c53e] (kde#419449, kde#437960)
+    - Klipper: Remove local Configure Klipper action that conflicts
+    with global shortcuts. [d286dce3] (kde#501632)
+    - Remove unexpected hover icons above user feedback selection labels.
+    [a3e153b3] (kde#505761)
+    - Fix unablity to remove/unpin documents/apps from Application Menu after
+    deleting the document/app from system. [d1896f5a] (kde#402820)
+    - Fix unchecking "Show date" in clock settings creating an empty gap on
+    the panel until restarting plasmashell [b2e80af5] (kde#505614)
+    - Fix systemd services reload reemitting all previous OOM notifications.
+    [ec837446] (kde#502279)
+
+ -- Aurélien COUDERC <coucouf@debian.org>  Sat, 19 Jul 2025 12:11:47 +0200
+
 plasma-workspace (4:6.3.5-1) unstable; urgency=medium
 
   [ Aurélien COUDERC ]
diff -Nru plasma-workspace-6.3.5/debian/patches/fix-incorrect-libplasma-dependency-version.patch plasma-workspace-6.3.6/debian/patches/fix-incorrect-libplasma-dependency-version.patch
--- plasma-workspace-6.3.5/debian/patches/fix-incorrect-libplasma-dependency-version.patch	1970-01-01 01:00:00.000000000 +0100
+++ plasma-workspace-6.3.6/debian/patches/fix-incorrect-libplasma-dependency-version.patch	2025-07-21 18:20:15.000000000 +0200
@@ -0,0 +1,10 @@
+--- a/libcolorcorrect/LibColorCorrectConfig.cmake.in
++++ b/libcolorcorrect/LibColorCorrectConfig.cmake.in
+@@ -3,6 +3,6 @@
+ include(CMakeFindDependencyMacro)
+ find_dependency(Qt6Core "@QT_MIN_VERSION@")
+ find_dependency(Qt6Quick "@QT_MIN_VERSION@")
+-find_dependency(Plasma "@PROJECT_VERSION@")
++find_dependency(Plasma "@PROJECT_DEP_VERSION@")
+ 
+ include("${CMAKE_CURRENT_LIST_DIR}/LibColorCorrectLibraryTargets.cmake")
diff -Nru plasma-workspace-6.3.5/debian/patches/relax-interplasma-versioned-deps.patch plasma-workspace-6.3.6/debian/patches/relax-interplasma-versioned-deps.patch
--- plasma-workspace-6.3.5/debian/patches/relax-interplasma-versioned-deps.patch	2025-05-16 18:55:16.000000000 +0200
+++ plasma-workspace-6.3.6/debian/patches/relax-interplasma-versioned-deps.patch	2025-07-19 10:24:18.000000000 +0200
@@ -4,7 +4,7 @@
  list(GET VERSION_LIST 1 PROJECT_VERSION_MINOR)
  list(GET VERSION_LIST 2 PROJECT_VERSION_PATCH)
  
--set(PROJECT_DEP_VERSION "6.3.5")
+-set(PROJECT_DEP_VERSION "6.3.6")
 +set(PROJECT_DEP_VERSION "6.3.4")
  set(QT_MIN_VERSION "6.7.0")
  set(KF6_MIN_VERSION "6.10.0")
diff -Nru plasma-workspace-6.3.5/debian/patches/series plasma-workspace-6.3.6/debian/patches/series
--- plasma-workspace-6.3.5/debian/patches/series	2025-05-20 08:31:26.000000000 +0200
+++ plasma-workspace-6.3.6/debian/patches/series	2025-07-21 18:18:35.000000000 +0200
@@ -1,3 +1,4 @@
+fix-incorrect-libplasma-dependency-version.patch
 relax-interplasma-versioned-deps.patch
 upstream_e4e0dee5_libkmpris-allow-MultiplexerModel-to-show-actual-player-name.patch
 upstream_4f9b1a69_Fix-Scroll-Wheel-issue-in-AllApps-submenu-of-Application-Dashboard.patch
@@ -14,12 +15,18 @@
 upstream_6d12cde3_wallpapers-image-Fix-thumbnails-not-matching-output-size.patch
 upstream_8845c001_shell-Osd-Fix-missing-RTL.patch
 upstream_142caad0_applets-notification-fix-fullRepresentation-only-widgets.patch
-upstream_32a7cf2a_colorsapplicator-Don-t-allow-extended-RGB-from-OKLabToLinearSRGB.patch
-upstream_60859fa9_applets-devicenotifier-fix-pointless-mount-action.patch
-upstream_7635c551_libnotificationmanager-fix-critical-notifications-not-showing-when-Do-not-disturb-is-active.patch
-upstream_72719edd_components-sessionprivate-fix-a-potential-crash-in-SessionsModel.patch
-upstream_41a554e6_applets-notifications-Don-t-set-a-parent-for-WidgetsAskUserActionHandler.patch
-upstream_2c855c2f_Fix-cell-height-calc-in-resize-handle.patch
-upstream_bf67f256_klipper-make-Add-Actions-dialog-only-window-modal.patch
 upstream_d4df9b5f_applets-systemmonitor-handle-null-faceController.patch
 upstream_b9bc83c6_applets-systemmonitor-skip-configure-button-on-sensorless-faces.patch
+upstream_45784326_libtaskmanager-show-Comment-for-launcher-icons-when-appropriate.patch
+upstream_e9fd71d9_wallpapers-image-don-t-crash-when-removing-usr-share.patch
+upstream_88911e82_shell-Rearrange-the-teardown-order.patch
+upstream_01978f58_Do-not-track-cache-partitions-with-freespacenotifier.patch
+upstream_f1605df4_Do-not-show-logout-screen-when-in-lockscreen-screensaver.patch
+upstream_8e6b79da_containmentlayoutmanager-don-t-enter-edit-mode-without-activefocus.patch
+upstream_e2ae8f54_libtaskmanager-fix-move-to-activity-when-on-almost-all-activities.patch
+upstream_ab55c53e_applets-kicker-fix-filenames-containing-in-history.patch
+upstream_d286dce3_Klipper-Remove-local-Configure-Klipper-action.patch
+upstream_a4e153b3_kcms-feedback-remove-little-hover-icons.patch
+upstream_d1896f5a_applets-kicker-resolve-non-existing-files-to-their-url.patch
+upstream_b2e80af5_Only-resize-width-to-fit-date-elements-if-they-are-visible.patch
+upstream_ec837446_Do-not-emit-OOM-notifications-on-systemd-services-reload.patch
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_01978f58_Do-not-track-cache-partitions-with-freespacenotifier.patch plasma-workspace-6.3.6/debian/patches/upstream_01978f58_Do-not-track-cache-partitions-with-freespacenotifier.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_01978f58_Do-not-track-cache-partitions-with-freespacenotifier.patch	1970-01-01 01:00:00.000000000 +0100
+++ plasma-workspace-6.3.6/debian/patches/upstream_01978f58_Do-not-track-cache-partitions-with-freespacenotifier.patch	2025-07-19 10:56:54.000000000 +0200
@@ -0,0 +1,49 @@
+From 01978f583ae1d2878830ccd8b58c4b3e0c39f257 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Niccol=C3=B2=20Venerandi?= <niccolo@venerandi.com>
+Date: Thu, 29 May 2025 07:25:03 +0000
+Subject: [PATCH] Do not track cache partitions with freespacenotifier
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+BUG:504423
+
+
+(cherry picked from commit f4a08099d0aae466f06f0094498cc593c8ce4532)
+
+e033ef89 Do not track cache partitions with freespacenotifier
+5203019a Apply 1 suggestion(s) to 1 file(s)
+
+Co-authored-by: Niccolò Venerandi <niccolo@venerandi.com>
+---
+ freespacenotifier/module.cpp | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/freespacenotifier/module.cpp b/freespacenotifier/module.cpp
+index 3d8e06c0a4..1700a3695d 100644
+--- a/freespacenotifier/module.cpp
++++ b/freespacenotifier/module.cpp
+@@ -19,6 +19,7 @@
+ #include <Solid/StorageVolume>
+ 
+ #include <QDir>
++#include <QFile>
+ 
+ #include "kded_interface.h"
+ 
+@@ -74,7 +75,11 @@ void FreeSpaceNotifierModule::onNewSolidDevice(const QString &udi)
+     if (auto generic = device.as<Solid::GenericInterface>()) {
+         isReadOnly = generic->property(QStringLiteral("ReadOnly")).toBool();
+     }
+-    if (isReadOnly) {
++    // Cache devices should be marked through a
++    // CACHEDIR.TAG file to avoid indexing; see
++    // https://bford.info/cachedir/ for reference.
++    const bool isCache = QFile::exists(QDir(access->filePath()).filePath(QStringLiteral("CACHEDIR.TAG")));
++    if (isReadOnly || isCache) {
+         return;
+     }
+ 
+-- 
+GitLab
+
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_2c855c2f_Fix-cell-height-calc-in-resize-handle.patch plasma-workspace-6.3.6/debian/patches/upstream_2c855c2f_Fix-cell-height-calc-in-resize-handle.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_2c855c2f_Fix-cell-height-calc-in-resize-handle.patch	2025-05-20 08:31:26.000000000 +0200
+++ plasma-workspace-6.3.6/debian/patches/upstream_2c855c2f_Fix-cell-height-calc-in-resize-handle.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,33 +0,0 @@
-From 2c855c2fe47ce4ea8ba4fd0edb840f21bb7a9937 Mon Sep 17 00:00:00 2001
-From: Nate Graham <nate@kde.org>
-Date: Thu, 22 May 2025 08:25:05 -0600
-Subject: [PATCH] Fix cell height calc in resize handle
-
-Correct typo using cellWidth() instead of cellHeight() for
-minimum height calculation during vertical resizing. Ensures
-proper cell-aligned sizing behavior.
-
-
-(cherry picked from commit 4b1dfd560433ef89f80b5916d2ac15739c5f91fb)
-
-Co-authored-by: Wang Yu <wangyu@uniontech.com>
----
- components/containmentlayoutmanager/resizehandle.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/components/containmentlayoutmanager/resizehandle.cpp b/components/containmentlayoutmanager/resizehandle.cpp
-index b3b1f673ef0..f840717ecf6 100644
---- a/components/containmentlayoutmanager/resizehandle.cpp
-+++ b/components/containmentlayoutmanager/resizehandle.cpp
-@@ -156,7 +156,7 @@ void ResizeHandle::mouseMoveEvent(QMouseEvent *event)
- 
-     // Now make minimumSize an integer number of cells
-     minimumSize.setWidth(ceil(minimumSize.width() / layout->cellWidth()) * layout->cellWidth());
--    minimumSize.setHeight(ceil(minimumSize.height() / layout->cellWidth()) * layout->cellHeight());
-+    minimumSize.setHeight(ceil(minimumSize.height() / layout->cellHeight()) * layout->cellHeight());
- 
-     // Horizontal resize
-     if (resizeLeft()) {
--- 
-GitLab
-
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_32a7cf2a_colorsapplicator-Don-t-allow-extended-RGB-from-OKLabToLinearSRGB.patch plasma-workspace-6.3.6/debian/patches/upstream_32a7cf2a_colorsapplicator-Don-t-allow-extended-RGB-from-OKLabToLinearSRGB.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_32a7cf2a_colorsapplicator-Don-t-allow-extended-RGB-from-OKLabToLinearSRGB.patch	2025-05-20 08:31:26.000000000 +0200
+++ plasma-workspace-6.3.6/debian/patches/upstream_32a7cf2a_colorsapplicator-Don-t-allow-extended-RGB-from-OKLabToLinearSRGB.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,41 +0,0 @@
-From 32a7cf2a06e16d58cbb8c4a0ab08a0832fa377d4 Mon Sep 17 00:00:00 2001
-From: Akseli Lahtinen <akselmo@akselmo.dev>
-Date: Mon, 5 May 2025 21:14:08 +0300
-Subject: [PATCH] colorsapplicator: Don't allow extended RGB from
- OKLabToLinearSRGB
-
-When reading the rgb values in OKLabToLinearSRGB, there is a chance,
-when colors are tinted, for QColor::fromRgbF to return Extended RGB
-colors, which can invert.
-Read more at
-https://doc.qt.io/qt-6/qcolor.html#the-extended-rgb-color-model
-
-Instead, just make sure we always return regular RGB values.
-
-BUG: 503394
-FIXED-IN: 6.3
-
-
-(cherry picked from commit 4329b16a96a47c310e2d2a5da6f7543f94b6d3ec)
-
-Co-authored-by: Akseli Lahtinen <akselmo@akselmo.dev>
----
- kcms/colors/colorsapplicator.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/kcms/colors/colorsapplicator.cpp b/kcms/colors/colorsapplicator.cpp
-index 6f0eeffe666..7d28889de6f 100644
---- a/kcms/colors/colorsapplicator.cpp
-+++ b/kcms/colors/colorsapplicator.cpp
-@@ -100,7 +100,7 @@ QColor OKLabToLinearSRGB(LAB lab)
-     const auto g = -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s;
-     const auto b = -0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s;
- 
--    return QColor::fromRgbF(r, g, b);
-+    return QColor::fromRgbF(r, g, b).toRgb();
- }
- 
- auto toLinearSRGB = QColorSpace(QColorSpace::SRgb).transformationToColorSpace(QColorSpace::SRgbLinear);
--- 
-GitLab
-
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_41a554e6_applets-notifications-Don-t-set-a-parent-for-WidgetsAskUserActionHandler.patch plasma-workspace-6.3.6/debian/patches/upstream_41a554e6_applets-notifications-Don-t-set-a-parent-for-WidgetsAskUserActionHandler.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_41a554e6_applets-notifications-Don-t-set-a-parent-for-WidgetsAskUserActionHandler.patch	2025-05-20 08:31:26.000000000 +0200
+++ plasma-workspace-6.3.6/debian/patches/upstream_41a554e6_applets-notifications-Don-t-set-a-parent-for-WidgetsAskUserActionHandler.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,51 +0,0 @@
-From 41a554e6d9b3e58ac3d7375eb4fbd22acca3a5af Mon Sep 17 00:00:00 2001
-From: Kai Uwe Broulik <kde@privat.broulik.de>
-Date: Tue, 20 May 2025 16:00:15 +0000
-Subject: [PATCH] applets/notifications: Don't set a parent for
- WidgetsAskUserActionHandler
-
-The notification popup gets destroyed as soon as the user clicked the menu item,
-so the handler is destroyed (curiously still leaving the KMessageDialog up) and
-askUserDeleteResult is never emitted.
-
-BUG: 504385
-
-
-(cherry picked from commit f81dd70a3501f1011d73128277c4aba87014c481)
-
-Co-authored-by: Kai Uwe Broulik <kde@privat.broulik.de>
-
-(cherry picked from commit 7dff2f025da66873911eb1a66fbdded080c7b473)
-
-Co-authored-by: Kai Uwe Broulik <kde@privat.broulik.de>
----
- applets/notifications/filemenu.cpp | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/applets/notifications/filemenu.cpp b/applets/notifications/filemenu.cpp
-index 4bc06cb4c02..26b9c670d55 100644
---- a/applets/notifications/filemenu.cpp
-+++ b/applets/notifications/filemenu.cpp
-@@ -151,7 +151,8 @@ void FileMenu::open(int x, int y)
-     const bool canTrash = itemProperties.isLocal() && itemProperties.supportsMoving();
-     if (canTrash) {
-         auto moveToTrashLambda = [this] {
--            auto handler = new KIO::WidgetsAskUserActionHandler(this);
-+            // No parent since the FileMenu will be destroyed as soon as the user clicked the menu item.
-+            auto handler = new KIO::WidgetsAskUserActionHandler();
-             connect(handler, &KIO::WidgetsAskUserActionHandler::askUserDeleteResult, [handler](bool allow, const QList<QUrl> &urls) {
-                 if (allow) {
-                     auto job = KIO::trash(urls);
-@@ -172,7 +173,8 @@ void FileMenu::open(int x, int y)
- 
-     if (itemProperties.supportsDeleting() && (!canTrash || showDeleteCommand)) {
-         auto deleteLambda = [this] {
--            auto handler = new KIO::WidgetsAskUserActionHandler(this);
-+            // No parent since the FileMenu will be destroyed as soon as the user clicked the menu item.
-+            auto handler = new KIO::WidgetsAskUserActionHandler();
-             connect(handler, &KIO::WidgetsAskUserActionHandler::askUserDeleteResult, [handler](bool allow, const QList<QUrl> &urls) {
-                 if (allow) {
-                     auto job = KIO::del(urls);
--- 
-GitLab
-
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_45784326_libtaskmanager-show-Comment-for-launcher-icons-when-appropriate.patch plasma-workspace-6.3.6/debian/patches/upstream_45784326_libtaskmanager-show-Comment-for-launcher-icons-when-appropriate.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_45784326_libtaskmanager-show-Comment-for-launcher-icons-when-appropriate.patch	1970-01-01 01:00:00.000000000 +0100
+++ plasma-workspace-6.3.6/debian/patches/upstream_45784326_libtaskmanager-show-Comment-for-launcher-icons-when-appropriate.patch	2025-07-19 10:40:10.000000000 +0200
@@ -0,0 +1,88 @@
+From 45784326e48665849ba881a442d0d76bb2b22ca0 Mon Sep 17 00:00:00 2001
+From: Nate Graham <nate@kde.org>
+Date: Thu, 22 May 2025 09:06:52 -0600
+Subject: [PATCH] libtaskmanager: show Comment for launcher icons when
+ appropriate
+
+Right now, launcher icons get a caption equal to the app's GenericName,
+if one is set in the metadata. If not, it gets no caption.
+
+This differs from what Kicker and Kickoff Manager do: a more complex
+behavior to show the Comment if the app has no GenericName or if its
+GenericName is equal to its Name. Let's replicate the same logic here.
+
+BUG: 504431
+FIXED-IN: 6.4.0
+
+
+(cherry picked from commit ae39f3219d6fc849fe8de0d1c165a572598082fe)
+
+Co-authored-by: Nate Graham <nate@kde.org>
+---
+ libtaskmanager/tasktools.cpp | 22 ++++++++++++++++++----
+ 1 file changed, 18 insertions(+), 4 deletions(-)
+
+diff --git a/libtaskmanager/tasktools.cpp b/libtaskmanager/tasktools.cpp
+index 873d9eac31..e46d96382b 100644
+--- a/libtaskmanager/tasktools.cpp
++++ b/libtaskmanager/tasktools.cpp
+@@ -34,6 +34,20 @@
+ 
+ using namespace Qt::StringLiterals;
+ 
++static const QString appropriateCaption(const KService::Ptr &service)
++{
++    if (!service) {
++        return {};
++    }
++
++    const QString genericName = service->genericName();
++    if (!genericName.isEmpty() && genericName != service->name()) {
++        return genericName;
++    }
++
++    return service->comment();
++}
++
+ namespace TaskManager
+ {
+ AppData appDataFromUrl(const QUrl &url, const QIcon &fallbackIcon)
+@@ -65,7 +79,7 @@ AppData appDataFromUrl(const QUrl &url, const QIcon &fallbackIcon)
+ 
+         if (service && url.path() == service->menuId()) {
+             data.name = service->name();
+-            data.genericName = service->genericName();
++            data.genericName = appropriateCaption(service);
+             data.id = service->storageId();
+ 
+             if (data.icon.isNull()) {
+@@ -89,7 +103,7 @@ AppData appDataFromUrl(const QUrl &url, const QIcon &fallbackIcon)
+ 
+             if (service && QUrl::fromLocalFile(service->entryPath()) == url) {
+                 data.name = service->name();
+-                data.genericName = service->genericName();
++                data.genericName = appropriateCaption(service);
+                 data.id = service->storageId();
+ 
+                 if (data.icon.isNull()) {
+@@ -99,7 +113,7 @@ AppData appDataFromUrl(const QUrl &url, const QIcon &fallbackIcon)
+                 KDesktopFile f(url.toLocalFile());
+                 if (f.tryExec()) {
+                     data.name = f.readName();
+-                    data.genericName = f.readGenericName();
++                    data.genericName = appropriateCaption(KService::serviceByDesktopPath(url.toLocalFile()));
+                     data.id = QUrl::fromLocalFile(f.fileName()).fileName();
+ 
+                     if (data.icon.isNull()) {
+@@ -144,7 +158,7 @@ AppData appDataFromUrl(const QUrl &url, const QIcon &fallbackIcon)
+             const QString &desktopFile = service->entryPath();
+ 
+             data.name = service->name();
+-            data.genericName = service->genericName();
++            data.genericName = appropriateCaption(service);
+             data.id = service->storageId();
+ 
+             if (data.icon.isNull()) {
+-- 
+GitLab
+
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_60859fa9_applets-devicenotifier-fix-pointless-mount-action.patch plasma-workspace-6.3.6/debian/patches/upstream_60859fa9_applets-devicenotifier-fix-pointless-mount-action.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_60859fa9_applets-devicenotifier-fix-pointless-mount-action.patch	2025-05-20 08:31:26.000000000 +0200
+++ plasma-workspace-6.3.6/debian/patches/upstream_60859fa9_applets-devicenotifier-fix-pointless-mount-action.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,72 +0,0 @@
-From 60859fa99ad81e2aff7ceb35d4ae79a304374f37 Mon Sep 17 00:00:00 2001
-From: Nate Graham <nate@kde.org>
-Date: Thu, 15 May 2025 15:30:30 -0600
-Subject: [PATCH] applets/devicenotifier: fix pointless mount action
-
-BUG: 503999
-
-Audio CD and blank CD/DVD/BD does not have storage access.
-So check this before add mount action for them.
-
-
-(cherry picked from commit 683b8c3d71781c4e821cd2f9ac93eb4f157bb6ea)
-
-Co-authored-by: Bohdan Onofriichuk <bogdan.onofriuchuk@gmail.com>
----
- .../devicenotifier/plugin/actions/mountaction.cpp   | 13 ++++++++++++-
- applets/devicenotifier/plugin/actions/mountaction.h |  1 +
- 2 files changed, 13 insertions(+), 1 deletion(-)
-
-diff --git a/applets/devicenotifier/plugin/actions/mountaction.cpp b/applets/devicenotifier/plugin/actions/mountaction.cpp
-index 4df5c982042..88d3d898191 100644
---- a/applets/devicenotifier/plugin/actions/mountaction.cpp
-+++ b/applets/devicenotifier/plugin/actions/mountaction.cpp
-@@ -18,6 +18,8 @@
- MountAction::MountAction(const QString &udi, QObject *parent)
-     : ActionInterface(udi, parent)
-     , m_stateMonitor(DevicesStateMonitor::instance())
-+    , m_supportsMTP(false)
-+    , m_hasStorageAccess(false)
- {
-     Solid::Device device(udi);
- 
-@@ -39,6 +41,15 @@ MountAction::MountAction(const QString &udi, QObject *parent)
- 
-     m_supportsMTP = supportedProtocols.contains(QLatin1String("mtp"));
- 
-+    // It's possible for there to be no StorageAccess (e.g. MTP devices don't have one)
-+    if (device.is<Solid::StorageAccess>()) {
-+        Solid::StorageAccess *access = device.as<Solid::StorageAccess>();
-+        if (access) {
-+            qCDebug(APPLETS::DEVICENOTIFIER) << "Mount action: have storage access";
-+            m_hasStorageAccess = true;
-+        }
-+    }
-+
-     connect(m_stateMonitor.get(), &DevicesStateMonitor::stateChanged, this, &MountAction::updateIsValid);
- }
- 
-@@ -67,7 +78,7 @@ void MountAction::triggered()
- 
- bool MountAction::isValid() const
- {
--    return m_stateMonitor->isRemovable(m_udi) && !m_stateMonitor->isMounted(m_udi) && !m_supportsMTP;
-+    return m_hasStorageAccess && m_stateMonitor->isRemovable(m_udi) && !m_stateMonitor->isMounted(m_udi) && !m_supportsMTP;
- }
- 
- void MountAction::updateIsValid(const QString &udi)
-diff --git a/applets/devicenotifier/plugin/actions/mountaction.h b/applets/devicenotifier/plugin/actions/mountaction.h
-index c7f744f1839..a76ee2f5b04 100644
---- a/applets/devicenotifier/plugin/actions/mountaction.h
-+++ b/applets/devicenotifier/plugin/actions/mountaction.h
-@@ -33,6 +33,7 @@ private Q_SLOTS:
- 
- private:
-     bool m_supportsMTP;
-+    bool m_hasStorageAccess;
- 
-     std::shared_ptr<DevicesStateMonitor> m_stateMonitor;
- };
--- 
-GitLab
-
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_72719edd_components-sessionprivate-fix-a-potential-crash-in-SessionsModel.patch plasma-workspace-6.3.6/debian/patches/upstream_72719edd_components-sessionprivate-fix-a-potential-crash-in-SessionsModel.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_72719edd_components-sessionprivate-fix-a-potential-crash-in-SessionsModel.patch	2025-05-20 08:31:26.000000000 +0200
+++ plasma-workspace-6.3.6/debian/patches/upstream_72719edd_components-sessionprivate-fix-a-potential-crash-in-SessionsModel.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,56 +0,0 @@
-From 72719edd270f935f9054e286e257cd8e7ed2698c Mon Sep 17 00:00:00 2001
-From: Fushan Wen <qydwhotmail@gmail.com>
-Date: Mon, 19 May 2025 19:56:15 +0800
-Subject: [PATCH] components/sessionprivate: fix a potential crash in
- SessionsModel
-
-The problem is that std::function is passed by reference instead of
-copy, which might become dangling in the finished slot.
-
-
-(cherry picked from commit 3ed6ee211bbad1f5d76afa1f30844bebad17bed4)
-
-Co-authored-by: Fushan Wen <qydwhotmail@gmail.com>
-
-(cherry picked from commit 995b597b24ca96aaea81f71781de8ddf60adf5e1)
-
-Co-authored-by: Fushan Wen <qydwhotmail@gmail.com>
----
- components/sessionsprivate/sessionsmodel.cpp | 4 ++--
- components/sessionsprivate/sessionsmodel.h   | 2 +-
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/components/sessionsprivate/sessionsmodel.cpp b/components/sessionsprivate/sessionsmodel.cpp
-index b3f66f4d2c3..20bda2b6c12 100644
---- a/components/sessionsprivate/sessionsmodel.cpp
-+++ b/components/sessionsprivate/sessionsmodel.cpp
-@@ -187,11 +187,11 @@ void SessionsModel::reload()
-     }
- }
- 
--void SessionsModel::checkScreenLocked(const std::function<void(bool)> &cb)
-+void SessionsModel::checkScreenLocked(std::function<void(bool)> &&cb)
- {
-     auto reply = m_screensaverInterface->GetActive();
-     QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this);
--    QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [cb](QDBusPendingCallWatcher *watcher) {
-+    QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [cb = std::move(cb)](QDBusPendingCallWatcher *watcher) {
-         QDBusPendingReply<bool> reply = *watcher;
-         if (!reply.isError()) {
-             cb(reply.value());
-diff --git a/components/sessionsprivate/sessionsmodel.h b/components/sessionsprivate/sessionsmodel.h
-index 81084748b16..bc580d7406d 100644
---- a/components/sessionsprivate/sessionsmodel.h
-+++ b/components/sessionsprivate/sessionsmodel.h
-@@ -91,7 +91,7 @@ Q_SIGNALS:
-     void aboutToLockScreen();
- 
- private:
--    void checkScreenLocked(const std::function<void(bool)> &cb);
-+    void checkScreenLocked(std::function<void(bool)> &&cb);
- 
-     KDisplayManager m_displayManager;
- 
--- 
-GitLab
-
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_7635c551_libnotificationmanager-fix-critical-notifications-not-showing-when-Do-not-disturb-is-active.patch plasma-workspace-6.3.6/debian/patches/upstream_7635c551_libnotificationmanager-fix-critical-notifications-not-showing-when-Do-not-disturb-is-active.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_7635c551_libnotificationmanager-fix-critical-notifications-not-showing-when-Do-not-disturb-is-active.patch	2025-05-20 08:31:26.000000000 +0200
+++ plasma-workspace-6.3.6/debian/patches/upstream_7635c551_libnotificationmanager-fix-critical-notifications-not-showing-when-Do-not-disturb-is-active.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,44 +0,0 @@
-From 7635c5519acc28e503d82a570abf9f79bcfa10fe Mon Sep 17 00:00:00 2001
-From: Fushan Wen <qydwhotmail@gmail.com>
-Date: Fri, 16 May 2025 10:03:13 +0800
-Subject: [PATCH] libnotificationmanager: fix critical notifications not
- showing when Do not disturb is active
-
-The filter only checks if `WasAddedDuringInhibitionRole` is true but
-ignores the urgency flag, which is used to show critical notifications
-when Do not disturb is active.
-
-
-(cherry picked from commit 49214ae107a4a13338876488b2bc28cf018d02c4)
-
-Co-authored-by: Fushan Wen <qydwhotmail@gmail.com>
-
-(cherry picked from commit 8642df804d1e59db9233c44943483348328b4982)
-
-Co-authored-by: Fushan Wen <qydwhotmail@gmail.com>
----
- libnotificationmanager/notificationfilterproxymodel.cpp | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/libnotificationmanager/notificationfilterproxymodel.cpp b/libnotificationmanager/notificationfilterproxymodel.cpp
-index 6e847a5eea5..f8ad1d93a83 100644
---- a/libnotificationmanager/notificationfilterproxymodel.cpp
-+++ b/libnotificationmanager/notificationfilterproxymodel.cpp
-@@ -191,8 +191,12 @@ bool NotificationFilterProxyModel::filterAcceptsRow(int source_row, const QModel
-         }
-     }
- 
--    if (!m_showAddedDuringInhibition && sourceIdx.data(Notifications::WasAddedDuringInhibitionRole).toBool()) {
--        return false;
-+    // Normal Do Not Disturb filtering
-+    if (!m_showAddedDuringInhibition) {
-+        // Show critical notifications even in Do Not Disturb
-+        if (!m_urgencies.testFlag(urgency) && sourceIdx.data(Notifications::WasAddedDuringInhibitionRole).toBool()) {
-+            return false;
-+        }
-     }
- 
-     return true;
--- 
-GitLab
-
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_88911e82_shell-Rearrange-the-teardown-order.patch plasma-workspace-6.3.6/debian/patches/upstream_88911e82_shell-Rearrange-the-teardown-order.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_88911e82_shell-Rearrange-the-teardown-order.patch	1970-01-01 01:00:00.000000000 +0100
+++ plasma-workspace-6.3.6/debian/patches/upstream_88911e82_shell-Rearrange-the-teardown-order.patch	2025-07-19 10:52:36.000000000 +0200
@@ -0,0 +1,89 @@
+From 88911e8246c0136fa07945304fc9ba7840b90f8f Mon Sep 17 00:00:00 2001
+From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
+Date: Wed, 28 May 2025 13:36:20 +0000
+Subject: [PATCH] shell: Rearrange the teardown order
+
+At the moment, the ShellCorona is destroyed after the QApplication object.
+Destroying something after the application object can lead to
+unexpected results because most of the code is written with an assumption
+that the app object and the associated objects, e.g. the qpa, are still
+valid when the cleanup code runs.
+
+This change puts the ShellCorona on the stack so the destruction order
+looks as follows:
+
+- destroy ShellCorona
+- destroy QApplication
+
+CCBUG: 487660
+
+
+(cherry picked from commit e2326d7f9e752eb18411ef4c0bcd53b8f34e02c6)
+
+Co-authored-by: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
+---
+ shell/main.cpp | 17 +++++++----------
+ 1 file changed, 7 insertions(+), 10 deletions(-)
+
+diff --git a/shell/main.cpp b/shell/main.cpp
+index ae583ce127..a182d16e2f 100644
+--- a/shell/main.cpp
++++ b/shell/main.cpp
+@@ -92,7 +92,7 @@ int main(int argc, char *argv[])
+ 
+     bool replace = false;
+ 
+-    ShellCorona *corona = nullptr;
++    ShellCorona corona;
+     {
+         QCommandLineParser cliOptions;
+ 
+@@ -132,23 +132,20 @@ int main(int argc, char *argv[])
+         QObject::connect(&app, &QGuiApplication::commitDataRequest, disableSessionManagement);
+         QObject::connect(&app, &QGuiApplication::saveStateRequest, disableSessionManagement);
+ 
+-        corona = new ShellCorona(&app);
+-        corona->setShell(cliOptions.value(shellPluginOption));
+-        if (!corona->kPackage().isValid()) {
+-            qCritical() << "starting invalid corona" << corona->shell();
++        corona.setShell(cliOptions.value(shellPluginOption));
++        if (!corona.kPackage().isValid()) {
++            qCritical() << "starting invalid corona" << corona.shell();
+             return 1;
+         }
+ 
+ #ifdef WITH_KUSERFEEDBACKCORE
+-        auto userFeedback = new UserFeedback(corona, &app);
++        auto userFeedback = new UserFeedback(&corona, &corona);
+         if (cliOptions.isSet(feedbackOption)) {
+             QTextStream(stdout) << userFeedback->describeDataSources();
+             return 0;
+         }
+ #endif
+ 
+-        QObject::connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, corona, &QObject::deleteLater);
+-
+         if (!cliOptions.isSet(noRespawnOption)) {
+             KCrash::setFlags(KCrash::AutoRestart);
+         }
+@@ -156,7 +153,7 @@ int main(int argc, char *argv[])
+         // Tells libnotificationmanager that we're the only true application that may own notification and job progress services
+         qApp->setProperty("_plasma_dbus_master", true);
+ 
+-        QObject::connect(corona, &ShellCorona::glInitializationFailed, &app, [&app]() {
++        QObject::connect(&corona, &ShellCorona::glInitializationFailed, &app, [&app]() {
+             // scene graphs errors come from a thread
+             // even though we process them in the main thread, app.exit could still process these events
+             static bool s_multipleInvokations = false;
+@@ -185,7 +182,7 @@ int main(int argc, char *argv[])
+ 
+     KDBusService service(KDBusService::Unique | KDBusService::StartupOption(replace ? KDBusService::Replace : 0));
+ 
+-    corona->init();
++    corona.init();
+     SoftwareRendererNotifier::notifyIfRelevant();
+ 
+     return app.exec();
+-- 
+GitLab
+
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_8e6b79da_containmentlayoutmanager-don-t-enter-edit-mode-without-activefocus.patch plasma-workspace-6.3.6/debian/patches/upstream_8e6b79da_containmentlayoutmanager-don-t-enter-edit-mode-without-activefocus.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_8e6b79da_containmentlayoutmanager-don-t-enter-edit-mode-without-activefocus.patch	1970-01-01 01:00:00.000000000 +0100
+++ plasma-workspace-6.3.6/debian/patches/upstream_8e6b79da_containmentlayoutmanager-don-t-enter-edit-mode-without-activefocus.patch	2025-07-19 11:22:56.000000000 +0200
@@ -0,0 +1,51 @@
+From 8e6b79da5e58622fd27999c85168a616871324b7 Mon Sep 17 00:00:00 2001
+From: Christoph Wolk <cwo.kde@posteo.net>
+Date: Tue, 3 Jun 2025 21:04:21 +0000
+Subject: [PATCH] containmentlayoutmanager: don't enter edit mode without
+ activefocus
+
+ItemContainer enters edit mode on pressAndHold for desktop widgets not
+set to immutable. This causes a problem with menus that open on press -
+the container will not receive further mouse events that now go to the
+menu, so it still considers itself pressed and unmoved the whole time,
+and goes into edit mode after a while, exiting the menu. This makes
+on-press menus in desktop widgets borderline unusable, and even if the
+user manages to be quick enough to activate the desired entry during the
+pressAndHold duration, it'll still enter edit mode unless the user also
+does a full click on the applet afterward.
+
+We can circumvent this particular case relatively easily by listening to
+the container's activefocus changes - the popup opening does not cause
+a focusOut event, but it does take activeFocus away from the container,
+so if we stop the timer in that case, it works out as it should.
+
+CCBUG: 416909
+
+
+(cherry picked from commit 3d9dd7fe1a664b6b4f20523d6c4425eb57dc6b4c)
+
+Co-authored-by: Christoph Wolk <cwo.kde@posteo.net>
+---
+ components/containmentlayoutmanager/itemcontainer.cpp | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/components/containmentlayoutmanager/itemcontainer.cpp b/components/containmentlayoutmanager/itemcontainer.cpp
+index b241f4814b..047c606c70 100644
+--- a/components/containmentlayoutmanager/itemcontainer.cpp
++++ b/components/containmentlayoutmanager/itemcontainer.cpp
+@@ -38,6 +38,12 @@ ItemContainer::ItemContainer(QQuickItem *parent)
+         setLayout(qobject_cast<AppletsLayout *>(parentItem()));
+     });
+ 
++    connect(this, &ItemContainer::activeFocusChanged, this, [this]() {
++        if (!hasActiveFocus()) { // don't start edit mode if press caused a popup
++            m_editModeTimer->stop();
++        }
++    });
++
+     connect(m_editModeTimer, &QTimer::timeout, this, [this]() {
+         setEditMode(true);
+     });
+-- 
+GitLab
+
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_a4e153b3_kcms-feedback-remove-little-hover-icons.patch plasma-workspace-6.3.6/debian/patches/upstream_a4e153b3_kcms-feedback-remove-little-hover-icons.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_a4e153b3_kcms-feedback-remove-little-hover-icons.patch	1970-01-01 01:00:00.000000000 +0100
+++ plasma-workspace-6.3.6/debian/patches/upstream_a4e153b3_kcms-feedback-remove-little-hover-icons.patch	2025-07-19 11:57:59.000000000 +0200
@@ -0,0 +1,60 @@
+From a4e153b3451239e0efb563ecbae84e9cfec14b37 Mon Sep 17 00:00:00 2001
+From: Nate Graham <nate@kde.org>
+Date: Fri, 20 Jun 2025 08:38:03 -0600
+Subject: [PATCH] kcms/feedback: remove little hover icons
+
+These icons have an unclear purpose since they have no text, and the
+same icons are not repeated elsewhere in the KCM's UI to provide some
+clue as to their meaning or purpose. They only appear on hover and
+can't be accessed on touch at all; let's just remove them to prevent
+user confusion.
+
+The backend code providing icons in the model is preserved in case we
+ever want to do something else with icons in the future.
+
+BUG: 505761
+FIXED-IN: 6.4.1
+
+
+(cherry picked from commit 3c277146c4ec44cde54988dcd6c70b17442ad5e9)
+
+Co-authored-by: Nate Graham <nate@kde.org>
+---
+ kcms/feedback/ui/main.qml | 21 ---------------------
+ 1 file changed, 21 deletions(-)
+
+diff --git a/kcms/feedback/ui/main.qml b/kcms/feedback/ui/main.qml
+index bb565169ea..839b8ed3ad 100644
+--- a/kcms/feedback/ui/main.qml
++++ b/kcms/feedback/ui/main.qml
+@@ -145,27 +145,6 @@ SimpleKCM {
+                         text: "· " + modelData.description
+                         textFormat: Text.PlainText
+                         Layout.fillWidth: true
+-
+-                        MouseArea {
+-                            anchors.fill: parent
+-                            hoverEnabled: true
+-                            QQC2.ToolTip {
+-                                width: iconsLayout.implicitWidth + Kirigami.Units.largeSpacing * 2
+-                                height: iconsLayout.implicitHeight + Kirigami.Units.smallSpacing * 2
+-                                visible: parent.containsMouse
+-                                RowLayout {
+-                                    id: iconsLayout
+-                                    Repeater {
+-                                        model: modelData.icons
+-                                        delegate: Kirigami.Icon {
+-                                            implicitHeight: Kirigami.Units.iconSizes.medium
+-                                            implicitWidth: Kirigami.Units.iconSizes.medium
+-                                            source: modelData
+-                                        }
+-                                    }
+-                                }
+-                            }
+-                        }
+                     }
+                 }
+             }
+-- 
+GitLab
+
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_ab55c53e_applets-kicker-fix-filenames-containing-in-history.patch plasma-workspace-6.3.6/debian/patches/upstream_ab55c53e_applets-kicker-fix-filenames-containing-in-history.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_ab55c53e_applets-kicker-fix-filenames-containing-in-history.patch	1970-01-01 01:00:00.000000000 +0100
+++ plasma-workspace-6.3.6/debian/patches/upstream_ab55c53e_applets-kicker-fix-filenames-containing-in-history.patch	2025-07-19 11:44:44.000000000 +0200
@@ -0,0 +1,53 @@
+From ab55c53e37814da5aadf9bf29dd5cae7a783ef6e Mon Sep 17 00:00:00 2001
+From: Christoph Wolk <cwo.kde@posteo.net>
+Date: Thu, 5 Jun 2025 18:33:29 +0000
+Subject: [PATCH] applets/kicker: fix filenames containing # in history
+
+Kicker takes the resource name as provided by PlasmaActivities.Stats and
+interprets it as an URL, setting the 'file' url scheme if necessary.
+This fails when the filenames contain a '#' character, as QUrl will
+interpret them as url fragments if not percent-encoded (which they are
+not for local files, but are for remote urls). This makes display and
+opening of such files fail in both Kicker and Kickoff.
+
+Instead, we test whether it's an absolute path (the local history
+entries are) and if so, use QUrl.fromLocalFile to get the correct url.
+This is also what PlasmaActivities.Stats does in ResultSet (which is
+what the Task Manager uses, so everything works there already, but we
+want a real model here).
+
+BUG: 419449
+BUG: 437960
+FIXED-IN: 6.4.0
+
+
+(cherry picked from commit c6c0a68416b5042032853a6f673bddbe475567b7)
+
+Co-authored-by: Christoph Wolk <cwo.kde@posteo.net>
+---
+ applets/kicker/recentusagemodel.cpp | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/applets/kicker/recentusagemodel.cpp b/applets/kicker/recentusagemodel.cpp
+index c0c7466e82..4546269577 100644
+--- a/applets/kicker/plugin/recentusagemodel.cpp
++++ b/applets/kicker/plugin/recentusagemodel.cpp
+@@ -273,10 +273,12 @@ QModelIndex RecentUsageModel::findPlaceForKFileItem(const KFileItem &fileItem) c
+ 
+ QVariant RecentUsageModel::docData(const QString &resource, int role, const QString &mimeType) const
+ {
+-    QUrl url(resource);
++    QUrl url;
+ 
+-    if (url.scheme().isEmpty()) {
+-        url.setScheme(QStringLiteral("file"));
++    if (QDir::isAbsolutePath(resource)) {
++        url = QUrl::fromLocalFile(resource);
++    } else {
++        url = QUrl(resource);
+     }
+ 
+     auto getFileItem = [=]() {
+-- 
+GitLab
+
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_b2e80af5_Only-resize-width-to-fit-date-elements-if-they-are-visible.patch plasma-workspace-6.3.6/debian/patches/upstream_b2e80af5_Only-resize-width-to-fit-date-elements-if-they-are-visible.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_b2e80af5_Only-resize-width-to-fit-date-elements-if-they-are-visible.patch	1970-01-01 01:00:00.000000000 +0100
+++ plasma-workspace-6.3.6/debian/patches/upstream_b2e80af5_Only-resize-width-to-fit-date-elements-if-they-are-visible.patch	2025-07-19 12:08:06.000000000 +0200
@@ -0,0 +1,26 @@
+From b2e80af58df6e58659586110ad8b84706600cc85 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Niccol=C3=B2=20Venerandi?= <niccolo@venerandi.com>
+Date: Tue, 17 Jun 2025 09:39:05 +0200
+Subject: [PATCH] Only resize width to fit date elements if they are visible
+
+BUG:505614
+---
+ applets/digital-clock/package/contents/ui/DigitalClock.qml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/applets/digital-clock/package/contents/ui/DigitalClock.qml b/applets/digital-clock/package/contents/ui/DigitalClock.qml
+index 602f6724da..1491764931 100644
+--- a/applets/digital-clock/package/contents/ui/DigitalClock.qml
++++ b/applets/digital-clock/package/contents/ui/DigitalClock.qml
+@@ -249,7 +249,7 @@ MouseArea {
+                 target: contentItem
+ 
+                 height: sizehelper.height
+-                width: dateLabel.width + labelsGrid.width + timeMetrics.advanceWidth(" ") * 2 + separator.width
++                width: (dateLabel.visible ? dateLabel.width + timeMetrics.advanceWidth(" ") * 2 + separator.width : 0) + labelsGrid.width
+             }
+ 
+             AnchorChanges {
+-- 
+GitLab
+
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_bf67f256_klipper-make-Add-Actions-dialog-only-window-modal.patch plasma-workspace-6.3.6/debian/patches/upstream_bf67f256_klipper-make-Add-Actions-dialog-only-window-modal.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_bf67f256_klipper-make-Add-Actions-dialog-only-window-modal.patch	2025-05-20 08:31:26.000000000 +0200
+++ plasma-workspace-6.3.6/debian/patches/upstream_bf67f256_klipper-make-Add-Actions-dialog-only-window-modal.patch	1970-01-01 01:00:00.000000000 +0100
@@ -1,33 +0,0 @@
-From bf67f25676d4d9777d888b6576127d368af66cb7 Mon Sep 17 00:00:00 2001
-From: Nate Graham <nate@kde.org>
-Date: Thu, 22 May 2025 14:58:27 -0600
-Subject: [PATCH] klipper: make "Add Actions" dialog only window-modal
-
-Otherwise it blocks all of plasmashell while it's open.
-
-BUG: 501938
-FIXED-IN: 6.3.6
-
-
-(cherry picked from commit 30c0703860e8e943999152e141bb44c62ee1c038)
-
-Co-authored-by: Nate Graham <nate@kde.org>
----
- klipper/editactiondialog.cpp | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/klipper/editactiondialog.cpp b/klipper/editactiondialog.cpp
-index 09c54c3dd70..eda12832e12 100644
---- a/klipper/editactiondialog.cpp
-+++ b/klipper/editactiondialog.cpp
-@@ -181,6 +181,7 @@ EditActionDialog::EditActionDialog(QWidget *parent)
-     : QDialog(parent)
- {
-     setWindowTitle(i18n("Action Properties"));
-+    setWindowModality(Qt::WindowModal);
-     QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
-     buttons->button(QDialogButtonBox::Ok)->setShortcut(Qt::CTRL | Qt::Key_Return);
-     connect(buttons, &QDialogButtonBox::accepted, this, &EditActionDialog::slotAccepted);
--- 
-GitLab
-
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_d1896f5a_applets-kicker-resolve-non-existing-files-to-their-url.patch plasma-workspace-6.3.6/debian/patches/upstream_d1896f5a_applets-kicker-resolve-non-existing-files-to-their-url.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_d1896f5a_applets-kicker-resolve-non-existing-files-to-their-url.patch	1970-01-01 01:00:00.000000000 +0100
+++ plasma-workspace-6.3.6/debian/patches/upstream_d1896f5a_applets-kicker-resolve-non-existing-files-to-their-url.patch	2025-07-19 12:02:55.000000000 +0200
@@ -0,0 +1,44 @@
+From d1896f5ac7367a96d710afcd84278760678f36f0 Mon Sep 17 00:00:00 2001
+From: Christoph Wolk <cwo.kde@posteo.net>
+Date: Mon, 23 Jun 2025 20:03:27 +0000
+Subject: [PATCH] applets/kicker: resolve non-existing files to their url
+
+Kicker's PAStats-based favorites do some normalization to, among others,
+resolve symlinked files to their resolved path to reduce duplicates.
+However, if the file doesn't exist, it essentially just gives up. This
+is a problem when trying to remove favorites that were deleted: while
+the un-favoriting in PAStats succeeds, kicker can't remove it from its
+own model because it can't identify the file by its url if it doesn't
+exist. So removed favorites confusingly stick around until the next
+plasmashell restart.
+
+Instead, we take the base url in that case - as the entries already have
+gone through the process, the url is their real url anyway.
+
+BUG: 402820
+FIXED-IN: 6.4.1
+
+
+(cherry picked from commit da244b8764cde5509598965f24804bbaa5e0939f)
+
+Co-authored-by: Christoph Wolk <cwo.kde@posteo.net>
+---
+ applets/kicker/kastatsfavoritesmodel.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/applets/kicker/kastatsfavoritesmodel.cpp b/applets/kicker/kastatsfavoritesmodel.cpp
+index b9cda44a0f..b425c88f9a 100644
+--- a/applets/kicker/plugin/kastatsfavoritesmodel.cpp
++++ b/applets/kicker/plugin/kastatsfavoritesmodel.cpp
+@@ -116,6 +116,8 @@ public:
+                     m_id = QUrl::fromLocalFile(file.canonicalFilePath()).toString();
+                     return;
+                 }
++                // if the file was deleted, take the url as-is
++                m_id = url.toString();
+             }
+ 
+             // If this is a file, we should have already covered it
+-- 
+GitLab
+
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_d286dce3_Klipper-Remove-local-Configure-Klipper-action.patch plasma-workspace-6.3.6/debian/patches/upstream_d286dce3_Klipper-Remove-local-Configure-Klipper-action.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_d286dce3_Klipper-Remove-local-Configure-Klipper-action.patch	1970-01-01 01:00:00.000000000 +0100
+++ plasma-workspace-6.3.6/debian/patches/upstream_d286dce3_Klipper-Remove-local-Configure-Klipper-action.patch	2025-07-19 11:54:27.000000000 +0200
@@ -0,0 +1,51 @@
+From d286dce389e90428f04115fdb631a381d4942641 Mon Sep 17 00:00:00 2001
+From: Akseli Lahtinen <akselmo@akselmo.dev>
+Date: Thu, 19 Jun 2025 20:46:12 +0300
+Subject: [PATCH] Klipper: Remove local Configure Klipper action
+
+This action would cause the shortcuts configuration menu to show
+both local and global shortcuts, which makes no sense due to
+Klipper being a globally accessed application.
+
+This action is only used in cases where Klipper will be it's own
+application with a normal window, similar to applications like Dolphin,
+Kate, etc.. But Klipper is never used this way.
+
+Currently only place where you can use this action is the configuration
+menu itself, where it does nothing, since the menu is already open.
+
+So let's just remove it. This also makes sure users do not accidentally
+select "Shortcut/Alternate" instead of "Global Shortcut/Alternate"
+for their shortcuts. See the related bug for context.
+
+BUG: 501632
+FIXED-IN: 6.4.1
+
+
+(cherry picked from commit 1d3fe2ac0c0e640f0b66ec1e1d34f0e0196bbd7d)
+
+Co-authored-by: Akseli Lahtinen <akselmo@akselmo.dev>
+---
+ klipper/klipper.cpp | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/klipper/klipper.cpp b/klipper/klipper.cpp
+index 3bdbf3b831..0fec260e54 100644
+--- a/klipper/klipper.cpp
++++ b/klipper/klipper.cpp
+@@ -110,12 +110,6 @@ Klipper::Klipper(QObject *parent)
+     KGlobalAccel::setGlobalShortcut(m_clearHistoryAction, QKeySequence());
+     connect(m_clearHistoryAction, &QAction::triggered, m_historyModel.get(), &HistoryModel::clearHistory);
+ 
+-    QString CONFIGURE = QStringLiteral("configure");
+-    m_configureAction = m_collection->addAction(CONFIGURE);
+-    m_configureAction->setIcon(QIcon::fromTheme(CONFIGURE));
+-    m_configureAction->setText(i18nc("@action:inmenu", "&Configure Klipper…"));
+-    connect(m_configureAction, &QAction::triggered, this, &Klipper::slotConfigure);
+-
+     m_repeatAction = m_collection->addAction(QStringLiteral("repeat_action"));
+     m_repeatAction->setText(i18nc("@action:inmenu", "Manually Invoke Action on Current Clipboard"));
+     m_repeatAction->setIcon(QIcon::fromTheme(QStringLiteral("open-menu-symbolic")));
+-- 
+GitLab
+
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_e2ae8f54_libtaskmanager-fix-move-to-activity-when-on-almost-all-activities.patch plasma-workspace-6.3.6/debian/patches/upstream_e2ae8f54_libtaskmanager-fix-move-to-activity-when-on-almost-all-activities.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_e2ae8f54_libtaskmanager-fix-move-to-activity-when-on-almost-all-activities.patch	1970-01-01 01:00:00.000000000 +0100
+++ plasma-workspace-6.3.6/debian/patches/upstream_e2ae8f54_libtaskmanager-fix-move-to-activity-when-on-almost-all-activities.patch	2025-07-19 11:27:48.000000000 +0200
@@ -0,0 +1,70 @@
+From e2ae8f54b0390b869770f59c257d45df99b24678 Mon Sep 17 00:00:00 2001
+From: Christoph Wolk <cwo.kde@posteo.net>
+Date: Thu, 5 Jun 2025 15:18:08 +0000
+Subject: [PATCH] libtaskmanager: fix "move to activity" when on almost all
+ activities
+
+Using the task manager to move windows to other activities works in
+most circumstances, but fails under one condition: when a window is
+already on all activities except the one that is being moved to, the
+window instead ends up on all activities, and has to be moved to that
+activity again to be only on that workspace. This is usually a rare edge
+case, but very commonly happens when using exactly two activities,
+namely always when moving a window from one activity to the other.
+
+This is the result of some unusual api implementation details of
+activities: a window being on all activities is represented by having
+the activity list for that window empty. Moving a window to a different
+activity in  libtaskmanager is done by first adding the window to the
+activity list using the plasma wayland protocol. If the list on the kwin
+side is now  full, it'll flip it over into the empty list (i.e. all
+activities). Next libtaskmanager tries to remove the other activities
+from the list, this fails because the list is already empty (and kwin
+doesn't handle this because "this use case is not important enough to
+handle here").
+
+Luckily enough, this use case is trivially easy to handle here, all we
+need to do is remove existing activities first, then add the new one.
+This will also briefly put it on all activities, but adding new
+activities works (and puts it only on that activity), it's only
+removing them that fails.
+
+BUG: 483148
+FIXED-IN: 6.4.0
+
+
+(cherry picked from commit 99f9dc95226719c2be53fd86a4a0a3bae88d0aa2)
+
+Co-authored-by: Christoph Wolk <cwo.kde@posteo.net>
+---
+ libtaskmanager/waylandtasksmodel.cpp | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/libtaskmanager/waylandtasksmodel.cpp b/libtaskmanager/waylandtasksmodel.cpp
+index 39d1307a8b..5d38da9aa4 100644
+--- a/libtaskmanager/waylandtasksmodel.cpp
++++ b/libtaskmanager/waylandtasksmodel.cpp
+@@ -1238,15 +1238,15 @@ void WaylandTasksModel::requestActivities(const QModelIndex &index, const QStrin
+     const auto plasmaActivities = window->activities;
+     const auto oldActivities = QSet(plasmaActivities.begin(), plasmaActivities.end());
+ 
+-    const auto activitiesToAdd = newActivities - oldActivities;
+-    for (const auto &activity : activitiesToAdd) {
+-        window->request_enter_activity(activity);
+-    }
+-
+     const auto activitiesToRemove = oldActivities - newActivities;
+     for (const auto &activity : activitiesToRemove) {
+         window->request_leave_activity(activity);
+     }
++
++    const auto activitiesToAdd = newActivities - oldActivities;
++    for (const auto &activity : activitiesToAdd) {
++        window->request_enter_activity(activity);
++    }
+ }
+ 
+ void WaylandTasksModel::requestPublishDelegateGeometry(const QModelIndex &index, const QRect &geometry, QObject *delegate)
+-- 
+GitLab
+
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_e9fd71d9_wallpapers-image-don-t-crash-when-removing-usr-share.patch plasma-workspace-6.3.6/debian/patches/upstream_e9fd71d9_wallpapers-image-don-t-crash-when-removing-usr-share.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_e9fd71d9_wallpapers-image-don-t-crash-when-removing-usr-share.patch	1970-01-01 01:00:00.000000000 +0100
+++ plasma-workspace-6.3.6/debian/patches/upstream_e9fd71d9_wallpapers-image-don-t-crash-when-removing-usr-share.patch	2025-07-19 10:43:24.000000000 +0200
@@ -0,0 +1,62 @@
+From e9fd71d9d36171ec161885f4149a2ff0c2c96554 Mon Sep 17 00:00:00 2001
+From: Marco Martin <notmart@gmail.com>
+Date: Wed, 28 May 2025 10:56:49 +0200
+Subject: [PATCH] wallpapers/image: don't crash when removing /usr/share
+
+we delay addSourceModel when the source model is fully loaded,
+but it might take a long time (ie adding /usr/share)
+
+if then we remove it before it's done, we will have either an assert or a crash
+in qconcatenatetablesmodel (depending if Qt asserts are turned on)
+
+we can safely call addsourceModel immediately, so rowsInserted will be
+forwarded as they come in
+
+BUG:503593
+
+
+(cherry picked from commit f584f1beb3aaafe36c328a761b8eea02b46f20c4)
+
+f584f1be wallpapers/image: don't crash when removing /usr/share
+
+Co-authored-by: Marco Martin <notmart@gmail.com>
+---
+ wallpapers/image/plugin/slidemodel.cpp | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/wallpapers/image/plugin/slidemodel.cpp b/wallpapers/image/plugin/slidemodel.cpp
+index 465cfb9b7d..eaf4ce3085 100644
+--- a/wallpapers/image/plugin/slidemodel.cpp
++++ b/wallpapers/image/plugin/slidemodel.cpp
+@@ -88,12 +88,16 @@ QStringList SlideModel::addDirs(const QStringList &dirs)
+             m_models.insert(d, m);
+             added.append(d);
+ 
++            // Add the model immediately unconditionally as we might want to remove it before is loaded,
++            // which would crash if we didn't add it yet. when images are loaded the rowsInserted signals
++            // will be properly forwarded
++            addSourceModel(m);
++
+             if (m->loading().value()) {
+                 connect(m, &ImageProxyModel::loadingChanged, this, &SlideModel::slotSourceModelLoadingChanged);
+             } else {
+                 // In case it loads immediately
+                 ++m_loaded;
+-                addSourceModel(m);
+             }
+         }
+     }
+@@ -161,10 +165,6 @@ QBindable<bool> SlideModel::loading() const
+ 
+ void SlideModel::slotSourceModelLoadingChanged()
+ {
+-    auto m = static_cast<ImageProxyModel *>(sender());
+-    disconnect(m, &ImageProxyModel::loadingChanged, this, nullptr);
+-    addSourceModel(m);
+-
+     if (++m_loaded == m_models.size()) {
+         m_loading = false;
+         Q_EMIT done();
+-- 
+GitLab
+
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_ec837446_Do-not-emit-OOM-notifications-on-systemd-services-reload.patch plasma-workspace-6.3.6/debian/patches/upstream_ec837446_Do-not-emit-OOM-notifications-on-systemd-services-reload.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_ec837446_Do-not-emit-OOM-notifications-on-systemd-services-reload.patch	1970-01-01 01:00:00.000000000 +0100
+++ plasma-workspace-6.3.6/debian/patches/upstream_ec837446_Do-not-emit-OOM-notifications-on-systemd-services-reload.patch	2025-07-19 12:10:40.000000000 +0200
@@ -0,0 +1,38 @@
+From ec837446c1ebcf45b44d61c4a3b2e361e9913d06 Mon Sep 17 00:00:00 2001
+From: Antonio Rojas <arojas@archlinux.org>
+Date: Sat, 5 Jul 2025 19:52:31 +0000
+Subject: [PATCH] Do not emit OOM notifications on systemd services reload
+
+When systemd services are reloaded, systemd emits all PropertiesChanged signals for all units.
+
+Comparing with the original signals these have a null MainPID, so we can use that to identify them and not emit a notification.
+
+BUG: 502279
+
+
+(cherry picked from commit ce33b24d4f1b5711f7585b33822ab87f2f43af0b)
+
+ce33b24d Do not emit OOM notifications on systemd services reload
+
+Co-authored-by: Antonio Rojas <arojas@archlinux.org>
+---
+ oom-notifier/module.cpp | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/oom-notifier/module.cpp b/oom-notifier/module.cpp
+index 64cf322bc7..127b8d22ee 100644
+--- a/oom-notifier/module.cpp
++++ b/oom-notifier/module.cpp
+@@ -57,6 +57,9 @@ public:
+                     if (changed.value(u"Result"_s, QString()) != "oom-kill"_L1) {
+                         return;
+                     }
++                    if (changed.value(u"MainPID"_s) == 0) {
++                        return;
++                    }
+ 
+                     const auto unit = decodeUnitName(QFileInfo(msg.path()).fileName());
+                     const auto service = serviceForUnitName(unit);
+-- 
+GitLab
+
diff -Nru plasma-workspace-6.3.5/debian/patches/upstream_f1605df4_Do-not-show-logout-screen-when-in-lockscreen-screensaver.patch plasma-workspace-6.3.6/debian/patches/upstream_f1605df4_Do-not-show-logout-screen-when-in-lockscreen-screensaver.patch
--- plasma-workspace-6.3.5/debian/patches/upstream_f1605df4_Do-not-show-logout-screen-when-in-lockscreen-screensaver.patch	1970-01-01 01:00:00.000000000 +0100
+++ plasma-workspace-6.3.6/debian/patches/upstream_f1605df4_Do-not-show-logout-screen-when-in-lockscreen-screensaver.patch	2025-07-19 11:12:24.000000000 +0200
@@ -0,0 +1,49 @@
+From f1605df4a461874f39e6aef217397caab4d91e47 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Niccol=C3=B2=20Venerandi?= <niccolo@venerandi.com>
+Date: Mon, 2 Jun 2025 11:35:03 +0000
+Subject: [PATCH] Do not show logout screen when in lockscreen / screensaver
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+BUG:504575
+
+
+(cherry picked from commit ba7a8c16b7934fa23d3a44bb38667554e39996b7)
+
+Co-authored-by: Niccolò Venerandi <niccolo@venerandi.com>
+---
+ libkworkspace/sessionmanagement.cpp | 17 ++++++++++++-----
+ 1 file changed, 12 insertions(+), 5 deletions(-)
+
+diff --git a/libkworkspace/sessionmanagement.cpp b/libkworkspace/sessionmanagement.cpp
+index 43a2125917..248147f505 100644
+--- a/libkworkspace/sessionmanagement.cpp
++++ b/libkworkspace/sessionmanagement.cpp
+@@ -148,11 +148,18 @@ void SessionManagement::requestLogoutPrompt()
+         return;
+     }
+ 
+-    // Don't bother to check for whether the user normally wants confirmation or
+-    // not; if this function was invoked, it means they do want to see the logout
+-    // prompt right now
+-    LogoutPromptIface iface;
+-    lockQuitUntilFinished(iface.promptAll());
++    OrgFreedesktopScreenSaverInterface ifaceScreenSaver(QStringLiteral("org.freedesktop.ScreenSaver"),
++                                                        QStringLiteral("/ScreenSaver"),
++                                                        QDBusConnection::sessionBus());
++
++    // Do not show Logoup prompt when in the lockscreen / screensaver
++    if (!ifaceScreenSaver.GetActive()) {
++        // Don't bother to check for whether the user normally wants confirmation or
++        // not; if this function was invoked, it means they do want to see the logout
++        // prompt right now
++        LogoutPromptIface iface;
++        lockQuitUntilFinished(iface.promptAll());
++    }
+ }
+ 
+ void SessionManagement::requestShutdown(ConfirmationMode confirmationMode)
+-- 
+GitLab
+
diff -Nru plasma-workspace-6.3.5/kcms/colors/colorsapplicator.cpp plasma-workspace-6.3.6/kcms/colors/colorsapplicator.cpp
--- plasma-workspace-6.3.5/kcms/colors/colorsapplicator.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/kcms/colors/colorsapplicator.cpp	2025-07-08 13:48:12.000000000 +0200
@@ -100,7 +100,7 @@
     const auto g = -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s;
     const auto b = -0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s;
 
-    return QColor::fromRgbF(r, g, b);
+    return QColor::fromRgbF(r, g, b).toRgb();
 }
 
 auto toLinearSRGB = QColorSpace(QColorSpace::SRgb).transformationToColorSpace(QColorSpace::SRgbLinear);
diff -Nru plasma-workspace-6.3.5/klipper/editactiondialog.cpp plasma-workspace-6.3.6/klipper/editactiondialog.cpp
--- plasma-workspace-6.3.5/klipper/editactiondialog.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/klipper/editactiondialog.cpp	2025-07-08 13:48:12.000000000 +0200
@@ -181,6 +181,7 @@
     : QDialog(parent)
 {
     setWindowTitle(i18n("Action Properties"));
+    setWindowModality(Qt::WindowModal);
     QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
     buttons->button(QDialogButtonBox::Ok)->setShortcut(Qt::CTRL | Qt::Key_Return);
     connect(buttons, &QDialogButtonBox::accepted, this, &EditActionDialog::slotAccepted);
diff -Nru plasma-workspace-6.3.5/krunner/qml/RunCommand.qml plasma-workspace-6.3.6/krunner/qml/RunCommand.qml
--- plasma-workspace-6.3.5/krunner/qml/RunCommand.qml	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/krunner/qml/RunCommand.qml	2025-07-08 13:48:12.000000000 +0200
@@ -144,7 +144,11 @@
                 bottomPadding: parent.bottomPadding
                 width: parent.width
                 height: parent.height
-                visible: queryField.contentWidth < (queryField.width - queryField.leftPadding - queryField.rightPadding)
+                elide: Text.ElideRight
+                visible: text !== queryField.text
+                    && queryField.implicitWidth < (queryField.width
+                                                - queryField.leftPadding
+                                                - queryField.rightPadding)
                 opacity: 0.5
                 text: ""
                 textFormat: Text.PlainText
diff -Nru plasma-workspace-6.3.5/libnotificationmanager/notificationfilterproxymodel.cpp plasma-workspace-6.3.6/libnotificationmanager/notificationfilterproxymodel.cpp
--- plasma-workspace-6.3.5/libnotificationmanager/notificationfilterproxymodel.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/libnotificationmanager/notificationfilterproxymodel.cpp	2025-07-08 13:48:12.000000000 +0200
@@ -191,8 +191,12 @@
         }
     }
 
-    if (!m_showAddedDuringInhibition && sourceIdx.data(Notifications::WasAddedDuringInhibitionRole).toBool()) {
-        return false;
+    // Normal Do Not Disturb filtering
+    if (!m_showAddedDuringInhibition) {
+        // Show critical notifications even in Do Not Disturb
+        if (!m_urgencies.testFlag(urgency) && sourceIdx.data(Notifications::WasAddedDuringInhibitionRole).toBool()) {
+            return false;
+        }
     }
 
     return true;
diff -Nru plasma-workspace-6.3.5/po/ar/freespacenotifier.po plasma-workspace-6.3.6/po/ar/freespacenotifier.po
--- plasma-workspace-6.3.5/po/ar/freespacenotifier.po	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/po/ar/freespacenotifier.po	2025-07-08 13:48:12.000000000 +0200
@@ -1,21 +1,22 @@
 # Copyright (C) YEAR This_file_is_part_of_KDE
 # This file is distributed under the same license as the PACKAGE package.
-# Zayed Al-Saidi <zayed.alsaidi@gmail.com>, 2010, 2021.
+# SPDX-FileCopyrightText: 2010, 2021, 2025 Zayed Al-Saidi <zayed.alsaidi@gmail.com>
 # Safa Alfulaij <safa1996alfulaij@gmail.com>, 2016.
 msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n";
 "POT-Creation-Date: 2024-07-23 00:41+0000\n"
-"PO-Revision-Date: 2021-06-21 23:22+0400\n"
+"PO-Revision-Date: 2025-05-14 17:39+0400\n"
 "Last-Translator: Zayed Al-Saidi <zayed.alsaidi@gmail.com>\n"
-"Language-Team: Arabic <kde-i18n-ar@kde.org>\n"
+"Language-Team: ar\n"
 "Language: ar\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
 "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+"X-Generator: Lokalize 23.08.5\n"
 
 #: freespacenotifier.cpp:126
 #, kde-format
@@ -67,14 +68,14 @@
 msgid ""
 "Your Home folder is running out of disk space, you have %1 MiB remaining "
 "(%2%)."
-msgstr "مساحة مجلّد المنزل تنفذ، بقيت %1 م.بايت (%2٪)"
+msgstr "مساحة مجلّد المنزل تنفد، بقيت %1 م.بايت (%2٪)"
 
 #: module.cpp:43
 #, kde-format
 msgid ""
 "Your Root partition is running out of disk space, you have %1 MiB remaining "
 "(%2%)."
-msgstr "مساحة مجلّد الجذر تنفذ، بقيت %1 م.بايت (%2٪)"
+msgstr "مساحة مجلّد الجذر تنفد، بقيت %1 م.بايت (%2٪)"
 
 #: module.cpp:60
 #, kde-format
diff -Nru plasma-workspace-6.3.5/po/es/docs/klipper/index.docbook plasma-workspace-6.3.6/po/es/docs/klipper/index.docbook
--- plasma-workspace-6.3.5/po/es/docs/klipper/index.docbook	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/po/es/docs/klipper/index.docbook	2025-07-08 13:48:12.000000000 +0200
@@ -179,7 +179,7 @@
 
 <para
 >La acción <guilabel
->Configurar el portapapeles...</guilabel
+>Configurar el portapapeles…</guilabel
 > del menú de contexto abre el <link linkend="preferences"
 >diálogo de preferencias</link
 >. </para>
@@ -221,7 +221,7 @@
 
 <para
 >El contenido del portapapeles que se ajuste a una expresión regular también se puede editar antes de realizar una acción sobre él. Seleccione <guimenuitem
->Editar contenido...</guimenuitem
+>Editar contenido…</guimenuitem
 > a la derecha de la entrada del portapapeles para poder cambiar el contenido del portapapeles en el diálogo que aparecerá, antes de pulsar el botón <guibutton
 >Aceptar</guibutton
 > para ejecutar la acción apropiada.</para>
@@ -271,7 +271,7 @@
 >Cambiar el comportamiento del portapapeles/selección</title>
 <para
 >Para cambiar el comportamiento del portapapeles o de la selección, seleccione <guimenuitem
->Configurar el portapapeles...</guimenuitem
+>Configurar el portapapeles…</guimenuitem
 > en el menú de contexto de &klipper; y en el diálogo que aparezca, seleccione la página <guilabel
 >General</guilabel
 >. Si quita la marca de la opción <guilabel
@@ -520,7 +520,7 @@
 <listitem
 ><para
 >Pulse el botón <guibutton
->Añadir acción...</guibutton
+>Añadir acción…</guibutton
 > para añadir una expresión regular con la que &klipper; pueda encontrar una coincidencia. &klipper; usa la clase la clase <classname
 >QRegularExpression</classname
 > de &Qt;, que usa PCRE (expresiones regulares compatibles con Perl).</para>
@@ -646,21 +646,23 @@
 <para
 >&klipper; </para>
 <para
->Derechos de autor del programa. 1998. &Andrew.Stanley-Jones; <email
+>Copyright del programa. 1998. &Andrew.Stanley-Jones; <email
 >asj@cban.com</email
 >. </para>
 <para
->Derechos de autor del programa. 1998-2000. &Carsten.Pfeiffer; &Carsten.Pfeiffer.mail;.</para>
+>Copyright del programa. 1998-2000. &Carsten.Pfeiffer; &Carsten.Pfeiffer.mail;.</para>
 <para
 >El encargado actual es Esben Mose Hansen. En <ulink url="http://mosehansen.dk/about";
 >http://mosehansen.dk/about</ulink
 > tiene información de contacto. </para>
 
 <para
->Derechos de autor de la documentación. 2000-2003, 2005. &Philip.Rodrigues; &Philip.Rodrigues.mail;.</para>
+>Copyright de la documentación. 2000-2003, 2005. &Philip.Rodrigues; &Philip.Rodrigues.mail;.</para>
 
 <para
->Traducido por Pablo de Vicente <email
+>Traducido por Rocío Gallego <email
+>traducciones@rociogallego.com</email
+>, Pablo de Vicente <email
 >pvicentea@nexo.es</email
 >, Marcos Fouces Lago <email
 >mfouces@yahoo.es</email
diff -Nru plasma-workspace-6.3.5/po/fr/freespacenotifier.po plasma-workspace-6.3.6/po/fr/freespacenotifier.po
--- plasma-workspace-6.3.5/po/fr/freespacenotifier.po	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/po/fr/freespacenotifier.po	2025-07-08 13:48:12.000000000 +0200
@@ -2,7 +2,7 @@
 # This file is distributed under the same license as the PACKAGE package.
 # Guillaume Pujol <guill.p@gmail.com>, 2009.
 # Yoann Laissus <yoann.laissus@gmail.com>, 2015.
-# Xavier Besnard <xavier.besnard@kde.org>, 2020, 2021.
+# SPDX-FileCopyrightText: 2020, 2021, 2025 Xavier Besnard <xavier.besnard@kde.org>
 #
 msgid ""
 msgstr ""
@@ -11,16 +11,16 @@
 "POT-Creation-Date: 2024-07-23 00:41+0000\n"
 "PO-Revision-Date: 2021-05-27 14:42+0200\n"
 "Last-Translator: Xavier Besnard <xavier.besnard@neuf.fr>\n"
-"Language-Team: French <kde-francophone@kde.org>\n"
+"Language-Team: French <French <kde-francophone@kde.org>>\n"
 "Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Environment: kde\n"
 "X-Accelerator-Marker: &\n"
+"X-Environment: kde\n"
+"X-Generator: Lokalize 25.04.1\n"
 "X-Text-Markup: kde4\n"
-"X-Generator: Lokalize 21.04.1\n"
 
 #: freespacenotifier.cpp:126
 #, kde-format
diff -Nru plasma-workspace-6.3.5/po/fr/libnotificationmanager.po plasma-workspace-6.3.6/po/fr/libnotificationmanager.po
--- plasma-workspace-6.3.5/po/fr/libnotificationmanager.po	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/po/fr/libnotificationmanager.po	2025-07-08 13:48:12.000000000 +0200
@@ -15,7 +15,7 @@
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 "X-Accelerator-Marker: &\n"
 "X-Environment: kde\n"
-"X-Generator: Lokalize 24.12.0\n"
+"X-Generator: Lokalize 25.04.0\n"
 "X-Text-Markup: kde4\n"
 
 #: abstractnotificationsmodel.cpp:319
diff -Nru plasma-workspace-6.3.5/po/it/freespacenotifier.po plasma-workspace-6.3.6/po/it/freespacenotifier.po
--- plasma-workspace-6.3.5/po/it/freespacenotifier.po	2025-05-06 19:59:33.000000000 +0200
+++ plasma-workspace-6.3.6/po/it/freespacenotifier.po	2025-07-08 13:48:12.000000000 +0200
@@ -1,6 +1,6 @@
 # Copyright (C) YEAR This_file_is_part_of_KDE
 # This file is distributed under the same license as the PACKAGE package.
-# Vincenzo Reale <smart2128vr@gmail.com>, 2007, 2008, 2009, 2010, 2014, 2020, 2021.
+# SPDX-FileCopyrightText: 2007, 2008, 2009, 2010, 2014, 2020, 2021, 2025 Vincenzo Reale <smart2128vr@gmail.com>
 #
 msgid ""
 msgstr ""
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 21.04.1\n"
+"X-Generator: Lokalize 25.04.0\n"
 
 #: freespacenotifier.cpp:126
 #, kde-format
diff -Nru plasma-workspace-6.3.5/po/it/libnotificationmanager.po plasma-workspace-6.3.6/po/it/libnotificationmanager.po
--- plasma-workspace-6.3.5/po/it/libnotificationmanager.po	2025-05-06 19:59:33.000000000 +0200
+++ plasma-workspace-6.3.6/po/it/libnotificationmanager.po	2025-07-08 13:48:12.000000000 +0200
@@ -15,7 +15,7 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 24.12.1\n"
+"X-Generator: Lokalize 25.04.0\n"
 
 #: abstractnotificationsmodel.cpp:319
 #, kde-format
diff -Nru plasma-workspace-6.3.5/po/tr/freespacenotifier.po plasma-workspace-6.3.6/po/tr/freespacenotifier.po
--- plasma-workspace-6.3.5/po/tr/freespacenotifier.po	2025-05-06 19:59:33.000000000 +0200
+++ plasma-workspace-6.3.6/po/tr/freespacenotifier.po	2025-07-08 13:48:12.000000000 +0200
@@ -5,21 +5,21 @@
 # Ozan Çağlayan <ozan@pardus.org.tr>, 2010.
 # H. İbrahim Güngör <ibrahim@pardus.org.tr>, 2011.
 # Volkan Gezer <volkangezer@gmail.com>, 2013, 2014, 2021, 2022.
-# Emir SARI <emir_sari@icloud.com>, 2022, 2023.
+# SPDX-FileCopyrightText: 2022, 2023, 2025 Emir SARI <emir_sari@icloud.com>
 msgid ""
 msgstr ""
 "Project-Id-Version: kded_susefreespacenotifier\n"
 "Report-Msgid-Bugs-To: https://bugs.kde.org\n";
 "POT-Creation-Date: 2024-07-23 00:41+0000\n"
-"PO-Revision-Date: 2023-03-31 21:36+0300\n"
-"Last-Translator: Emir SARI <emir_sari@icloud.com>\n"
+"PO-Revision-Date: 2025-05-11 18:31+0300\n"
+"Last-Translator: Emir SARI <emir_sari@îcloud.com>\n"
 "Language-Team: Turkish <kde-l10n-tr@kde.org>\n"
 "Language: tr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Lokalize 22.12.3\n"
+"X-Generator: Lokalize 25.04.0\n"
 
 #: freespacenotifier.cpp:126
 #, kde-format
@@ -40,13 +40,13 @@
 #: freespacenotifier.kcfg:9
 #, kde-format
 msgid "Minimum free space before user starts being notified."
-msgstr "Kullanıcı uyarılmadan önce kalacak en az boş alan miktarı."
+msgstr "Kullanıcı uyarılmaya başlamadan önceki boş alan miktarı."
 
 #. i18n: ectx: label, entry (enableNotification), group (General)
 #: freespacenotifier.kcfg:15
 #, kde-format
 msgid "Is the free space notification enabled."
-msgstr "Boş alan uyarısı etkin mi."
+msgstr "Boş alan bildiriminin etkin olup olmadığı."
 
 #. i18n: ectx: property (text), widget (QCheckBox, kcfg_enableNotification)
 #: freespacenotifier_prefs_base.ui:17
diff -Nru plasma-workspace-6.3.5/po/zh_CN/freespacenotifier.po plasma-workspace-6.3.6/po/zh_CN/freespacenotifier.po
--- plasma-workspace-6.3.5/po/zh_CN/freespacenotifier.po	2025-05-06 19:59:33.000000000 +0200
+++ plasma-workspace-6.3.6/po/zh_CN/freespacenotifier.po	2025-07-08 13:48:12.000000000 +0200
@@ -67,14 +67,14 @@
 msgid ""
 "Your Home folder is running out of disk space, you have %1 MiB remaining "
 "(%2%)."
-msgstr "主文件夹磁盘空间不足,您还有 %1 MiB 的剩余空间 (%2%)。"
+msgstr "当前用户的主文件夹磁盘空间即将用尽;剩余空间 %1 MiB (%2%)。"
 
 #: module.cpp:43
 #, kde-format
 msgid ""
 "Your Root partition is running out of disk space, you have %1 MiB remaining "
 "(%2%)."
-msgstr "根分区磁盘空间不足,您还有 %1 MiB 的剩余空间 (%2%)。"
+msgstr "本机的根分区磁盘空间即将用尽;剩余空间 %1 MiB (%2%)。"
 
 #: module.cpp:60
 #, kde-format
diff -ur '--exclude=po' plasma-workspace-6.3.5/applets/digital-clock/package/contents/ui/DigitalClock.qml plasma-workspace-6.3.6/applets/digital-clock/package/contents/ui/DigitalClock.qml
--- plasma-workspace-6.3.5/applets/digital-clock/package/contents/ui/DigitalClock.qml	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/applets/digital-clock/package/contents/ui/DigitalClock.qml	2025-07-22 08:15:50.000000000 +0200
@@ -249,7 +249,7 @@
                 target: contentItem
 
                 height: sizehelper.height
-                width: dateLabel.width + labelsGrid.width + timeMetrics.advanceWidth(" ") * 2 + separator.width
+                width: (dateLabel.visible ? dateLabel.width + timeMetrics.advanceWidth(" ") * 2 + separator.width : 0) + labelsGrid.width
             }
 
             AnchorChanges {
diff -ur '--exclude=po' plasma-workspace-6.3.5/applets/kicker/plugin/kastatsfavoritesmodel.cpp plasma-workspace-6.3.6/applets/kicker/plugin/kastatsfavoritesmodel.cpp
--- plasma-workspace-6.3.5/applets/kicker/plugin/kastatsfavoritesmodel.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/applets/kicker/plugin/kastatsfavoritesmodel.cpp	2025-07-22 08:15:50.000000000 +0200
@@ -116,6 +116,8 @@
                     m_id = QUrl::fromLocalFile(file.canonicalFilePath()).toString();
                     return;
                 }
+                // if the file was deleted, take the url as-is
+                m_id = url.toString();
             }
 
             // If this is a file, we should have already covered it
diff -ur '--exclude=po' plasma-workspace-6.3.5/applets/kicker/plugin/recentusagemodel.cpp plasma-workspace-6.3.6/applets/kicker/plugin/recentusagemodel.cpp
--- plasma-workspace-6.3.5/applets/kicker/plugin/recentusagemodel.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/applets/kicker/plugin/recentusagemodel.cpp	2025-07-22 08:15:50.000000000 +0200
@@ -273,10 +273,12 @@
 
 QVariant RecentUsageModel::docData(const QString &resource, int role, const QString &mimeType) const
 {
-    QUrl url(resource);
+    QUrl url;
 
-    if (url.scheme().isEmpty()) {
-        url.setScheme(QStringLiteral("file"));
+    if (QDir::isAbsolutePath(resource)) {
+        url = QUrl::fromLocalFile(resource);
+    } else {
+        url = QUrl(resource);
     }
 
     auto getFileItem = [=]() {
diff -ur '--exclude=po' plasma-workspace-6.3.5/CMakeLists.txt plasma-workspace-6.3.6/CMakeLists.txt
--- plasma-workspace-6.3.5/CMakeLists.txt	2025-07-22 08:15:49.000000000 +0200
+++ plasma-workspace-6.3.6/CMakeLists.txt	2025-07-22 08:15:50.000000000 +0200
@@ -1,7 +1,7 @@
 cmake_minimum_required(VERSION 3.16)
 
 project(plasma-workspace)
-set(PROJECT_VERSION "6.3.5")
+set(PROJECT_VERSION "6.3.6")
 string(REPLACE "." ";" VERSION_LIST ${PROJECT_VERSION})
 list(GET VERSION_LIST 0 PROJECT_VERSION_MAJOR)
 list(GET VERSION_LIST 1 PROJECT_VERSION_MINOR)
diff -ur '--exclude=po' plasma-workspace-6.3.5/components/containmentlayoutmanager/itemcontainer.cpp plasma-workspace-6.3.6/components/containmentlayoutmanager/itemcontainer.cpp
--- plasma-workspace-6.3.5/components/containmentlayoutmanager/itemcontainer.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/components/containmentlayoutmanager/itemcontainer.cpp	2025-07-22 08:15:50.000000000 +0200
@@ -38,6 +38,12 @@
         setLayout(qobject_cast<AppletsLayout *>(parentItem()));
     });
 
+    connect(this, &ItemContainer::activeFocusChanged, this, [this]() {
+        if (!hasActiveFocus()) { // don't start edit mode if press caused a popup
+            m_editModeTimer->stop();
+        }
+    });
+
     connect(m_editModeTimer, &QTimer::timeout, this, [this]() {
         setEditMode(true);
     });
diff -ur '--exclude=po' plasma-workspace-6.3.5/dataengines/weather/ions/envcan/ion_envcan.cpp plasma-workspace-6.3.6/dataengines/weather/ions/envcan/ion_envcan.cpp
--- plasma-workspace-6.3.5/dataengines/weather/ions/envcan/ion_envcan.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/dataengines/weather/ions/envcan/ion_envcan.cpp	2025-07-08 13:48:12.000000000 +0200
@@ -17,6 +17,8 @@
 #include <QRegularExpression>
 #include <QTimeZone>
 
+using namespace Qt::StringLiterals;
+
 WeatherData::WeatherData()
     : stationLatitude(qQNaN())
     , stationLongitude(qQNaN())
@@ -490,7 +492,7 @@
 void EnvCanadaIon::getXMLSetup()
 {
     // If network is down, we need to spin and wait
-    const QUrl url(QStringLiteral("https://dd.weather.gc.ca/citypage_weather/xml/siteList.xml";));
+    const QUrl url(QStringLiteral("https://dd.weather.gc.ca/today/citypage_weather/siteList.xml";));
     qCDebug(IONENGINE_ENVCAN) << "Fetching station list:" << url;
 
     KIO::TransferJob *getJob = KIO::get(url, KIO::NoReload, KIO::HideProgressInfo);
@@ -516,7 +518,7 @@
     const XMLMapInfo &place = m_places[dataKey];
 
     const QUrl url(QStringLiteral("https://dd.weather.gc.ca/citypage_weather/xml/%1/%2_e.xml";).arg(place.territoryName, place.cityCode));
-    qCDebug(IONENGINE_ENVCAN) << "Fetching weather URL:" << url;
+    qCDebug(IONENGINE_ENVCAN) << "Fetching legacy weather URL:" << url;
 
     if (place.territoryName.isEmpty() && place.cityCode.isEmpty()) {
         setData(source, QStringLiteral("validate"), QStringLiteral("envcan|malformed"));
@@ -532,6 +534,51 @@
     connect(getJob, &KJob::result, this, &EnvCanadaIon::slotJobFinished);
 }
 
+// The weather URL has a dynamic name and path depending on its timestamp:
+// https://dd.weather.gc.ca/today/citypage_weather/{PROV}/{HH}/{YYYYMMDD}T{HHmmss.sss}Z_MSC_CitypageWeather_{SiteCode}_en.xml
+// This method is called iteratively 3 times to get the URL and then the weather report
+void EnvCanadaIon::getWeatherData(const QString &source)
+{
+    WeatherData::UrlInfo &info = m_weatherData[source].urlInfo;
+
+    info.requests++;
+    if (info.requests > 3) {
+        qCWarning(IONENGINE_ENVCAN) << "Too many requests to find the weather URL";
+        return;
+    }
+
+    // We get the place info from the stations list
+    if (info.cityCode.isEmpty()) {
+        QString dataKey = source;
+        dataKey.remove(QStringLiteral("envcan|weather|"));
+        const XMLMapInfo &place = m_places[dataKey];
+
+        info.province = place.territoryName;
+        info.cityCode = place.cityCode;
+    }
+
+    // 1. Base URL, on the territory dir, to get the list of hours
+    QString url = u"https://dd.weather.gc.ca/today/citypage_weather/%1/"_s.arg(info.province);
+    // 2. When we know the hour folder, we check for the weather report files
+    if (!info.hours.isEmpty()) {
+        url += info.hours.at(info.hourIndex) + u"/";
+    }
+    // 3. Now we have the full information to compose the URL
+    if (!info.fileName.isEmpty()) {
+        url += info.fileName;
+    }
+
+    qCDebug(IONENGINE_ENVCAN) << "Fetching weather URL:" << url;
+
+    KIO::TransferJob *getJob = KIO::get(QUrl(url), KIO::Reload, KIO::HideProgressInfo);
+
+    m_jobXml.insert(getJob, new QXmlStreamReader);
+    m_jobList.insert(getJob, source);
+
+    connect(getJob, &KIO::TransferJob::data, this, &EnvCanadaIon::slotDataArrived);
+    connect(getJob, &KJob::result, this, &EnvCanadaIon::slotJobFinished);
+}
+
 void EnvCanadaIon::setup_slotDataArrived(KIO::Job *job, const QByteArray &data)
 {
     Q_UNUSED(job)
@@ -550,7 +597,13 @@
         return;
     }
 
-    // Send to xml.
+    // Remove the HTML doctype line from XML parsing
+    if (data.startsWith("<!DOCTYPE"_ba)) {
+        int newLinePos = data.indexOf('\n');
+        m_jobXml[job]->addData(QByteArrayView(data).slice(newLinePos + 1));
+        return;
+    }
+
     m_jobXml[job]->addData(data);
 }
 
@@ -560,10 +613,16 @@
     const QString source = m_jobList.value(job);
     setData(source, Data());
     QXmlStreamReader *reader = m_jobXml.value(job);
-    if (reader) {
+    if (!job->error() && reader) {
         readXMLData(m_jobList[job], *reader);
     }
 
+    if (job->error() == KIO::ERR_DOES_NOT_EXIST || qobject_cast<KIO::TransferJob *>(job)->isErrorPage()) {
+        qCDebug(IONENGINE_ENVCAN) << "Legacy page not found. Falling back to new API";
+        m_weatherData[source].urlInfo = WeatherData::UrlInfo();
+        getWeatherData(source);
+    }
+
     m_jobList.remove(job);
     delete m_jobXml[job];
     m_jobXml.remove(job);
@@ -686,6 +745,11 @@
         if (xml.isStartElement()) {
             if (xml.name() == QLatin1String("siteData")) {
                 parseWeatherSite(data, xml);
+            } else if (xml.name() == QLatin1String("html")) {
+                auto &urlInfo = m_weatherData[source].urlInfo;
+                parseDirListing(urlInfo, xml);
+                getWeatherData(source);
+                return !xml.hasError();
             } else {
                 parseUnknownElement(xml);
             }
@@ -733,6 +797,53 @@
     return !xml.error();
 }
 
+void EnvCanadaIon::parseDirListing(WeatherData::UrlInfo &info, QXmlStreamReader &xml)
+{
+    const bool expectingFileNames = !info.hours.isEmpty();
+
+    while (!xml.atEnd()) {
+        xml.readNext();
+
+        // We are parsing a directory listing with files or folders as hyperlinks
+        if (xml.isStartElement() && xml.name() == "a"_L1) {
+            QString item = xml.attributes().value(u"href").toString().trimmed();
+
+            // Check for hour folders
+            if (!expectingFileNames && item.endsWith('/'_L1)) {
+                item.slice(0, item.length() - 1);
+
+                bool isHour = false;
+                item.toInt(&isHour);
+                if (isHour) {
+                    info.hours.prepend(item);
+                }
+                continue;
+            }
+
+            // Check just for files that match our city code en English language
+            if (item.endsWith(u"%1_en.xml"_s.arg(info.cityCode))) {
+                info.fileName = item;
+            }
+        }
+    }
+
+    // Sort hours in reverse order (more recent first)
+    if (!expectingFileNames && !info.hours.isEmpty()) {
+        std::sort(info.hours.begin(), info.hours.end(), [](const auto &a, const auto &b) {
+            return a.toInt() > b.toInt();
+        });
+    }
+
+    // If we didn't find the filename in the current hour folder
+    // set up a new requests to search it on the previous one
+    if (expectingFileNames && info.fileName.isEmpty()) {
+        if (info.hourIndex < info.hours.count()) {
+            info.hourIndex++;
+            info.requests--;
+        }
+    }
+}
+
 void EnvCanadaIon::parseFloat(float &value, QXmlStreamReader &xml)
 {
     bool ok = false;
diff -ur '--exclude=po' plasma-workspace-6.3.5/dataengines/weather/ions/envcan/ion_envcan.h plasma-workspace-6.3.6/dataengines/weather/ions/envcan/ion_envcan.h
--- plasma-workspace-6.3.5/dataengines/weather/ions/envcan/ion_envcan.h	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/dataengines/weather/ions/envcan/ion_envcan.h	2025-07-08 13:48:12.000000000 +0200
@@ -120,6 +120,18 @@
 
     QString solarDataTimeEngineSourceName;
     bool isNight = false;
+
+    // Fields to get the forecast url
+    struct UrlInfo {
+        QString province;
+        QString cityCode;
+        QStringList hours;
+        int hourIndex = 0;
+        QString fileName;
+        int requests = 0;
+    };
+
+    UrlInfo urlInfo;
 };
 
 Q_DECLARE_TYPEINFO(WeatherData::WeatherEvent, Q_RELOCATABLE_TYPE);
@@ -174,6 +186,11 @@
     void getXMLData(const QString &source);
     bool readXMLData(const QString &source, QXmlStreamReader &xml);
 
+    // New API on envcan: need to get a specifically named file
+    void getWeatherData(const QString &source);
+    // Parse a directory listing with files or folders as hyperlinks
+    void parseDirListing(WeatherData::UrlInfo &info, QXmlStreamReader &xml);
+
     // Check if place specified is valid or not
     QStringList validate(const QString &source) const;
 
diff -ur '--exclude=po' plasma-workspace-6.3.5/debian/changelog plasma-workspace-6.3.6/debian/changelog
--- plasma-workspace-6.3.5/debian/changelog	2025-05-20 08:31:26.000000000 +0200
+++ plasma-workspace-6.3.6/debian/changelog	2025-07-19 12:11:47.000000000 +0200
@@ -1,3 +1,53 @@
+plasma-workspace (4:6.3.6-1) unstable; urgency=medium
+
+  [ Aurélien COUDERC ]
+  * New upstream release (6.3.6).
+    - Weather/envcan: Adapt to the new locations list URL.
+    - Weather/envcan: Fix handling of non-continuous hourly folder list.
+    - Dataengines/weather: Adapt to the new dynamic URLs on envcan.
+    - RunCommand: fix "hide faded completion text" calculation. (kde#505698)
+    - Klipper: make "Add Actions" dialog only window-modal. (kde#501938)
+    - Fix cell height calc in resize handle.
+    - Applets/notifications: Don't set a parent for
+    WidgetsAskUserActionHandler. (kde#504385)
+    - Components/sessionprivate: fix a potential crash in SessionsModel.
+    - Libnotificationmanager: fix critical notifications not showing when Do
+    not disturb is active.
+    - Applets/devicenotifier: fix pointless mount action. (kde#503999)
+    - Colorsapplicator: Don't allow extended RGB from OKLabToLinearSRGB.
+    (kde#503394)
+  * Drop backported patches now part of the upstream release.
+  * Refresh patches.
+  * Backport upstream commits:
+    - Fix fallback name for task manager icons for programs with Comment
+    property missing in the desktop file. [45784326] (kde#504431)
+    - Fix crash in system settings when removing /usr/share as a wallpaper
+    directory. [e9fd71d9] (kde#503593)
+    - Fix multiple instances of Plasma shell crash when trying to stop it from
+    going to sleep. [88911e82] (kde#487660)
+    - Do not track cache partitions with freespacenotifier. [01978f58]
+    (kde#504423)
+    - Do not show logout screen on power button press when in lockscreen /
+    screensaver. [f1605df4] (kde#504575)
+    - Fix holding mouse to scroll inside desktop widgets unexpectedly entering
+    edit mode. [8e6b79da] (kde#416909)
+    - Fix "move to activity" when there are only 2 activities. [e2ae8f54]
+    (kde#483148)
+    - applets/kicker: fix filenames containing # missing from history
+    [ab55c53e] (kde#419449, kde#437960)
+    - Klipper: Remove local Configure Klipper action that conflicts
+    with global shortcuts. [d286dce3] (kde#501632)
+    - Remove unexpected hover icons above user feedback selection labels.
+    [a3e153b3] (kde#505761)
+    - Fix unablity to remove/unpin documents/apps from Application Menu after
+    deleting the document/app from system. [d1896f5a] (kde#402820)
+    - Fix unchecking "Show date" in clock settings creating an empty gap on
+    the panel until restarting plasmashell [b2e80af5] (kde#505614)
+    - Fix systemd services reload reemitting all previous OOM notifications.
+    [ec837446] (kde#502279)
+
+ -- Aurélien COUDERC <coucouf@debian.org>  Sat, 19 Jul 2025 12:11:47 +0200
+
 plasma-workspace (4:6.3.5-1) unstable; urgency=medium
 
   [ Aurélien COUDERC ]
diff -ur '--exclude=po' plasma-workspace-6.3.5/debian/patches/relax-interplasma-versioned-deps.patch plasma-workspace-6.3.6/debian/patches/relax-interplasma-versioned-deps.patch
--- plasma-workspace-6.3.5/debian/patches/relax-interplasma-versioned-deps.patch	2025-05-16 18:55:16.000000000 +0200
+++ plasma-workspace-6.3.6/debian/patches/relax-interplasma-versioned-deps.patch	2025-07-19 10:24:18.000000000 +0200
@@ -4,7 +4,7 @@
  list(GET VERSION_LIST 1 PROJECT_VERSION_MINOR)
  list(GET VERSION_LIST 2 PROJECT_VERSION_PATCH)
  
--set(PROJECT_DEP_VERSION "6.3.5")
+-set(PROJECT_DEP_VERSION "6.3.6")
 +set(PROJECT_DEP_VERSION "6.3.4")
  set(QT_MIN_VERSION "6.7.0")
  set(KF6_MIN_VERSION "6.10.0")
diff -ur '--exclude=po' plasma-workspace-6.3.5/debian/patches/series plasma-workspace-6.3.6/debian/patches/series
--- plasma-workspace-6.3.5/debian/patches/series	2025-05-20 08:31:26.000000000 +0200
+++ plasma-workspace-6.3.6/debian/patches/series	2025-07-19 12:10:40.000000000 +0200
@@ -14,12 +14,18 @@
 upstream_6d12cde3_wallpapers-image-Fix-thumbnails-not-matching-output-size.patch
 upstream_8845c001_shell-Osd-Fix-missing-RTL.patch
 upstream_142caad0_applets-notification-fix-fullRepresentation-only-widgets.patch
-upstream_32a7cf2a_colorsapplicator-Don-t-allow-extended-RGB-from-OKLabToLinearSRGB.patch
-upstream_60859fa9_applets-devicenotifier-fix-pointless-mount-action.patch
-upstream_7635c551_libnotificationmanager-fix-critical-notifications-not-showing-when-Do-not-disturb-is-active.patch
-upstream_72719edd_components-sessionprivate-fix-a-potential-crash-in-SessionsModel.patch
-upstream_41a554e6_applets-notifications-Don-t-set-a-parent-for-WidgetsAskUserActionHandler.patch
-upstream_2c855c2f_Fix-cell-height-calc-in-resize-handle.patch
-upstream_bf67f256_klipper-make-Add-Actions-dialog-only-window-modal.patch
 upstream_d4df9b5f_applets-systemmonitor-handle-null-faceController.patch
 upstream_b9bc83c6_applets-systemmonitor-skip-configure-button-on-sensorless-faces.patch
+upstream_45784326_libtaskmanager-show-Comment-for-launcher-icons-when-appropriate.patch
+upstream_e9fd71d9_wallpapers-image-don-t-crash-when-removing-usr-share.patch
+upstream_88911e82_shell-Rearrange-the-teardown-order.patch
+upstream_01978f58_Do-not-track-cache-partitions-with-freespacenotifier.patch
+upstream_f1605df4_Do-not-show-logout-screen-when-in-lockscreen-screensaver.patch
+upstream_8e6b79da_containmentlayoutmanager-don-t-enter-edit-mode-without-activefocus.patch
+upstream_e2ae8f54_libtaskmanager-fix-move-to-activity-when-on-almost-all-activities.patch
+upstream_ab55c53e_applets-kicker-fix-filenames-containing-in-history.patch
+upstream_d286dce3_Klipper-Remove-local-Configure-Klipper-action.patch
+upstream_a4e153b3_kcms-feedback-remove-little-hover-icons.patch
+upstream_d1896f5a_applets-kicker-resolve-non-existing-files-to-their-url.patch
+upstream_b2e80af5_Only-resize-width-to-fit-date-elements-if-they-are-visible.patch
+upstream_ec837446_Do-not-emit-OOM-notifications-on-systemd-services-reload.patch
Seulement dans plasma-workspace-6.3.6/debian/patches: upstream_01978f58_Do-not-track-cache-partitions-with-freespacenotifier.patch
Seulement dans plasma-workspace-6.3.5/debian/patches: upstream_2c855c2f_Fix-cell-height-calc-in-resize-handle.patch
Seulement dans plasma-workspace-6.3.5/debian/patches: upstream_32a7cf2a_colorsapplicator-Don-t-allow-extended-RGB-from-OKLabToLinearSRGB.patch
Seulement dans plasma-workspace-6.3.5/debian/patches: upstream_41a554e6_applets-notifications-Don-t-set-a-parent-for-WidgetsAskUserActionHandler.patch
Seulement dans plasma-workspace-6.3.6/debian/patches: upstream_45784326_libtaskmanager-show-Comment-for-launcher-icons-when-appropriate.patch
Seulement dans plasma-workspace-6.3.5/debian/patches: upstream_60859fa9_applets-devicenotifier-fix-pointless-mount-action.patch
Seulement dans plasma-workspace-6.3.5/debian/patches: upstream_72719edd_components-sessionprivate-fix-a-potential-crash-in-SessionsModel.patch
Seulement dans plasma-workspace-6.3.5/debian/patches: upstream_7635c551_libnotificationmanager-fix-critical-notifications-not-showing-when-Do-not-disturb-is-active.patch
Seulement dans plasma-workspace-6.3.6/debian/patches: upstream_88911e82_shell-Rearrange-the-teardown-order.patch
Seulement dans plasma-workspace-6.3.6/debian/patches: upstream_8e6b79da_containmentlayoutmanager-don-t-enter-edit-mode-without-activefocus.patch
Seulement dans plasma-workspace-6.3.6/debian/patches: upstream_a4e153b3_kcms-feedback-remove-little-hover-icons.patch
Seulement dans plasma-workspace-6.3.6/debian/patches: upstream_ab55c53e_applets-kicker-fix-filenames-containing-in-history.patch
Seulement dans plasma-workspace-6.3.6/debian/patches: upstream_b2e80af5_Only-resize-width-to-fit-date-elements-if-they-are-visible.patch
Seulement dans plasma-workspace-6.3.5/debian/patches: upstream_bf67f256_klipper-make-Add-Actions-dialog-only-window-modal.patch
Seulement dans plasma-workspace-6.3.6/debian/patches: upstream_d1896f5a_applets-kicker-resolve-non-existing-files-to-their-url.patch
Seulement dans plasma-workspace-6.3.6/debian/patches: upstream_d286dce3_Klipper-Remove-local-Configure-Klipper-action.patch
Seulement dans plasma-workspace-6.3.6/debian/patches: upstream_e2ae8f54_libtaskmanager-fix-move-to-activity-when-on-almost-all-activities.patch
Seulement dans plasma-workspace-6.3.6/debian/patches: upstream_e9fd71d9_wallpapers-image-don-t-crash-when-removing-usr-share.patch
Seulement dans plasma-workspace-6.3.6/debian/patches: upstream_ec837446_Do-not-emit-OOM-notifications-on-systemd-services-reload.patch
Seulement dans plasma-workspace-6.3.6/debian/patches: upstream_f1605df4_Do-not-show-logout-screen-when-in-lockscreen-screensaver.patch
diff -ur '--exclude=po' plasma-workspace-6.3.5/freespacenotifier/module.cpp plasma-workspace-6.3.6/freespacenotifier/module.cpp
--- plasma-workspace-6.3.5/freespacenotifier/module.cpp	2025-07-22 08:15:49.000000000 +0200
+++ plasma-workspace-6.3.6/freespacenotifier/module.cpp	2025-07-22 08:15:50.000000000 +0200
@@ -19,6 +19,7 @@
 #include <Solid/StorageVolume>
 
 #include <QDir>
+#include <QFile>
 
 #include "kded_interface.h"
 
@@ -74,7 +75,11 @@
     if (auto generic = device.as<Solid::GenericInterface>()) {
         isReadOnly = generic->property(QStringLiteral("ReadOnly")).toBool();
     }
-    if (isReadOnly) {
+    // Cache devices should be marked through a
+    // CACHEDIR.TAG file to avoid indexing; see
+    // https://bford.info/cachedir/ for reference.
+    const bool isCache = QFile::exists(QDir(access->filePath()).filePath(QStringLiteral("CACHEDIR.TAG")));
+    if (isReadOnly || isCache) {
         return;
     }
 
diff -ur '--exclude=po' plasma-workspace-6.3.5/kcms/feedback/ui/main.qml plasma-workspace-6.3.6/kcms/feedback/ui/main.qml
--- plasma-workspace-6.3.5/kcms/feedback/ui/main.qml	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/kcms/feedback/ui/main.qml	2025-07-22 08:15:50.000000000 +0200
@@ -145,27 +145,6 @@
                         text: "· " + modelData.description
                         textFormat: Text.PlainText
                         Layout.fillWidth: true
-
-                        MouseArea {
-                            anchors.fill: parent
-                            hoverEnabled: true
-                            QQC2.ToolTip {
-                                width: iconsLayout.implicitWidth + Kirigami.Units.largeSpacing * 2
-                                height: iconsLayout.implicitHeight + Kirigami.Units.smallSpacing * 2
-                                visible: parent.containsMouse
-                                RowLayout {
-                                    id: iconsLayout
-                                    Repeater {
-                                        model: modelData.icons
-                                        delegate: Kirigami.Icon {
-                                            implicitHeight: Kirigami.Units.iconSizes.medium
-                                            implicitWidth: Kirigami.Units.iconSizes.medium
-                                            source: modelData
-                                        }
-                                    }
-                                }
-                            }
-                        }
                     }
                 }
             }
diff -ur '--exclude=po' plasma-workspace-6.3.5/klipper/klipper.cpp plasma-workspace-6.3.6/klipper/klipper.cpp
--- plasma-workspace-6.3.5/klipper/klipper.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/klipper/klipper.cpp	2025-07-22 08:15:50.000000000 +0200
@@ -111,12 +111,6 @@
     KGlobalAccel::setGlobalShortcut(m_clearHistoryAction, QKeySequence());
     connect(m_clearHistoryAction, &QAction::triggered, m_historyModel.get(), &HistoryModel::clearHistory);
 
-    QString CONFIGURE = QStringLiteral("configure");
-    m_configureAction = m_collection->addAction(CONFIGURE);
-    m_configureAction->setIcon(QIcon::fromTheme(CONFIGURE));
-    m_configureAction->setText(i18nc("@action:inmenu", "&Configure Klipper…"));
-    connect(m_configureAction, &QAction::triggered, this, &Klipper::slotConfigure);
-
     m_repeatAction = m_collection->addAction(QStringLiteral("repeat_action"));
     m_repeatAction->setText(i18nc("@action:inmenu", "Manually Invoke Action on Current Clipboard"));
     m_repeatAction->setIcon(QIcon::fromTheme(QStringLiteral("open-menu-symbolic")));
diff -ur '--exclude=po' plasma-workspace-6.3.5/krunner/qml/RunCommand.qml plasma-workspace-6.3.6/krunner/qml/RunCommand.qml
--- plasma-workspace-6.3.5/krunner/qml/RunCommand.qml	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/krunner/qml/RunCommand.qml	2025-07-08 13:48:12.000000000 +0200
@@ -144,7 +144,11 @@
                 bottomPadding: parent.bottomPadding
                 width: parent.width
                 height: parent.height
-                visible: queryField.contentWidth < (queryField.width - queryField.leftPadding - queryField.rightPadding)
+                elide: Text.ElideRight
+                visible: text !== queryField.text
+                    && queryField.implicitWidth < (queryField.width
+                                                - queryField.leftPadding
+                                                - queryField.rightPadding)
                 opacity: 0.5
                 text: ""
                 textFormat: Text.PlainText
diff -ur '--exclude=po' plasma-workspace-6.3.5/libkworkspace/sessionmanagement.cpp plasma-workspace-6.3.6/libkworkspace/sessionmanagement.cpp
--- plasma-workspace-6.3.5/libkworkspace/sessionmanagement.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/libkworkspace/sessionmanagement.cpp	2025-07-22 08:15:50.000000000 +0200
@@ -148,11 +148,18 @@
         return;
     }
 
-    // Don't bother to check for whether the user normally wants confirmation or
-    // not; if this function was invoked, it means they do want to see the logout
-    // prompt right now
-    LogoutPromptIface iface;
-    lockQuitUntilFinished(iface.promptAll());
+    OrgFreedesktopScreenSaverInterface ifaceScreenSaver(QStringLiteral("org.freedesktop.ScreenSaver"),
+                                                        QStringLiteral("/ScreenSaver"),
+                                                        QDBusConnection::sessionBus());
+
+    // Do not show Logoup prompt when in the lockscreen / screensaver
+    if (!ifaceScreenSaver.GetActive()) {
+        // Don't bother to check for whether the user normally wants confirmation or
+        // not; if this function was invoked, it means they do want to see the logout
+        // prompt right now
+        LogoutPromptIface iface;
+        lockQuitUntilFinished(iface.promptAll());
+    }
 }
 
 void SessionManagement::requestShutdown(ConfirmationMode confirmationMode)
diff -ur '--exclude=po' plasma-workspace-6.3.5/libtaskmanager/tasktools.cpp plasma-workspace-6.3.6/libtaskmanager/tasktools.cpp
--- plasma-workspace-6.3.5/libtaskmanager/tasktools.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/libtaskmanager/tasktools.cpp	2025-07-22 08:15:50.000000000 +0200
@@ -34,6 +34,20 @@
 
 using namespace Qt::StringLiterals;
 
+static const QString appropriateCaption(const KService::Ptr &service)
+{
+    if (!service) {
+        return {};
+    }
+
+    const QString genericName = service->genericName();
+    if (!genericName.isEmpty() && genericName != service->name()) {
+        return genericName;
+    }
+
+    return service->comment();
+}
+
 namespace TaskManager
 {
 AppData appDataFromUrl(const QUrl &url, const QIcon &fallbackIcon)
@@ -65,7 +79,7 @@
 
         if (service && url.path() == service->menuId()) {
             data.name = service->name();
-            data.genericName = service->genericName();
+            data.genericName = appropriateCaption(service);
             data.id = service->storageId();
 
             if (data.icon.isNull()) {
@@ -89,7 +103,7 @@
 
             if (service && QUrl::fromLocalFile(service->entryPath()) == url) {
                 data.name = service->name();
-                data.genericName = service->genericName();
+                data.genericName = appropriateCaption(service);
                 data.id = service->storageId();
 
                 if (data.icon.isNull()) {
@@ -99,7 +113,7 @@
                 KDesktopFile f(url.toLocalFile());
                 if (f.tryExec()) {
                     data.name = f.readName();
-                    data.genericName = f.readGenericName();
+                    data.genericName = appropriateCaption(KService::serviceByDesktopPath(url.toLocalFile()));
                     data.id = QUrl::fromLocalFile(f.fileName()).fileName();
 
                     if (data.icon.isNull()) {
@@ -144,7 +158,7 @@
             const QString &desktopFile = service->entryPath();
 
             data.name = service->name();
-            data.genericName = service->genericName();
+            data.genericName = appropriateCaption(service);
             data.id = service->storageId();
 
             if (data.icon.isNull()) {
diff -ur '--exclude=po' plasma-workspace-6.3.5/libtaskmanager/waylandtasksmodel.cpp plasma-workspace-6.3.6/libtaskmanager/waylandtasksmodel.cpp
--- plasma-workspace-6.3.5/libtaskmanager/waylandtasksmodel.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/libtaskmanager/waylandtasksmodel.cpp	2025-07-22 08:15:50.000000000 +0200
@@ -1201,15 +1201,15 @@
     const auto plasmaActivities = window->activities;
     const auto oldActivities = QSet(plasmaActivities.begin(), plasmaActivities.end());
 
-    const auto activitiesToAdd = newActivities - oldActivities;
-    for (const auto &activity : activitiesToAdd) {
-        window->request_enter_activity(activity);
-    }
-
     const auto activitiesToRemove = oldActivities - newActivities;
     for (const auto &activity : activitiesToRemove) {
         window->request_leave_activity(activity);
     }
+
+    const auto activitiesToAdd = newActivities - oldActivities;
+    for (const auto &activity : activitiesToAdd) {
+        window->request_enter_activity(activity);
+    }
 }
 
 void WaylandTasksModel::requestPublishDelegateGeometry(const QModelIndex &index, const QRect &geometry, QObject *delegate)
diff -ur '--exclude=po' plasma-workspace-6.3.5/oom-notifier/module.cpp plasma-workspace-6.3.6/oom-notifier/module.cpp
--- plasma-workspace-6.3.5/oom-notifier/module.cpp	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/oom-notifier/module.cpp	2025-07-22 08:15:50.000000000 +0200
@@ -57,6 +57,9 @@
                     if (changed.value(u"Result"_s, QString()) != "oom-kill"_L1) {
                         return;
                     }
+                    if (changed.value(u"MainPID"_s) == 0) {
+                        return;
+                    }
 
                     const auto unit = decodeUnitName(QFileInfo(msg.path()).fileName());
                     const auto service = serviceForUnitName(unit);
diff -ur '--exclude=po' plasma-workspace-6.3.5/.pc/applied-patches plasma-workspace-6.3.6/.pc/applied-patches
--- plasma-workspace-6.3.5/.pc/applied-patches	2025-07-22 08:15:50.044025582 +0200
+++ plasma-workspace-6.3.6/.pc/applied-patches	2025-07-22 08:15:50.620041856 +0200
@@ -14,12 +14,18 @@
 upstream_6d12cde3_wallpapers-image-Fix-thumbnails-not-matching-output-size.patch
 upstream_8845c001_shell-Osd-Fix-missing-RTL.patch
 upstream_142caad0_applets-notification-fix-fullRepresentation-only-widgets.patch
-upstream_32a7cf2a_colorsapplicator-Don-t-allow-extended-RGB-from-OKLabToLinearSRGB.patch
-upstream_60859fa9_applets-devicenotifier-fix-pointless-mount-action.patch
-upstream_7635c551_libnotificationmanager-fix-critical-notifications-not-showing-when-Do-not-disturb-is-active.patch
-upstream_72719edd_components-sessionprivate-fix-a-potential-crash-in-SessionsModel.patch
-upstream_41a554e6_applets-notifications-Don-t-set-a-parent-for-WidgetsAskUserActionHandler.patch
-upstream_2c855c2f_Fix-cell-height-calc-in-resize-handle.patch
-upstream_bf67f256_klipper-make-Add-Actions-dialog-only-window-modal.patch
 upstream_d4df9b5f_applets-systemmonitor-handle-null-faceController.patch
 upstream_b9bc83c6_applets-systemmonitor-skip-configure-button-on-sensorless-faces.patch
+upstream_45784326_libtaskmanager-show-Comment-for-launcher-icons-when-appropriate.patch
+upstream_e9fd71d9_wallpapers-image-don-t-crash-when-removing-usr-share.patch
+upstream_88911e82_shell-Rearrange-the-teardown-order.patch
+upstream_01978f58_Do-not-track-cache-partitions-with-freespacenotifier.patch
+upstream_f1605df4_Do-not-show-logout-screen-when-in-lockscreen-screensaver.patch
+upstream_8e6b79da_containmentlayoutmanager-don-t-enter-edit-mode-without-activefocus.patch
+upstream_e2ae8f54_libtaskmanager-fix-move-to-activity-when-on-almost-all-activities.patch
+upstream_ab55c53e_applets-kicker-fix-filenames-containing-in-history.patch
+upstream_d286dce3_Klipper-Remove-local-Configure-Klipper-action.patch
+upstream_a4e153b3_kcms-feedback-remove-little-hover-icons.patch
+upstream_d1896f5a_applets-kicker-resolve-non-existing-files-to-their-url.patch
+upstream_b2e80af5_Only-resize-width-to-fit-date-elements-if-they-are-visible.patch
+upstream_ec837446_Do-not-emit-OOM-notifications-on-systemd-services-reload.patch
diff -ur '--exclude=po' plasma-workspace-6.3.5/.pc/relax-interplasma-versioned-deps.patch/CMakeLists.txt plasma-workspace-6.3.6/.pc/relax-interplasma-versioned-deps.patch/CMakeLists.txt
--- plasma-workspace-6.3.5/.pc/relax-interplasma-versioned-deps.patch/CMakeLists.txt	2025-05-06 19:59:32.000000000 +0200
+++ plasma-workspace-6.3.6/.pc/relax-interplasma-versioned-deps.patch/CMakeLists.txt	2025-07-08 13:48:11.000000000 +0200
@@ -1,13 +1,13 @@
 cmake_minimum_required(VERSION 3.16)
 
 project(plasma-workspace)
-set(PROJECT_VERSION "6.3.5")
+set(PROJECT_VERSION "6.3.6")
 string(REPLACE "." ";" VERSION_LIST ${PROJECT_VERSION})
 list(GET VERSION_LIST 0 PROJECT_VERSION_MAJOR)
 list(GET VERSION_LIST 1 PROJECT_VERSION_MINOR)
 list(GET VERSION_LIST 2 PROJECT_VERSION_PATCH)
 
-set(PROJECT_DEP_VERSION "6.3.5")
+set(PROJECT_DEP_VERSION "6.3.6")
 set(QT_MIN_VERSION "6.7.0")
 set(KF6_MIN_VERSION "6.10.0")
 option(PLASMA_X11_DEFAULT_SESSION "Use X11 session by default for Plasma" OFF)
Seulement dans plasma-workspace-6.3.6/.pc: upstream_01978f58_Do-not-track-cache-partitions-with-freespacenotifier.patch
Seulement dans plasma-workspace-6.3.5/.pc: upstream_2c855c2f_Fix-cell-height-calc-in-resize-handle.patch
Seulement dans plasma-workspace-6.3.5/.pc: upstream_32a7cf2a_colorsapplicator-Don-t-allow-extended-RGB-from-OKLabToLinearSRGB.patch
Seulement dans plasma-workspace-6.3.5/.pc: upstream_41a554e6_applets-notifications-Don-t-set-a-parent-for-WidgetsAskUserActionHandler.patch
Seulement dans plasma-workspace-6.3.6/.pc: upstream_45784326_libtaskmanager-show-Comment-for-launcher-icons-when-appropriate.patch
Seulement dans plasma-workspace-6.3.5/.pc: upstream_60859fa9_applets-devicenotifier-fix-pointless-mount-action.patch
Seulement dans plasma-workspace-6.3.5/.pc: upstream_72719edd_components-sessionprivate-fix-a-potential-crash-in-SessionsModel.patch
Seulement dans plasma-workspace-6.3.5/.pc: upstream_7635c551_libnotificationmanager-fix-critical-notifications-not-showing-when-Do-not-disturb-is-active.patch
Seulement dans plasma-workspace-6.3.6/.pc: upstream_88911e82_shell-Rearrange-the-teardown-order.patch
Seulement dans plasma-workspace-6.3.6/.pc: upstream_8e6b79da_containmentlayoutmanager-don-t-enter-edit-mode-without-activefocus.patch
Seulement dans plasma-workspace-6.3.6/.pc: upstream_a4e153b3_kcms-feedback-remove-little-hover-icons.patch
Seulement dans plasma-workspace-6.3.6/.pc: upstream_ab55c53e_applets-kicker-fix-filenames-containing-in-history.patch
Seulement dans plasma-workspace-6.3.6/.pc: upstream_b2e80af5_Only-resize-width-to-fit-date-elements-if-they-are-visible.patch
Seulement dans plasma-workspace-6.3.5/.pc: upstream_bf67f256_klipper-make-Add-Actions-dialog-only-window-modal.patch
Seulement dans plasma-workspace-6.3.6/.pc: upstream_d1896f5a_applets-kicker-resolve-non-existing-files-to-their-url.patch
Seulement dans plasma-workspace-6.3.6/.pc: upstream_d286dce3_Klipper-Remove-local-Configure-Klipper-action.patch
Seulement dans plasma-workspace-6.3.6/.pc: upstream_e2ae8f54_libtaskmanager-fix-move-to-activity-when-on-almost-all-activities.patch
Seulement dans plasma-workspace-6.3.6/.pc: upstream_e9fd71d9_wallpapers-image-don-t-crash-when-removing-usr-share.patch
Seulement dans plasma-workspace-6.3.6/.pc: upstream_ec837446_Do-not-emit-OOM-notifications-on-systemd-services-reload.patch
Seulement dans plasma-workspace-6.3.6/.pc: upstream_f1605df4_Do-not-show-logout-screen-when-in-lockscreen-screensaver.patch
diff -ur '--exclude=po' plasma-workspace-6.3.5/shell/main.cpp plasma-workspace-6.3.6/shell/main.cpp
--- plasma-workspace-6.3.5/shell/main.cpp	2025-05-06 19:59:33.000000000 +0200
+++ plasma-workspace-6.3.6/shell/main.cpp	2025-07-22 08:15:50.000000000 +0200
@@ -92,7 +92,7 @@
 
     bool replace = false;
 
-    ShellCorona *corona = nullptr;
+    ShellCorona corona;
     {
         QCommandLineParser cliOptions;
 
@@ -132,23 +132,20 @@
         QObject::connect(&app, &QGuiApplication::commitDataRequest, disableSessionManagement);
         QObject::connect(&app, &QGuiApplication::saveStateRequest, disableSessionManagement);
 
-        corona = new ShellCorona(&app);
-        corona->setShell(cliOptions.value(shellPluginOption));
-        if (!corona->kPackage().isValid()) {
-            qCritical() << "starting invalid corona" << corona->shell();
+        corona.setShell(cliOptions.value(shellPluginOption));
+        if (!corona.kPackage().isValid()) {
+            qCritical() << "starting invalid corona" << corona.shell();
             return 1;
         }
 
 #ifdef WITH_KUSERFEEDBACKCORE
-        auto userFeedback = new UserFeedback(corona, &app);
+        auto userFeedback = new UserFeedback(&corona, &corona);
         if (cliOptions.isSet(feedbackOption)) {
             QTextStream(stdout) << userFeedback->describeDataSources();
             return 0;
         }
 #endif
 
-        QObject::connect(QCoreApplication::instance(), &QCoreApplication::aboutToQuit, corona, &QObject::deleteLater);
-
         if (!cliOptions.isSet(noRespawnOption)) {
             KCrash::setFlags(KCrash::AutoRestart);
         }
@@ -156,7 +153,7 @@
         // Tells libnotificationmanager that we're the only true application that may own notification and job progress services
         qApp->setProperty("_plasma_dbus_master", true);
 
-        QObject::connect(corona, &ShellCorona::glInitializationFailed, &app, [&app]() {
+        QObject::connect(&corona, &ShellCorona::glInitializationFailed, &app, [&app]() {
             // scene graphs errors come from a thread
             // even though we process them in the main thread, app.exit could still process these events
             static bool s_multipleInvokations = false;
@@ -185,7 +182,7 @@
 
     KDBusService service(KDBusService::Unique | KDBusService::StartupOption(replace ? KDBusService::Replace : 0));
 
-    corona->init();
+    corona.init();
     SoftwareRendererNotifier::notifyIfRelevant();
 
     return app.exec();
diff -ur '--exclude=po' plasma-workspace-6.3.5/wallpapers/image/plugin/slidemodel.cpp plasma-workspace-6.3.6/wallpapers/image/plugin/slidemodel.cpp
--- plasma-workspace-6.3.5/wallpapers/image/plugin/slidemodel.cpp	2025-05-06 19:59:33.000000000 +0200
+++ plasma-workspace-6.3.6/wallpapers/image/plugin/slidemodel.cpp	2025-07-22 08:15:50.000000000 +0200
@@ -88,12 +88,16 @@
             m_models.insert(d, m);
             added.append(d);
 
+            // Add the model immediately unconditionally as we might want to remove it before is loaded,
+            // which would crash if we didn't add it yet. when images are loaded the rowsInserted signals
+            // will be properly forwarded
+            addSourceModel(m);
+
             if (m->loading().value()) {
                 connect(m, &ImageProxyModel::loadingChanged, this, &SlideModel::slotSourceModelLoadingChanged);
             } else {
                 // In case it loads immediately
                 ++m_loaded;
-                addSourceModel(m);
             }
         }
     }
@@ -161,10 +165,6 @@
 
 void SlideModel::slotSourceModelLoadingChanged()
 {
-    auto m = static_cast<ImageProxyModel *>(sender());
-    disconnect(m, &ImageProxyModel::loadingChanged, this, nullptr);
-    addSourceModel(m);
-
     if (++m_loaded == m_models.size()) {
         m_loading = false;
         Q_EMIT done();

--- End Message ---
--- Begin Message ---
Unblocked plasma-workspace.

--- End Message ---

Reply to: