From: Akseli Lahtinen Date: Tue, 17 Sep 2024 09:28:49 +0000 (+0000) Subject: dolphintrash.cpp: Update trash dir on device changes X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/7af7159b35d6c3091eb73f34ead80d64b3f85e2b?ds=inline dolphintrash.cpp: Update trash dir on device changes Make sure we update the trash directory when storage devices are added/changed. This ensures that whenever a mounted device, for example USB stick is mounted/unmounted, the contents are properly updated in the trash folder as well. Otherwise the trash folder and USB stick trash folder will get out of sync, making the trash folder behavior unpredictable. BUG:493247 --- diff --git a/src/trash/dolphintrash.cpp b/src/trash/dolphintrash.cpp index 0bb61ff28..8f57e6c00 100644 --- a/src/trash/dolphintrash.cpp +++ b/src/trash/dolphintrash.cpp @@ -12,6 +12,9 @@ #include #include #include +#include +#include +#include #include @@ -29,6 +32,26 @@ Trash::Trash() }; connect(m_trashDirLister, &KCoreDirLister::completed, this, trashDirContentChanged); connect(m_trashDirLister, &KDirLister::itemsDeleted, this, trashDirContentChanged); + + // Update trash directory when removable storage devices are changed to keep it in sync with the + // storage device .Trash-1000 folders + Solid::DeviceNotifier *notifier = Solid::DeviceNotifier::instance(); + connect(notifier, &Solid::DeviceNotifier::deviceAdded, this, [this](const QString &device) { + const Solid::Device dev(device); + if (dev.isValid() && dev.is()) { + const Solid::StorageAccess *access = dev.as(); + connect(access, &Solid::StorageAccess::accessibilityChanged, this, [this]() { + m_trashDirLister->updateDirectory(QUrl(QStringLiteral("trash:/"))); + }); + } + }); + connect(notifier, &Solid::DeviceNotifier::deviceRemoved, this, [this](const QString &device) { + const Solid::Device dev(device); + if (dev.isValid() && dev.is()) { + m_trashDirLister->updateDirectory(QUrl(QStringLiteral("trash:/"))); + } + }); + m_trashDirLister->openUrl(QUrl(QStringLiteral("trash:/"))); }