]> cloud.milkyroute.net Git - dolphin.git/commitdiff
[Status Bar] Remove file status Timer, add text update delay
authorMéven Car <meven29@gmail.com>
Fri, 8 Nov 2019 15:40:08 +0000 (16:40 +0100)
committerMéven Car <meven29@gmail.com>
Sat, 9 Nov 2019 21:00:35 +0000 (22:00 +0100)
Summary:
Currently when hovering over a file we have its name, mimetype type and size display in the status bar for 1 second, after which the status of the folder is displayed.

This patch removes this timer making the status bar behavior more predictable and user friendly.

Instead there is a 50ms delay between when the status bar gets new text to display (for instance mouse hovering or keyboard navigation) and when the status bar displayed text is updated. This is to avoid flickering.

FIXED-IN: 19.12
BUG: 399267

Reviewers: #dolphin, elvisangelaccio, ngraham

Reviewed By: #dolphin, elvisangelaccio, ngraham

Subscribers: kfm-devel

Tags: #dolphin

Differential Revision: https://phabricator.kde.org/D25218

src/statusbar/dolphinstatusbar.cpp
src/statusbar/dolphinstatusbar.h

index 41c787eaa83fb1599364c9ab3500fa34b28cd708..9bb050d052441434fd224c02abc56a712a0b0f60 100644 (file)
@@ -39,7 +39,7 @@
 #include <QToolButton>
 
 namespace {
-    const int ResetToDefaultTimeout = 1000;
+    const int UpdateDelay = 50;
 }
 
 DolphinStatusBar::DolphinStatusBar(QWidget* parent) :
@@ -53,7 +53,7 @@ DolphinStatusBar::DolphinStatusBar(QWidget* parent) :
     m_stopButton(nullptr),
     m_progress(100),
     m_showProgressBarTimer(nullptr),
-    m_resetToDefaultTextTimer(nullptr),
+    m_delayUpdateTimer(nullptr),
     m_textTimestamp()
 {
     // Initialize text label
@@ -95,10 +95,12 @@ DolphinStatusBar::DolphinStatusBar(QWidget* parent) :
     m_showProgressBarTimer->setSingleShot(true);
     connect(m_showProgressBarTimer, &QTimer::timeout, this, &DolphinStatusBar::updateProgressInfo);
 
-    m_resetToDefaultTextTimer = new QTimer(this);
-    m_resetToDefaultTextTimer->setInterval(ResetToDefaultTimeout);
-    m_resetToDefaultTextTimer->setSingleShot(true);
-    connect(m_resetToDefaultTextTimer, &QTimer::timeout, this, &DolphinStatusBar::slotResetToDefaultText);
+    // initialize text updater delay timer
+    m_delayUpdateTimer = new QTimer(this);
+    m_delayUpdateTimer->setInterval(UpdateDelay);
+    m_delayUpdateTimer->setSingleShot(true);
+    connect(m_delayUpdateTimer, &QTimer::timeout,
+            this, &DolphinStatusBar::updateLabelText);
 
     // Initialize top layout and size policies
     const int fontHeight = QFontMetrics(m_label->font()).height();
@@ -154,19 +156,9 @@ void DolphinStatusBar::setText(const QString& text)
 
     m_textTimestamp = QTime::currentTime();
 
-    if (text.isEmpty()) {
-        // Assure that the previous set text won't get
-        // cleared immediately.
-        m_resetToDefaultTextTimer->start();
-    } else {
-        m_text = text;
-
-        if (m_resetToDefaultTextTimer->isActive()) {
-            m_resetToDefaultTextTimer->start();
-        }
-
-        updateLabelText();
-    }
+    m_text = text;
+    // will update status bar text in 50ms
+    m_delayUpdateTimer->start();
 }
 
 QString DolphinStatusBar::text() const
@@ -214,12 +206,13 @@ int DolphinStatusBar::progress() const
 
 void DolphinStatusBar::resetToDefaultText()
 {
+    m_text.clear();
+
     QTime currentTime;
-    if (currentTime.msecsTo(m_textTimestamp) < ResetToDefaultTimeout) {
-        m_resetToDefaultTextTimer->start();
+    if (currentTime.msecsTo(m_textTimestamp) < UpdateDelay) {
+        m_delayUpdateTimer->start();
     } else {
-        m_resetToDefaultTextTimer->stop();
-        slotResetToDefaultText();
+        updateLabelText();
     }
 }
 
@@ -325,12 +318,6 @@ void DolphinStatusBar::updateLabelText()
     m_label->setText(text);
 }
 
-void DolphinStatusBar::slotResetToDefaultText()
-{
-    m_text.clear();
-    updateLabelText();
-}
-
 void DolphinStatusBar::updateZoomSliderToolTip(int zoomLevel)
 {
     const int size = ZoomLevelInfo::iconSizeForZoomLevel(zoomLevel);
index 7461d1d7d3fcecc707bfd3af2cd1edddfb6425fd..2474732f503a5bdb727cd446cf026df07243c286 100644 (file)
@@ -67,8 +67,7 @@ public:
 
     /**
      * Replaces the text set by setText() by the text that
-     * has been set by setDefaultText(). It is assured that the previous
-     * text will be shown for at least 1 second. DolphinStatusBar::text()
+     * has been set by setDefaultText(). DolphinStatusBar::text()
      * will return an empty string after the reset has been done.
      */
     void resetToDefaultText();
@@ -119,14 +118,6 @@ private slots:
      */
     void updateLabelText();
 
-    /**
-     * Is invoked by m_resetToDefaultTextTimer and clears
-     * m_text so that the default text will be shown. This
-     * prevents that information-messages will be cleared
-     * too fast.
-     */
-    void slotResetToDefaultText();
-
     /**
      * Updates the text of the zoom slider tooltip to show
      * the currently used size.
@@ -156,7 +147,7 @@ private:
     int m_progress;
     QTimer* m_showProgressBarTimer;
 
-    QTimer* m_resetToDefaultTextTimer;
+    QTimer* m_delayUpdateTimer;
     QTime m_textTimestamp;
 };