From a73e81bf6af745623e7e92ba012522e34b2a312a Mon Sep 17 00:00:00 2001 From: Anthony Fieroni Date: Sat, 12 Dec 2020 15:17:23 +0200 Subject: [PATCH] Open new tab placement option Signed-off-by: Anthony Fieroni --- src/dolphinbookmarkhandler.cpp | 2 +- src/dolphinmainwindow.cpp | 40 ++++++++----------- src/dolphinmainwindow.h | 14 +------ src/dolphintabwidget.cpp | 10 +++-- src/dolphintabwidget.h | 19 +-------- src/settings/dolphin_generalsettings.kcfg | 4 ++ .../navigation/navigationsettingspage.cpp | 37 ++++++++++++----- .../navigation/navigationsettingspage.h | 3 ++ src/views/dolphinview.cpp | 6 +-- src/views/dolphinview.h | 2 +- 10 files changed, 66 insertions(+), 71 deletions(-) diff --git a/src/dolphinbookmarkhandler.cpp b/src/dolphinbookmarkhandler.cpp index be4f447d86..bb3bf08fb0 100644 --- a/src/dolphinbookmarkhandler.cpp +++ b/src/dolphinbookmarkhandler.cpp @@ -98,7 +98,7 @@ void DolphinBookmarkHandler::openFolderinTabs(const KBookmarkGroup& bookmarkGrou void DolphinBookmarkHandler::openInNewTab(const KBookmark& bookmark) { - m_mainWindow->openNewTabAfterCurrentTab(bookmark.url()); + m_mainWindow->openNewTab(bookmark.url()); } void DolphinBookmarkHandler::openInNewWindow(const KBookmark& bookmark) diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 3377918cee..8816164801 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -393,7 +393,11 @@ void DolphinMainWindow::openNewMainWindow() void DolphinMainWindow::openNewActivatedTab() { + // keep browsers compatibility, new tab is always after last one + auto openNewTabAfterLastTabConfigured = GeneralSettings::openNewTabAfterLastTab(); + GeneralSettings::setOpenNewTabAfterLastTab(true); m_tabWidget->openNewActivatedTab(); + GeneralSettings::setOpenNewTabAfterLastTab(openNewTabAfterLastTabConfigured); } void DolphinMainWindow::addToPlaces() @@ -422,19 +426,9 @@ void DolphinMainWindow::addToPlaces() } } -void DolphinMainWindow::openNewTab(const QUrl& url, DolphinTabWidget::TabPlacement tabPlacement) +void DolphinMainWindow::openNewTab(const QUrl& url) { - m_tabWidget->openNewTab(url, QUrl(), tabPlacement); -} - -void DolphinMainWindow::openNewTabAfterCurrentTab(const QUrl& url) -{ - m_tabWidget->openNewTab(url, QUrl(), DolphinTabWidget::AfterCurrentTab); -} - -void DolphinMainWindow::openNewTabAfterLastTab(const QUrl& url) -{ - m_tabWidget->openNewTab(url, QUrl(), DolphinTabWidget::AfterLastTab); + m_tabWidget->openNewTab(url, QUrl()); } void DolphinMainWindow::openInNewTab() @@ -445,7 +439,7 @@ void DolphinMainWindow::openInNewTab() for (const KFileItem& item : list) { const QUrl& url = DolphinView::openItemAsFolderUrl(item); if (!url.isEmpty()) { - openNewTabAfterCurrentTab(url); + openNewTab(url); tabCreated = true; } } @@ -453,7 +447,7 @@ void DolphinMainWindow::openInNewTab() // if no new tab has been created from the selection // open the current directory in a new tab if (!tabCreated) { - openNewTabAfterCurrentTab(m_activeViewContainer->url()); + openNewTab(m_activeViewContainer->url()); } } @@ -755,7 +749,7 @@ void DolphinMainWindow::slotBackForwardActionMiddleClicked(QAction* action) { if (action) { const KUrlNavigator *urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory(); - openNewTabAfterCurrentTab(urlNavigator->locationUrl(action->data().value())); + openNewTab(urlNavigator->locationUrl(action->data().value())); } } @@ -934,25 +928,25 @@ void DolphinMainWindow::goBackInNewTab() { const KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory(); const int index = urlNavigator->historyIndex() + 1; - openNewTabAfterCurrentTab(urlNavigator->locationUrl(index)); + openNewTab(urlNavigator->locationUrl(index)); } void DolphinMainWindow::goForwardInNewTab() { const KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory(); const int index = urlNavigator->historyIndex() - 1; - openNewTabAfterCurrentTab(urlNavigator->locationUrl(index)); + openNewTab(urlNavigator->locationUrl(index)); } void DolphinMainWindow::goUpInNewTab() { const QUrl currentUrl = activeViewContainer()->urlNavigator()->locationUrl(); - openNewTabAfterCurrentTab(KIO::upUrl(currentUrl)); + openNewTab(KIO::upUrl(currentUrl)); } void DolphinMainWindow::goHomeInNewTab() { - openNewTabAfterCurrentTab(Dolphin::homeUrl()); + openNewTab(Dolphin::homeUrl()); } void DolphinMainWindow::compareFiles() @@ -1139,7 +1133,7 @@ void DolphinMainWindow::openContextMenu(const QPoint& pos, break; case DolphinContextMenu::OpenParentFolderInNewTab: - openNewTabAfterLastTab(KIO::upUrl(item.url())); + openNewTab(KIO::upUrl(item.url())); break; case DolphinContextMenu::None: @@ -1828,7 +1822,7 @@ void DolphinMainWindow::setupDockWidgets() connect(foldersPanel, &FoldersPanel::folderActivated, this, &DolphinMainWindow::changeUrl); connect(foldersPanel, &FoldersPanel::folderMiddleClicked, - this, &DolphinMainWindow::openNewTabAfterCurrentTab); + this, &DolphinMainWindow::openNewTab); connect(foldersPanel, &FoldersPanel::errorMessage, this, &DolphinMainWindow::showErrorMessage); @@ -1911,7 +1905,7 @@ void DolphinMainWindow::setupDockWidgets() connect(m_placesPanel, &PlacesPanel::placeActivated, this, &DolphinMainWindow::slotPlaceActivated); connect(m_placesPanel, &PlacesPanel::placeMiddleClicked, - this, &DolphinMainWindow::openNewTabAfterCurrentTab); + this, &DolphinMainWindow::openNewTab); connect(m_placesPanel, &PlacesPanel::errorMessage, this, &DolphinMainWindow::showErrorMessage); connect(this, &DolphinMainWindow::urlChanged, @@ -2206,7 +2200,7 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container) connect(navigator, &KUrlNavigator::editableStateChanged, this, &DolphinMainWindow::slotEditableStateChanged); connect(navigator, &KUrlNavigator::tabRequested, - this, &DolphinMainWindow::openNewTabAfterLastTab); + this, &DolphinMainWindow::openNewTab); disconnect(m_updateHistoryConnection); m_updateHistoryConnection = connect( diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h index 8e031fd032..883d92b699 100644 --- a/src/dolphinmainwindow.h +++ b/src/dolphinmainwindow.h @@ -170,14 +170,9 @@ public slots: void quit(); /** - * Opens a new tab and places it after the current tab + * Opens a new tab in the background showing the URL \a url. */ - void openNewTabAfterCurrentTab(const QUrl& url); - - /** - * Opens a new tab and places it as the last tab - */ - void openNewTabAfterLastTab(const QUrl& url); + void openNewTab(const QUrl& url); signals: /** @@ -417,11 +412,6 @@ private slots: */ void addToPlaces(); - /** - * Opens a new tab in the background showing the URL \a url. - */ - void openNewTab(const QUrl& url, DolphinTabWidget::TabPlacement tabPlacement); - /** * Opens the selected folder in a new tab. */ diff --git a/src/dolphintabwidget.cpp b/src/dolphintabwidget.cpp index da8f76d7c4..d61a9f74f5 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)); diff --git a/src/dolphintabwidget.h b/src/dolphintabwidget.h index 4a1b9d99c1..fbfe283026 100644 --- a/src/dolphintabwidget.h +++ b/src/dolphintabwidget.h @@ -21,19 +21,6 @@ class DolphinTabWidget : public QTabWidget Q_OBJECT public: - /** - * @brief Controls where tabs are placed - */ - enum TabPlacement { - /** - * The new tab is placed after the current tab - */ - AfterCurrentTab, - /** - * The new tab is placed after the last tab - */ - AfterLastTab - }; /** * @param navigatorsWidget The navigatorsWidget which is always going to be connected @@ -118,11 +105,9 @@ public slots: /** * Opens a new tab in the background showing the URL \a primaryUrl and the - * optional URL \a secondaryUrl. \a tabPlacement controls where the new tab - * is placed. + * optional URL \a secondaryUrl. */ - void openNewTab(const QUrl &primaryUrl, const QUrl &secondaryUrl = QUrl(), - DolphinTabWidget::TabPlacement tabPlacement = AfterLastTab); + void openNewTab(const QUrl &primaryUrl, const QUrl &secondaryUrl = QUrl()); /** * Opens each directory in \p dirs in a separate tab. If \a splitView is set, diff --git a/src/settings/dolphin_generalsettings.kcfg b/src/settings/dolphin_generalsettings.kcfg index 0ec5f282bc..bc1cf72aab 100644 --- a/src/settings/dolphin_generalsettings.kcfg +++ b/src/settings/dolphin_generalsettings.kcfg @@ -86,6 +86,10 @@ true + + + false + false diff --git a/src/settings/navigation/navigationsettingspage.cpp b/src/settings/navigation/navigationsettingspage.cpp index 41a39a5379..11bc25f3b6 100644 --- a/src/settings/navigation/navigationsettingspage.cpp +++ b/src/settings/navigation/navigationsettingspage.cpp @@ -6,36 +6,48 @@ #include "navigationsettingspage.h" +#include "global.h" #include "dolphin_generalsettings.h" #include +#include #include +#include +#include #include NavigationSettingsPage::NavigationSettingsPage(QWidget* parent) : SettingsPageBase(parent), m_openArchivesAsFolder(nullptr), - m_autoExpandFolders(nullptr) + m_autoExpandFolders(nullptr), + m_openNewTabAfterLastTab(nullptr), + m_openNewTabAfterCurrentTab(nullptr) { - QVBoxLayout* topLayout = new QVBoxLayout(this); - QWidget* vBox = new QWidget(this); - QVBoxLayout *vBoxLayout = new QVBoxLayout(vBox); - vBoxLayout->setContentsMargins(0, 0, 0, 0); - vBoxLayout->setAlignment(Qt::AlignTop); + QFormLayout* topLayout = new QFormLayout(this); - m_openArchivesAsFolder = new QCheckBox(i18nc("@option:check", "Open archives as folder"), vBox); - vBoxLayout->addWidget(m_openArchivesAsFolder); + // Tabs properties + m_openNewTabAfterCurrentTab = new QRadioButton(i18nc("option:radio", "After current tab")); + m_openNewTabAfterLastTab = new QRadioButton(i18nc("option:radio", "At end of tab bar")); + QButtonGroup* tabsBehaviorGroup = new QButtonGroup(this); + tabsBehaviorGroup->addButton(m_openNewTabAfterCurrentTab); + tabsBehaviorGroup->addButton(m_openNewTabAfterLastTab); + topLayout->addRow(i18nc("@title:group", "Open new tabs: "), m_openNewTabAfterCurrentTab); + topLayout->addRow(QString(), m_openNewTabAfterLastTab); - m_autoExpandFolders = new QCheckBox(i18nc("option:check", "Open folders during drag operations"), vBox); - vBoxLayout->addWidget(m_autoExpandFolders); + topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed)); - topLayout->addWidget(vBox); + m_openArchivesAsFolder = new QCheckBox(i18nc("@option:check", "Open archives as folder")); + m_autoExpandFolders = new QCheckBox(i18nc("option:check", "Open folders during drag operations")); + topLayout->addRow(i18nc("@title:group", "General: "), m_openArchivesAsFolder); + topLayout->addRow(QString(), m_autoExpandFolders); loadSettings(); connect(m_openArchivesAsFolder, &QCheckBox::toggled, this, &NavigationSettingsPage::changed); connect(m_autoExpandFolders, &QCheckBox::toggled, this, &NavigationSettingsPage::changed); + connect(m_openNewTabAfterCurrentTab, &QRadioButton::toggled, this, &NavigationSettingsPage::changed); + connect(m_openNewTabAfterLastTab, &QRadioButton::toggled, this, &NavigationSettingsPage::changed); } NavigationSettingsPage::~NavigationSettingsPage() @@ -47,6 +59,7 @@ void NavigationSettingsPage::applySettings() GeneralSettings* settings = GeneralSettings::self(); settings->setBrowseThroughArchives(m_openArchivesAsFolder->isChecked()); settings->setAutoExpandFolders(m_autoExpandFolders->isChecked()); + settings->setOpenNewTabAfterLastTab(m_openNewTabAfterLastTab->isChecked()); settings->save(); } @@ -63,5 +76,7 @@ void NavigationSettingsPage::loadSettings() { m_openArchivesAsFolder->setChecked(GeneralSettings::browseThroughArchives()); m_autoExpandFolders->setChecked(GeneralSettings::autoExpandFolders()); + m_openNewTabAfterLastTab->setChecked(GeneralSettings::openNewTabAfterLastTab()); + m_openNewTabAfterCurrentTab->setChecked(!m_openNewTabAfterLastTab->isChecked()); } diff --git a/src/settings/navigation/navigationsettingspage.h b/src/settings/navigation/navigationsettingspage.h index 8b4781b447..a0c75e7f5d 100644 --- a/src/settings/navigation/navigationsettingspage.h +++ b/src/settings/navigation/navigationsettingspage.h @@ -9,6 +9,7 @@ #include "settings/settingspagebase.h" class QCheckBox; +class QRadioButton; /** * @brief Page for the 'Navigation' settings of the Dolphin settings dialog. @@ -33,6 +34,8 @@ private: private: QCheckBox* m_openArchivesAsFolder; QCheckBox* m_autoExpandFolders; + QRadioButton* m_openNewTabAfterLastTab; + QRadioButton* m_openNewTabAfterCurrentTab; }; #endif diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index 71c16bf46d..5ceed9c3ed 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -945,7 +945,7 @@ void DolphinView::slotItemsActivated(const KItemSet& indexes) const QUrl& url = openItemAsFolderUrl(item); if (!url.isEmpty()) { // Open folders in new tabs - Q_EMIT tabRequested(url, DolphinTabWidget::AfterLastTab); + Q_EMIT tabRequested(url); } else { items.append(item); } @@ -963,9 +963,9 @@ void DolphinView::slotItemMiddleClicked(int index) const KFileItem& item = m_model->fileItem(index); const QUrl& url = openItemAsFolderUrl(item); if (!url.isEmpty()) { - Q_EMIT tabRequested(url, DolphinTabWidget::AfterCurrentTab); + Q_EMIT tabRequested(url); } else if (isTabsForFilesEnabled()) { - Q_EMIT tabRequested(item.url(), DolphinTabWidget::AfterCurrentTab); + Q_EMIT tabRequested(item.url()); } } diff --git a/src/views/dolphinview.h b/src/views/dolphinview.h index cc34097324..5dd65eb54f 100644 --- a/src/views/dolphinview.h +++ b/src/views/dolphinview.h @@ -433,7 +433,7 @@ signals: /** * Is emitted if a new tab should be opened for the URL \a url. */ - void tabRequested(const QUrl& url, DolphinTabWidget::TabPlacement tabPlacement); + void tabRequested(const QUrl& url); /** * Is emitted if the view mode (IconsView, DetailsView,