Update badge counter only on change

remotes/origin/HEAD
Konstantinos Sideris 7 years ago
parent 0c0ac68bc2
commit 6e0ae807d5
  1. 2
      include/TrayIcon.h
  2. 6
      src/TimelineView.cc
  3. 18
      src/TrayIcon.cc

@ -33,7 +33,7 @@ public:
virtual void paint(QPainter *p, const QRect &rect, QIcon::Mode mode, QIcon::State state); virtual void paint(QPainter *p, const QRect &rect, QIcon::Mode mode, QIcon::State state);
virtual QIconEngine *clone() const; virtual QIconEngine *clone() const;
virtual QList<QSize> availableSizes(QIcon::Mode mode, QIcon::State state) const; virtual QList<QSize> availableSizes(QIcon::Mode mode, QIcon::State state) const;
virtual QPixmap pixmap(const QSize& size, QIcon::Mode mode, QIcon::State state); virtual QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state);
int msgCount = 0; int msgCount = 0;

@ -380,14 +380,12 @@ TimelineView::init()
scrollbar_ = new ScrollBar(scroll_area_); scrollbar_ = new ScrollBar(scroll_area_);
scroll_area_->setVerticalScrollBar(scrollbar_); 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_->addStretch(1);
scroll_layout_->setSpacing(0); scroll_layout_->setSpacing(0);
scroll_widget_->setLayout(scroll_layout_);
scroll_area_->setWidget(scroll_widget_); scroll_area_->setWidget(scroll_widget_);
top_layout_->addWidget(scroll_area_); top_layout_->addWidget(scroll_area_);

@ -16,8 +16,8 @@
*/ */
#include <QApplication> #include <QApplication>
#include <QTimer>
#include <QList> #include <QList>
#include <QTimer>
#include "TrayIcon.h" #include "TrayIcon.h"
@ -89,7 +89,7 @@ MsgCountComposedIcon::availableSizes(QIcon::Mode mode, QIcon::State state) const
} }
QPixmap 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); QImage img(size, QImage::Format_ARGB32);
img.fill(qRgba(0, 0, 0, 0)); img.fill(qRgba(0, 0, 0, 0));
@ -132,15 +132,19 @@ TrayIcon::setUnreadCount(int count)
{ {
// Use the native badge counter in MacOS. // Use the native badge counter in MacOS.
#if defined(Q_OS_MAC) #if defined(Q_OS_MAC)
if (count == 0) auto labelText = count == 0 ? "" : QString::number(count);
QtMac::setBadgeLabelText("");
else if (labelText == QtMac::badgeLabelText())
QtMac::setBadgeLabelText(QString::number(count)); return;
QtMac::setBadgeLabelText(labelText);
#elif defined(Q_OS_WIN) #elif defined(Q_OS_WIN)
// FIXME: Find a way to use Windows apis for the badge counter (if any). // FIXME: Find a way to use Windows apis for the badge counter (if any).
#else #else
if (count == icon_->msgCount)
return;
// Custom drawing on Linux. // Custom drawing on Linux.
// FIXME: It doesn't seem to work on KDE.
MsgCountComposedIcon *tmp = static_cast<MsgCountComposedIcon *>(icon_->clone()); MsgCountComposedIcon *tmp = static_cast<MsgCountComposedIcon *>(icon_->clone());
tmp->msgCount = count; tmp->msgCount = count;

Loading…
Cancel
Save