diff --git a/runners/recentdocuments/recentdocuments.h b/runners/recentdocuments/recentdocuments.h --- a/runners/recentdocuments/recentdocuments.h +++ b/runners/recentdocuments/recentdocuments.h @@ -35,6 +35,7 @@ void run(const Plasma::RunnerContext &context, const Plasma::QueryMatch &match) override; private Q_SLOTS: + QList actionsForMatch(const Plasma::QueryMatch &match) override; QMimeData * mimeDataForMatch(const Plasma::QueryMatch &match) override; private Q_SLOTS: diff --git a/runners/recentdocuments/recentdocuments.cpp b/runners/recentdocuments/recentdocuments.cpp --- a/runners/recentdocuments/recentdocuments.cpp +++ b/runners/recentdocuments/recentdocuments.cpp @@ -20,6 +20,7 @@ #include "recentdocuments.h" #include +#include #include #include @@ -68,6 +69,8 @@ return; } + const QString homePath = QDir::homePath(); + foreach (const QString &document, m_recentdocuments) { if (!context.isValid()) { return; @@ -81,7 +84,17 @@ match.setIconName(config.readIcon()); match.setData(config.readUrl()); match.setText(config.readName()); - match.setSubtext(i18n("Recent Document")); + + QUrl folderUrl = QUrl(config.readUrl()).adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash); + if (folderUrl.isLocalFile()) { + QString folderPath = folderUrl.toLocalFile(); + if (folderPath.startsWith(homePath)) { + folderPath.replace(0, homePath.length(), QStringLiteral("~")); + } + match.setSubtext(folderPath); + } else { + match.setSubtext(folderUrl.toDisplayString()); + } context.addMatch(match); } @@ -91,18 +104,39 @@ void RecentDocuments::run(const Plasma::RunnerContext &context, const Plasma::QueryMatch &match) { Q_UNUSED(context) - QString url = match.data().toString(); - qDebug() << "Opening Recent Document" << url; + + const QString url = match.data().toString(); + + if (match.selectedAction() && match.selectedAction()->data().toString() == QLatin1String("openParentDir")) { + KIO::highlightInFileManager({QUrl(url)}); + return; + } + new KRun(url, 0); } -QMimeData * RecentDocuments::mimeDataForMatch(const Plasma::QueryMatch& match) +QList RecentDocuments::actionsForMatch(const Plasma::QueryMatch &match) { - QMimeData * result = new QMimeData(); - QList urls; - urls << QUrl(match.data().toString()); - result->setUrls(urls); + Q_UNUSED(match) + + const QString openParentDirId = QStringLiteral("openParentDir"); + if (!action(openParentDirId)) { + (addAction(openParentDirId, QIcon::fromTheme(QStringLiteral("document-open-folder")), i18n("Open Containing Folder")))->setData(openParentDirId); + } + + QList actions; + + if (QUrl(match.data().toString()).isLocalFile()) { + actions << action(openParentDirId); + } + + return actions; +} + +QMimeData * RecentDocuments::mimeDataForMatch(const Plasma::QueryMatch& match) +{ + QMimeData *result = new QMimeData(); result->setText(match.data().toString()); return result; }