diff options
| author | Frank Reininghaus <[email protected]> | 2013-10-26 09:24:04 +0200 |
|---|---|---|
| committer | Frank Reininghaus <[email protected]> | 2013-10-26 09:24:04 +0200 |
| commit | f55119945f0edc369b53c64b45ae117dc73ff426 (patch) | |
| tree | 848d3f45981b8a73f2a4483bbcbd0dd1f9cfe3e6 /src | |
| parent | 96ba990d865b2dfb966961061ba5154dcd3187b4 (diff) | |
Fix broken view state restoration
The fix for bug 161385 (which was about Dolphin still showing an empty
view if a device that had been unmounted earlier was clicked in the
Places Panel) caused a regression: the view state (current item, scroll
position, Details View expansion state) was not restored any more when
going "Back".
The reason is that "m_view->reload()" in
DolphinViewContainer::setUrl(const KUrl& newUrl) was always executed
just after entering a directory, and that command overwrites this
information.
Distinguishing between "change URL" and "reload the view" works better
if it's done in DolphinMainWindow instead of DolphinViewContainer.
BUG: 326039
FIXED-IN: 4.11.3
REVIEW: 113290
Diffstat (limited to 'src')
| -rw-r--r-- | src/dolphinmainwindow.cpp | 15 | ||||
| -rw-r--r-- | src/dolphinmainwindow.h | 7 | ||||
| -rw-r--r-- | src/dolphinviewcontainer.cpp | 4 |
3 files changed, 21 insertions, 5 deletions
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index ccef356ea..9da73f96e 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -1417,6 +1417,19 @@ void DolphinMainWindow::slotPanelErrorMessage(const QString& error) activeViewContainer()->showMessage(error, DolphinViewContainer::Error); } +void DolphinMainWindow::slotPlaceActivated(const KUrl& url) +{ + DolphinViewContainer* view = activeViewContainer(); + + if (view->url() == url) { + // We can end up here if the user clicked a device in the Places Panel + // which had been unmounted earlier, see https://bugs.kde.org/show_bug.cgi?id=161385. + reloadView(); + } else { + changeUrl(url); + } +} + void DolphinMainWindow::setActiveViewContainer(DolphinViewContainer* viewContainer) { Q_ASSERT(viewContainer); @@ -1749,7 +1762,7 @@ void DolphinMainWindow::setupDockWidgets() addDockWidget(Qt::LeftDockWidgetArea, placesDock); connect(placesPanel, SIGNAL(placeActivated(KUrl)), - this, SLOT(changeUrl(KUrl))); + this, SLOT(slotPlaceActivated(KUrl))); connect(placesPanel, SIGNAL(placeMiddleClicked(KUrl)), this, SLOT(openNewTab(KUrl))); connect(placesPanel, SIGNAL(errorMessage(QString)), diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h index 7da5801ff..6b046c2ea 100644 --- a/src/dolphinmainwindow.h +++ b/src/dolphinmainwindow.h @@ -466,6 +466,13 @@ private slots: */ void slotPanelErrorMessage(const QString& error); + /** + * Is called if the user clicked an item in the Places Panel. + * Reloads the view if \a url is the current URL already, and changes the + * current URL otherwise. + */ + void slotPlaceActivated(const KUrl& url); + private: /** * Activates the given view, which means that diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index c8fc757ba..e7c571294 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -372,10 +372,6 @@ void DolphinViewContainer::setUrl(const KUrl& newUrl) { if (newUrl != m_urlNavigator->locationUrl()) { m_urlNavigator->setLocationUrl(newUrl); - } else if (m_view->itemsCount() == 0) { - // Maybe a previously unmounted device has been mounted again. - // Let's reload the view to be safe (see https://bugs.kde.org/show_bug.cgi?id=161385). - m_view->reload(); } #ifdef KActivities_FOUND |
