From: Peter Penz Date: Fri, 10 Dec 2010 21:54:53 +0000 (+0000) Subject: Show an undetermined progress indication within one second after changing an URL. X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/0da54e5c1beb880efbc580f2202108ea46d52a1c?ds=sidebyside Show an undetermined progress indication within one second after changing an URL. svn path=/trunk/KDE/kdebase/apps/; revision=1205329 --- diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index d3363cf64..240cfb783 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -289,6 +289,7 @@ void DolphinViewContainer::setUrl(const KUrl& newUrl) { if (newUrl != m_urlNavigator->locationUrl()) { m_urlNavigator->setLocationUrl(newUrl); + // Temporary disable the 'File'->'Create New...' menu until // the write permissions can be checked in a fast way at // DolphinViewContainer::slotDirListerCompleted(). @@ -296,6 +297,11 @@ void DolphinViewContainer::setUrl(const KUrl& newUrl) if (isActive()) { emit writeStateChanged(false); } + + // Trigger an undetermined progress indication. The progress + // information in percent will be triggered by the percent() signal + // of the directory lister later. + updateProgress(-1); } } diff --git a/src/statusbar/dolphinstatusbar.cpp b/src/statusbar/dolphinstatusbar.cpp index 4cfa3aeae..dfa5be21c 100644 --- a/src/statusbar/dolphinstatusbar.cpp +++ b/src/statusbar/dolphinstatusbar.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include @@ -54,6 +55,7 @@ DolphinStatusBar::DolphinStatusBar(QWidget* parent, DolphinView* view) : m_progressBar(0), m_stopButton(0), m_progress(100), + m_showProgressBarTimer(0), m_messageTimeStamp() { connect(m_view, SIGNAL(urlChanged(const KUrl&)), @@ -114,6 +116,11 @@ DolphinStatusBar::DolphinStatusBar(QWidget* parent, DolphinView* view) : m_progressBar = new QProgressBar(this); m_progressBar->hide(); + m_showProgressBarTimer = new QTimer(this); + m_showProgressBarTimer->setInterval(1000); + m_showProgressBarTimer->setSingleShot(true); + connect(m_showProgressBarTimer, SIGNAL(timeout()), this, SLOT(updateProgressInfo())); + // Initialize top layout and size policies const int fontHeight = QFontMetrics(m_messageLabel->font()).height(); const int zoomWidgetHeight = m_zoomWidget->minimumSizeHint().height(); @@ -222,6 +229,7 @@ void DolphinStatusBar::setProgress(int percent) percent = 100; } + const bool progressRestarted = (percent < 100) && (percent < m_progress); m_progress = percent; if (m_messageLabel->type() == KonqStatusBarMessageLabel::Error) { // Don't update any widget or status bar text if an @@ -229,8 +237,17 @@ void DolphinStatusBar::setProgress(int percent) return; } + if (progressRestarted && !m_progressBar->isVisible()) { + // Show the progress bar delayed: In the case if 100 % are reached within + // a short time, no progress bar will be shown at all. + m_showProgressBarTimer->start(); + } + m_progressBar->setValue(m_progress); - if (!m_progressBar->isVisible() || (percent == 100)) { + if (percent == 100) { + // The end of the progress has been reached. Assure that the progress bar + // gets hidden and the extensions widgets get visible again. + m_showProgressBarTimer->stop(); updateProgressInfo(); } diff --git a/src/statusbar/dolphinstatusbar.h b/src/statusbar/dolphinstatusbar.h index 2c1378372..6eef520a6 100644 --- a/src/statusbar/dolphinstatusbar.h +++ b/src/statusbar/dolphinstatusbar.h @@ -32,6 +32,7 @@ class QLabel; class QProgressBar; class QToolButton; class QSlider; +class QTimer; /** * @brief Represents the statusbar of a Dolphin view. @@ -86,11 +87,9 @@ public: /** * Sets the progress in percent (0 - 100). The - * progress is shown with a delay of 300 milliseconds: - * if the progress does reach 100 % within 300 milliseconds, - * the progress is not shown at all. This assures that - * no flickering occurs for showing a progress of fast - * operations. + * progress is shown delayed by 1 second: + * If the progress does reach 100 % within 1 second, + * the progress is not shown at all. */ void setProgress(int percent); int progress() const; @@ -142,9 +141,9 @@ private slots: void zoomIn(); void showZoomSliderToolTip(int zoomLevel); -private: void updateProgressInfo(); +private: /** * Makes the space information widget and zoom slider widget * visible, if \a visible is true and the settings allow to show @@ -173,6 +172,7 @@ private: QProgressBar* m_progressBar; QToolButton* m_stopButton; int m_progress; + QTimer* m_showProgressBarTimer; // Timestamp when the last message has been set that has not the type // 'Default'. The timestamp is used to prevent that default messages diff --git a/src/tests/dolphindetailsviewtest.cpp b/src/tests/dolphindetailsviewtest.cpp index d28be760d..36cdb3333 100644 --- a/src/tests/dolphindetailsviewtest.cpp +++ b/src/tests/dolphindetailsviewtest.cpp @@ -250,7 +250,7 @@ void DolphinDetailsViewTest::bug234600_overlappingIconsWhenZooming() * The width of the visualRect of an item is usually replaced by the width of the file name. * However, if the file name is wider then the view's name column, this leads to problems with * keyboard navigation if files with very long names are present in the current folder, see - * + * * https://bugs.kde.org/show_bug.cgi?id=257401 * * This test checks that the visualRect of an item is never wider than the "Name" column.