X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/cd3e667e9c29d848f1a21fb37b1182adceeab27d..b1c9b5126d:/src/statusbarspaceinfo.cpp diff --git a/src/statusbarspaceinfo.cpp b/src/statusbarspaceinfo.cpp index dafd8517c..33017f02b 100644 --- a/src/statusbarspaceinfo.cpp +++ b/src/statusbarspaceinfo.cpp @@ -30,16 +30,16 @@ StatusBarSpaceInfo::StatusBarSpaceInfo(QWidget* parent) : KCapacityBar(KCapacityBar::DrawTextInline, parent), - m_kBSize(0) + m_kBSize(0), + m_timer(0) { setMaximumWidth(200); setMinimumWidth(200); // something to fix on kcapacitybar (ereslibre) - // Update the space information each 10 seconds. Polling is useful + // Use a timer to update the space information. Polling is useful // here, as files can be deleted/added outside the scope of Dolphin. - QTimer* timer = new QTimer(this); - connect(timer, SIGNAL(timeout()), this, SLOT(refresh())); - timer->start(10000); + m_timer = new QTimer(this); + connect(m_timer, SIGNAL(timeout()), this, SLOT(refresh())); } StatusBarSpaceInfo::~StatusBarSpaceInfo() @@ -52,8 +52,27 @@ void StatusBarSpaceInfo::setUrl(const KUrl& url) refresh(); } +void StatusBarSpaceInfo::showEvent(QShowEvent* event) +{ + KCapacityBar::showEvent(event); + if (!event->spontaneous()) { + refresh(); + m_timer->start(10000); + } +} + +void StatusBarSpaceInfo::hideEvent(QHideEvent* event) +{ + m_timer->stop(); + KCapacityBar::hideEvent(event); +} + void StatusBarSpaceInfo::refresh() { + if (!isVisible()) { + return; + } + // KDiskFreeSpace is for local paths only if (!m_url.isLocalFile()) { setText(i18nc("@info:status", "Unknown size")); @@ -68,9 +87,7 @@ void StatusBarSpaceInfo::refresh() } KDiskFreeSpaceInfo job = KDiskFreeSpaceInfo::freeSpaceInfo(mp->mountPoint()); - - if(!job.isValid()) - { + if (!job.isValid()) { setText(i18nc("@info:status", "Unknown size")); setValue(0); update(); @@ -82,7 +99,9 @@ void StatusBarSpaceInfo::refresh() const bool valuesChanged = (kBUsed != static_cast(value())) || (kBSize != m_kBSize); if (valuesChanged) { - setText(i18nc("@info:status Free disk space", "%1 free", job.available())); + setText(i18nc("@info:status Free disk space", "%1 free", + KIO::convertSize(job.available()))); + setUpdatesEnabled(false); m_kBSize = kBSize; setValue(kBSize > 0 ? (kBUsed * 100) / kBSize : 0);