diff --git a/src/panels/terminal/terminalpanel.h b/src/panels/terminal/terminalpanel.h --- a/src/panels/terminal/terminalpanel.h +++ b/src/panels/terminal/terminalpanel.h @@ -25,6 +25,7 @@ #include class TerminalInterface; +class KMessageWidget; class QVBoxLayout; class QWidget; @@ -93,6 +94,7 @@ QVBoxLayout* m_layout; TerminalInterface* m_terminal; QWidget* m_terminalWidget; + KMessageWidget* m_konsolePartMissingMessage; KParts::ReadOnlyPart* m_konsolePart; QString m_konsolePartCurrentDirectory; QQueue m_sendCdToTerminalHistory; diff --git a/src/panels/terminal/terminalpanel.cpp b/src/panels/terminal/terminalpanel.cpp --- a/src/panels/terminal/terminalpanel.cpp +++ b/src/panels/terminal/terminalpanel.cpp @@ -22,14 +22,19 @@ #include #include #include +#include +#include #include #include #include #include #include #include +#include +#include #include +#include #include #include @@ -132,7 +137,18 @@ connect(m_konsolePart, &KParts::ReadOnlyPart::destroyed, this, &TerminalPanel::terminalExited); m_terminalWidget = m_konsolePart->widget(); m_layout->addWidget(m_terminalWidget); + if (m_konsolePartMissingMessage) { + m_layout->removeWidget(m_konsolePartMissingMessage); + } m_terminal = qobject_cast(m_konsolePart); + } else if (!m_konsolePartMissingMessage || !m_konsolePartMissingMessage->isVisible()) { + m_konsolePartMissingMessage = new KMessageWidget(i18n("Terminal cannot be shown because Konsole is not installed.")); + auto installKonsoleAction = new QAction(i18n("Install Konsole")); + connect(installKonsoleAction, &QAction::triggered, []() { + QDesktopServices::openUrl(QUrl("appstream://org.kde.konsole.desktop")); + }); + m_konsolePartMissingMessage->addAction(installKonsoleAction); + m_layout->addWidget(m_konsolePartMissingMessage); } } if (m_terminal) {