diff --git a/src/statusbar/spaceinfoobserver.h b/src/statusbar/spaceinfoobserver.h --- a/src/statusbar/spaceinfoobserver.h +++ b/src/statusbar/spaceinfoobserver.h @@ -55,6 +55,7 @@ private: MountPointObserver* m_mountPointObserver; + bool m_hasData; quint64 m_dataSize; quint64 m_dataAvailable; }; diff --git a/src/statusbar/spaceinfoobserver.cpp b/src/statusbar/spaceinfoobserver.cpp --- a/src/statusbar/spaceinfoobserver.cpp +++ b/src/statusbar/spaceinfoobserver.cpp @@ -24,6 +24,7 @@ SpaceInfoObserver::SpaceInfoObserver(const QUrl& url, QObject* parent) : QObject(parent), m_mountPointObserver(nullptr), + m_hasData(false), m_dataSize(0), m_dataAvailable(0) { @@ -81,7 +82,8 @@ void SpaceInfoObserver::spaceInfoChanged(quint64 size, quint64 available) { // Make sure that the size has actually changed - if (m_dataSize != size || m_dataAvailable != available) { + if (m_dataSize != size || m_dataAvailable != available || !m_hasData) { + m_hasData = true; m_dataSize = size; m_dataAvailable = available; diff --git a/src/statusbar/statusbarspaceinfo.cpp b/src/statusbar/statusbarspaceinfo.cpp --- a/src/statusbar/statusbarspaceinfo.cpp +++ b/src/statusbar/statusbarspaceinfo.cpp @@ -43,7 +43,8 @@ if (m_url != url) { m_url = url; if (m_observer) { - m_observer->setUrl(url); + m_observer.reset(new SpaceInfoObserver(m_url, this)); + connect(m_observer.data(), &SpaceInfoObserver::valuesChanged, this, &StatusBarSpaceInfo::slotValuesChanged); } } } @@ -63,9 +64,10 @@ void StatusBarSpaceInfo::showEvent(QShowEvent* event) { KCapacityBar::showEvent(event); - m_observer.reset(new SpaceInfoObserver(m_url, this)); - slotValuesChanged(); - connect(m_observer.data(), &SpaceInfoObserver::valuesChanged, this, &StatusBarSpaceInfo::slotValuesChanged); + if (m_observer.isNull()) { + m_observer.reset(new SpaceInfoObserver(m_url, this)); + connect(m_observer.data(), &SpaceInfoObserver::valuesChanged, this, &StatusBarSpaceInfo::slotValuesChanged); + } } void StatusBarSpaceInfo::hideEvent(QHideEvent* event) @@ -96,9 +98,7 @@ Q_ASSERT(m_observer); const quint64 size = m_observer->size(); if (size == 0) { - setText(i18nc("@info:status", "Unknown size")); - setValue(0); - update(); + hide(); } else { const quint64 available = m_observer->available(); const quint64 used = size - available;