Detect SSH disconnect via KonsolePart's terminalExited signal

Connect to KonsolePart's terminalExited() signal which fires when
the ssh process exits (clean exit, timeout, connection reset).
On exit, update status to Disconnected and emit disconnected().
This commit is contained in:
Levi Neely 2026-07-11 17:09:19 +02:00
parent ac239c1943
commit 21adc454b4
2 changed files with 13 additions and 7 deletions

View File

@ -151,13 +151,8 @@ bool SshView::startConnection()
return false; return false;
} }
// Connect to the terminal's finished signal to detect disconnection // KonsolePart emits terminalExited() when the process (ssh) exits.
connect(m_terminalPart, &KParts::ReadOnlyPart::destroyed, this, [this]() { connect(m_terminalPart, SIGNAL(terminalExited()), this, SLOT(handleTerminalExited()));
if (!m_quitting) {
setStatus(Disconnected);
Q_EMIT disconnected();
}
});
// Start SSH directly via startProgram for clean process lifecycle. // Start SSH directly via startProgram for clean process lifecycle.
terminalInterface->startProgram(sshPath, sshCommand); terminalInterface->startProgram(sshPath, sshCommand);
@ -170,6 +165,14 @@ bool SshView::startConnection()
return true; return true;
} }
void SshView::handleTerminalExited()
{
if (!m_quitting) {
setStatus(Disconnected);
Q_EMIT disconnected();
}
}
void SshView::startQuittingConnection() void SshView::startQuittingConnection()
{ {
m_quitting = true; m_quitting = true;

View File

@ -55,6 +55,9 @@ protected:
void handleMouseEvent(QMouseEvent *event) override; void handleMouseEvent(QMouseEvent *event) override;
void handleLocalClipboardChanged(const QMimeData *data) override; void handleLocalClipboardChanged(const QMimeData *data) override;
private Q_SLOTS:
void handleTerminalExited();
private: private:
bool loadKonsolePart(); bool loadKonsolePart();
QStringList buildSshCommand() const; QStringList buildSshCommand() const;