- const KUrl& primaryUrl = *(it++);
- if (hasSplitView && (it != dirs.constEnd())) {
- const KUrl& secondaryUrl = *(it++);
- openNewTab(primaryUrl, secondaryUrl);
+ const QUrl& primaryUrl = *(it++);
+ const QPair<int, bool> 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) {
+ somethingWasAlreadyOpen = true;
+ activateTab(index);
+ const auto tabPage = tabPageAt(index);
+ if (isInPrimaryView) {
+ tabPage->primaryViewContainer()->setActive(true);
+ } else {
+ tabPage->secondaryViewContainer()->setActive(true);
+ }
+ // BUG: 417230
+ // 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();
+ } else if (splitView && (it != dirs.constEnd())) {
+ const QUrl& secondaryUrl = *(it++);
+ if (somethingWasAlreadyOpen) {
+ openNewTab(primaryUrl, secondaryUrl);
+ } else {
+ openNewActivatedTab(primaryUrl, secondaryUrl);
+ }