X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/1da0983c42a1ccd8034d411b87694753b5f9e9e6..3186f0428888447a783d014afaaa0b44b68ebaba:/src/trash/dolphintrash.cpp diff --git a/src/trash/dolphintrash.cpp b/src/trash/dolphintrash.cpp index 749d0d481..8f57e6c00 100644 --- a/src/trash/dolphintrash.cpp +++ b/src/trash/dolphintrash.cpp @@ -1,32 +1,22 @@ -/*************************************************************************** - * Copyright (C) 2012 by Peter Penz * - * Copyright (C) 2018 by Roman Inflianskas * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ +/* + * SPDX-FileCopyrightText: 2012 Peter Penz + * SPDX-FileCopyrightText: 2018 Roman Inflianskas + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #include "dolphintrash.h" -#include -#include -#include -#include #include #include +#include +#include +#include +#include +#include +#include +#include Trash::Trash() : m_trashDirLister(new KDirLister()) @@ -34,14 +24,34 @@ Trash::Trash() // The trash icon must always be updated dependent on whether // the trash is empty or not. We use a KDirLister that automatically // watches for changes if the number of items has been changed. - m_trashDirLister->setAutoErrorHandlingEnabled(false, nullptr); + m_trashDirLister->setAutoErrorHandlingEnabled(false); m_trashDirLister->setDelayedMimeTypes(true); auto trashDirContentChanged = [this]() { bool isTrashEmpty = m_trashDirLister->items().isEmpty(); - emit emptinessChanged(isTrashEmpty); + Q_EMIT emptinessChanged(isTrashEmpty); }; - connect(m_trashDirLister, static_cast(&KDirLister::completed), this, trashDirContentChanged); + 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:/"))); } @@ -56,27 +66,28 @@ Trash &Trash::instance() return result; } -KIO::Job *Trash::empty(QWidget *window) +static void notifyEmptied() +{ + // As long as KIO doesn't do this, do it ourselves + KNotification::event(QStringLiteral("Trash: emptied"), + i18n("Trash Emptied"), + i18n("The Trash was emptied."), + QStringLiteral("user-trash"), + KNotification::DefaultEvent); +} + +void Trash::empty(QWidget *window) { - KIO::JobUiDelegate uiDelegate; - uiDelegate.setWindow(window); - bool confirmed = uiDelegate.askDeleteConfirmation(QList(), KIO::JobUiDelegate::EmptyTrash, KIO::JobUiDelegate::DefaultConfirmation); - if (confirmed) { - KIO::Job* job = KIO::emptyTrash(); - KJobWidgets::setWindow(job, window); - job->uiDelegate()->setAutoErrorHandlingEnabled(true); - // as long as KIO doesn't do this, do it ourselves - connect(job, &KIO::Job::result, [](){ - KNotification::event(QStringLiteral("Trash: emptied"), QString(), QPixmap(), nullptr, KNotification::DefaultEvent); - }); - return job; - } - return nullptr; + using Iface = KIO::AskUserActionInterface; + auto *emptyJob = new KIO::DeleteOrTrashJob(QList{}, Iface::EmptyTrash, Iface::DefaultConfirmation, window); + QObject::connect(emptyJob, &KIO::Job::result, notifyEmptied); + emptyJob->start(); } bool Trash::isEmpty() { KConfig trashConfig(QStringLiteral("trashrc"), KConfig::SimpleConfig); - return (trashConfig.group("Status").readEntry("Empty", true)); + return (trashConfig.group(QStringLiteral("Status")).readEntry("Empty", true)); } +#include "moc_dolphintrash.cpp"