void DolphinBookmarkHandler::openInNewTab(const KBookmark& bookmark)
{
- m_mainWindow->openNewTabAfterCurrentTab(bookmark.url());
+ m_mainWindow->openNewTab(bookmark.url());
}
void DolphinBookmarkHandler::openInNewWindow(const KBookmark& bookmark)
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()
}
}
-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()
for (const KFileItem& item : list) {
const QUrl& url = DolphinView::openItemAsFolderUrl(item);
if (!url.isEmpty()) {
- openNewTabAfterCurrentTab(url);
+ openNewTab(url);
tabCreated = true;
}
}
// 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());
}
}
{
if (action) {
const KUrlNavigator *urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory();
- openNewTabAfterCurrentTab(urlNavigator->locationUrl(action->data().value<int>()));
+ openNewTab(urlNavigator->locationUrl(action->data().value<int>()));
}
}
{
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()
break;
case DolphinContextMenu::OpenParentFolderInNewTab:
- openNewTabAfterLastTab(KIO::upUrl(item.url()));
+ openNewTab(KIO::upUrl(item.url()));
break;
case DolphinContextMenu::None:
connect(foldersPanel, &FoldersPanel::folderActivated,
this, &DolphinMainWindow::changeUrl);
connect(foldersPanel, &FoldersPanel::folderMiddleClicked,
- this, &DolphinMainWindow::openNewTabAfterCurrentTab);
+ this, &DolphinMainWindow::openNewTab);
connect(foldersPanel, &FoldersPanel::errorMessage,
this, &DolphinMainWindow::showErrorMessage);
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,
connect(navigator, &KUrlNavigator::editableStateChanged,
this, &DolphinMainWindow::slotEditableStateChanged);
connect(navigator, &KUrlNavigator::tabRequested,
- this, &DolphinMainWindow::openNewTabAfterLastTab);
+ this, &DolphinMainWindow::openNewTab);
disconnect(m_updateHistoryConnection);
m_updateHistoryConnection = connect(
void quit();
/**
- * Opens a new tab and places it after the current tab
- */
- void openNewTabAfterCurrentTab(const QUrl& url);
-
- /**
- * Opens a new tab and places it as the last tab
+ * Opens a new tab in the background showing the URL \a url.
*/
- void openNewTabAfterLastTab(const QUrl& url);
+ void openNewTab(const QUrl& url);
signals:
/**
*/
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.
*/
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();
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));
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
/**
* 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,
<label>Close active pane when toggling off split view</label>
<default>true</default>
</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">
<label>Show tooltips</label>
<default>false</default>
#include "navigationsettingspage.h"
+#include "global.h"
#include "dolphin_generalsettings.h"
#include <KLocalizedString>
+#include <QButtonGroup>
#include <QCheckBox>
+#include <QFormLayout>
+#include <QRadioButton>
#include <QVBoxLayout>
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()
GeneralSettings* settings = GeneralSettings::self();
settings->setBrowseThroughArchives(m_openArchivesAsFolder->isChecked());
settings->setAutoExpandFolders(m_autoExpandFolders->isChecked());
+ settings->setOpenNewTabAfterLastTab(m_openNewTabAfterLastTab->isChecked());
settings->save();
}
{
m_openArchivesAsFolder->setChecked(GeneralSettings::browseThroughArchives());
m_autoExpandFolders->setChecked(GeneralSettings::autoExpandFolders());
+ m_openNewTabAfterLastTab->setChecked(GeneralSettings::openNewTabAfterLastTab());
+ m_openNewTabAfterCurrentTab->setChecked(!m_openNewTabAfterLastTab->isChecked());
}
#include "settings/settingspagebase.h"
class QCheckBox;
+class QRadioButton;
/**
* @brief Page for the 'Navigation' settings of the Dolphin settings dialog.
private:
QCheckBox* m_openArchivesAsFolder;
QCheckBox* m_autoExpandFolders;
+ QRadioButton* m_openNewTabAfterLastTab;
+ QRadioButton* m_openNewTabAfterCurrentTab;
};
#endif
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);
}
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());
}
}
/**
* 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,