diff --git a/src/Application.cpp b/src/Application.cpp --- a/src/Application.cpp +++ b/src/Application.cpp @@ -422,6 +422,14 @@ if (m_parser->isSet(QStringLiteral("fullscreen"))) { window->viewFullScreen(true); } + if (m_parser->isSet(QStringLiteral("show-tabbar"))) { + qDebug() << "Triggered show tabbar"; + window->viewManager()->setNavigationVisibility(ViewManager::AlwaysShowNavigation); + } + else if (m_parser->isSet(QStringLiteral("hide-tabbar"))) { + qDebug() << "Triggered hide tabbar"; + window->viewManager()->setNavigationVisibility(ViewManager::AlwaysHideNavigation); + } } return window; } diff --git a/src/ViewContainer.h b/src/ViewContainer.h --- a/src/ViewContainer.h +++ b/src/ViewContainer.h @@ -32,6 +32,7 @@ // Konsole #include "Profile.h" +#include "ViewManager.h" // Qt class QPoint; @@ -133,6 +134,7 @@ void tabDoubleClicked(int index); void openTabContextMenu(const QPoint &point); + void setNavigationVisibility(ViewManager::NavigationVisibility navigationVisibility); Q_SIGNALS: /** Emitted when the container has no more children */ @@ -199,6 +201,7 @@ QToolButton *_newTabButton; QToolButton *_closeTabButton; int _contextMenuTabIndex; + ViewManager::NavigationVisibility _navigationVisibility; }; diff --git a/src/ViewContainer.cpp b/src/ViewContainer.cpp --- a/src/ViewContainer.cpp +++ b/src/ViewContainer.cpp @@ -54,7 +54,8 @@ _connectedViewManager(connectedViewManager), _newTabButton(new QToolButton()), _closeTabButton(new QToolButton()), - _contextMenuTabIndex(-1) + _contextMenuTabIndex(-1), + _navigationVisibility(ViewManager::NavigationVisibility::NavigationNotSet) { auto tabBarWidget = new DetachableTabBar(); setTabBar(tabBarWidget); @@ -146,7 +147,14 @@ void TabbedViewContainer::konsoleConfigChanged() { - setTabBarAutoHide((bool) KonsoleSettings::tabBarVisibility()); + // if we start with --show-tabs or --hide-tabs we ignore the preferences. + setTabBarAutoHide(KonsoleSettings::tabBarVisibility() == KonsoleSettings::EnumTabBarVisibility::ShowTabBarWhenNeeded); + if (KonsoleSettings::tabBarVisibility() == KonsoleSettings::EnumTabBarVisibility::AlwaysShowTabBar) { + tabBar()->setVisible(true); + } else if (KonsoleSettings::tabBarVisibility() == KonsoleSettings::EnumTabBarVisibility::AlwaysHideTabBar) { + tabBar()->setVisible(false); + } + setTabPosition((QTabWidget::TabPosition) KonsoleSettings::tabBarPosition()); setCornerWidget( KonsoleSettings::showQuickButtons() ? _newTabButton : nullptr, Qt::TopLeftCorner); @@ -425,3 +433,16 @@ { return _connectedViewManager; } + +void TabbedViewContainer::setNavigationVisibility(ViewManager::NavigationVisibility navigationVisibility) { + if (navigationVisibility == ViewManager::NavigationNotSet) { + return; + } + + setTabBarAutoHide(navigationVisibility == ViewManager::ShowNavigationAsNeeded); + if (navigationVisibility == ViewManager::AlwaysShowNavigation) { + tabBar()->setVisible(true); + } else if (navigationVisibility == ViewManager::AlwaysHideNavigation) { + tabBar()->setVisible(false); + } +} diff --git a/src/ViewManager.h b/src/ViewManager.h --- a/src/ViewManager.h +++ b/src/ViewManager.h @@ -130,6 +130,28 @@ PutNewTabAfterCurrentTab = 1 }; + /** + * Describes the options for showing or hiding the containe's navigation widget. + */ + enum NavigationVisibility { + NavigationNotSet, // Don't rely on this information, Only use the settings. + AlwaysShowNavigation, + ShowNavigationAsNeeded, + AlwaysHideNavigation + }; + + /** + * Sets the visibility of the view container's navigation widget. + * The ViewContainer subclass is responsible for ensuring that this + * setting is respected as views are dded or removed from the container + */ + void setNavigationVisibility(NavigationVisibility Mode); + + /** Returns the current mode for controlling the visibility of the + * view container's navigation widget. + */ + NavigationVisibility navigationVisibility() const; + /** * Sets the type of widget provided to navigate between open sessions * in a container. The changes will only apply to newly created containers. @@ -386,6 +408,7 @@ KActionCollection *_actionCollection; NavigationMethod _navigationMethod; + NavigationVisibility _navigationVisibility; QString _navigationStyleSheet; int _managerId; static int lastManagerId; diff --git a/src/ViewManager.cpp b/src/ViewManager.cpp --- a/src/ViewManager.cpp +++ b/src/ViewManager.cpp @@ -56,6 +56,7 @@ _pluggedController(nullptr), _sessionMap(QHash()), _actionCollection(collection), + _navigationVisibility(NavigationNotSet), _managerId(0) { // create main view area @@ -616,6 +617,7 @@ { auto *container = new TabbedViewContainer(this, _viewSplitter); + container->setNavigationVisibility(_navigationVisibility); //TODO: Fix Detaching. connect(container, &TabbedViewContainer::detachTab, this, &ViewManager::detachView); @@ -1101,3 +1103,12 @@ { moveActiveViewRight(); } + +void ViewManager::setNavigationVisibility(NavigationVisibility navigationVisibility) { + if (_navigationVisibility != navigationVisibility) { + _navigationVisibility = navigationVisibility; + for(auto *container : _viewSplitter->containers()) { + container->setNavigationVisibility(navigationVisibility); + } + } +}