X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/576a97d8eb9601f4ad74def6528cc90fffe97b1c..08a9aaad2c102ee988edce97b34b66b1afc65a0d:/src/dolphinplacesmodelsingleton.cpp diff --git a/src/dolphinplacesmodelsingleton.cpp b/src/dolphinplacesmodelsingleton.cpp index 30ec1b9b6..754070c92 100644 --- a/src/dolphinplacesmodelsingleton.cpp +++ b/src/dolphinplacesmodelsingleton.cpp @@ -5,12 +5,61 @@ */ #include "dolphinplacesmodelsingleton.h" +#include "trash/dolphintrash.h" #include #include +#include + +DolphinPlacesModel::DolphinPlacesModel(const QString &alternativeApplicationName, QObject *parent) + : KFilePlacesModel(alternativeApplicationName, parent) +{ + connect(&Trash::instance(), &Trash::emptinessChanged, this, &DolphinPlacesModel::slotTrashEmptinessChanged); +} + +DolphinPlacesModel::~DolphinPlacesModel() = default; + +QVariant DolphinPlacesModel::data(const QModelIndex &index, int role) const +{ + if (role == Qt::DecorationRole) { + if (isTrash(index)) { + if (m_isEmpty) { + return QIcon::fromTheme(QStringLiteral("user-trash")); + } else { + return QIcon::fromTheme(QStringLiteral("user-trash-full")); + } + } + } + + return KFilePlacesModel::data(index, role); +} + +void DolphinPlacesModel::slotTrashEmptinessChanged(bool isEmpty) +{ + if (m_isEmpty == isEmpty) { + return; + } + + // NOTE Trash::isEmpty() reads the config file whereas emptinessChanged is + // hooked up to whether a dirlister in trash:/ has any files and they disagree... + m_isEmpty = isEmpty; + + for (int i = 0; i < rowCount(); ++i) { + const QModelIndex index = this->index(i, 0); + if (isTrash(index)) { + Q_EMIT dataChanged(index, index, {Qt::DecorationRole}); + } + } +} + +bool DolphinPlacesModel::isTrash(const QModelIndex &index) const +{ + return url(index) == QUrl(QStringLiteral("trash:/")); +} + DolphinPlacesModelSingleton::DolphinPlacesModelSingleton() - : m_placesModel(new KFilePlacesModel(KAboutData::applicationData().componentName() + applicationNameSuffix())) + : m_placesModel(new DolphinPlacesModel(KAboutData::applicationData().componentName() + applicationNameSuffix())) { }