X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/63f4981fe01d88b2ef1b27e0577d7f5d4c8cc485..9e8e58147:/src/dolphintabwidget.cpp diff --git a/src/dolphintabwidget.cpp b/src/dolphintabwidget.cpp index da8f76d7c..17fa0ff4e 100644 --- a/src/dolphintabwidget.cpp +++ b/src/dolphintabwidget.cpp @@ -152,10 +152,14 @@ void DolphinTabWidget::openNewActivatedTab() void DolphinTabWidget::openNewActivatedTab(const QUrl& primaryUrl, const QUrl& secondaryUrl) { openNewTab(primaryUrl, secondaryUrl); - setCurrentIndex(count() - 1); + if (GeneralSettings::openNewTabAfterLastTab()) { + setCurrentIndex(count() - 1); + } else { + setCurrentIndex(currentIndex() + 1); + } } -void DolphinTabWidget::openNewTab(const QUrl& primaryUrl, const QUrl& secondaryUrl, TabPlacement tabPlacement) +void DolphinTabWidget::openNewTab(const QUrl& primaryUrl, const QUrl& secondaryUrl) { QWidget* focusWidget = QApplication::focusWidget(); @@ -166,7 +170,7 @@ void DolphinTabWidget::openNewTab(const QUrl& primaryUrl, const QUrl& secondaryU connect(tabPage, &DolphinTabPage::activeViewUrlChanged, this, &DolphinTabWidget::tabUrlChanged); int newTabIndex = -1; - if (tabPlacement == AfterCurrentTab) { + if (!GeneralSettings::openNewTabAfterLastTab()) { newTabIndex = currentIndex() + 1; } insertTab(newTabIndex, tabPage, QIcon() /* loaded in tabInserted */, tabName(tabPage)); @@ -182,14 +186,20 @@ void DolphinTabWidget::openDirectories(const QList& dirs, bool splitView) { Q_ASSERT(dirs.size() > 0); + bool somethingWasAlreadyOpen = false; + QList::const_iterator it = dirs.constBegin(); while (it != dirs.constEnd()) { const QUrl& primaryUrl = *(it++); const QPair indexInfo = indexByUrl(primaryUrl); const int index = indexInfo.first; const bool isInPrimaryView = indexInfo.second; + + // When the user asks for a URL that's already open, activate it instead + // of opening a second copy if (index >= 0) { - setCurrentIndex(index); + somethingWasAlreadyOpen = true; + activateTab(index); const auto tabPage = tabPageAt(index); if (isInPrimaryView) { tabPage->primaryViewContainer()->setActive(true); @@ -200,13 +210,19 @@ void DolphinTabWidget::openDirectories(const QList& dirs, bool splitView) // Required for updateViewState() call in openFiles() to work as expected // If there is a selection, updateViewState() calls are effectively a no-op tabPage->activeViewContainer()->view()->clearSelection(); - continue; - } - if (splitView && (it != dirs.constEnd())) { + } else if (splitView) { const QUrl& secondaryUrl = *(it++); - openNewActivatedTab(primaryUrl, secondaryUrl); + if (somethingWasAlreadyOpen) { + openNewTab(primaryUrl, secondaryUrl); + } else { + openNewActivatedTab(primaryUrl, secondaryUrl); + } } else { - openNewActivatedTab(primaryUrl); + if (somethingWasAlreadyOpen) { + openNewTab(primaryUrl); + } else { + openNewActivatedTab(primaryUrl); + } } } }