diff -u a/plasma/generic/runners/nepomuksearch/nepomuksearchrunner.cpp git-kde-workspace/plasma/generic/runners/nepomuksearch//nepomuksearchrunner.cpp --- a/plasma/generic/runners/nepomuksearch/nepomuksearchrunner.cpp 2011-07-26 11:57:58.000000000 +0200 +++ git-kde-workspace/plasma/generic/runners/nepomuksearch//nepomuksearchrunner.cpp 2011-09-08 10:09:28.571582002 +0200 @@ -20,6 +20,7 @@ #include "queryclientwrapper.h" #include +#include #include #include @@ -147,6 +148,40 @@ } } +QList Nepomuk::SearchRunner::actionsFromMenu(QMenu *menu, const QString &prefix, QObject *parent) +{ + Q_ASSERT(menu); + + QList ret; + foreach (QAction *action, menu->actions()) { + if (QMenu *submenu = action->menu()) { + //Flatten hierarchy and prefix submenu text to all actions in submenu + ret << actionsFromMenu(submenu, action->text(), parent); + } else if (!action->isSeparator() && action->isEnabled()) { + QString text = action->text(); + if (action->isCheckable()) { + if (action->isChecked()) { + text = QString("(%1) %2").arg(QChar(0x2613)).arg(text); + } else { + text = QString("( ) %1").arg(text); + } + } + + if (!prefix.isEmpty()) { + text = QString("%1: %2").arg(prefix).arg(text); + } + text = text.replace(QRegExp("&([\\S])"), "\\1"); + + QAction *a = new QAction(action->icon(), text, parent); + + QObject::connect(a, SIGNAL(triggered(bool)), action, SIGNAL(triggered(bool))); + ret << a; + } + } + return ret; +} + + QList Nepomuk::SearchRunner::actionsForMatch(const Plasma::QueryMatch &match) { //Unlike other runners, the actions generated here are likely to see @@ -181,13 +216,31 @@ //Add user defined actions m_actions->addServiceActionsTo(&dummy); - m_konqActions = Plasma::actionsFromMenu(&dummy); + m_konqActions = actionsFromMenu(&dummy); ret << m_konqActions; return ret; } +QMimeData * Nepomuk::SearchRunner::mimeDataForMatch(const Plasma::QueryMatch *match) +{ + Nepomuk::Resource res = match->data().value(); + + QUrl url = KUrl(res.property(QUrl("http://www.semanticdesktop.org/ontologies/2007/01/19/nie#url")).toString()); + + if (!url.isValid()) { + return 0; + } + + QMimeData *result = new QMimeData(); + QList urls; + urls << url; + kDebug() << urls; + result->setUrls(urls); + return result; +} + K_EXPORT_PLASMA_RUNNER(nepomuksearchrunner, Nepomuk::SearchRunner) #include "nepomuksearchrunner.moc" diff -u a/plasma/generic/runners/nepomuksearch/nepomuksearchrunner.h git-kde-workspace/plasma/generic/runners/nepomuksearch//nepomuksearchrunner.h --- a/plasma/generic/runners/nepomuksearch/nepomuksearchrunner.h 2011-07-26 11:57:58.000000000 +0200 +++ git-kde-workspace/plasma/generic/runners/nepomuksearch//nepomuksearchrunner.h 2011-09-08 10:09:28.571582002 +0200 @@ -49,8 +49,21 @@ protected Q_SLOTS: void init(); + QMimeData *mimeDataForMatch(const Plasma::QueryMatch *match); private: + /** + * Returns a list of all actions in the given QMenu + * This method flattens the hierarchy of the menu by prefixing the + * text of all actions in a submenu with the submenu title. + * + * @param menu the QMenu storing the actions + * @param prefix text to display before the text of all actions in the menu + * @param parent QObject to be passed as parent of all the actions in the list + * + * @since 4.4 + */ + QList actionsFromMenu(QMenu *menu, const QString &prefix = QString(), QObject *parent = 0); QMutex m_mutex; QWaitCondition m_waiter;