Update badge counter only on change
2 files changed, 13 insertions, 11 deletions
diff --git a/src/TimelineView.cc b/src/TimelineView.cc
index 8b255cde..032d1310 100644
--- a/src/TimelineView.cc
+++ b/src/TimelineView.cc
@@ -380,14 +380,12 @@ TimelineView::init()
scrollbar_ = new ScrollBar(scroll_area_);
scroll_area_->setVerticalScrollBar(scrollbar_);
- scroll_widget_ = new QWidget();
+ scroll_widget_ = new QWidget(this);
- scroll_layout_ = new QVBoxLayout();
+ scroll_layout_ = new QVBoxLayout(scroll_widget_);
scroll_layout_->addStretch(1);
scroll_layout_->setSpacing(0);
- scroll_widget_->setLayout(scroll_layout_);
-
scroll_area_->setWidget(scroll_widget_);
top_layout_->addWidget(scroll_area_);
diff --git a/src/TrayIcon.cc b/src/TrayIcon.cc
index 8d3dc99f..1360cc4e 100644
--- a/src/TrayIcon.cc
+++ b/src/TrayIcon.cc
@@ -16,8 +16,8 @@
*/
#include <QApplication>
-#include <QTimer>
#include <QList>
+#include <QTimer>
#include "TrayIcon.h"
@@ -89,7 +89,7 @@ MsgCountComposedIcon::availableSizes(QIcon::Mode mode, QIcon::State state) const
}
QPixmap
-MsgCountComposedIcon::pixmap(const QSize& size, QIcon::Mode mode, QIcon::State state)
+MsgCountComposedIcon::pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state)
{
QImage img(size, QImage::Format_ARGB32);
img.fill(qRgba(0, 0, 0, 0));
@@ -132,15 +132,19 @@ TrayIcon::setUnreadCount(int count)
{
// Use the native badge counter in MacOS.
#if defined(Q_OS_MAC)
- if (count == 0)
- QtMac::setBadgeLabelText("");
- else
- QtMac::setBadgeLabelText(QString::number(count));
+ auto labelText = count == 0 ? "" : QString::number(count);
+
+ if (labelText == QtMac::badgeLabelText())
+ return;
+
+ QtMac::setBadgeLabelText(labelText);
#elif defined(Q_OS_WIN)
// FIXME: Find a way to use Windows apis for the badge counter (if any).
#else
+ if (count == icon_->msgCount)
+ return;
+
// Custom drawing on Linux.
- // FIXME: It doesn't seem to work on KDE.
MsgCountComposedIcon *tmp = static_cast<MsgCountComposedIcon *>(icon_->clone());
tmp->msgCount = count;
|