From 4a0b4d8c977e03064074d0c981fc50881a31628b Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Tue, 9 Nov 2021 07:46:32 +0100 Subject: [PATCH] add close current tab action --- resources/desktop/com.github.rssguard.appdata.xml | 2 +- src/librssguard/gui/dialogs/formmain.cpp | 10 ++++++++++ src/librssguard/gui/dialogs/formmain.h | 1 + src/librssguard/gui/dialogs/formmain.ui | 6 ++++++ src/librssguard/gui/tabwidget.cpp | 4 ++++ src/librssguard/gui/tabwidget.h | 1 + 6 files changed, 23 insertions(+), 1 deletion(-) diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml index 4ff0313ff..3f5404b19 100644 --- a/resources/desktop/com.github.rssguard.appdata.xml +++ b/resources/desktop/com.github.rssguard.appdata.xml @@ -26,7 +26,7 @@ https://github.com/sponsors/martinrotter - + none diff --git a/src/librssguard/gui/dialogs/formmain.cpp b/src/librssguard/gui/dialogs/formmain.cpp index 57a0f698b..6a86ed6f2 100644 --- a/src/librssguard/gui/dialogs/formmain.cpp +++ b/src/librssguard/gui/dialogs/formmain.cpp @@ -84,6 +84,7 @@ FormMain::FormMain(QWidget* parent, Qt::WindowFlags f) createConnections(); updateMessageButtonsAvailability(); updateFeedButtonsAvailability(); + updateTabsButtonsAvailability(tabWidget()->currentIndex()); // Setup some appearance of the window. setupIcons(); @@ -198,6 +199,7 @@ QList FormMain::allActions() const { actions << m_ui->m_actionTabNewWebBrowser; #endif + actions << m_ui->m_actionTabsCloseCurrent; actions << m_ui->m_actionTabsCloseAll; actions << m_ui->m_actionTabsCloseAllExceptCurrent; @@ -392,6 +394,11 @@ void FormMain::updateAccountsMenu() { m_ui->m_menuAccounts->addAction(m_ui->m_actionServiceDelete); } +void FormMain::updateTabsButtonsAvailability(int index) { + m_ui->m_actionTabsCloseCurrent->setEnabled(tabWidget()->tabBar()->tabType(index) == TabBar::TabType::Closable || + tabWidget()->tabBar()->tabType(index) == TabBar::TabType::DownloadManager); +} + void FormMain::onFeedUpdatesFinished(const FeedDownloadResults& results) { Q_UNUSED(results) @@ -568,6 +575,7 @@ void FormMain::setupIcons() { // Tabs & web browser. m_ui->m_actionTabNewWebBrowser->setIcon(icon_theme_factory->fromTheme(QSL("tab-new"))); m_ui->m_actionTabsCloseAll->setIcon(icon_theme_factory->fromTheme(QSL("window-close"))); + m_ui->m_actionTabsCloseCurrent->setIcon(icon_theme_factory->fromTheme(QSL("window-close"))); m_ui->m_actionTabsCloseAllExceptCurrent->setIcon(icon_theme_factory->fromTheme(QSL("window-close"))); m_ui->m_actionTabsNext->setIcon(icon_theme_factory->fromTheme(QSL("go-next"))); m_ui->m_actionTabsPrevious->setIcon(icon_theme_factory->fromTheme(QSL("go-previous"))); @@ -715,6 +723,7 @@ void FormMain::createConnections() { connect(m_ui->m_actionTabsPrevious, &QAction::triggered, m_ui->m_tabWidget, &TabWidget::gotoPreviousTab); connect(m_ui->m_actionTabsCloseAllExceptCurrent, &QAction::triggered, m_ui->m_tabWidget, &TabWidget::closeAllTabsExceptCurrent); connect(m_ui->m_actionTabsCloseAll, &QAction::triggered, m_ui->m_tabWidget, &TabWidget::closeAllTabs); + connect(m_ui->m_actionTabsCloseCurrent, &QAction::triggered, m_ui->m_tabWidget, &TabWidget::closeCurrentTab); connect(m_ui->m_actionTabNewWebBrowser, &QAction::triggered, m_ui->m_tabWidget, &TabWidget::addEmptyBrowser); connect(tabWidget()->feedMessageViewer()->feedsView(), &FeedsView::itemSelected, this, &FormMain::updateFeedButtonsAvailability); connect(qApp->feedUpdateLock(), &Mutex::locked, this, &FormMain::updateFeedButtonsAvailability); @@ -723,6 +732,7 @@ void FormMain::createConnections() { this, &FormMain::updateMessageButtonsAvailability); connect(tabWidget()->feedMessageViewer()->messagesView(), &MessagesView::currentMessageChanged, this, &FormMain::updateMessageButtonsAvailability); + connect(tabWidget(), &TabWidget::currentChanged, this, &FormMain::updateTabsButtonsAvailability); connect(qApp->feedReader(), &FeedReader::feedUpdatesStarted, this, &FormMain::onFeedUpdatesStarted); connect(qApp->feedReader(), &FeedReader::feedUpdatesProgress, this, &FormMain::onFeedUpdatesProgress); connect(qApp->feedReader(), &FeedReader::feedUpdatesFinished, this, &FormMain::onFeedUpdatesFinished); diff --git a/src/librssguard/gui/dialogs/formmain.h b/src/librssguard/gui/dialogs/formmain.h index 18bd40a51..35cc7ae4c 100644 --- a/src/librssguard/gui/dialogs/formmain.h +++ b/src/librssguard/gui/dialogs/formmain.h @@ -49,6 +49,7 @@ class RSSGUARD_DLLSPEC FormMain : public QMainWindow { void updateRecycleBinMenu(); void updateAccountsMenu(); + void updateTabsButtonsAvailability(int index); void updateMessageButtonsAvailability(); void updateFeedButtonsAvailability(); diff --git a/src/librssguard/gui/dialogs/formmain.ui b/src/librssguard/gui/dialogs/formmain.ui index 596940c0b..56ac82322 100644 --- a/src/librssguard/gui/dialogs/formmain.ui +++ b/src/librssguard/gui/dialogs/formmain.ui @@ -177,6 +177,7 @@ + @@ -835,6 +836,11 @@ Expand/collapse selected item &recursively + + + Close &current tab + + diff --git a/src/librssguard/gui/tabwidget.cpp b/src/librssguard/gui/tabwidget.cpp index 32fd22bf1..52ec028e8 100644 --- a/src/librssguard/gui/tabwidget.cpp +++ b/src/librssguard/gui/tabwidget.cpp @@ -183,6 +183,10 @@ void TabWidget::closeAllTabs() { } } +void TabWidget::closeCurrentTab() { + closeTab(currentIndex()); +} + int TabWidget::addNewspaperView(RootItem* root, const QList& messages) { int msg_height = height() - tabBar()->height() - 50; NewspaperPreviewer* prev = new NewspaperPreviewer(msg_height, root, messages, this); diff --git a/src/librssguard/gui/tabwidget.h b/src/librssguard/gui/tabwidget.h index 15e3b9259..6daa61201 100644 --- a/src/librssguard/gui/tabwidget.h +++ b/src/librssguard/gui/tabwidget.h @@ -63,6 +63,7 @@ class TabWidget : public QTabWidget { bool closeTab(int index); void closeAllTabsExceptCurrent(); void closeAllTabs(); + void closeCurrentTab(); // Displays download manager. void showDownloadManager();