From 31bc909c3bd051e02facb7f5dc65882ed9dc483c Mon Sep 17 00:00:00 2001 From: Méven Car Date: Fri, 8 Nov 2019 16:40:08 +0100 Subject: [Status Bar] Remove file status Timer, add text update delay 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 | 45 ++++++++++++++------------------------ 1 file changed, 16 insertions(+), 29 deletions(-) (limited to 'src/statusbar/dolphinstatusbar.cpp') diff --git a/src/statusbar/dolphinstatusbar.cpp b/src/statusbar/dolphinstatusbar.cpp index 41c787eaa..9bb050d05 100644 --- a/src/statusbar/dolphinstatusbar.cpp +++ b/src/statusbar/dolphinstatusbar.cpp @@ -39,7 +39,7 @@ #include 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); -- cgit v1.3