kdelibs/kdelibs-4.2.1-kde#918654.patch

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;