Changeset View
Changeset View
Standalone View
Standalone View
src/kuiserverjobtracker.cpp
Show First 20 Lines • Show All 79 Lines • ▼ Show 20 Line(s) | |||||
80 | 80 | | |||
81 | KUiServerJobTracker::~KUiServerJobTracker() | 81 | KUiServerJobTracker::~KUiServerJobTracker() | ||
82 | { | 82 | { | ||
83 | if (!d->progressJobView.isEmpty()) { | 83 | if (!d->progressJobView.isEmpty()) { | ||
84 | qWarning() << "A KUiServerJobTracker instance contains" | 84 | qWarning() << "A KUiServerJobTracker instance contains" | ||
85 | << d->progressJobView.size() << "stalled jobs"; | 85 | << d->progressJobView.size() << "stalled jobs"; | ||
86 | } | 86 | } | ||
87 | 87 | | |||
88 | qDeleteAll(d->progressJobView); | ||||
89 | | ||||
88 | delete d; | 90 | delete d; | ||
89 | } | 91 | } | ||
90 | 92 | | |||
91 | void KUiServerJobTracker::registerJob(KJob *job) | 93 | void KUiServerJobTracker::registerJob(KJob *job) | ||
92 | { | 94 | { | ||
93 | // Already registered job? | 95 | // Already registered job? | ||
94 | if (d->progressJobView.contains(job)) { | 96 | if (d->progressJobView.contains(job)) { | ||
95 | return; | 97 | return; | ||
Show All 18 Lines | |||||
114 | // This will only work if main() used QIcon::fromTheme. | 116 | // This will only work if main() used QIcon::fromTheme. | ||
115 | QString programIconName = QApplication::windowIcon().name(); | 117 | QString programIconName = QApplication::windowIcon().name(); | ||
116 | 118 | | |||
117 | if (programIconName.isEmpty()) { | 119 | if (programIconName.isEmpty()) { | ||
118 | programIconName = appName; | 120 | programIconName = appName; | ||
119 | } | 121 | } | ||
120 | 122 | | |||
121 | QPointer<KJob> jobWatch = job; | 123 | QPointer<KJob> jobWatch = job; | ||
122 | QDBusReply<QDBusObjectPath> reply = serverProxy()->uiserver().requestView(appName, | 124 | QDBusReply<QDBusObjectPath> reply = serverProxy()->uiserver()->requestView(appName, | ||
123 | programIconName, | 125 | programIconName, | ||
124 | job->capabilities()); | 126 | job->capabilities()); | ||
125 | 127 | | |||
126 | // If we got a valid reply, register the interface for later usage. | 128 | // If we got a valid reply, register the interface for later usage. | ||
127 | if (reply.isValid()) { | 129 | if (reply.isValid()) { | ||
128 | org::kde::JobViewV2 *jobView = new org::kde::JobViewV2(QStringLiteral("org.kde.JobViewServer"), | 130 | org::kde::JobViewV2 *jobView = new org::kde::JobViewV2(QStringLiteral("org.kde.JobViewServer"), | ||
129 | reply.value().path(), | 131 | reply.value().path(), | ||
130 | QDBusConnection::sessionBus()); | 132 | QDBusConnection::sessionBus()); | ||
▲ Show 20 Lines • Show All 192 Lines • ▼ Show 20 Line(s) | 322 | { | |||
323 | } | 325 | } | ||
324 | 326 | | |||
325 | org::kde::JobViewV2 *jobView = d->progressJobView[job]; | 327 | org::kde::JobViewV2 *jobView = d->progressJobView[job]; | ||
326 | 328 | | |||
327 | jobView->setSpeed(value); | 329 | jobView->setSpeed(value); | ||
328 | } | 330 | } | ||
329 | 331 | | |||
330 | KSharedUiServerProxy::KSharedUiServerProxy() | 332 | KSharedUiServerProxy::KSharedUiServerProxy() | ||
331 | : m_uiserver(QStringLiteral("org.kde.JobViewServer"), QStringLiteral("/JobViewServer"), QDBusConnection::sessionBus()) | 333 | : m_uiserver(new org::kde::JobViewServer(QStringLiteral("org.kde.JobViewServer"), QStringLiteral("/JobViewServer"), QDBusConnection::sessionBus())) | ||
332 | , m_watcher(QStringLiteral("org.kde.JobViewServer"), QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForOwnerChange) | 334 | , m_watcher(new QDBusServiceWatcher(QStringLiteral("org.kde.JobViewServer"), QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForOwnerChange)) | ||
333 | { | 335 | { | ||
334 | QDBusConnectionInterface *bus = QDBusConnection::sessionBus().interface(); | 336 | QDBusConnectionInterface *bus = QDBusConnection::sessionBus().interface(); | ||
335 | if (!bus->isServiceRegistered(QStringLiteral("org.kde.JobViewServer"))) { | 337 | if (!bus->isServiceRegistered(QStringLiteral("org.kde.JobViewServer"))) { | ||
336 | QDBusReply<void> reply = bus->startService(QStringLiteral("org.kde.kuiserver")); | 338 | QDBusReply<void> reply = bus->startService(QStringLiteral("org.kde.kuiserver")); | ||
337 | if (!reply.isValid()) { | 339 | if (!reply.isValid()) { | ||
338 | qCritical() << "Couldn't start kuiserver from org.kde.kuiserver.service:" << reply.error(); | 340 | qCritical() << "Couldn't start kuiserver from org.kde.kuiserver.service:" << reply.error(); | ||
339 | return; | 341 | return; | ||
340 | } | 342 | } | ||
341 | 343 | | |||
342 | if (!bus->isServiceRegistered(QStringLiteral("org.kde.JobViewServer"))) { | 344 | if (!bus->isServiceRegistered(QStringLiteral("org.kde.JobViewServer"))) { | ||
343 | qCDebug(KJOBWIDGETS) << "The dbus name org.kde.JobViewServer is STILL NOT REGISTERED, even after starting kuiserver. Should not happen."; | 345 | qCDebug(KJOBWIDGETS) << "The dbus name org.kde.JobViewServer is STILL NOT REGISTERED, even after starting kuiserver. Should not happen."; | ||
344 | return; | 346 | return; | ||
345 | } | 347 | } | ||
346 | 348 | | |||
347 | qCDebug(KJOBWIDGETS) << "kuiserver registered"; | 349 | qCDebug(KJOBWIDGETS) << "kuiserver registered"; | ||
348 | } else { | 350 | } else { | ||
349 | qCDebug(KJOBWIDGETS) << "kuiserver found"; | 351 | qCDebug(KJOBWIDGETS) << "kuiserver found"; | ||
350 | } | 352 | } | ||
351 | 353 | | |||
352 | connect(&m_watcher, &QDBusServiceWatcher::serviceOwnerChanged, this, &KSharedUiServerProxy::uiserverOwnerChanged); | 354 | connect(m_watcher.get(), &QDBusServiceWatcher::serviceOwnerChanged, this, &KSharedUiServerProxy::uiserverOwnerChanged); | ||
355 | | ||||
356 | // cleanup early enough to avoid issues with dbus at application exit | ||||
357 | // see e.g. https://phabricator.kde.org/D2545 | ||||
358 | qAddPostRoutine([]() { | ||||
359 | serverProxy->m_uiserver.reset(); | ||||
360 | serverProxy->m_watcher.reset(); | ||||
361 | }); | ||||
353 | } | 362 | } | ||
354 | 363 | | |||
355 | KSharedUiServerProxy::~KSharedUiServerProxy() | 364 | KSharedUiServerProxy::~KSharedUiServerProxy() | ||
356 | { | 365 | { | ||
357 | 366 | | |||
358 | } | 367 | } | ||
359 | 368 | | |||
360 | org::kde::JobViewServer &KSharedUiServerProxy::uiserver() | 369 | org::kde::JobViewServer *KSharedUiServerProxy::uiserver() | ||
361 | { | 370 | { | ||
362 | return m_uiserver; | 371 | return m_uiserver.get(); | ||
363 | } | 372 | } | ||
364 | 373 | | |||
365 | void KSharedUiServerProxy::uiserverOwnerChanged(const QString &serviceName, const QString &oldOwner, const QString &newOwner) | 374 | void KSharedUiServerProxy::uiserverOwnerChanged(const QString &serviceName, const QString &oldOwner, const QString &newOwner) | ||
366 | { | 375 | { | ||
367 | Q_UNUSED(serviceName); | 376 | Q_UNUSED(serviceName); | ||
368 | Q_UNUSED(oldOwner); | 377 | Q_UNUSED(oldOwner); | ||
369 | 378 | | |||
370 | if (!newOwner.isEmpty()) { // registered | 379 | if (!newOwner.isEmpty()) { // registered | ||
371 | emit serverRegistered(); | 380 | emit serverRegistered(); | ||
372 | } else if (newOwner.isEmpty()) { // unregistered | 381 | } else if (newOwner.isEmpty()) { // unregistered | ||
373 | emit serverUnregistered(); | 382 | emit serverUnregistered(); | ||
374 | } | 383 | } | ||
375 | } | 384 | } | ||
376 | 385 | | |||
377 | #include "moc_kuiserverjobtracker.cpp" | 386 | #include "moc_kuiserverjobtracker.cpp" | ||
378 | #include "moc_kuiserverjobtracker_p.cpp" | 387 | #include "moc_kuiserverjobtracker_p.cpp" |