]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Show an undetermined progress indication within one second after changing an URL.
authorPeter Penz <peter.penz19@gmail.com>
Fri, 10 Dec 2010 21:54:53 +0000 (21:54 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Fri, 10 Dec 2010 21:54:53 +0000 (21:54 +0000)
svn path=/trunk/KDE/kdebase/apps/; revision=1205329

src/dolphinviewcontainer.cpp
src/statusbar/dolphinstatusbar.cpp
src/statusbar/dolphinstatusbar.h
src/tests/dolphindetailsviewtest.cpp

index d3363cf646f9ad5d0e4dbb8dfd7a46b5090d50bb..240cfb783a5bb8316596201f8804efc9814bbfa9 100644 (file)
@@ -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);
     }
 }
 
index 4cfa3aeaec85dfd13664713d4a0b460e46880a04..dfa5be21c36cfab8b05cd18f4c0dce02b30157cd 100644 (file)
@@ -37,6 +37,7 @@
 #include <QLabel>
 #include <QProgressBar>
 #include <QToolButton>
+#include <QTime>
 #include <QTimer>
 
 #include <views/dolphinview.h>
@@ -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();
     }
 
index 2c1378372b62df2aa9b2bdc3efa47a2ef3f2bc50..6eef520a6897582add46f028a7a1b6fd2e4aead5 100644 (file)
@@ -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
index d28be760d5b124a43dd3175884c8d3752df53ae2..36cdb333304e8a06a7f07d67b814a25e536e1ead 100644 (file)
@@ -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.