From 7af7159b35d6c3091eb73f34ead80d64b3f85e2b Mon Sep 17 00:00:00 2001 From: Akseli Lahtinen Date: Tue, 17 Sep 2024 09:28:49 +0000 Subject: [PATCH] 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 --- src/trash/dolphintrash.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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:/"))); } -- 2.47.3