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 ¤t 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();