diff --git a/abstractrunner.cpp b/abstractrunner.cpp index 3937d9aac..18cf8972b 100644 --- a/abstractrunner.cpp +++ b/abstractrunner.cpp @@ -18,11 +18,15 @@ */ #include "abstractrunner.h" -#include "searchcontext.h" + +#include +#include #include #include +#include "searchcontext.h" + namespace Plasma { @@ -147,6 +151,14 @@ void AbstractRunner::setPriority(Priority priority) d->priority = priority; } +QMutex serviceTypeTraderLock; + +KService::List AbstractRunner::serviceQuery(const QString &serviceType, const QString &constraint) const +{ + QMutexLocker lock(&serviceTypeTraderLock); + return KServiceTypeTrader::self()->query(serviceType, constraint); +} + void AbstractRunner::exec(Plasma::SearchMatch *action) { Q_UNUSED(action) diff --git a/abstractrunner.h b/abstractrunner.h index c76d0de90..71f436837 100644 --- a/abstractrunner.h +++ b/abstractrunner.h @@ -24,6 +24,7 @@ #include #include +#include #include #include @@ -193,6 +194,18 @@ class PLASMA_EXPORT AbstractRunner : public QObject */ void setPriority(Priority newPriority); + /** + * A thread safe (blocking) method to do queries of installed Services + * + * @arg serviceType a service type like "Plasma/Applet" or "KFilePlugin" + * @arg constraint a constraint to limie the the choices returned. + * @see KServiceTypeTrader::query(const QString&, const QString&) + * + * @return a list of services that satisfy the query. + */ + KService::List serviceQuery(const QString &serviceType, + const QString &constraint = QString()) const; + private: class Private; Private* const d;