diff --git a/private/servicejob_p.h b/private/servicejob_p.h index 4960f65bb..2869016f0 100644 --- a/private/servicejob_p.h +++ b/private/servicejob_p.h @@ -37,6 +37,7 @@ public: const QString &op, const QMap ¶ms); + void preventAutoStart(); void autoStart(); ServiceJob *q; @@ -45,6 +46,7 @@ public: QMap parameters; QVariant result; Credentials identity; + bool m_allowAutoStart; }; } diff --git a/servicejob.cpp b/servicejob.cpp index 11555f611..622fb7e4b 100644 --- a/servicejob.cpp +++ b/servicejob.cpp @@ -18,6 +18,9 @@ */ #include "servicejob.h" + +#include + #include namespace Plasma @@ -28,13 +31,21 @@ ServiceJobPrivate::ServiceJobPrivate(ServiceJob *owner, const QString &dest, : q(owner), destination(dest), operation(op), - parameters(params) + parameters(params), + m_allowAutoStart(true) { } +void ServiceJobPrivate::preventAutoStart() +{ + m_allowAutoStart = false; +} + void ServiceJobPrivate::autoStart() { - q->start(); + if (m_allowAutoStart) { + q->start(); + } } ServiceJob::ServiceJob(const QString &destination, const QString &operation, @@ -42,6 +53,7 @@ ServiceJob::ServiceJob(const QString &destination, const QString &operation, : KJob(parent), d(new ServiceJobPrivate(this, destination, operation, parameters)) { + connect(this, SIGNAL(finished(KJob*)), this, SLOT(preventAutoStart())); } ServiceJob::~ServiceJob() diff --git a/servicejob.h b/servicejob.h index b53f12800..9690e43d1 100644 --- a/servicejob.h +++ b/servicejob.h @@ -123,6 +123,7 @@ protected: private: Q_PRIVATE_SLOT(d, void autoStart()) + Q_PRIVATE_SLOT(d, void preventAutoStart()) ServiceJobPrivate * const d;