mirror of
https://invent.kde.org/system/dolphin
synced 2024-10-05 16:19:10 +00:00
terminalpanel: Improve Konsole missing message
It now forces the pane to fit its height, and will animate on every appearance.
This commit is contained in:
parent
99541a77fa
commit
38342ae820
|
@ -77,18 +77,22 @@ void TerminalPanel::dockVisibilityChanged()
|
||||||
{
|
{
|
||||||
// Only react when the DockWidget itself (not some parent) is hidden. This way we don't
|
// Only react when the DockWidget itself (not some parent) is hidden. This way we don't
|
||||||
// respond when e.g. Dolphin is minimized.
|
// respond when e.g. Dolphin is minimized.
|
||||||
if (isHiddenInVisibleWindow() && m_terminal && !hasProgramRunning()) {
|
if (isHiddenInVisibleWindow()) {
|
||||||
// Make sure that the following "cd /" command will not affect the view.
|
if (m_konsolePartMissingMessage) {
|
||||||
disconnect(m_konsolePart, SIGNAL(currentDirectoryChanged(QString)), this, SLOT(slotKonsolePartCurrentDirectoryChanged(QString)));
|
m_konsolePartMissingMessage->hide();
|
||||||
|
} else if (m_terminal && !hasProgramRunning()) {
|
||||||
|
// Make sure that the following "cd /" command will not affect the view.
|
||||||
|
disconnect(m_konsolePart, SIGNAL(currentDirectoryChanged(QString)), this, SLOT(slotKonsolePartCurrentDirectoryChanged(QString)));
|
||||||
|
|
||||||
// Make sure this terminal does not prevent unmounting any removable drives
|
// Make sure this terminal does not prevent unmounting any removable drives
|
||||||
changeDir(QUrl::fromLocalFile(QStringLiteral("/")));
|
changeDir(QUrl::fromLocalFile(QStringLiteral("/")));
|
||||||
|
|
||||||
// Because we have disconnected from the part's currentDirectoryChanged()
|
// Because we have disconnected from the part's currentDirectoryChanged()
|
||||||
// signal, we have to update m_konsolePartCurrentDirectory manually. If this
|
// signal, we have to update m_konsolePartCurrentDirectory manually. If this
|
||||||
// was not done, showing the panel again might not set the part's working
|
// was not done, showing the panel again might not set the part's working
|
||||||
// directory correctly.
|
// directory correctly.
|
||||||
m_konsolePartCurrentDirectory = '/';
|
m_konsolePartCurrentDirectory = '/';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,25 +172,26 @@ void TerminalPanel::showEvent(QShowEvent *event)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
} 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 {
|
} 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->setSizeConstraint(QLayout::SetMaximumSize);
|
||||||
|
}
|
||||||
|
|
||||||
m_konsolePartMissingMessage->animatedShow();
|
m_konsolePartMissingMessage->animatedShow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue