mirror of
https://invent.kde.org/system/dolphin
synced 2024-10-28 03:21:56 +00:00
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
This commit is contained in:
parent
1501825d44
commit
ae1d441dac
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue