mirror of
https://invent.kde.org/system/dolphin
synced 2024-11-05 18:47:12 +00:00
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
This commit is contained in:
parent
3b5eb11415
commit
ec4efae642
3 changed files with 21 additions and 5 deletions
|
@ -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)),
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue