From 5ad224dfae375a31c018611c53dd438f0098ea3d Mon Sep 17 00:00:00 2001 From: Levi Neely <141506390+lneely@users.noreply.github.com> Date: Wed, 8 Jul 2026 19:27:31 +0200 Subject: [PATCH] fix: refresh session list on rename via reply callback and signal --- plasmoid/plugin/olliedbusclient.cpp | 28 +++++++++++++++++++++++----- plasmoid/plugin/olliedbusclient.h | 1 + 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/plasmoid/plugin/olliedbusclient.cpp b/plasmoid/plugin/olliedbusclient.cpp index fe8b1ea..24914c1 100644 --- a/plasmoid/plugin/olliedbusclient.cpp +++ b/plasmoid/plugin/olliedbusclient.cpp @@ -44,6 +44,8 @@ OllieDBusClient::OllieDBusClient(QObject *parent) this, SLOT(onSessionCreated(QString))); bus.connect(SERVICE, OBJ_PATH, IFACE, "SessionKilled", this, SLOT(onSessionKilled(QString))); + bus.connect(SERVICE, OBJ_PATH, IFACE, "SessionRenamed", + this, SLOT(onSessionRenamed(QString,QString))); bus.connect(SERVICE, OBJ_PATH, IFACE, "StateChanged", this, SLOT(onStateChanged(QString,QString))); bus.connect(SERVICE, OBJ_PATH, IFACE, "ChatUpdated", @@ -244,11 +246,18 @@ bool OllieDBusClient::killSession(const QString &sessionId) bool OllieDBusClient::renameSession(const QString &sessionId, const QString &newName) { - if (sessionId == m_activeSessionId) { - m_activeSessionId = newName; - emit activeSessionIdChanged(); - } - m_iface->asyncCall("RenameSession", sessionId, newName); + QDBusPendingCall pending = m_iface->asyncCall("RenameSession", sessionId, newName); + auto *watcher = new QDBusPendingCallWatcher(pending, this); + connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, sessionId, newName](QDBusPendingCallWatcher *w) { + w->deleteLater(); + QDBusPendingReply reply = *w; + if (reply.isError() || !reply.value()) return; + if (m_activeSessionId == sessionId) { + m_activeSessionId = newName; + emit activeSessionIdChanged(); + } + refreshSessions(); + }); return true; } @@ -288,6 +297,15 @@ void OllieDBusClient::onSessionKilled(const QString &session_id) refreshSessions(); } +void OllieDBusClient::onSessionRenamed(const QString &old_id, const QString &new_id) +{ + if (m_activeSessionId == old_id) { + m_activeSessionId = new_id; + emit activeSessionIdChanged(); + } + refreshSessions(); +} + void OllieDBusClient::onStateChanged(const QString &session_id, const QString &new_state) { if (session_id == m_activeSessionId) { diff --git a/plasmoid/plugin/olliedbusclient.h b/plasmoid/plugin/olliedbusclient.h index 7e632fd..75fd8c5 100644 --- a/plasmoid/plugin/olliedbusclient.h +++ b/plasmoid/plugin/olliedbusclient.h @@ -55,6 +55,7 @@ signals: private slots: void onSessionCreated(const QString &session_id); void onSessionKilled(const QString &session_id); + void onSessionRenamed(const QString &old_id, const QString &new_id); void onStateChanged(const QString &session_id, const QString &new_state); void onChatUpdated(const QString &session_id, qlonglong offset, const QString &new_text);