diff --git a/abstractrunner.cpp b/abstractrunner.cpp index 963719329..a7b796233 100644 --- a/abstractrunner.cpp +++ b/abstractrunner.cpp @@ -134,7 +134,7 @@ void AbstractRunner::performMatch( Plasma::RunnerContext &globalContext ) if (!slowed && runtime > reasonableRunTime) { // we punish runners that return too slowly, even if they don't bring // back matches - kDebug() << name() << "runner is too slow, putting it on the back burner."; + kDebug() << id() << "runner is too slow, putting it on the back burner."; d->fastRuns = 0; setSpeed(SlowSpeed); } @@ -146,7 +146,7 @@ void AbstractRunner::performMatch( Plasma::RunnerContext &globalContext ) if (d->fastRuns > 2) { // we reward slowed runners who bring back matches fast enough // 3 times in a row - kDebug() << name() << "runner is faster than we thought, kicking it up a notch"; + kDebug() << id() << "runner is faster than we thought, kicking it up a notch"; setSpeed(NormalSpeed); } } @@ -244,7 +244,15 @@ QString AbstractRunner::name() const if (!d->runnerDescription.isValid()) { return objectName(); } - return d->runnerDescription.property("X-Plasma-RunnerName").toString(); + return d->runnerDescription.name(); +} + +QString AbstractRunner::id() const +{ + if (!d->runnerDescription.isValid()) { + return objectName(); + } + return d->runnerDescription.pluginName(); } QString AbstractRunner::description() const @@ -255,7 +263,6 @@ QString AbstractRunner::description() const return d->runnerDescription.property("Comment").toString(); } - const Package* AbstractRunner::package() const { return d->package; diff --git a/abstractrunner.h b/abstractrunner.h index ba54642ba..7664ec3c3 100644 --- a/abstractrunner.h +++ b/abstractrunner.h @@ -160,10 +160,15 @@ class PLASMA_EXPORT AbstractRunner : public QObject void setIgnoredTypes(RunnerContext::Types types); /** - * Returns the engine name for the Runner + * Returns the user visible engine name for the Runner */ QString name() const; + /** + * Returns an id string for the Runner + */ + QString id() const; + /** * Returns the description of this Runner */ diff --git a/querymatch.cpp b/querymatch.cpp index c95da53e8..c04d7e5b0 100644 --- a/querymatch.cpp +++ b/querymatch.cpp @@ -44,6 +44,7 @@ class QueryMatch::Private QPointer runner; QueryMatch::Type type; + QString id; QString text; QString subtext; QIcon icon; @@ -56,6 +57,7 @@ class QueryMatch::Private QueryMatch::QueryMatch(AbstractRunner *runner) : d(new Private(runner)) { + d->id = runner->id(); // kDebug() << "new match created"; } @@ -64,6 +66,11 @@ QueryMatch::~QueryMatch() delete d; } +QString QueryMatch::id() const +{ + return d->id; +} + void QueryMatch::setType(Type type) { d->type = type; @@ -102,6 +109,7 @@ void QueryMatch::setSubtext(const QString& subtext) void QueryMatch::setData(const QVariant& data) { d->data = data; + d->id = d->runner->id() + '_' + data.toString(); } void QueryMatch::setIcon(const QIcon& icon) diff --git a/querymatch.h b/querymatch.h index 8384fcaf9..21a8a2e72 100644 --- a/querymatch.h +++ b/querymatch.h @@ -32,6 +32,11 @@ namespace Plasma class RunnerContext; class AbstractRunner; +/** + * @short A match returned by an AbstractRunner in response to a given + * RunnerContext. + */ + class PLASMA_EXPORT QueryMatch { public: @@ -94,11 +99,15 @@ class PLASMA_EXPORT QueryMatch */ AbstractRunner* runner() const; - void setText(const QString& text); - void setSubtext(const QString& text); - void setData(const QVariant& data); - void setIcon(const QIcon& icon); - void setEnabled(bool enable); + /** + * A string that can be used as an ID for this match, + * even between different queries. It is based in part + * on the source of the match (the AbstractRunner) and + * distinguishing information provided by the runner, + * ensuring global uniqueness as well as consistency + * between query matches. + */ + QString id() const; QString text() const; QString subtext() const; @@ -110,6 +119,21 @@ class PLASMA_EXPORT QueryMatch void run(const RunnerContext *context) const; + protected: + friend class AbstractRunner; + + /** + * Sets data to be used internally by the associated + * AbstractRunner. When set, it also is used to form + * part of the id for the match. + */ + void setData(const QVariant& data); + + void setText(const QString& text); + void setSubtext(const QString& text); + void setIcon(const QIcon& icon); + void setEnabled(bool enable); + private: class Private; Private * const d; diff --git a/runnermanager.cpp b/runnermanager.cpp index 2eea683ae..0e9494d63 100644 --- a/runnermanager.cpp +++ b/runnermanager.cpp @@ -224,7 +224,7 @@ public: QString error; foreach (const KService::Ptr &service, offers) { KPluginInfo description(service); - QString runnerName = description.property("X-Plasma-RunnerName").toString(); + QString runnerName = description.pluginName(); if (blacklist.contains(runnerName)) { kDebug() << "The plugin" << service->name() << "was blackListed and will not load"; continue; @@ -309,7 +309,7 @@ AbstractRunner* RunnerManager::runner(const QString &name) const { //TODO: using a list of runners, if this gets slow, switch to hash foreach (Plasma::AbstractRunner* runner, d->runners) { - if (name == runner->name()) { + if (name == runner->id()) { return runner; } } diff --git a/servicetypes/plasma-runner.desktop b/servicetypes/plasma-runner.desktop index 353e26396..53163c47d 100644 --- a/servicetypes/plasma-runner.desktop +++ b/servicetypes/plasma-runner.desktop @@ -55,9 +55,6 @@ Comment[x-test]=xxKRunner pluginxx Comment[zh_CN]=KRunner 插件 Comment[zh_TW]=KRunner 外掛程式 -[PropertyDef::X-Plasma-RunnerName] -Type=QString - [PropertyDef::X-Plasma-RunnerPhase] Type=QString