diff options
| author | Akseli Lahtinen <[email protected]> | 2024-09-17 09:28:49 +0000 |
|---|---|---|
| committer | Méven Car <[email protected]> | 2024-09-17 09:28:49 +0000 |
| commit | 7af7159b35d6c3091eb73f34ead80d64b3f85e2b (patch) | |
| tree | a3731034b3c9129df4bbdd66d9cdf99fbfd22e69 | |
| parent | 5d6495f24503dd32746fd71e8f6d270373118a75 (diff) | |
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
| -rw-r--r-- | src/trash/dolphintrash.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
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 <KIO/DeleteOrTrashJob> #include <KLocalizedString> #include <KNotification> +#include <Solid/Device> +#include <Solid/DeviceNotifier> +#include <Solid/StorageAccess> #include <QList> @@ -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<Solid::StorageAccess>()) { + const Solid::StorageAccess *access = dev.as<Solid::StorageAccess>(); + 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<Solid::StorageAccess>()) { + m_trashDirLister->updateDirectory(QUrl(QStringLiteral("trash:/"))); + } + }); + m_trashDirLister->openUrl(QUrl(QStringLiteral("trash:/"))); } |
