diff --git a/gui/main.qml b/gui/main.qml index 82c2a88..c260e12 100644 --- a/gui/main.qml +++ b/gui/main.qml @@ -549,6 +549,24 @@ ApplicationWindow { mainContent.panes[idx].sessionId = dbus.activeSessionId } } + function onErrorOccurred(message) { + errorDialog.text = message + errorDialog.open() + } + } + + Dialog { + id: errorDialog + title: "Error" + modal: true + anchors.centerIn: parent + standardButtons: Dialog.Ok + property alias text: errorLabel.text + Label { + id: errorLabel + wrapMode: Text.Wrap + width: parent.width + } } // --- Process Manager Window --- diff --git a/plasmoid/contents/ui/main.qml b/plasmoid/contents/ui/main.qml index 2299ba4..4dc06b5 100644 --- a/plasmoid/contents/ui/main.qml +++ b/plasmoid/contents/ui/main.qml @@ -14,6 +14,13 @@ PlasmoidItem { // Convenience alias readonly property var dbus: Ollie.OllieDBusClient + Connections { + target: dbus + function onErrorOccurred(message) { + root.Plasmoid.showPassiveNotification(message, 5000, "Error") + } + } + FolderDialog { id: folderDialog title: "Choose working directory" diff --git a/plasmoid/plugin/olliedbusclient.cpp b/plasmoid/plugin/olliedbusclient.cpp index 2972704..fd7e4fd 100644 --- a/plasmoid/plugin/olliedbusclient.cpp +++ b/plasmoid/plugin/olliedbusclient.cpp @@ -270,9 +270,17 @@ void OllieDBusClient::onFetchConfigFinished(QDBusPendingCallWatcher *watcher) QString OllieDBusClient::createSession(const QString &cwd) { QString dir = cwd.isEmpty() ? QDir::homePath() : cwd; - // Use asyncCall — we'll pick up the new session via the SessionCreated signal - m_iface->asyncCall("CreateSession", dir, QString(), QString(), QString("default"), QString()); - return QString(); // ID not available synchronously; signal will trigger refresh + auto *watcher = new QDBusPendingCallWatcher( + m_iface->asyncCall("CreateSession", dir, QString(), QString(), QString("default"), QString()), + this); + connect(watcher, &QDBusPendingCallWatcher::finished, this, [this](QDBusPendingCallWatcher *w) { + QDBusPendingReply reply = *w; + if (reply.isError()) { + emit errorOccurred(reply.error().message()); + } + w->deleteLater(); + }); + return QString(); } void OllieDBusClient::createSessionWithDialog() diff --git a/plasmoid/plugin/olliedbusclient.h b/plasmoid/plugin/olliedbusclient.h index c004f77..b270d42 100644 --- a/plasmoid/plugin/olliedbusclient.h +++ b/plasmoid/plugin/olliedbusclient.h @@ -74,6 +74,7 @@ signals: void chatAppended(const QString &sessionId, int offset, const QString &text); void processDetached(const QString &sessionId); void processExited(const QString &sessionId, int pid, int exitCode); + void errorOccurred(const QString &message); private slots: void onSessionCreated(const QString &session_id);