New tab should be placed after the current tab

Summary:
When opening a new using the context menu the new tab should be placed
after the currently open tab, not at the end of the tab list.

BUG: 403690

Test Plan:
Open multiple tabs and select a different tab than the last one.
Open a new tab using the context menu and see that it opens after the currently
selected tab.
Open a tab using Ctrl+T and see that it opens at the end.

Reviewers: #dolphin, ngraham, elvisangelaccio

Reviewed By: #dolphin, ngraham, elvisangelaccio

Subscribers: elvisangelaccio, ngraham, kfm-devel

Tags: #dolphin

Differential Revision: https://phabricator.kde.org/D18945
This commit is contained in:
David Hallas 2019-02-12 11:07:43 +01:00
parent 92368c1e4d
commit 17af8ae0ad
3 changed files with 25 additions and 6 deletions

View file

@ -328,7 +328,7 @@ void DolphinMainWindow::openInNewTab()
foreach (const KFileItem& item, list) {
const QUrl& url = DolphinView::openItemAsFolderUrl(item);
if (!url.isEmpty()) {
openNewTab(url);
m_tabWidget->openNewTab(url, QUrl(), DolphinTabWidget::AfterCurrentTab);
tabCreated = true;
}
}
@ -336,7 +336,7 @@ void DolphinMainWindow::openInNewTab()
// if no new tab has been created from the selection
// open the current directory in a new tab
if (!tabCreated) {
openNewTab(m_activeViewContainer->url());
m_tabWidget->openNewTab(m_activeViewContainer->url(), QUrl(), DolphinTabWidget::AfterCurrentTab);
}
}

View file

@ -147,7 +147,7 @@ void DolphinTabWidget::openNewActivatedTab(const QUrl& primaryUrl, const QUrl& s
setCurrentIndex(count() - 1);
}
void DolphinTabWidget::openNewTab(const QUrl& primaryUrl, const QUrl& secondaryUrl)
void DolphinTabWidget::openNewTab(const QUrl& primaryUrl, const QUrl& secondaryUrl, TabPlacement tabPlacement)
{
QWidget* focusWidget = QApplication::focusWidget();
@ -157,7 +157,11 @@ void DolphinTabWidget::openNewTab(const QUrl& primaryUrl, const QUrl& secondaryU
this, &DolphinTabWidget::activeViewChanged);
connect(tabPage, &DolphinTabPage::activeViewUrlChanged,
this, &DolphinTabWidget::tabUrlChanged);
addTab(tabPage, QIcon::fromTheme(KIO::iconNameForUrl(primaryUrl)), tabName(tabPage));
int newTabIndex = -1;
if (tabPlacement == AfterCurrentTab) {
newTabIndex = currentIndex() + 1;
}
insertTab(newTabIndex, tabPage, QIcon::fromTheme(KIO::iconNameForUrl(primaryUrl)), tabName(tabPage));
if (focusWidget) {
// The DolphinViewContainer grabbed the keyboard focus. As the tab is opened

View file

@ -32,6 +32,19 @@ 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
};
explicit DolphinTabWidget(QWidget* parent);
/**
@ -105,9 +118,11 @@ public slots:
/**
* Opens a new tab in the background showing the URL \a primaryUrl and the
* optional URL \a secondaryUrl.
* optional URL \a secondaryUrl. \a tabPlacement controls where the new tab
* is placed.
*/
void openNewTab(const QUrl &primaryUrl, const QUrl &secondaryUrl = QUrl());
void openNewTab(const QUrl &primaryUrl, const QUrl &secondaryUrl = QUrl(),
TabPlacement tabPlacement = AfterLastTab);
/**
* Opens each directory in \p dirs in a separate tab. If \a splitView is set,