From ee9e2bcf2a7cbb5de681aa5a4a37d3939c878a38 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Thu, 10 Nov 2016 07:01:02 +0100 Subject: [PATCH] Fixed #73. --- resources/text/CHANGELOG | 2 ++ src/gui/statusbar.cpp | 18 +++++++++++++----- src/gui/statusbar.h | 4 ++++ src/miscellaneous/mutex.cpp | 4 ++++ src/miscellaneous/mutex.h | 2 ++ 5 files changed, 25 insertions(+), 5 deletions(-) diff --git a/resources/text/CHANGELOG b/resources/text/CHANGELOG index 43fb33e41..255921db3 100755 --- a/resources/text/CHANGELOG +++ b/resources/text/CHANGELOG @@ -9,6 +9,8 @@ Changed: Fixed: ▪ Fixed problem with strings in core being rendered untranslated. (bug #60) +▪ Fixed problem with feed updates progress bar flickering. (bug #73) +▪ Partially fixed problem with incorrect number of downloaded messages being reported. (bug #70) 3.3.5 ————— diff --git a/src/gui/statusbar.cpp b/src/gui/statusbar.cpp index 01cc3f63a..7f5fc8dd8 100755 --- a/src/gui/statusbar.cpp +++ b/src/gui/statusbar.cpp @@ -20,6 +20,7 @@ #include "gui/dialogs/formmain.h" #include "gui/tabwidget.h" #include "gui/plaintoolbutton.h" +#include "miscellaneous/mutex.h" #include "miscellaneous/iconfactory.h" #include @@ -28,7 +29,7 @@ #include -StatusBar::StatusBar(QWidget *parent) : QStatusBar(parent) { +StatusBar::StatusBar(QWidget *parent) : QStatusBar(parent), m_mutex(new Mutex(QMutex::NonRecursive, this)) { setSizeGripEnabled(false); setContentsMargins(2, 0, 2, 2); @@ -72,11 +73,11 @@ StatusBar::StatusBar(QWidget *parent) : QStatusBar(parent) { } StatusBar::~StatusBar() { - clear(); + clear(); qDebug("Destroying StatusBar instance."); } -QList StatusBar::availableActions() const { +QList StatusBar::availableActions() const { QList actions = qApp->userActions(); // Now, add placeholder actions for custom stuff. @@ -91,11 +92,15 @@ QList StatusBar::changeableActions() const { } void StatusBar::saveChangeableActions(const QStringList &actions) { + QMutexLocker locker(*m_mutex); + qApp->settings()->setValue(GROUP(GUI), GUI::StatusbarActions, actions.join(QSL(","))); loadChangeableActions(actions); } void StatusBar::loadChangeableActions() { + QMutexLocker locker(*m_mutex); + QStringList action_names = qApp->settings()->value(GROUP(GUI), SETTING(GUI::StatusbarActions)).toString().split(',', QString::SkipEmptyParts); @@ -105,6 +110,9 @@ void StatusBar::loadChangeableActions() { void StatusBar::loadChangeableActions(const QStringList &action_names) { clear(); + bool progress_visible = actions().contains(m_barProgressFeedsAction) && + m_lblProgressFeeds->isVisible() && + m_barProgressFeeds->isVisible(); QList available_actions = availableActions(); // Iterate action names and add respectable actions into the toolbar. @@ -123,7 +131,7 @@ void StatusBar::loadChangeableActions(const QStringList &action_names) { widget_to_add = m_barProgressFeeds; action_to_add = m_barProgressFeedsAction; - widget_to_add->setVisible(false); + widget_to_add->setVisible(progress_visible); } else if (matching_action == m_lblProgressDownloadAction) { widget_to_add = m_lblProgressDownload; @@ -135,7 +143,7 @@ void StatusBar::loadChangeableActions(const QStringList &action_names) { widget_to_add = m_lblProgressFeeds; action_to_add = m_lblProgressFeedsAction; - widget_to_add->setVisible(false); + widget_to_add->setVisible(progress_visible); } else { if (action_name == SEPARATOR_ACTION_NAME) { diff --git a/src/gui/statusbar.h b/src/gui/statusbar.h index a61ee3d89..b14bb745d 100755 --- a/src/gui/statusbar.h +++ b/src/gui/statusbar.h @@ -22,9 +22,11 @@ #include "gui/basetoolbar.h" + class QProgressBar; class PlainToolButton; class QLabel; +class Mutex; class StatusBar : public QStatusBar, public BaseBar { Q_OBJECT @@ -54,6 +56,8 @@ class StatusBar : public QStatusBar, public BaseBar { void clear(); void loadChangeableActions(const QStringList &action_names); + Mutex *m_mutex; + QProgressBar *m_barProgressFeeds; QAction *m_barProgressFeedsAction; diff --git a/src/miscellaneous/mutex.cpp b/src/miscellaneous/mutex.cpp index 47a99585b..c1359647f 100755 --- a/src/miscellaneous/mutex.cpp +++ b/src/miscellaneous/mutex.cpp @@ -68,3 +68,7 @@ void Mutex::setUnlocked() { bool Mutex::isLocked() const { return m_isLocked; } + +Mutex::operator QMutex*() const { + return m_mutex.data(); +} diff --git a/src/miscellaneous/mutex.h b/src/miscellaneous/mutex.h index 95e1e0c91..0a8bd187e 100755 --- a/src/miscellaneous/mutex.h +++ b/src/miscellaneous/mutex.h @@ -37,6 +37,8 @@ class Mutex : public QObject { // Identifies if mutes is locked or not. bool isLocked() const; + operator QMutex*() const; + public slots: void lock(); void unlock();