diff --git a/src/klauncher/klauncher.cpp b/src/klauncher/klauncher.cpp --- a/src/klauncher/klauncher.cpp +++ b/src/klauncher/klauncher.cpp @@ -320,7 +320,6 @@ KLauncher::processDied(pid_t pid, long exitStatus) { qCDebug(KLAUNCHER) << pid << "exitStatus=" << exitStatus; - // We should probably check the exitStatus for the uniqueapp case? foreach (KLaunchRequest *request, requestList) { qCDebug(KLAUNCHER) << " had pending request" << request->pid; if (request->pid == pid) { @@ -331,6 +330,14 @@ } else if(request->dbus_startup_type == KService::DBusNone && request->wait) { request->status = KLaunchRequest::Running; qCDebug(KLAUNCHER) << pid << "running as DBusNone with wait to true"; + } else if (exitStatus == 0 && + (request->dbus_startup_type == KService::DBusUnique || + request->dbus_startup_type == KService::DBusMulti)) { + // e.g. opening kate from a widget on the panel/desktop, where it + // shows the session chooser dialog before ever entering the main + // app event loop, then quitting/closing the dialog without starting kate + request->status = KLaunchRequest::Done; + qCDebug(KLAUNCHER) << pid << "died with exitStatus= 0, requestDone. status=" << request->status ; } else { request->status = KLaunchRequest::Error; qCDebug(KLAUNCHER) << pid << "died, requestDone. status=" << request->status;