void KUiServerJobTracker::registerJob(KJob *job) { // Already registered job? if (d->progressJobView.contains(job)) { return; } KComponentData componentData = KGlobal::mainComponent(); QString programIconName = componentData.aboutData()->programIconName(); if (programIconName.isEmpty()) { programIconName = componentData.aboutData()->appName(); } QWeakPointer<KJob> jobWatch = job; QDBusReply<QDBusObjectPath> reply = serverProxy->uiserver().requestView(componentData.aboutData()->programName(), programIconName, job->capabilities()); // If we got a valid reply, register the interface for later usage. if (reply.isValid()) { org::kde::JobViewV2 *jobView = new org::kde::JobViewV2("org.kde.JobViewServer", reply.value().path(), QDBusConnection::sessionBus()); if (!jobWatch) { //kDebug() << "deleted out from under us when asking the server proxy for the view"; jobView->terminate(QString()); delete jobView; return; } QObject::connect(jobView, SIGNAL(cancelRequested()), this, SLOT(_k_killJob())); QObject::connect(jobView, SIGNAL(suspendRequested()), job, SLOT(suspend())); QObject::connect(jobView, SIGNAL(resumeRequested()), job, SLOT(resume())); QVariant destUrl = job->property("destUrl"); if (destUrl.isValid()) { jobView->setDestUrl(QDBusVariant(destUrl)); } if (!jobWatch) { //kDebug() << "deleted out from under us when creating the dbus interface"; jobView->terminate(QString()); delete jobView; return; } d->progressJobView.insert(job, jobView); } else if (!jobWatch) { qWarning() << "Uh-oh...KUiServerJobTracker was trying to forward a job, but it was deleted from under us." << "kuiserver *may* have a stranded job. we can't do anything about it because the returned objectPath is invalid."; return; } KJobTrackerInterface::registerJob(job); }
void JobView::requestStateChange(State state) { switch (state) { case Running: emit resumeRequested(); break; case Suspended: emit suspendRequested(); break; case Stopped: emit cancelRequested(); break; default: break; } }