+ if (m_konsolePartMissingMessage) {
+ m_layout->removeWidget(m_konsolePartMissingMessage);
+ }
+ m_terminal = qobject_cast<TerminalInterface *>(m_konsolePart);
+
+ // needed to collect the correct KonsolePart actionCollection
+ // namely the one of the single inner terminal and not the outer KonsolePart
+ if (!m_konsolePart->factory() && m_terminalWidget) {
+ if (!m_konsolePart->clientBuilder()) {
+ m_konsolePart->setClientBuilder(new KXMLGUIBuilder(m_terminalWidget));
+ }
+
+ auto factory = new KXMLGUIFactory(m_konsolePart->clientBuilder(), this);
+ factory->addClient(m_konsolePart);
+
+ // Prevents the KXMLGui warning about removing the client
+ connect(m_terminalWidget, &QObject::destroyed, this, [factory, this] {
+ factory->removeClient(m_konsolePart);
+ });
+ }
+
+ } else if (!m_konsolePartMissingMessage) {
+ const auto konsoleInstallUrl = QUrl("appstream://org.kde.konsole.desktop");
+ const auto konsoleNotInstalledText = i18n(
+ "Terminal cannot be shown because Konsole is not installed. "
+ "Please install it and then reopen the panel.");
+ m_konsolePartMissingMessage = new KMessageWidget(konsoleNotInstalledText, this);
+ m_konsolePartMissingMessage->setCloseButtonVisible(false);
+ m_konsolePartMissingMessage->hide();
+ if (KIO::DesktopExecParser::hasSchemeHandler(konsoleInstallUrl)) {
+ auto installKonsoleAction = new QAction(i18n("Install Konsole"), this);
+ connect(installKonsoleAction, &QAction::triggered, [konsoleInstallUrl]() {
+ QDesktopServices::openUrl(konsoleInstallUrl);
+ });
+ m_konsolePartMissingMessage->addAction(installKonsoleAction);
+ }
+ m_layout->addWidget(m_konsolePartMissingMessage);
+ m_layout->addStretch();
+ QTimer::singleShot(0, m_konsolePartMissingMessage, &KMessageWidget::animatedShow);
+ } else {
+ m_konsolePartMissingMessage->animatedShow();