diff --git a/plasmoid/plugin/olliedbusclient.cpp b/plasmoid/plugin/olliedbusclient.cpp index bc275c6..c7960b2 100644 --- a/plasmoid/plugin/olliedbusclient.cpp +++ b/plasmoid/plugin/olliedbusclient.cpp @@ -2,6 +2,7 @@ #include #include +#include #include static const char *SERVICE = "org.ollie.SessionManager"; @@ -14,6 +15,28 @@ OllieDBusClient::OllieDBusClient(QObject *parent) m_iface = new QDBusInterface(SERVICE, OBJ_PATH, IFACE, QDBusConnection::sessionBus(), this); + // Watch for service appearing/disappearing + auto *watcher = new QDBusServiceWatcher(SERVICE, + QDBusConnection::sessionBus(), + QDBusServiceWatcher::WatchForRegistration | QDBusServiceWatcher::WatchForUnregistration, + this); + connect(watcher, &QDBusServiceWatcher::serviceRegistered, this, [this]() { + refreshSessions(); + }); + connect(watcher, &QDBusServiceWatcher::serviceUnregistered, this, [this]() { + m_sessions.clear(); + m_activeSessionId.clear(); + m_chatText.clear(); + m_chatOffset = 0; + m_activeState = "idle"; + m_activeCwd.clear(); + emit sessionsChanged(); + emit activeSessionIdChanged(); + emit chatTextChanged(); + emit activeStateChanged(); + emit activeCwdChanged(); + }); + // Connect D-Bus signals QDBusConnection bus = QDBusConnection::sessionBus(); bus.connect(SERVICE, OBJ_PATH, IFACE, "SessionCreated",