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 @@ -104,9 +104,7 @@ StartServiceJob(const QString &process, const QStringList &args, const QString &serviceId, const QProcessEnvironment &env = QProcessEnvironment::systemEnvironment()); void start() override; private: - const QString m_process; - const QStringList m_args; - const QProcessEnvironment m_env; + QProcess* m_process; const QString m_serviceId; }; 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 @@ -411,13 +411,15 @@ } -StartServiceJob::StartServiceJob(const QString &process, const QStringList &args, const QString &serviceId, const QProcessEnvironment &env): - KJob(), - m_process(process), - m_args(args), - m_env(env), - m_serviceId(serviceId) +StartServiceJob::StartServiceJob(const QString &process, const QStringList &args, const QString &serviceId, const QProcessEnvironment &env) + : KJob() + , m_process(new QProcess(this)) + , m_serviceId(serviceId) { + m_process->setProgram(process); + m_process->setArguments(args); + m_process->setProcessEnvironment(env); + auto watcher = new QDBusServiceWatcher(serviceId, QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForRegistration, this); connect(watcher, &QDBusServiceWatcher::serviceRegistered, this, &StartServiceJob::emitResult); } @@ -429,15 +431,11 @@ return; } - qCDebug(PLASMA_SESSION) << "Starting " << m_process << m_args; - QProcess* p = new QProcess(this); - p->setProcessEnvironment(m_env); - if (!p->startDetached(m_process, m_args)) - qCWarning(PLASMA_SESSION) << "error starting process" << m_process << m_args; - - connect(p, &QProcess::errorOccurred, this, [this] (QProcess::ProcessError error) { - qCWarning(PLASMA_SESSION) << "error on process" << error << m_process << m_args; - }); + qCDebug(PLASMA_SESSION) << "Starting " << m_process->program() << m_process->arguments(); + if (!m_process->startDetached()) { + qCWarning(PLASMA_SESSION) << "error starting process" << m_process->program() << m_process->arguments(); + emitResult(); + } } StartProcessJob::StartProcessJob(const QString &process, const QStringList &args, const QProcessEnvironment &env)