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

Bug#1109693: unblock: plasma-workspace/4:6.3.6-2



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();

Reply to: