diff --git a/krusader/panelmanager.h b/krusader/panelmanager.h --- a/krusader/panelmanager.h +++ b/krusader/panelmanager.h @@ -65,6 +65,8 @@ int activeTab(); void setActiveTab(int index); void moveTabToOtherSide(); + void moveTabToLeft(); + void moveTabToRight(); /** Refresh all tabs after config changes. */ void reloadConfig(); void layoutTabs(); diff --git a/krusader/panelmanager.cpp b/krusader/panelmanager.cpp --- a/krusader/panelmanager.cpp +++ b/krusader/panelmanager.cpp @@ -253,6 +253,24 @@ p->slotFocusOnMe(); } +void PanelManager::moveTabToLeft() +{ + // don't move the leftmost tab - also skip a single tab, always leftmost + if (_tabbar->currentIndex() == 0) + return; + + _tabbar->moveTab(_tabbar->currentIndex(), _tabbar->currentIndex() - 1); +} + +void PanelManager::moveTabToRight() +{ + // don't move the rightmost tab - also skip a single tab, always rightmost + if (_tabbar->currentIndex() == tabCount() - 1) + return; + + _tabbar->moveTab(_tabbar->currentIndex(), _tabbar->currentIndex() + 1); +} + void PanelManager::slotNewTab(const QUrl &url, bool setCurrent, KrPanel *nextTo) { ListPanel *p = addPanel(setCurrent, KConfigGroup(), nextTo); diff --git a/krusader/paneltabbar.cpp b/krusader/paneltabbar.cpp --- a/krusader/paneltabbar.cpp +++ b/krusader/paneltabbar.cpp @@ -59,6 +59,8 @@ insertAction(actions->actPinTab); insertAction(actions->actDupTab); insertAction(actions->actMoveTabToOtherSide); + insertAction(actions->actMoveTabToLeft); + insertAction(actions->actMoveTabToRight); insertAction(actions->actCloseTab); insertAction(actions->actCloseInactiveTabs); insertAction(actions->actCloseDuplicatedTabs); diff --git a/krusader/tabactions.h b/krusader/tabactions.h --- a/krusader/tabactions.h +++ b/krusader/tabactions.h @@ -51,12 +51,15 @@ void closeInactiveTabs(); void closeDuplicatedTabs(); void moveTabToOtherSide(); + void moveTabToLeft(); + void moveTabToRight(); protected: inline PanelManager *activeManager(); QAction *actNewTab, *actDupTab, *actCloseTab, *actPreviousTab, *actNextTab, *actMoveTabToOtherSide; QAction *actCloseInactiveTabs, *actCloseDuplicatedTabs, *actLockTab, *actPinTab; + QAction *actMoveTabToLeft, *actMoveTabToRight; }; diff --git a/krusader/tabactions.cpp b/krusader/tabactions.cpp --- a/krusader/tabactions.cpp +++ b/krusader/tabactions.cpp @@ -36,6 +36,8 @@ actNewTab = action(i18n("New Tab"), "tab-new", QKeySequence::keyBindings(QKeySequence::AddTab), this, SLOT(newTab()), "new tab"); actDupTab = action(i18n("Duplicate Current Tab"), "tab-duplicate", Qt::ALT + Qt::CTRL + Qt::SHIFT + Qt::Key_N, SLOT(duplicateTab()), "duplicate tab"); actMoveTabToOtherSide = action(i18n("Move Current Tab to Other Side"), nullptr, Qt::CTRL + Qt::SHIFT + Qt::Key_O, SLOT(moveTabToOtherSide()), "move_tab_to_other_side"); + actMoveTabToLeft = action(i18n("Move Current Tab to the Left"), nullptr, Qt::CTRL + Qt::SHIFT + Qt::Key_PageUp, SLOT(moveTabToLeft()), "move_tab_to_left"); + actMoveTabToRight = action(i18n("Move Current Tab to the Right"), nullptr, Qt::CTRL + Qt::SHIFT + Qt::Key_PageDown, SLOT(moveTabToRight()), "move_tab_to_right"); actCloseTab = action(i18n("Close Current Tab"), "tab-close", KStandardShortcut::close(), this, SLOT(closeTab()), "close tab"); actNextTab = action(i18n("Next Tab"), QString(), KStandardShortcut::tabNext(), this, SLOT(nextTab()), "next tab"); actPreviousTab = action(i18n("Previous Tab"), QString(), KStandardShortcut::tabPrev(), this, SLOT(previousTab()), "previous tab"); @@ -60,6 +62,8 @@ actCloseInactiveTabs->setEnabled(tabCount > 1); actCloseDuplicatedTabs->setEnabled(tabCount > 1); actMoveTabToOtherSide->setEnabled(tabCount > 1); + actMoveTabToLeft->setEnabled(tabCount > 1); + actMoveTabToRight->setEnabled(tabCount > 1); actNextTab->setEnabled(tabCount > 1); actPreviousTab->setEnabled(tabCount > 1); bool locked = activeManager()->currentPanel()->gui->isLocked(); @@ -84,6 +88,16 @@ activeManager()->moveTabToOtherSide(); } +void TabActions::moveTabToLeft() +{ + activeManager()->moveTabToLeft(); +} + +void TabActions::moveTabToRight() +{ + activeManager()->moveTabToRight(); +} + void TabActions::nextTab() { activeManager()->slotNextTab();