diff --git a/src/widgets/kdynamicjobtracker.cpp b/src/widgets/kdynamicjobtracker.cpp --- a/src/widgets/kdynamicjobtracker.cpp +++ b/src/widgets/kdynamicjobtracker.cpp @@ -111,21 +111,37 @@ trackers.widgetTracker = nullptr; if (canHaveWidgets) { + QPointer jobWatch(job); org::kde::kuiserver interface(QStringLiteral("org.kde.kuiserver"), QStringLiteral("/JobViewServer"), QDBusConnection::sessionBus(), this); - QDBusReply reply = interface.requiresJobTracker(); + QDBusPendingReply reply = interface.requiresJobTracker(); + QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, job); + connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, jobWatch](QDBusPendingCallWatcher *watcher) { + QDBusPendingReply reply = *watcher; + watcher->deleteLater(); + + if (!jobWatch) { + return; + } - // If kuiserver isn't available or it tells us a job tracker is required - // create a widget tracker. - if (!reply.isValid() || reply.value()) { - if (!d->widgetTracker) { - d->widgetTracker = new KWidgetJobTracker(); + auto it = d->trackers.find(jobWatch.data()); + if (it == d->trackers.end()) { + return; } - trackers.widgetTracker = d->widgetTracker; - trackers.widgetTracker->registerJob(job); - } + + + // If kuiserver isn't available or it tells us a job tracker is required + // create a widget tracker. + if (!reply.isValid() || reply.value()) { + if (!d->widgetTracker) { + d->widgetTracker = new KWidgetJobTracker(); + } + it->widgetTracker = d->widgetTracker; + it->widgetTracker->registerJob(jobWatch.data()); + } + }); } } }