diff --git a/src/gui/feedmessageviewer.cpp b/src/gui/feedmessageviewer.cpp index 282ad2300..0372db37a 100644 --- a/src/gui/feedmessageviewer.cpp +++ b/src/gui/feedmessageviewer.cpp @@ -11,6 +11,7 @@ #include "gui/messagesview.h" #include "gui/feedsview.h" #include "gui/statusbar.h" +#include "gui/systemtrayicon.h" #include #include @@ -119,6 +120,15 @@ void FeedMessageViewer::updateAllFeeds() { } } +void FeedMessageViewer::updateCountsOfMessages(int unread_messages, + int total_messages) { + // TODO: Optimize the call isSystemTrayActivated() + // because it opens settings (use member variable)?. + if (SystemTrayIcon::isSystemTrayActivated()) { + SystemTrayIcon::instance()->setNumber(unread_messages); + } +} + void FeedMessageViewer::onFeedUpdatesStarted() { FormMain::instance()->statusBar()->showProgress(0, tr("Feed update started")); } @@ -152,6 +162,8 @@ void FeedMessageViewer::createConnections() { m_feedsView, SLOT(updateCountsOfSelectedFeeds())); connect(m_feedsView, SIGNAL(feedsNeedToBeReloaded(int)), m_messagesView, SLOT(reloadSelections(int))); + connect(m_feedsView, SIGNAL(feedCountsChanged(int,int)), + this, SLOT(updateCountsOfMessages(int,int))); // Message openers. connect(m_messagesView, SIGNAL(openMessagesInNewspaperView(QList)), diff --git a/src/gui/feedmessageviewer.h b/src/gui/feedmessageviewer.h index eef7c840b..68b537690 100644 --- a/src/gui/feedmessageviewer.h +++ b/src/gui/feedmessageviewer.h @@ -40,7 +40,10 @@ class FeedMessageViewer : public TabContent { void updateSelectedFeeds(); void updateAllFeeds(); - protected slots: + protected slots: + // Updates counts of messages for example in tray icon. + void updateCountsOfMessages(int unread_messages, int total_messages); + // Reacts on feed updates. void onFeedUpdatesStarted(); void onFeedUpdatesProgress(FeedsModelFeed *feed, int current, int total); diff --git a/src/gui/feedsview.cpp b/src/gui/feedsview.cpp index 7739a2918..37552df70 100644 --- a/src/gui/feedsview.cpp +++ b/src/gui/feedsview.cpp @@ -160,12 +160,16 @@ void FeedsView::openSelectedFeedsInNewspaperMode() { } void FeedsView::updateCountsOfSelectedFeeds(bool update_total_too) { - foreach (FeedsModelFeed *feed, selectedFeeds()) { - feed->updateCounts(update_total_too); - } + QList selected_feeds = selectedFeeds(); - // Make sure that selected view reloads changed indexes. - m_sourceModel->reloadChangedLayout(m_proxyModel->mapListToSource(selectionModel()->selectedRows())); + if (!selected_feeds.isEmpty()) { + foreach (FeedsModelFeed *feed, selected_feeds) { + feed->updateCounts(update_total_too); + } + + // Make sure that selected view reloads changed indexes. + m_sourceModel->reloadChangedLayout(m_proxyModel->mapListToSource(selectionModel()->selectedRows())); + } } void FeedsView::updateCountsOfAllFeeds(bool update_total_too) { @@ -185,6 +189,10 @@ void FeedsView::updateCountsOfParticularFeed(FeedsModelFeed *feed, feed->updateCounts(update_total_too); m_sourceModel->reloadChangedLayout(QModelIndexList() << index); } + + // TODO: Optimize this and call the signal in all updateCounts* methods. + emit feedCountsChanged(m_sourceModel->rootItem()->countOfUnreadMessages(), + m_sourceModel->rootItem()->countOfAllMessages()); } void FeedsView::initializeContextMenuCategoriesFeeds() { diff --git a/src/gui/feedsview.h b/src/gui/feedsview.h index 78bfbec52..afcb44e82 100644 --- a/src/gui/feedsview.h +++ b/src/gui/feedsview.h @@ -93,6 +93,9 @@ class FeedsView : public QTreeView { void contextMenuEvent(QContextMenuEvent *event); signals: + // Emitted if counts of messages are changed. + void feedCountsChanged(int unread_messages, int total_messages); + // Emitted if currently selected feeds needs to be reloaded. void feedsNeedToBeReloaded(int mark_current_index_read); diff --git a/src/gui/systemtrayicon.cpp b/src/gui/systemtrayicon.cpp index 275b423c6..e42c6af81 100644 --- a/src/gui/systemtrayicon.cpp +++ b/src/gui/systemtrayicon.cpp @@ -119,6 +119,7 @@ void SystemTrayIcon::show() { #endif } +// TODO: Set better colors for number -> better readability. void SystemTrayIcon::setNumber(int number) { if (number < 0) { QSystemTrayIcon::setIcon(QIcon(m_normalIcon));