]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Avoid crashing on startup if DBus isn't running
authorAlex Richardson <Alexander.Richardson@cl.cam.ac.uk>
Fri, 9 Jul 2021 08:30:58 +0000 (09:30 +0100)
committerElvis Angelaccio <elvis.angelaccio@kde.org>
Sat, 10 Jul 2021 20:18:28 +0000 (20:18 +0000)
I am trying to run Dolphin on a minimal FreeBSD CHERI-RISC-V QEMU
instance and I haven't got DBus running. Without this change, I get
crashes because QDBusConnection::sessionBus().interface() returns NULL
if DBus isn't running.

src/dbusinterface.cpp
src/dolphinmainwindow.cpp
src/global.cpp

index 7e453f72ac785ffddcba23582c6b2129cc10444a..2b674b96888382b5497e0fd639c8c9fd6f7a0788 100644 (file)
@@ -20,8 +20,10 @@ DBusInterface::DBusInterface() :
 {
     QDBusConnection::sessionBus().registerObject(QStringLiteral("/org/freedesktop/FileManager1"), this,
             QDBusConnection::ExportScriptableContents | QDBusConnection::ExportAdaptors);
-    QDBusConnection::sessionBus().interface()->registerService(QStringLiteral("org.freedesktop.FileManager1"),
-                                                               QDBusConnectionInterface::QueueService);
+    QDBusConnectionInterface *sessionInterface = QDBusConnection::sessionBus().interface();
+    if (sessionInterface) {
+        sessionInterface->registerService(QStringLiteral("org.freedesktop.FileManager1"), QDBusConnectionInterface::QueueService);
+    }
 }
 
 void DBusInterface::ShowFolders(const QStringList& uriList, const QString& startUpId)
index fe39d4d2fbabf7e298cf0aef52d79e377ccce393..d4c8199a6001719495be10fd6047a0860477dfe0 100644 (file)
@@ -1543,7 +1543,8 @@ void DolphinMainWindow::setupActions()
     stashSplit->setToolTip(i18nc("@info", "Opens the stash virtual directory in a split window"));
     stashSplit->setIcon(QIcon::fromTheme(QStringLiteral("folder-stash")));
     stashSplit->setCheckable(false);
-    stashSplit->setVisible(QDBusConnection::sessionBus().interface()->isServiceRegistered(QStringLiteral("org.kde.kio.StashNotifier")));
+    QDBusConnectionInterface *sessionInterface = QDBusConnection::sessionBus().interface();
+    stashSplit->setVisible(sessionInterface && sessionInterface->isServiceRegistered(QStringLiteral("org.kde.kio.StashNotifier")));
     connect(stashSplit, &QAction::triggered, this, &DolphinMainWindow::toggleSplitStash);
 
     KStandardAction::redisplay(this, &DolphinMainWindow::reloadView, actionCollection());
index 197d6ec288f5e1b88ca0a9b3d129154293d4fbb3..d217a67ec82c71996d90b2f2b01636a88189380d 100644 (file)
@@ -120,7 +120,8 @@ QVector<QPair<QSharedPointer<OrgKdeDolphinMainWindowInterface>, QStringList>> Do
     }
 
     // Look for dolphin instances among all available dbus services.
-    const QStringList dbusServices = QDBusConnection::sessionBus().interface()->registeredServiceNames().value();
+    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 "-"