diff --git a/startkde/plasma-session/startup.h b/startkde/plasma-session/startup.h --- a/startkde/plasma-session/startup.h +++ b/startkde/plasma-session/startup.h @@ -92,6 +92,7 @@ private: const QString m_process; const QStringList m_args; + const QString m_serviceId; }; class RestoreSessionJob: public KJob diff --git a/startkde/plasma-session/startup.cpp b/startkde/plasma-session/startup.cpp --- a/startkde/plasma-session/startup.cpp +++ b/startkde/plasma-session/startup.cpp @@ -417,14 +417,21 @@ StartServiceJob::StartServiceJob(const QString &process, const QStringList &args, const QString &serviceId): KJob(), m_process(process), - m_args(args) + m_args(args), + m_serviceId(serviceId) { auto watcher = new QDBusServiceWatcher(serviceId, QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForRegistration, this); connect(watcher, &QDBusServiceWatcher::serviceRegistered, this, &StartServiceJob::emitResult); } void StartServiceJob::start() { + if (QDBusConnection::sessionBus().interface()->isServiceRegistered(m_serviceId)) { + qCDebug(PLASMA_SESSION) << m_process << "already running"; + emitResult(); + return; + } + qCDebug(PLASMA_SESSION) << "Starting " << m_process << m_args; QProcess::startDetached(m_process, m_args); }