Summary:
`dolphin --daemon` does not have the `/dolphin/Dolphin_1` dbus path,
because it doesn't have any DolphinMainWindow.
Instead of working around this issue (as we did in D21666 and D25510),
just exclude these processes from the list of dbus instances checked by
`Dolphin::attachToExistingInstance()`.
CCBUG: 408244
Test Plan: Same test plan as in D21666 and D25510
Reviewers: #dolphin
Subscribers: kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D26213
if (urls.isEmpty()) {
return;
}
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);
}
if(!Dolphin::attachToExistingInstance(urls, false, GeneralSettings::splitView(), serviceName)) {
Dolphin::openNewWindow(urls);
}
if (urls.isEmpty()) {
return;
}
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);
};
if(!Dolphin::attachToExistingInstance(urls, true, GeneralSettings::splitView(), serviceName)) {
Dolphin::openNewWindow(urls, nullptr, Dolphin::OpenNewWindowFlag::Select);
};
KPropertiesDialog::showDialog(urls);
}
}
KPropertiesDialog::showDialog(urls);
}
}
+
+void DBusInterface::setAsDaemon()
+{
+ m_isDaemon = true;
+}
+
+bool DBusInterface::isDaemon() const
+{
+ return m_isDaemon;
+}
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);
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
};
#endif // DBUSINTERFACE_H
QSharedPointer<QDBusInterface> preferredInterface(
new QDBusInterface(preferredService,
QStringLiteral("/dolphin/Dolphin_1"),
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()));
);
if (preferredInterface->isValid() && !preferredInterface->lastError().isValid()) {
dolphinInterfaces.append(qMakePair(preferredInterface, QStringList()));
/**
* Attaches URLs to an existing Dolphin instance if possible.
/**
* 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());
*/
bool attachToExistingInstance(const QList<QUrl>& inputUrls, bool openFiles, bool splitView, const QString& preferredService = QString());
if (parser.isSet(QStringLiteral("daemon"))) {
KDBusService dolphinDBusService;
DBusInterface interface;
if (parser.isSet(QStringLiteral("daemon"))) {
KDBusService dolphinDBusService;
DBusInterface interface;
+ interface.setAsDaemon();