130 lines
5.1 KiB
Diff
130 lines
5.1 KiB
Diff
Index: kinit/klauncher.cpp
|
|
===================================================================
|
|
--- kinit/klauncher.cpp (revision 918653)
|
|
+++ kinit/klauncher.cpp (revision 918654)
|
|
@@ -58,6 +58,9 @@
|
|
|
|
// #define KLAUNCHER_VERBOSE_OUTPUT
|
|
|
|
+static const char* const s_DBusStartupTypeToString[] =
|
|
+ { "DBusNone", "DBusUnique", "DBusMulti", "DBusWait", "ERROR" };
|
|
+
|
|
using namespace KIO;
|
|
|
|
IdleSlave::IdleSlave(QObject *parent)
|
|
@@ -393,15 +396,19 @@
|
|
if (request->pid == pid)
|
|
{
|
|
if (request->dbus_startup_type == KService::DBusWait)
|
|
- request->status = KLaunchRequest::Done;
|
|
+ request->status = KLaunchRequest::Done;
|
|
else if ((request->dbus_startup_type == KService::DBusUnique)
|
|
- && QDBusConnection::sessionBus().interface()->isServiceRegistered(request->dbus_name))
|
|
- request->status = KLaunchRequest::Running;
|
|
- else
|
|
- request->status = KLaunchRequest::Error;
|
|
+ && QDBusConnection::sessionBus().interface()->isServiceRegistered(request->dbus_name)) {
|
|
+ request->status = KLaunchRequest::Running;
|
|
#ifdef KLAUNCHER_VERBOSE_OUTPUT
|
|
- kDebug(7016) << pid << "died, requestDone. status=" << request->status;
|
|
+ kDebug(7016) << pid << "running as a unique app";
|
|
#endif
|
|
+ } else {
|
|
+ request->status = KLaunchRequest::Error;
|
|
+#ifdef KLAUNCHER_VERBOSE_OUTPUT
|
|
+ kDebug(7016) << pid << "died, requestDone. status=" << request->status;
|
|
+#endif
|
|
+ }
|
|
requestDone(request);
|
|
return;
|
|
}
|
|
@@ -446,19 +453,29 @@
|
|
if (request->status != KLaunchRequest::Launching)
|
|
continue;
|
|
|
|
+#ifdef KLAUNCHER_VERBOSE_OUTPUT
|
|
+ kDebug(7016) << "had pending request" << request->name << s_DBusStartupTypeToString[request->dbus_startup_type] << "dbus_name" << request->dbus_name << request->tolerant_dbus_name;
|
|
+#endif
|
|
// For unique services check the requested service name first
|
|
- if ((request->dbus_startup_type == KService::DBusUnique) &&
|
|
- ((appId == request->dbus_name) ||
|
|
- QDBusConnection::sessionBus().interface()->isServiceRegistered(request->dbus_name)))
|
|
- {
|
|
- request->status = KLaunchRequest::Running;
|
|
- requestDone(request);
|
|
- continue;
|
|
+ if (request->dbus_startup_type == KService::DBusUnique) {
|
|
+ if ((appId == request->dbus_name) || // just started
|
|
+ QDBusConnection::sessionBus().interface()->isServiceRegistered(request->dbus_name)) { // was already running
|
|
+ request->status = KLaunchRequest::Running;
|
|
+#ifdef KLAUNCHER_VERBOSE_OUTPUT
|
|
+ kDebug(7016) << "OK, unique app" << request->dbus_name << "is running";
|
|
+#endif
|
|
+ requestDone(request);
|
|
+ continue;
|
|
+ } else {
|
|
+#ifdef KLAUNCHER_VERBOSE_OUTPUT
|
|
+ kDebug(7016) << "unique app" << request->dbus_name << "not running yet";
|
|
+#endif
|
|
+ }
|
|
}
|
|
|
|
- const QString rAppId = request->dbus_name;
|
|
+ const QString rAppId = !request->tolerant_dbus_name.isEmpty() ? request->tolerant_dbus_name : request->dbus_name;
|
|
#ifdef KLAUNCHER_VERBOSE_OUTPUT
|
|
- kDebug(7016) << "had pending request" << rAppId;
|
|
+ //kDebug(7016) << "using" << rAppId << "for matching";
|
|
#endif
|
|
if (rAppId.isEmpty())
|
|
continue;
|
|
@@ -818,11 +835,18 @@
|
|
request->dbus_name = v.toString().toUtf8();
|
|
}
|
|
if (request->dbus_name.isEmpty()) {
|
|
- request->dbus_name = "*." + QFile::encodeName(KRun::binaryName(service->exec(), true));
|
|
+ const QString binName = KRun::binaryName(service->exec(), true);
|
|
+ request->dbus_name = "org.kde." + binName;
|
|
+ request->tolerant_dbus_name = "*." + binName;
|
|
}
|
|
}
|
|
}
|
|
|
|
+#ifdef KLAUNCHER_VERBOSE_OUTPUT
|
|
+ kDebug(7016) << "name=" << request->name << "dbus_name=" << request->dbus_name
|
|
+ << "startup type=" << s_DBusStartupTypeToString[request->dbus_startup_type];
|
|
+#endif
|
|
+
|
|
request->pid = 0;
|
|
request->envs = envs;
|
|
send_service_startup_info( request, service, startup_id, envs );
|
|
@@ -938,7 +962,7 @@
|
|
request->arg_list.append(arg.toLocal8Bit());
|
|
}
|
|
|
|
- request->name = app.toLocal8Bit();
|
|
+ request->name = app;
|
|
|
|
if (wait)
|
|
request->dbus_startup_type = KService::DBusWait;
|
|
@@ -1113,7 +1137,7 @@
|
|
}
|
|
if (mSlaveValgrind == arg1)
|
|
{
|
|
- arg_list.prepend(QFile::encodeName(KLibLoader::findLibrary(name.toLocal8Bit())));
|
|
+ arg_list.prepend(QFile::encodeName(KLibLoader::findLibrary(name)));
|
|
arg_list.prepend(QFile::encodeName(KStandardDirs::locate("exe", "kioslave")));
|
|
name = "valgrind";
|
|
if (!mSlaveValgrindSkin.isEmpty()) {
|
|
Index: kinit/klauncher.h
|
|
===================================================================
|
|
--- kinit/klauncher.h (revision 918653)
|
|
+++ kinit/klauncher.h (revision 918654)
|
|
@@ -87,6 +87,7 @@
|
|
QString name;
|
|
QStringList arg_list;
|
|
QString dbus_name;
|
|
+ QString tolerant_dbus_name;
|
|
enum status_t { Init = 0, Launching, Running, Error, Done };
|
|
pid_t pid;
|
|
status_t status;
|