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}})
|
{":/utils/images/iconoverlay_close_small.png", Theme::IconsStopToolBarColor}})
|
||||||
.icon());
|
.icon());
|
||||||
closeTerminal.setToolTip(Tr::tr("Close the current Terminal."));
|
closeTerminal.setToolTip(Tr::tr("Close the current Terminal."));
|
||||||
closeTerminal.setEnabled(false);
|
|
||||||
|
|
||||||
connect(&closeTerminal, &QAction::triggered, this, [this] {
|
connect(&closeTerminal, &QAction::triggered, this, [this] {
|
||||||
removeTab(m_tabWidget->currentIndex());
|
removeTab(m_tabWidget->currentIndex());
|
||||||
@@ -175,7 +174,8 @@ static std::optional<FilePath> startupProjectDirectory()
|
|||||||
void TerminalPane::openTerminal(const OpenTerminalParameters ¶meters)
|
void TerminalPane::openTerminal(const OpenTerminalParameters ¶meters)
|
||||||
{
|
{
|
||||||
OpenTerminalParameters parametersCopy{parameters};
|
OpenTerminalParameters parametersCopy{parameters};
|
||||||
showPage(0);
|
if (!m_isVisible)
|
||||||
|
emit showPage(0);
|
||||||
|
|
||||||
if (!parametersCopy.workingDirectory) {
|
if (!parametersCopy.workingDirectory) {
|
||||||
const std::optional<FilePath> projectDir = startupProjectDirectory();
|
const std::optional<FilePath> projectDir = startupProjectDirectory();
|
||||||
@@ -193,17 +193,16 @@ void TerminalPane::openTerminal(const OpenTerminalParameters ¶meters)
|
|||||||
|
|
||||||
m_tabWidget->currentWidget()->setFocus();
|
m_tabWidget->currentWidget()->setFocus();
|
||||||
|
|
||||||
TerminalCommands::instance().paneActions().closeTerminal.setEnabled(m_tabWidget->count() > 1);
|
|
||||||
emit navigateStateUpdate();
|
emit navigateStateUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TerminalPane::addTerminal(TerminalWidget *terminal, const QString &title)
|
void TerminalPane::addTerminal(TerminalWidget *terminal, const QString &title)
|
||||||
{
|
{
|
||||||
showPage(0);
|
if (!m_isVisible)
|
||||||
|
emit showPage(0);
|
||||||
m_tabWidget->setCurrentIndex(m_tabWidget->addTab(terminal, title));
|
m_tabWidget->setCurrentIndex(m_tabWidget->addTab(terminal, title));
|
||||||
setupTerminalWidget(terminal);
|
setupTerminalWidget(terminal);
|
||||||
|
|
||||||
TerminalCommands::instance().paneActions().closeTerminal.setEnabled(m_tabWidget->count() > 1);
|
|
||||||
emit navigateStateUpdate();
|
emit navigateStateUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,6 +235,8 @@ QWidget *TerminalPane::outputWidget(QWidget *parent)
|
|||||||
connect(m_tabWidget, &QTabWidget::currentChanged, this, [this](int index) {
|
connect(m_tabWidget, &QTabWidget::currentChanged, this, [this](int index) {
|
||||||
if (auto widget = m_tabWidget->widget(index))
|
if (auto widget = m_tabWidget->widget(index))
|
||||||
widget->setFocus();
|
widget->setFocus();
|
||||||
|
else
|
||||||
|
emit hidePage();
|
||||||
});
|
});
|
||||||
|
|
||||||
auto terminalWidget = new TerminalWidget(parent);
|
auto terminalWidget = new TerminalWidget(parent);
|
||||||
@@ -254,11 +255,7 @@ TerminalWidget *TerminalPane::currentTerminal() const
|
|||||||
|
|
||||||
void TerminalPane::removeTab(int index)
|
void TerminalPane::removeTab(int index)
|
||||||
{
|
{
|
||||||
if (m_tabWidget->count() > 1)
|
delete m_tabWidget->widget(index);
|
||||||
delete m_tabWidget->widget(index);
|
|
||||||
|
|
||||||
TerminalCommands::instance().paneActions().closeTerminal.setEnabled(m_tabWidget->count() > 1);
|
|
||||||
|
|
||||||
emit navigateStateUpdate();
|
emit navigateStateUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -322,6 +319,19 @@ void TerminalPane::clearContents()
|
|||||||
t->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()
|
void TerminalPane::setFocus()
|
||||||
{
|
{
|
||||||
if (const auto t = currentTerminal())
|
if (const auto t = currentTerminal())
|
||||||
|
@@ -27,6 +27,7 @@ public:
|
|||||||
QString displayName() const override;
|
QString displayName() const override;
|
||||||
int priorityInStatusBar() const override;
|
int priorityInStatusBar() const override;
|
||||||
void clearContents() override;
|
void clearContents() override;
|
||||||
|
void visibilityChanged(bool visible) override;
|
||||||
void setFocus() override;
|
void setFocus() override;
|
||||||
bool hasFocus() const override;
|
bool hasFocus() const override;
|
||||||
bool canFocus() const override;
|
bool canFocus() const override;
|
||||||
@@ -56,6 +57,7 @@ private:
|
|||||||
QToolButton *m_escSettingButton{nullptr};
|
QToolButton *m_escSettingButton{nullptr};
|
||||||
|
|
||||||
bool m_widgetInitialized{false};
|
bool m_widgetInitialized{false};
|
||||||
|
bool m_isVisible{false};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Terminal
|
} // namespace Terminal
|
||||||
|
Reference in New Issue
Block a user