diff --git a/src/runnerjobs.cpp b/src/runnerjobs.cpp --- a/src/runnerjobs.cpp +++ b/src/runnerjobs.cpp @@ -125,8 +125,7 @@ : ThreadWeaver::Job(), m_context(*context, nullptr), m_runner(runner), - m_timer(nullptr), - m_decorator(new ThreadWeaver::QObjectDecorator(this, true)) + m_timer(nullptr) { QMutexLocker l(mutex()); Q_UNUSED(l); if (runner->speed() == Plasma::AbstractRunner::SlowSpeed) { @@ -150,13 +149,14 @@ m_timer = timer; } -void FindMatchesJob::run(ThreadWeaver::JobPointer, ThreadWeaver::Thread*) +void FindMatchesJob::run(ThreadWeaver::JobPointer self, ThreadWeaver::Thread*) { // qCDebug(KRUNNER) << "Running match for " << m_runner->objectName() // << " in Thread " << thread()->id() << endl; if (m_context.isValid()) { m_runner->performMatch(m_context); } + emit done(self); } int FindMatchesJob::priority() const @@ -178,7 +178,7 @@ connect(m_weaver, SIGNAL(finished()), this, SLOT(checkIfFinished())); for (auto it = m_jobs.constBegin(); it != m_jobs.constEnd(); ++it) { - connect((*it)->decorator(), &ThreadWeaver::QObjectDecorator::done, this, &DelayedJobCleaner::jobDone); + connect(it->data(), &FindMatchesJob::done, this, &DelayedJobCleaner::jobDone); } } diff --git a/src/runnerjobs_p.h b/src/runnerjobs_p.h --- a/src/runnerjobs_p.h +++ b/src/runnerjobs_p.h @@ -27,7 +27,6 @@ #include #include #include -#include #include "abstractrunner.h" @@ -90,8 +89,9 @@ * FindMatchesJob class * Class to run queries in different threads */ -class FindMatchesJob : public Job +class FindMatchesJob : public QObject, public Job { +Q_OBJECT public: FindMatchesJob(Plasma::AbstractRunner *runner, Plasma::RunnerContext *context, QObject *parent = nullptr); @@ -102,16 +102,17 @@ QTimer* delayTimer() const; void setDelayTimer(QTimer *timer); - ThreadWeaver::QObjectDecorator* decorator() const { return m_decorator; } + +Q_SIGNALS: + void done(ThreadWeaver::JobPointer self); protected: void run(ThreadWeaver::JobPointer self, ThreadWeaver::Thread* thread) override; private: Plasma::RunnerContext m_context; Plasma::AbstractRunner *m_runner; QTimer *m_timer; - ThreadWeaver::QObjectDecorator* m_decorator; }; class DelayedJobCleaner : public QObject diff --git a/src/runnermanager.cpp b/src/runnermanager.cpp --- a/src/runnermanager.cpp +++ b/src/runnermanager.cpp @@ -250,7 +250,7 @@ while (it != searchJobs.end()) { auto &job = (*it); if (deadRunners.contains(job->runner())) { - QObject::disconnect(job->decorator(), SIGNAL(done(ThreadWeaver::JobPointer)), q, SLOT(jobDone(ThreadWeaver::JobPointer))); + QObject::disconnect(job.data(), SIGNAL(done(ThreadWeaver::JobPointer)), q, SLOT(jobDone(ThreadWeaver::JobPointer))); it = searchJobs.erase(it); deadJobs.insert(job); } else { @@ -422,7 +422,7 @@ { if ((runner->ignoredTypes() & context.type()) == 0) { QSharedPointer job(new FindMatchesJob(runner, &context, Queue::instance())); - QObject::connect(job->decorator(), SIGNAL(done(ThreadWeaver::JobPointer)), q, SLOT(jobDone(ThreadWeaver::JobPointer))); + QObject::connect(job.data(), SIGNAL(done(ThreadWeaver::JobPointer)), q, SLOT(jobDone(ThreadWeaver::JobPointer))); if (runner->speed() == AbstractRunner::SlowSpeed) { job->setDelayTimer(&delayTimer); }