From a2737fd8ee243b19080acdda891efb44674808e3 Mon Sep 17 00:00:00 2001 From: Soren Stoutner Date: Wed, 27 Dec 2023 17:38:27 -0700 Subject: [PATCH] Open new tabs adjacent to the current tab. https://redmine.stoutner.com/issues/1110 --- src/widgets/PrivacyWebEngineView.cpp | 9 +++++---- src/widgets/TabWidget.cpp | 10 ++++++++-- src/widgets/TabWidget.h | 2 +- src/windows/BrowserWindow.cpp | 24 ++++++++++++------------ 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/widgets/PrivacyWebEngineView.cpp b/src/widgets/PrivacyWebEngineView.cpp index 8f61f91..05c7659 100644 --- a/src/widgets/PrivacyWebEngineView.cpp +++ b/src/widgets/PrivacyWebEngineView.cpp @@ -259,9 +259,9 @@ QWebEngineView* PrivacyWebEngineView::createWindow(QWebEnginePage::WebWindowType { case QWebEnginePage::WebBrowserTab: { - // Create the new tab and return the privacy WebEngine view pointer. `true` removes the focus from the blank URL line edit. + // Create the new tab and return the privacy WebEngine view pointer. `true` removes the focus from the blank URL line edit. `true` adds the new tab adjacent to the current tab. // The new privacy WebEngine view pointer is returned so it can be populated with the link from the context menu. - return browserWindowPointer->tabWidgetPointer->addTab(true); + return browserWindowPointer->tabWidgetPointer->addTab(true, true); } case QWebEnginePage::WebBrowserWindow: @@ -278,9 +278,10 @@ QWebEngineView* PrivacyWebEngineView::createWindow(QWebEnginePage::WebWindowType case QWebEnginePage::WebBrowserBackgroundTab: { - // Create the new tab and return the privacy WebEngine view pointer. `false` does not clear the URL line edit. `true` creates a background tab. + // Create the new tab and return the privacy WebEngine view pointer. `false` does not clear the URL line edit. `true` adds the new tab adjacent to the current tab. + // `true` creates a background tab. // The new privacy WebEngine view pointer is returned so it can be populated with the link from the context menu. - return browserWindowPointer->tabWidgetPointer->addTab(false, true); + return browserWindowPointer->tabWidgetPointer->addTab(false, true, true); } default: diff --git a/src/widgets/TabWidget.cpp b/src/widgets/TabWidget.cpp index bd3882d..efd677d 100644 --- a/src/widgets/TabWidget.cpp +++ b/src/widgets/TabWidget.cpp @@ -178,7 +178,7 @@ void TabWidget::addFirstTab() qTabWidgetPointer->currentWidget()->setFocus(); } -PrivacyWebEngineView* TabWidget::addTab(const bool removeUrlLineEditFocus, const bool backgroundTab, const QString urlString) +PrivacyWebEngineView* TabWidget::addTab(const bool removeUrlLineEditFocus, const bool adjacent, const bool backgroundTab, const QString urlString) { // Create a splitter widget. QSplitter *splitterPointer = new QSplitter(); @@ -197,8 +197,14 @@ PrivacyWebEngineView* TabWidget::addTab(const bool removeUrlLineEditFocus, const splitterPointer->addWidget(privacyWebEngineViewPointer); splitterPointer->addWidget(devToolsWebEngineViewPointer); + // Initialize the new tab index. + int newTabIndex = 0; + // Add a new tab. - int newTabIndex = qTabWidgetPointer->addTab(splitterPointer, i18nc("New tab label.", "New Tab")); + if (adjacent) // Add the new tab adjacent to the current tab. + newTabIndex = qTabWidgetPointer->insertTab((qTabWidgetPointer->currentIndex() + 1), splitterPointer, i18nc("New tab label.", "New Tab")); + else // Add the new tab at the end of the list. + newTabIndex = qTabWidgetPointer->addTab(splitterPointer, i18nc("New tab label.", "New Tab")); // Set the default tab icon. qTabWidgetPointer->setTabIcon(newTabIndex, defaultFavoriteIcon); diff --git a/src/widgets/TabWidget.h b/src/widgets/TabWidget.h index 4cbfe97..e47370c 100644 --- a/src/widgets/TabWidget.h +++ b/src/widgets/TabWidget.h @@ -100,7 +100,7 @@ signals: public Q_SLOTS: // The public slots. void addCookieToStore(QNetworkCookie cookie, QWebEngineCookieStore *webEngineCookieStorePointer = nullptr) const; - PrivacyWebEngineView* addTab(const bool removeUrlLineEditFocus = false, const bool backgroundTab = false, const QString urlString = nullptr); + PrivacyWebEngineView* addTab(const bool removeUrlLineEditFocus = false, const bool adjacent = false, const bool backgroundTab = false, const QString urlString = nullptr); void applyApplicationSettings(); void applyDomainSettingsAndReload(); void applyOnTheFlySearchEngine(QAction *searchEngineActionPointer); diff --git a/src/windows/BrowserWindow.cpp b/src/windows/BrowserWindow.cpp index 99fc2fa..394340b 100644 --- a/src/windows/BrowserWindow.cpp +++ b/src/windows/BrowserWindow.cpp @@ -625,9 +625,9 @@ void BrowserWindow::addFinalBookmarkFolderMenuActions(QMenu *menuPointer, double // Get all the folder URLs. QList *folderUrlsListPointer = BookmarksDatabase::getAllFolderUrls(folderId); - // Open the URLs in new tabs. `true` removes the URL line edit focus, `false` does not load a background tab. + // Open the URLs in new tabs. `true` removes the URL line edit focus, `true` opens the new tabs in an adjacent tab. `false` does not load a background tab. for (QString url : *folderUrlsListPointer) - tabWidgetPointer->addTab(true, false, url); + tabWidgetPointer->addTab(true, true, false, url); } ); @@ -638,9 +638,9 @@ void BrowserWindow::addFinalBookmarkFolderMenuActions(QMenu *menuPointer, double // Get all the folder URLs. QList *folderUrlsListPointer = BookmarksDatabase::getAllFolderUrls(folderId); - // Open the URLs in new tabs. `true` removes the URL line edit focus, `true` loads a background tab. + // Open the URLs in new tabs. `true` removes the URL line edit focus, `true` opens the new tabs in an adjacent tab. `true` loads a background tab. for (QString url : *folderUrlsListPointer) - tabWidgetPointer->addTab(true, true, url); + tabWidgetPointer->addTab(true, true, true, url); } ); @@ -656,9 +656,9 @@ void BrowserWindow::addFinalBookmarkFolderMenuActions(QMenu *menuPointer, double // Get a count of the folder URLs. const int folderUrls = folderUrlsListPointer->count(); - // Load all the other URLs. `true` removes the URL line edit focus, `true` loads a background tab. + // Load all the other URLs. `true` removes the URL line edit focus, `false` does not load the new tabs in adjacent tabs. `true` loads a background tab. for (int i = 1; i < folderUrls; ++i) - browserWindowPointer->tabWidgetPointer->addTab(true, true, folderUrlsListPointer->value(i)); + browserWindowPointer->tabWidgetPointer->addTab(true, false, true, folderUrlsListPointer->value(i)); // Show the new browser window. browserWindowPointer->show(); @@ -1322,8 +1322,8 @@ void BrowserWindow::showBookmarkContextMenu(const QPoint &point) // Get the bookmark. BookmarkStruct *bookmarkStructPointer = BookmarksDatabase::getBookmark(databaseId); - // Open the bookmark in a new tab. `true` removes the URL line edit focus, `false` does not load a background tab. - tabWidgetPointer->addTab(true, false, bookmarkStructPointer->url); + // Open the bookmark in a new tab. `true` removes the URL line edit focus, `true` opens the new tab in an adjacent tab. `false` does not load a background tab. + tabWidgetPointer->addTab(true, true, false, bookmarkStructPointer->url); } ); @@ -1333,8 +1333,8 @@ void BrowserWindow::showBookmarkContextMenu(const QPoint &point) // Get the bookmark. BookmarkStruct *bookmarkStructPointer = BookmarksDatabase::getBookmark(databaseId); - // Open the bookmark in a new tab. `true` removes the URL line edit focus, `true` loads a background tab. - tabWidgetPointer->addTab(true, true, bookmarkStructPointer->url); + // Open the bookmark in a new tab. `true` removes the URL line edit focus, `true` opens the new tab in an adjacent tab. `true` loads a background tab. + tabWidgetPointer->addTab(true, true, true, bookmarkStructPointer->url); } ); @@ -1823,8 +1823,8 @@ void BrowserWindow::toggleViewSourceInNewTab() const url = url.prepend(QLatin1String("view-source:")); } - // Add the new tab. `true` removes the URL line edit focus, `false` does not open a background tab. - tabWidgetPointer->addTab(true, false, url); + // Add the new tab. `true` removes the URL line edit focus, `true` opens the new tab in an adjacent tab. `false` does not open a background tab. + tabWidgetPointer->addTab(true, true, false, url); } void BrowserWindow::updateBookmarkedAction() const -- 2.43.0