forked from qt-creator/qt-creator
Terminal: Close Pane with last Terminal
Closes the Terminal pane once the last terminal is closed. Opening the pane again will also open a new Terminal. Change-Id: I2f822b0058b26506250c784357ba522f29fd4078 Reviewed-by: Cristian Adam <cristian.adam@qt.io> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
@@ -64,7 +64,6 @@ TerminalPane::TerminalPane(QObject *parent)
|
||||
{":/utils/images/iconoverlay_close_small.png", Theme::IconsStopToolBarColor}})
|
||||
.icon());
|
||||
closeTerminal.setToolTip(Tr::tr("Close the current Terminal."));
|
||||
closeTerminal.setEnabled(false);
|
||||
|
||||
connect(&closeTerminal, &QAction::triggered, this, [this] {
|
||||
removeTab(m_tabWidget->currentIndex());
|
||||
@@ -175,7 +174,8 @@ static std::optional<FilePath> startupProjectDirectory()
|
||||
void TerminalPane::openTerminal(const OpenTerminalParameters ¶meters)
|
||||
{
|
||||
OpenTerminalParameters parametersCopy{parameters};
|
||||
showPage(0);
|
||||
if (!m_isVisible)
|
||||
emit showPage(0);
|
||||
|
||||
if (!parametersCopy.workingDirectory) {
|
||||
const std::optional<FilePath> projectDir = startupProjectDirectory();
|
||||
@@ -193,17 +193,16 @@ void TerminalPane::openTerminal(const OpenTerminalParameters ¶meters)
|
||||
|
||||
m_tabWidget->currentWidget()->setFocus();
|
||||
|
||||
TerminalCommands::instance().paneActions().closeTerminal.setEnabled(m_tabWidget->count() > 1);
|
||||
emit navigateStateUpdate();
|
||||
}
|
||||
|
||||
void TerminalPane::addTerminal(TerminalWidget *terminal, const QString &title)
|
||||
{
|
||||
showPage(0);
|
||||
if (!m_isVisible)
|
||||
emit showPage(0);
|
||||
m_tabWidget->setCurrentIndex(m_tabWidget->addTab(terminal, title));
|
||||
setupTerminalWidget(terminal);
|
||||
|
||||
TerminalCommands::instance().paneActions().closeTerminal.setEnabled(m_tabWidget->count() > 1);
|
||||
emit navigateStateUpdate();
|
||||
}
|
||||
|
||||
@@ -236,6 +235,8 @@ QWidget *TerminalPane::outputWidget(QWidget *parent)
|
||||
connect(m_tabWidget, &QTabWidget::currentChanged, this, [this](int index) {
|
||||
if (auto widget = m_tabWidget->widget(index))
|
||||
widget->setFocus();
|
||||
else
|
||||
emit hidePage();
|
||||
});
|
||||
|
||||
auto terminalWidget = new TerminalWidget(parent);
|
||||
@@ -254,11 +255,7 @@ TerminalWidget *TerminalPane::currentTerminal() const
|
||||
|
||||
void TerminalPane::removeTab(int index)
|
||||
{
|
||||
if (m_tabWidget->count() > 1)
|
||||
delete m_tabWidget->widget(index);
|
||||
|
||||
TerminalCommands::instance().paneActions().closeTerminal.setEnabled(m_tabWidget->count() > 1);
|
||||
|
||||
delete m_tabWidget->widget(index);
|
||||
emit navigateStateUpdate();
|
||||
}
|
||||
|
||||
@@ -322,6 +319,19 @@ void TerminalPane::clearContents()
|
||||
t->clearContents();
|
||||
}
|
||||
|
||||
void TerminalPane::visibilityChanged(bool visible)
|
||||
{
|
||||
if (m_isVisible == visible)
|
||||
return;
|
||||
|
||||
m_isVisible = visible;
|
||||
|
||||
if (visible && m_tabWidget && m_tabWidget->count() == 0)
|
||||
openTerminal({});
|
||||
|
||||
IOutputPane::visibilityChanged(visible);
|
||||
}
|
||||
|
||||
void TerminalPane::setFocus()
|
||||
{
|
||||
if (const auto t = currentTerminal())
|
||||
|
@@ -27,6 +27,7 @@ public:
|
||||
QString displayName() const override;
|
||||
int priorityInStatusBar() const override;
|
||||
void clearContents() override;
|
||||
void visibilityChanged(bool visible) override;
|
||||
void setFocus() override;
|
||||
bool hasFocus() const override;
|
||||
bool canFocus() const override;
|
||||
@@ -56,6 +57,7 @@ private:
|
||||
QToolButton *m_escSettingButton{nullptr};
|
||||
|
||||
bool m_widgetInitialized{false};
|
||||
bool m_isVisible{false};
|
||||
};
|
||||
|
||||
} // namespace Terminal
|
||||
|
Reference in New Issue
Block a user