diff --git a/containments/desktop/package/contents/ui/ConfigLocation.qml b/containments/desktop/package/contents/ui/ConfigLocation.qml --- a/containments/desktop/package/contents/ui/ConfigLocation.qml +++ b/containments/desktop/package/contents/ui/ConfigLocation.qml @@ -67,6 +67,7 @@ Folder.PlacesModel { id: placesModel + showDesktopEntry: false onPlacesChanged: applyConfig(true) } diff --git a/containments/desktop/plugins/folder/placesmodel.h b/containments/desktop/plugins/folder/placesmodel.h --- a/containments/desktop/plugins/folder/placesmodel.h +++ b/containments/desktop/plugins/folder/placesmodel.h @@ -29,25 +29,31 @@ Q_OBJECT Q_PROPERTY(bool activityLinkingEnabled READ activityLinkingEnabled CONSTANT) + Q_PROPERTY(bool showDesktopEntry READ showDesktopEntry WRITE setShowDesktopEntry NOTIFY showDesktopEntryChanged) public: explicit PlacesModel(QObject *parent = nullptr); ~PlacesModel(); bool activityLinkingEnabled() const; + bool showDesktopEntry() const; + void setShowDesktopEntry(bool showDesktopEntry); + QHash roleNames() const override; Q_INVOKABLE QString urlForIndex(int idx) const; Q_INVOKABLE int indexForUrl(const QString &url) const; Q_SIGNALS: void placesChanged() const; + void showDesktopEntryChanged() const; protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; private: KFilePlacesModel *m_sourceModel; + bool m_showDesktopEntry = true; }; #endif diff --git a/containments/desktop/plugins/folder/placesmodel.cpp b/containments/desktop/plugins/folder/placesmodel.cpp --- a/containments/desktop/plugins/folder/placesmodel.cpp +++ b/containments/desktop/plugins/folder/placesmodel.cpp @@ -19,6 +19,8 @@ #include "placesmodel.h" +#include + #include #include #include @@ -59,6 +61,22 @@ return !services.at(0).data()->noDisplay(); } +bool PlacesModel::showDesktopEntry() const +{ + return m_showDesktopEntry; +} + +void PlacesModel::setShowDesktopEntry(bool showDesktopEntry) +{ + if (m_showDesktopEntry != showDesktopEntry) { + m_showDesktopEntry = showDesktopEntry; + + invalidateFilter(); + + emit showDesktopEntryChanged(); + } +} + QString PlacesModel::urlForIndex(int idx) const { return m_sourceModel->url(mapToSource(index(idx, 0))).toString(); @@ -88,5 +106,13 @@ { const QModelIndex index = m_sourceModel->index(sourceRow, 0, sourceParent); + if (!m_showDesktopEntry) { + const QUrl url = index.data(KFilePlacesModel::UrlRole).toUrl(); + const QUrl desktopUrl = QUrl::fromLocalFile(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)); + if (url == desktopUrl) { + return false; + } + } + return !m_sourceModel->isHidden(index); }