- // check to see if any instances already have any of the given URLs open
- for (const QString& url : QUrl::toStringList(urls)) {
- bool urlFound = false;
- for (auto& service: dolphinServices) {
- QDBusReply<bool> isUrlOpen = service.first->call(QStringLiteral("isUrlOpen"), url);
- if (isUrlOpen.isValid() && isUrlOpen.value()) {
- service.second.append(url);
- urlFound = true;
- break;
+ // Look for dolphin instances among all available dbus services.
+ QDBusConnectionInterface *sessionInterface = QDBusConnection::sessionBus().interface();
+ const QStringList dbusServices = sessionInterface ? sessionInterface->registeredServiceNames().value() : QStringList();
+ // Don't match the service without trailing "-" (unique instance)
+ const QString pattern = QStringLiteral("org.kde.dolphin-");
+ // Don't match the pid without leading "-"
+ const QString myPid = QLatin1Char('-') + QString::number(QCoreApplication::applicationPid());
+ for (const QString& service : dbusServices) {
+ if (service.startsWith(pattern) && !service.endsWith(myPid)) {
+ // Check if instance can handle our URLs
+ QSharedPointer<OrgKdeDolphinMainWindowInterface> interface(
+ new OrgKdeDolphinMainWindowInterface(service,
+ QStringLiteral("/dolphin/Dolphin_1"),
+ QDBusConnection::sessionBus()));
+ if (interface->isValid() && !interface->lastError().isValid()) {
+ dolphinInterfaces.append(qMakePair(interface, QStringList()));