M app/hgtextpanel.cpp +1 -0
@@ 292,6 292,7 @@ void HgTextPanel::popupContextMenuForTex
menu->setAttribute(Qt::WA_DeleteOnClose);
menu->addAction(actions_->toggleLogDock);
menu->addAction(&actions_->selectOtherPanel);
+ menu->addAction(&actions_->closePanel);
menu->addAction(&actions_->execSettingsDialog);
menu->popup(ui_->textEdit->viewport()->mapToGlobal(pos));
}
M app/mainactions.h +1 -0
@@ 12,6 12,7 @@ struct MainActions
QAction closeRepository;
QAction selectOtherPanel;
QAction splitRevisionPanel;
+ QAction closePanel;
QPointer<QAction> toggleLogDock;
QAction reload;
M app/mainwindow.cpp +27 -0
@@ 118,6 118,11 @@ MainWindow::MainWindow(QWidget *parent)
connect(&actions_->splitRevisionPanel, &QAction::triggered, this,
&MainWindow::splitRevisionPanel);
+ actions_->closePanel.setText(tr("&Close Panel"));
+ actions_->closePanel.setShortcut(QKeySequence("Ctrl+X, 0"));
+ addAction(&actions_->closePanel);
+ connect(&actions_->closePanel, &QAction::triggered, this, &MainWindow::closeCurrentPanel);
+
actions_->toggleLogDock = logDock_->toggleViewAction();
actions_->toggleLogDock->setShortcut(QKeySequence("F12"));
addAction(actions_->toggleLogDock);
@@ 291,6 296,28 @@ void MainWindow::splitRevisionPanel()
textPanel_->displayRevision(changesetPanel_->currentRevision());
}
+void MainWindow::closeCurrentPanel()
+{
+ auto *panel = findAncestorSplitterChild(focusWidget(), mainSplitter_);
+ if (!panel || panel == changesetPanel_)
+ return;
+ // TODO: redesign routing between changeset panel and text panel
+ if (panel == textPanel_) {
+ std::vector<HgTextPanel *> textPanels;
+ collectSplitterChildren(textPanels, mainSplitter_);
+ textPanel_ =
+ textPanels.size() > 1 ? nextInCircularList(textPanels, textPanel_.data()) : nullptr;
+ if (textPanel_) {
+ connect(changesetPanel_, &HgChangesetPanel::currentRepositoryChanged, textPanel_,
+ &HgTextPanel::setCurrentRepository);
+ connect(changesetPanel_, &HgChangesetPanel::revisionActivated, textPanel_,
+ &HgTextPanel::displayRevision);
+ }
+ }
+ selectOtherPanel(); // move focus out of the panel to be deleted
+ delete panel;
+}
+
void MainWindow::popupContextMenu(const QPoint &pos)
{
auto *menu = new QMenu(this);
M app/mainwindow.h +1 -0
@@ 45,6 45,7 @@ private slots:
void onCurrentRepositoryChanged();
void selectOtherPanel();
void splitRevisionPanel();
+ void closeCurrentPanel();
void popupContextMenu(const QPoint &pos);
void onLastRepositoryClosed();