Commit ae1d441d authored by Nate Graham's avatar Nate Graham 🔩 Committed by Elvis Angelaccio
Browse files

Show home folder if needed after unmounting mounted disk

Right now, when you unmount a device that any active view containers are
displaying, nothing in the view changes. As a result, it's possible to
try to navigate to files or folders in that view, which cannot be done
because the disk that the files or folders are located on has been
unmounted!

With this commit, we detect that case and switch the view containers
to show the home folder after the disk whose contents they are displaying
gets unmounted.

BUG: 158934
FIXED-IN: 20.12
parent 1501825d
......@@ -1271,6 +1271,10 @@ void DolphinMainWindow::updateWindowTitle()
void DolphinMainWindow::slotStorageTearDownFromPlacesRequested(const QString& mountPath)
{
connect(m_placesPanel, &PlacesPanel::storageTearDownSuccessful, this, [this, mountPath]() {
setViewsToHomeIfMountPathOpen(mountPath);
});
if (m_terminalPanel && m_terminalPanel->currentWorkingDirectory().startsWith(mountPath)) {
m_tearDownFromPlacesRequested = true;
m_terminalPanel->goHome();
......@@ -1282,12 +1286,27 @@ void DolphinMainWindow::slotStorageTearDownFromPlacesRequested(const QString& mo
void DolphinMainWindow::slotStorageTearDownExternallyRequested(const QString& mountPath)
{
connect(m_placesPanel, &PlacesPanel::storageTearDownSuccessful, this, [this, mountPath]() {
setViewsToHomeIfMountPathOpen(mountPath);
});
if (m_terminalPanel && m_terminalPanel->currentWorkingDirectory().startsWith(mountPath)) {
m_tearDownFromPlacesRequested = false;
m_terminalPanel->goHome();
}
}
void DolphinMainWindow::setViewsToHomeIfMountPathOpen(const QString& mountPath)
{
const QVector<DolphinViewContainer*> theViewContainers = viewContainers();
for (DolphinViewContainer *viewContainer : theViewContainers) {
if (viewContainer && viewContainer->url().toLocalFile().startsWith(mountPath)) {
viewContainer->setUrl(QUrl::fromLocalFile(QDir::homePath()));
}
}
disconnect(m_placesPanel, &PlacesPanel::storageTearDownSuccessful, nullptr, nullptr);
}
void DolphinMainWindow::setupActions()
{
// setup 'File' menu
......
......@@ -92,7 +92,15 @@ public:
*/
KNewFileMenu* newFileMenu() const;
void setTabsToHomeIfMountPathOpen(const QString& mountPath);
/**
* Switch the window's view containers' locations to display the home path
* for any which are currently displaying a location corresponding to or
* within mountPath.
*
* This typically done after unmounting a disk at mountPath to ensure that
* the window is not displaying an invalid location.
*/
void setViewsToHomeIfMountPathOpen(const QString& mountPath);
public slots:
/**
......
......@@ -473,6 +473,9 @@ void PlacesItemModel::slotStorageTearDownDone(Solid::ErrorType error, const QVar
} else {
emit errorMessage(errorData.toString());
}
} else {
// No error; it must have been unmounted successfully
emit storageTearDownSuccessful();
}
disconnect(m_deviceToTearDown, &Solid::StorageAccess::teardownDone,
this, &PlacesItemModel::slotStorageTearDownDone);
......
......@@ -130,6 +130,7 @@ signals:
void storageSetupDone(int index, bool success);
void storageTearDownRequested(const QString& mountPath);
void storageTearDownExternallyRequested(const QString& mountPath);
void storageTearDownSuccessful();
protected:
void onItemInserted(int index) override;
......
......@@ -104,6 +104,8 @@ void PlacesPanel::showEvent(QShowEvent* event)
this, &PlacesPanel::storageTearDownRequested);
connect(m_model, &PlacesItemModel::storageTearDownExternallyRequested,
this, &PlacesPanel::storageTearDownExternallyRequested);
connect(m_model, &PlacesItemModel::storageTearDownSuccessful,
this, &PlacesPanel::storageTearDownSuccessful);
m_view = new PlacesView();
m_view->setWidgetCreator(new KItemListWidgetCreator<PlacesItemListWidget>());
......
......@@ -37,6 +37,7 @@ signals:
void storageTearDownRequested(const QString& mountPath);
void storageTearDownExternallyRequested(const QString& mountPath);
void showHiddenEntriesChanged(bool shown);
void storageTearDownSuccessful();
protected:
bool urlChanged() override;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment