From e587aaa9c4b895119d64a843eb400102e1372885 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Fri, 10 Dec 2010 22:54:37 +0000 Subject: [PATCH] Show an undetermined progress indication within one second after changing an URL. Update to SVN commit 1205329: - Fix issue that an undetermined progress is shown when switching between columns of the column-view. - Fix issue that no undetermined progress is shown when editing the URL directly in the URL navigator BUG: 234894 BUG: 163004 FIXED-IN: 4.6.0 svn path=/trunk/KDE/kdebase/apps/; revision=1205345 --- src/dolphinviewcontainer.cpp | 42 +++++++++++++++++++----------------- src/dolphinviewcontainer.h | 10 ++++++--- src/views/dolphinview.cpp | 8 ++++--- 3 files changed, 34 insertions(+), 26 deletions(-) diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 240cfb783..06682202d 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -117,8 +117,8 @@ DolphinViewContainer::DolphinViewContainer(const KUrl& url, QWidget* parent) : m_proxyModel->setSourceModel(m_dolphinModel); m_proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive); - connect(m_dirLister, SIGNAL(started(KUrl)), - this, SLOT(initializeProgress())); + // TODO: In the case of the column view the directory lister changes. Let the DolphinView + // inform the container about this information for KDE SC 4.7 connect(m_dirLister, SIGNAL(clear()), this, SLOT(delayedStatusBarUpdate())); connect(m_dirLister, SIGNAL(percent(int)), @@ -127,8 +127,6 @@ DolphinViewContainer::DolphinViewContainer(const KUrl& url, QWidget* parent) : this, SLOT(delayedStatusBarUpdate())); connect(m_dirLister, SIGNAL(newItems(KFileItemList)), this, SLOT(delayedStatusBarUpdate())); - connect(m_dirLister, SIGNAL(completed()), - this, SLOT(slotDirListerCompleted())); connect(m_dirLister, SIGNAL(infoMessage(const QString&)), this, SLOT(showInfoMessage(const QString&))); connect(m_dirLister, SIGNAL(errorMessage(const QString&)), @@ -153,6 +151,10 @@ DolphinViewContainer::DolphinViewContainer(const KUrl& url, QWidget* parent) : this, SLOT(redirect(KUrl, KUrl))); connect(m_view, SIGNAL(selectionChanged(const KFileItemList&)), this, SLOT(delayedStatusBarUpdate())); + connect(m_view, SIGNAL(startedPathLoading(KUrl)), + this, SLOT(slotStartedPathLoading())); + connect(m_view, SIGNAL(finishedPathLoading(KUrl)), + this, SLOT(slotFinishedPathLoading())); connect(m_urlNavigator, SIGNAL(urlChanged(const KUrl&)), this, SLOT(slotUrlNavigatorLocationChanged(const KUrl&))); @@ -297,11 +299,6 @@ 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); } } @@ -354,26 +351,31 @@ void DolphinViewContainer::updateStatusBar() } } -void DolphinViewContainer::initializeProgress() +void DolphinViewContainer::updateProgress(int percent) +{ + if (m_statusBar->progressText().isEmpty()) { + m_statusBar->setProgressText(i18nc("@info:progress", "Loading folder...")); + } + m_statusBar->setProgress(percent); +} + +void DolphinViewContainer::slotStartedPathLoading() { if (isSearchUrl(url())) { // Search KIO-slaves usually don't provide any progress information. Give - // an immediate hint to the user that a searching is done: + // a hint to the user that a searching is done: updateStatusBar(); m_statusBar->setProgressText(i18nc("@info", "Searching...")); m_statusBar->setProgress(-1); + } else { + // Trigger an undetermined progress indication. The progress + // information in percent will be triggered by the percent() signal + // of the directory lister later. + updateProgress(-1); } - } - -void DolphinViewContainer::updateProgress(int percent) -{ - if (m_statusBar->progressText().isEmpty()) { - m_statusBar->setProgressText(i18nc("@info:progress", "Loading folder...")); - } - m_statusBar->setProgress(percent); } -void DolphinViewContainer::slotDirListerCompleted() +void DolphinViewContainer::slotFinishedPathLoading() { if (!m_statusBar->progressText().isEmpty()) { m_statusBar->setProgressText(QString()); diff --git a/src/dolphinviewcontainer.h b/src/dolphinviewcontainer.h index a780722ba..337452e5c 100644 --- a/src/dolphinviewcontainer.h +++ b/src/dolphinviewcontainer.h @@ -152,15 +152,19 @@ private slots: */ void updateStatusBar(); - void initializeProgress(); - void updateProgress(int percent); + /** + * Updates the statusbar to show an undetermined progress with the correct + * context information whether a searching or a directory loading is done. + */ + void slotStartedPathLoading(); + /** * Assures that the viewport position is restored and updates the * statusbar to reflect the current content. */ - void slotDirListerCompleted(); + void slotFinishedPathLoading(); /** * Handles clicking on an item. If the item is a directory, the diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index c2e998e5a..46f7acf13 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -528,16 +528,14 @@ void DolphinView::setUrl(const KUrl& url) m_viewModeController->setUrl(url); // emits urlChanged, which we forward m_viewAccessor.prepareUrlChange(url); applyViewProperties(); - loadDirectory(url); // When changing the URL there is no need to keep the version // data of the previous URL. m_viewAccessor.dirModel()->clearVersionData(); - emit startedPathLoading(url); - // Reconnect to the (probably) new selection model and directory lister connectViewAccessor(); + loadDirectory(url); if (hadSelection || hasSelection()) { emitSelectionChangedSignal(); @@ -1278,6 +1276,8 @@ void DolphinView::connectViewAccessor() KDirLister* dirLister = m_viewAccessor.dirLister(); connect(dirLister, SIGNAL(redirection(KUrl,KUrl)), this, SLOT(slotRedirection(KUrl,KUrl))); + connect(dirLister, SIGNAL(started(KUrl)), + this, SIGNAL(startedPathLoading(KUrl))); connect(dirLister, SIGNAL(completed()), this, SLOT(slotDirListerCompleted())); connect(dirLister, SIGNAL(refreshItems(const QList>&)), @@ -1293,6 +1293,8 @@ void DolphinView::disconnectViewAccessor() KDirLister* dirLister = m_viewAccessor.dirLister(); disconnect(dirLister, SIGNAL(redirection(KUrl,KUrl)), this, SLOT(slotRedirection(KUrl,KUrl))); + disconnect(dirLister, SIGNAL(started(KUrl)), + this, SIGNAL(startedPathLoading(KUrl))); disconnect(dirLister, SIGNAL(completed()), this, SLOT(slotDirListerCompleted())); disconnect(dirLister, SIGNAL(refreshItems(const QList>&)), -- 2.47.3