Open new tab placement option

Signed-off-by: Anthony Fieroni <bvbfan@abv.bg>
This commit is contained in:
Anthony Fieroni 2020-12-12 15:17:23 +02:00 committed by Elvis Angelaccio
parent eb4b0fb480
commit a73e81bf6a
10 changed files with 66 additions and 71 deletions

View file

@ -98,7 +98,7 @@ void DolphinBookmarkHandler::openFolderinTabs(const KBookmarkGroup& bookmarkGrou
void DolphinBookmarkHandler::openInNewTab(const KBookmark& bookmark) void DolphinBookmarkHandler::openInNewTab(const KBookmark& bookmark)
{ {
m_mainWindow->openNewTabAfterCurrentTab(bookmark.url()); m_mainWindow->openNewTab(bookmark.url());
} }
void DolphinBookmarkHandler::openInNewWindow(const KBookmark& bookmark) void DolphinBookmarkHandler::openInNewWindow(const KBookmark& bookmark)

View file

@ -393,7 +393,11 @@ void DolphinMainWindow::openNewMainWindow()
void DolphinMainWindow::openNewActivatedTab() void DolphinMainWindow::openNewActivatedTab()
{ {
// keep browsers compatibility, new tab is always after last one
auto openNewTabAfterLastTabConfigured = GeneralSettings::openNewTabAfterLastTab();
GeneralSettings::setOpenNewTabAfterLastTab(true);
m_tabWidget->openNewActivatedTab(); m_tabWidget->openNewActivatedTab();
GeneralSettings::setOpenNewTabAfterLastTab(openNewTabAfterLastTabConfigured);
} }
void DolphinMainWindow::addToPlaces() 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); m_tabWidget->openNewTab(url, QUrl());
}
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);
} }
void DolphinMainWindow::openInNewTab() void DolphinMainWindow::openInNewTab()
@ -445,7 +439,7 @@ void DolphinMainWindow::openInNewTab()
for (const KFileItem& item : list) { for (const KFileItem& item : list) {
const QUrl& url = DolphinView::openItemAsFolderUrl(item); const QUrl& url = DolphinView::openItemAsFolderUrl(item);
if (!url.isEmpty()) { if (!url.isEmpty()) {
openNewTabAfterCurrentTab(url); openNewTab(url);
tabCreated = true; tabCreated = true;
} }
} }
@ -453,7 +447,7 @@ void DolphinMainWindow::openInNewTab()
// if no new tab has been created from the selection // if no new tab has been created from the selection
// open the current directory in a new tab // open the current directory in a new tab
if (!tabCreated) { if (!tabCreated) {
openNewTabAfterCurrentTab(m_activeViewContainer->url()); openNewTab(m_activeViewContainer->url());
} }
} }
@ -755,7 +749,7 @@ void DolphinMainWindow::slotBackForwardActionMiddleClicked(QAction* action)
{ {
if (action) { if (action) {
const KUrlNavigator *urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory(); const KUrlNavigator *urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory();
openNewTabAfterCurrentTab(urlNavigator->locationUrl(action->data().value<int>())); openNewTab(urlNavigator->locationUrl(action->data().value<int>()));
} }
} }
@ -934,25 +928,25 @@ void DolphinMainWindow::goBackInNewTab()
{ {
const KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory(); const KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory();
const int index = urlNavigator->historyIndex() + 1; const int index = urlNavigator->historyIndex() + 1;
openNewTabAfterCurrentTab(urlNavigator->locationUrl(index)); openNewTab(urlNavigator->locationUrl(index));
} }
void DolphinMainWindow::goForwardInNewTab() void DolphinMainWindow::goForwardInNewTab()
{ {
const KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory(); const KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory();
const int index = urlNavigator->historyIndex() - 1; const int index = urlNavigator->historyIndex() - 1;
openNewTabAfterCurrentTab(urlNavigator->locationUrl(index)); openNewTab(urlNavigator->locationUrl(index));
} }
void DolphinMainWindow::goUpInNewTab() void DolphinMainWindow::goUpInNewTab()
{ {
const QUrl currentUrl = activeViewContainer()->urlNavigator()->locationUrl(); const QUrl currentUrl = activeViewContainer()->urlNavigator()->locationUrl();
openNewTabAfterCurrentTab(KIO::upUrl(currentUrl)); openNewTab(KIO::upUrl(currentUrl));
} }
void DolphinMainWindow::goHomeInNewTab() void DolphinMainWindow::goHomeInNewTab()
{ {
openNewTabAfterCurrentTab(Dolphin::homeUrl()); openNewTab(Dolphin::homeUrl());
} }
void DolphinMainWindow::compareFiles() void DolphinMainWindow::compareFiles()
@ -1139,7 +1133,7 @@ void DolphinMainWindow::openContextMenu(const QPoint& pos,
break; break;
case DolphinContextMenu::OpenParentFolderInNewTab: case DolphinContextMenu::OpenParentFolderInNewTab:
openNewTabAfterLastTab(KIO::upUrl(item.url())); openNewTab(KIO::upUrl(item.url()));
break; break;
case DolphinContextMenu::None: case DolphinContextMenu::None:
@ -1828,7 +1822,7 @@ void DolphinMainWindow::setupDockWidgets()
connect(foldersPanel, &FoldersPanel::folderActivated, connect(foldersPanel, &FoldersPanel::folderActivated,
this, &DolphinMainWindow::changeUrl); this, &DolphinMainWindow::changeUrl);
connect(foldersPanel, &FoldersPanel::folderMiddleClicked, connect(foldersPanel, &FoldersPanel::folderMiddleClicked,
this, &DolphinMainWindow::openNewTabAfterCurrentTab); this, &DolphinMainWindow::openNewTab);
connect(foldersPanel, &FoldersPanel::errorMessage, connect(foldersPanel, &FoldersPanel::errorMessage,
this, &DolphinMainWindow::showErrorMessage); this, &DolphinMainWindow::showErrorMessage);
@ -1911,7 +1905,7 @@ void DolphinMainWindow::setupDockWidgets()
connect(m_placesPanel, &PlacesPanel::placeActivated, connect(m_placesPanel, &PlacesPanel::placeActivated,
this, &DolphinMainWindow::slotPlaceActivated); this, &DolphinMainWindow::slotPlaceActivated);
connect(m_placesPanel, &PlacesPanel::placeMiddleClicked, connect(m_placesPanel, &PlacesPanel::placeMiddleClicked,
this, &DolphinMainWindow::openNewTabAfterCurrentTab); this, &DolphinMainWindow::openNewTab);
connect(m_placesPanel, &PlacesPanel::errorMessage, connect(m_placesPanel, &PlacesPanel::errorMessage,
this, &DolphinMainWindow::showErrorMessage); this, &DolphinMainWindow::showErrorMessage);
connect(this, &DolphinMainWindow::urlChanged, connect(this, &DolphinMainWindow::urlChanged,
@ -2206,7 +2200,7 @@ void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container)
connect(navigator, &KUrlNavigator::editableStateChanged, connect(navigator, &KUrlNavigator::editableStateChanged,
this, &DolphinMainWindow::slotEditableStateChanged); this, &DolphinMainWindow::slotEditableStateChanged);
connect(navigator, &KUrlNavigator::tabRequested, connect(navigator, &KUrlNavigator::tabRequested,
this, &DolphinMainWindow::openNewTabAfterLastTab); this, &DolphinMainWindow::openNewTab);
disconnect(m_updateHistoryConnection); disconnect(m_updateHistoryConnection);
m_updateHistoryConnection = connect( m_updateHistoryConnection = connect(

View file

@ -170,14 +170,9 @@ public slots:
void quit(); 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); void openNewTab(const QUrl& url);
/**
* Opens a new tab and places it as the last tab
*/
void openNewTabAfterLastTab(const QUrl& url);
signals: signals:
/** /**
@ -417,11 +412,6 @@ private slots:
*/ */
void addToPlaces(); 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. * Opens the selected folder in a new tab.
*/ */

View file

@ -152,10 +152,14 @@ void DolphinTabWidget::openNewActivatedTab()
void DolphinTabWidget::openNewActivatedTab(const QUrl& primaryUrl, const QUrl& secondaryUrl) void DolphinTabWidget::openNewActivatedTab(const QUrl& primaryUrl, const QUrl& secondaryUrl)
{ {
openNewTab(primaryUrl, secondaryUrl); openNewTab(primaryUrl, secondaryUrl);
if (GeneralSettings::openNewTabAfterLastTab()) {
setCurrentIndex(count() - 1); 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(); QWidget* focusWidget = QApplication::focusWidget();
@ -166,7 +170,7 @@ void DolphinTabWidget::openNewTab(const QUrl& primaryUrl, const QUrl& secondaryU
connect(tabPage, &DolphinTabPage::activeViewUrlChanged, connect(tabPage, &DolphinTabPage::activeViewUrlChanged,
this, &DolphinTabWidget::tabUrlChanged); this, &DolphinTabWidget::tabUrlChanged);
int newTabIndex = -1; int newTabIndex = -1;
if (tabPlacement == AfterCurrentTab) { if (!GeneralSettings::openNewTabAfterLastTab()) {
newTabIndex = currentIndex() + 1; newTabIndex = currentIndex() + 1;
} }
insertTab(newTabIndex, tabPage, QIcon() /* loaded in tabInserted */, tabName(tabPage)); insertTab(newTabIndex, tabPage, QIcon() /* loaded in tabInserted */, tabName(tabPage));

View file

@ -21,19 +21,6 @@ class DolphinTabWidget : public QTabWidget
Q_OBJECT Q_OBJECT
public: 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 * @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 * 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 * optional URL \a secondaryUrl.
* is placed.
*/ */
void openNewTab(const QUrl &primaryUrl, const QUrl &secondaryUrl = QUrl(), void openNewTab(const QUrl &primaryUrl, const QUrl &secondaryUrl = QUrl());
DolphinTabWidget::TabPlacement tabPlacement = AfterLastTab);
/** /**
* Opens each directory in \p dirs in a separate tab. If \a splitView is set, * Opens each directory in \p dirs in a separate tab. If \a splitView is set,

View file

@ -86,6 +86,10 @@
<label>Close active pane when toggling off split view</label> <label>Close active pane when toggling off split view</label>
<default>true</default> <default>true</default>
</entry> </entry>
<entry name="OpenNewTabAfterLastTab" type="Bool">
<label>New tab will be open after last one</label>
<default>false</default>
</entry>
<entry name="ShowToolTips" type="Bool"> <entry name="ShowToolTips" type="Bool">
<label>Show tooltips</label> <label>Show tooltips</label>
<default>false</default> <default>false</default>

View file

@ -6,36 +6,48 @@
#include "navigationsettingspage.h" #include "navigationsettingspage.h"
#include "global.h"
#include "dolphin_generalsettings.h" #include "dolphin_generalsettings.h"
#include <KLocalizedString> #include <KLocalizedString>
#include <QButtonGroup>
#include <QCheckBox> #include <QCheckBox>
#include <QFormLayout>
#include <QRadioButton>
#include <QVBoxLayout> #include <QVBoxLayout>
NavigationSettingsPage::NavigationSettingsPage(QWidget* parent) : NavigationSettingsPage::NavigationSettingsPage(QWidget* parent) :
SettingsPageBase(parent), SettingsPageBase(parent),
m_openArchivesAsFolder(nullptr), m_openArchivesAsFolder(nullptr),
m_autoExpandFolders(nullptr) m_autoExpandFolders(nullptr),
m_openNewTabAfterLastTab(nullptr),
m_openNewTabAfterCurrentTab(nullptr)
{ {
QVBoxLayout* topLayout = new QVBoxLayout(this); QFormLayout* topLayout = new QFormLayout(this);
QWidget* vBox = new QWidget(this);
QVBoxLayout *vBoxLayout = new QVBoxLayout(vBox);
vBoxLayout->setContentsMargins(0, 0, 0, 0);
vBoxLayout->setAlignment(Qt::AlignTop);
m_openArchivesAsFolder = new QCheckBox(i18nc("@option:check", "Open archives as folder"), vBox); // Tabs properties
vBoxLayout->addWidget(m_openArchivesAsFolder); 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); topLayout->addItem(new QSpacerItem(0, Dolphin::VERTICAL_SPACER_HEIGHT, QSizePolicy::Fixed, QSizePolicy::Fixed));
vBoxLayout->addWidget(m_autoExpandFolders);
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(); loadSettings();
connect(m_openArchivesAsFolder, &QCheckBox::toggled, this, &NavigationSettingsPage::changed); connect(m_openArchivesAsFolder, &QCheckBox::toggled, this, &NavigationSettingsPage::changed);
connect(m_autoExpandFolders, &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() NavigationSettingsPage::~NavigationSettingsPage()
@ -47,6 +59,7 @@ void NavigationSettingsPage::applySettings()
GeneralSettings* settings = GeneralSettings::self(); GeneralSettings* settings = GeneralSettings::self();
settings->setBrowseThroughArchives(m_openArchivesAsFolder->isChecked()); settings->setBrowseThroughArchives(m_openArchivesAsFolder->isChecked());
settings->setAutoExpandFolders(m_autoExpandFolders->isChecked()); settings->setAutoExpandFolders(m_autoExpandFolders->isChecked());
settings->setOpenNewTabAfterLastTab(m_openNewTabAfterLastTab->isChecked());
settings->save(); settings->save();
} }
@ -63,5 +76,7 @@ void NavigationSettingsPage::loadSettings()
{ {
m_openArchivesAsFolder->setChecked(GeneralSettings::browseThroughArchives()); m_openArchivesAsFolder->setChecked(GeneralSettings::browseThroughArchives());
m_autoExpandFolders->setChecked(GeneralSettings::autoExpandFolders()); m_autoExpandFolders->setChecked(GeneralSettings::autoExpandFolders());
m_openNewTabAfterLastTab->setChecked(GeneralSettings::openNewTabAfterLastTab());
m_openNewTabAfterCurrentTab->setChecked(!m_openNewTabAfterLastTab->isChecked());
} }

View file

@ -9,6 +9,7 @@
#include "settings/settingspagebase.h" #include "settings/settingspagebase.h"
class QCheckBox; class QCheckBox;
class QRadioButton;
/** /**
* @brief Page for the 'Navigation' settings of the Dolphin settings dialog. * @brief Page for the 'Navigation' settings of the Dolphin settings dialog.
@ -33,6 +34,8 @@ private:
private: private:
QCheckBox* m_openArchivesAsFolder; QCheckBox* m_openArchivesAsFolder;
QCheckBox* m_autoExpandFolders; QCheckBox* m_autoExpandFolders;
QRadioButton* m_openNewTabAfterLastTab;
QRadioButton* m_openNewTabAfterCurrentTab;
}; };
#endif #endif

View file

@ -945,7 +945,7 @@ void DolphinView::slotItemsActivated(const KItemSet& indexes)
const QUrl& url = openItemAsFolderUrl(item); const QUrl& url = openItemAsFolderUrl(item);
if (!url.isEmpty()) { // Open folders in new tabs if (!url.isEmpty()) { // Open folders in new tabs
Q_EMIT tabRequested(url, DolphinTabWidget::AfterLastTab); Q_EMIT tabRequested(url);
} else { } else {
items.append(item); items.append(item);
} }
@ -963,9 +963,9 @@ void DolphinView::slotItemMiddleClicked(int index)
const KFileItem& item = m_model->fileItem(index); const KFileItem& item = m_model->fileItem(index);
const QUrl& url = openItemAsFolderUrl(item); const QUrl& url = openItemAsFolderUrl(item);
if (!url.isEmpty()) { if (!url.isEmpty()) {
Q_EMIT tabRequested(url, DolphinTabWidget::AfterCurrentTab); Q_EMIT tabRequested(url);
} else if (isTabsForFilesEnabled()) { } else if (isTabsForFilesEnabled()) {
Q_EMIT tabRequested(item.url(), DolphinTabWidget::AfterCurrentTab); Q_EMIT tabRequested(item.url());
} }
} }

View file

@ -433,7 +433,7 @@ signals:
/** /**
* Is emitted if a new tab should be opened for the URL \a url. * 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, * Is emitted if the view mode (IconsView, DetailsView,