diff --git a/runners/katesessions/CMakeLists.txt b/runners/katesessions/CMakeLists.txt --- a/runners/katesessions/CMakeLists.txt +++ b/runners/katesessions/CMakeLists.txt @@ -2,7 +2,7 @@ set(krunner_katesessions_SRCS katesessions.cpp) add_library(krunner_katesessions MODULE ${krunner_katesessions_SRCS}) -target_link_libraries(krunner_katesessions KF5::KIOCore KF5::I18n KF5::Runner) +target_link_libraries(krunner_katesessions KF5::KIOCore KF5::I18n KF5::Runner KF5::CoreAddons) install(TARGETS krunner_katesessions DESTINATION ${KDE_INSTALL_PLUGINDIR}) install(FILES plasma-runner-katesessions.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) diff --git a/runners/katesessions/katesessions.h b/runners/katesessions/katesessions.h --- a/runners/katesessions/katesessions.h +++ b/runners/katesessions/katesessions.h @@ -36,7 +36,9 @@ void match(Plasma::RunnerContext &context) override; void run(const Plasma::RunnerContext &context, const Plasma::QueryMatch &match) override; - private Q_SLOTS: + QMimeData *mimeDataForMatch(const Plasma::QueryMatch &match) override; + +private Q_SLOTS: void loadSessions(); private: diff --git a/runners/katesessions/katesessions.cpp b/runners/katesessions/katesessions.cpp --- a/runners/katesessions/katesessions.cpp +++ b/runners/katesessions/katesessions.cpp @@ -22,13 +22,16 @@ #include "katesessions.h" #include +#include #include #include #include +#include #include #include #include +#include K_EXPORT_PLASMA_RUNNER(katesessionsrunner, KateSessions) @@ -118,4 +121,30 @@ match.data().toString(), QStringLiteral("-n")}); } +QMimeData *KateSessions::mimeDataForMatch(const Plasma::QueryMatch &match) +{ + auto *data = new QMimeData(); + const QString sessionName = match.data().toString(); + const QString desktopFileName = m_sessionsFolderPath + + QDir::separator() + + QString::fromLocal8Bit(QUrl::toPercentEncoding(sessionName)) + + QStringLiteral(".desktop"); + if (!QFile::exists(desktopFileName)) { + QFile f(desktopFileName); + if (!f.open(QFile::WriteOnly)) { + return nullptr; + } + f.write(QStringLiteral("[Desktop Entry]\n" + "Categories=Qt;KDE;Utility;TextEditor;\n" + "Exec=kate --start %2 -n\n" + "Icon=kate\n" + "Name=Kate %1\n" + "Terminal=false\n" + "Type=Application\n") + .arg(sessionName, KShell::quoteArg(sessionName)).toLocal8Bit()); + } + data->setUrls({QUrl::fromLocalFile(desktopFileName)}); + return data; +} + #include "katesessions.moc"