X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/47a5071fc9eace09cdc9e4e89eacda06fb893194..70656d08f95eee66d6af85a1d015dff856a459d0:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 8bc890f04..e755e7281 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -204,13 +204,32 @@ DolphinMainWindow::~DolphinMainWindow() QVector DolphinMainWindow::viewContainers() const { QVector viewContainers; - viewContainers.reserve(m_tabWidget->count()); + for (int i = 0; i < m_tabWidget->count(); ++i) { - viewContainers << m_tabWidget->tabPageAt(i)->activeViewContainer(); + DolphinTabPage *tabPage = m_tabWidget->tabPageAt(i); + + viewContainers << tabPage->primaryViewContainer(); + if (tabPage->splitViewEnabled()) { + viewContainers << tabPage->secondaryViewContainer(); + } } return viewContainers; } +void DolphinMainWindow::setViewsWithInvalidPathsToHome() +{ + const QVector theViewContainers = viewContainers(); + for (DolphinViewContainer *viewContainer : theViewContainers) { + + // Only consider local dirs, not remote locations and abstract protocols + if (viewContainer->url().isLocalFile()) { + if (!QFileInfo::exists(viewContainer->url().toLocalFile())) { + viewContainer->setUrl(QUrl::fromLocalFile(QDir::homePath())); + } + } + } +} + void DolphinMainWindow::openDirectories(const QList& dirs, bool splitView) { m_tabWidget->openDirectories(dirs, splitView); @@ -287,7 +306,7 @@ void DolphinMainWindow::changeUrl(const QUrl &url) updateViewActions(); updateGoActions(); - emit urlChanged(url); + Q_EMIT urlChanged(url); } void DolphinMainWindow::slotTerminalDirectoryChanged(const QUrl& url) @@ -322,7 +341,7 @@ void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection) compareFilesAction->setEnabled(false); } - emit selectionChanged(selection); + Q_EMIT selectionChanged(selection); } void DolphinMainWindow::updateHistory() @@ -408,7 +427,7 @@ void DolphinMainWindow::openInNewTab() const KFileItemList& list = m_activeViewContainer->view()->selectedItems(); bool tabCreated = false; - foreach (const KFileItem& item, list) { + for (const KFileItem& item : list) { const QUrl& url = DolphinView::openItemAsFolderUrl(item); if (!url.isEmpty()) { openNewTabAfterCurrentTab(url); @@ -842,7 +861,8 @@ void DolphinMainWindow::replaceLocation() void DolphinMainWindow::togglePanelLockState() { const bool newLockState = !GeneralSettings::lockPanels(); - foreach (QObject* child, children()) { + const auto childrenObjects = children(); + for (QObject* child : childrenObjects) { DolphinDockWidget* dock = qobject_cast(child); if (dock) { dock->setLocked(newLockState); @@ -1242,7 +1262,7 @@ void DolphinMainWindow::activeViewChanged(DolphinViewContainer* viewContainer) updateSearchAction(); const QUrl url = viewContainer->url(); - emit urlChanged(url); + Q_EMIT urlChanged(url); } void DolphinMainWindow::tabCountChanged(int count) @@ -1266,6 +1286,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(); @@ -1277,12 +1301,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 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 @@ -2045,7 +2084,8 @@ bool DolphinMainWindow::addActionToMenu(QAction* action, QMenu* menu) Q_ASSERT(menu); const KToolBar* toolBarWidget = toolBar(); - foreach (const QWidget* widget, action->associatedWidgets()) { + const auto associatedWidgets = action->associatedWidgets(); + for (const QWidget* widget : associatedWidgets) { if (widget == toolBarWidget) { return false; } @@ -2068,7 +2108,7 @@ void DolphinMainWindow::refreshViews() updateWindowTitle(); } - emit settingsChanged(); + Q_EMIT settingsChanged(); } void DolphinMainWindow::clearStatusBar()