* avoid accessing the runner and setting the id in the ctor

* use QWeakPointer

svn path=/trunk/KDE/kdelibs/; revision=1034903
This commit is contained in:
Aaron J. Seigo 2009-10-13 21:42:22 +00:00
parent 2b762d0581
commit 2ce5b457e3

View File

@ -20,11 +20,11 @@
#include "querymatch.h" #include "querymatch.h"
#include <QAction> #include <QAction>
#include <QPointer> #include <QIcon>
#include <QVariant>
#include <QSharedData> #include <QSharedData>
#include <QStringList> #include <QStringList>
#include <QIcon> #include <QVariant>
#include <QWeakPointer>
#include <kdebug.h> #include <kdebug.h>
@ -46,7 +46,7 @@ class QueryMatchPrivate : public QSharedData
{ {
} }
QPointer<AbstractRunner> runner; QWeakPointer<AbstractRunner> runner;
QueryMatch::Type type; QueryMatch::Type type;
QString id; QString id;
QString text; QString text;
@ -61,9 +61,6 @@ class QueryMatchPrivate : public QSharedData
QueryMatch::QueryMatch(AbstractRunner *runner) QueryMatch::QueryMatch(AbstractRunner *runner)
: d(new QueryMatchPrivate(runner)) : d(new QueryMatchPrivate(runner))
{ {
if (runner) {
d->id = runner->id();
}
// kDebug() << "new match created"; // kDebug() << "new match created";
} }
@ -83,6 +80,10 @@ bool QueryMatch::isValid() const
QString QueryMatch::id() const QString QueryMatch::id() const
{ {
if (d->id.isEmpty() && d->runner) {
return d->runner.data()->id();
}
return d->id; return d->id;
} }
@ -108,7 +109,7 @@ qreal QueryMatch::relevance() const
AbstractRunner* QueryMatch::runner() const AbstractRunner* QueryMatch::runner() const
{ {
return d->runner; return d->runner.data();
} }
void QueryMatch::setText(const QString &text) void QueryMatch::setText(const QString &text)
@ -130,7 +131,7 @@ void QueryMatch::setData(const QVariant & data)
void QueryMatch::setId(const QString &id) void QueryMatch::setId(const QString &id)
{ {
if (d->runner) { if (d->runner) {
d->id = d->runner->id(); d->id = d->runner.data()->id();
} }
if (!id.isEmpty()) { if (!id.isEmpty()) {
@ -215,19 +216,19 @@ void QueryMatch::run(const RunnerContext &context) const
{ {
//kDebug() << "we run the term" << context->query() << "whose type is" << context->mimetype(); //kDebug() << "we run the term" << context->query() << "whose type is" << context->mimetype();
if (d->runner) { if (d->runner) {
d->runner->run(context, *this); d->runner.data()->run(context, *this);
} }
} }
bool QueryMatch::hasConfigurationInterface() const bool QueryMatch::hasConfigurationInterface() const
{ {
return d->runner && d->runner->hasRunOptions(); return d->runner && d->runner.data()->hasRunOptions();
} }
void QueryMatch::createConfigurationInterface(QWidget *parent) void QueryMatch::createConfigurationInterface(QWidget *parent)
{ {
if (hasConfigurationInterface()) { if (hasConfigurationInterface()) {
d->runner->createRunOptions(parent); d->runner.data()->createRunOptions(parent);
} }
} }