diff options
| -rw-r--r-- | src/dbusinterface.cpp | 14 | ||||
| -rw-r--r-- | src/dbusinterface.h | 13 | ||||
| -rw-r--r-- | src/global.cpp | 2 | ||||
| -rw-r--r-- | src/global.h | 4 | ||||
| -rw-r--r-- | src/main.cpp | 1 |
5 files changed, 30 insertions, 4 deletions
diff --git a/src/dbusinterface.cpp b/src/dbusinterface.cpp index fd2d229a2..abdb3a0fe 100644 --- a/src/dbusinterface.cpp +++ b/src/dbusinterface.cpp @@ -44,7 +44,7 @@ void DBusInterface::ShowFolders(const QStringList& uriList, const QString& start if (urls.isEmpty()) { return; } - const auto serviceName = QStringLiteral("org.kde.dolphin-%1").arg(QCoreApplication::applicationPid()); + const auto serviceName = isDaemon() ? QString() : QStringLiteral("org.kde.dolphin-%1").arg(QCoreApplication::applicationPid()); if(!Dolphin::attachToExistingInstance(urls, false, GeneralSettings::splitView(), serviceName)) { Dolphin::openNewWindow(urls); } @@ -57,7 +57,7 @@ void DBusInterface::ShowItems(const QStringList& uriList, const QString& startUp if (urls.isEmpty()) { return; } - const auto serviceName = QStringLiteral("org.kde.dolphin-%1").arg(QCoreApplication::applicationPid()); + const auto serviceName = isDaemon() ? QString() : QStringLiteral("org.kde.dolphin-%1").arg(QCoreApplication::applicationPid()); if(!Dolphin::attachToExistingInstance(urls, true, GeneralSettings::splitView(), serviceName)) { Dolphin::openNewWindow(urls, nullptr, Dolphin::OpenNewWindowFlag::Select); }; @@ -71,3 +71,13 @@ void DBusInterface::ShowItemProperties(const QStringList& uriList, const QString KPropertiesDialog::showDialog(urls); } } + +void DBusInterface::setAsDaemon() +{ + m_isDaemon = true; +} + +bool DBusInterface::isDaemon() const +{ + return m_isDaemon; +} diff --git a/src/dbusinterface.h b/src/dbusinterface.h index baf804f68..391916d62 100644 --- a/src/dbusinterface.h +++ b/src/dbusinterface.h @@ -32,6 +32,19 @@ public: Q_SCRIPTABLE void ShowFolders(const QStringList& uriList, const QString& startUpId); Q_SCRIPTABLE void ShowItems(const QStringList& uriList, const QString& startUpId); Q_SCRIPTABLE void ShowItemProperties(const QStringList& uriList, const QString& startUpId); + + /** + * Set whether this interface has been created by dolphin --deamon. + */ + void setAsDaemon(); + + /** + * @return Whether this interface has been created by dolphin --deamon. + */ + bool isDaemon() const; + +private: + bool m_isDaemon = false; }; #endif // DBUSINTERFACE_H diff --git a/src/global.cpp b/src/global.cpp index 9aff25b26..34ed4e824 100644 --- a/src/global.cpp +++ b/src/global.cpp @@ -82,7 +82,7 @@ bool Dolphin::attachToExistingInstance(const QList<QUrl>& inputUrls, bool openFi QSharedPointer<QDBusInterface> preferredInterface( new QDBusInterface(preferredService, QStringLiteral("/dolphin/Dolphin_1"), - QString()) // #414402: use empty interface name to prevent QtDBus from caching the interface. + QStringLiteral("org.kde.dolphin.MainWindow")) ); if (preferredInterface->isValid() && !preferredInterface->lastError().isValid()) { dolphinInterfaces.append(qMakePair(preferredInterface, QStringList())); diff --git a/src/global.h b/src/global.h index f203615f1..7ee564581 100644 --- a/src/global.h +++ b/src/global.h @@ -45,7 +45,9 @@ namespace Dolphin { /** * Attaches URLs to an existing Dolphin instance if possible. - * Returns true if URLs were successfully attached + * If @p preferredService is a valid dbus service, it will be tried first. + * @p preferredService needs to support the org.kde.dolphin.MainWindow dbus interface with the /dolphin/Dolphin_1 path. + * Returns true if the URLs were successfully attached. */ bool attachToExistingInstance(const QList<QUrl>& inputUrls, bool openFiles, bool splitView, const QString& preferredService = QString()); diff --git a/src/main.cpp b/src/main.cpp index 2b2674f9d..5932df5ce 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -143,6 +143,7 @@ extern "C" Q_DECL_EXPORT int kdemain(int argc, char **argv) if (parser.isSet(QStringLiteral("daemon"))) { KDBusService dolphinDBusService; DBusInterface interface; + interface.setAsDaemon(); return app.exec(); } |
