diff --git a/src/DetachableTabBar.h b/src/DetachableTabBar.h --- a/src/DetachableTabBar.h +++ b/src/DetachableTabBar.h @@ -29,12 +29,15 @@ Q_OBJECT public: enum class DragType : unsigned char {NONE, OUTSIDE, WINDOW}; - explicit DetachableTabBar(QWidget *parent = nullptr); Q_SIGNALS: void detachTab(int index); void moveTabToWindow(int tabIndex, QWidget *otherWindow); + void closeTab(int index); + void newTabRequest(); + protected: + void middleMouseButtonClickAt(const QPoint& pos); void mousePressEvent(QMouseEvent *event) override; void mouseMoveEvent(QMouseEvent*event) override; void mouseReleaseEvent(QMouseEvent *event) override; diff --git a/src/DetachableTabBar.cpp b/src/DetachableTabBar.cpp --- a/src/DetachableTabBar.cpp +++ b/src/DetachableTabBar.cpp @@ -18,6 +18,7 @@ */ #include "DetachableTabBar.h" +#include "KonsoleSettings.h" #include "ViewContainer.h" #include @@ -43,10 +44,20 @@ return false; } +void DetachableTabBar::middleMouseButtonClickAt(const QPoint& pos) +{ + int tabId = tabAt(pos); + + if (tabId == -1) { + emit newTabRequest(); + } else { + emit closeTab(tabId); + } +} + void DetachableTabBar::mousePressEvent(QMouseEvent *event) { QTabBar::mousePressEvent(event); - _containers = window()->findChildren(); } void DetachableTabBar::mouseMoveEvent(QMouseEvent *event) @@ -86,6 +97,16 @@ void DetachableTabBar::mouseReleaseEvent(QMouseEvent *event) { QTabBar::mouseReleaseEvent(event); + + switch(event->button()) { + case Qt::MiddleButton : if (KonsoleSettings::closeTabOnMiddleMouseButton()) { + middleMouseButtonClickAt(event->pos()); + } break; + case Qt::LeftButton: _containers = window()->findChildren(); break; + default: break; + } + + setCursor(_originalCursor); if (contentsRect().adjusted(-30,-30,30,30).contains(event->pos())) { diff --git a/src/ViewContainer.cpp b/src/ViewContainer.cpp --- a/src/ViewContainer.cpp +++ b/src/ViewContainer.cpp @@ -87,6 +87,11 @@ connect(tabBarWidget, &DetachableTabBar::detachTab, this, [this](int idx) { emit detachTab(this, widget(idx)); }); + connect(tabBarWidget, &DetachableTabBar::closeTab, + this, &TabbedViewContainer::closeTerminalTab); + connect(tabBarWidget, &DetachableTabBar::newTabRequest, + this, [this]{ emit newViewRequest(); }); + connect(this, &TabbedViewContainer::currentChanged, this, [this](int index) { if (index != -1) { widget(index)->setFocus(); diff --git a/src/settings/TabBarSettings.ui b/src/settings/TabBarSettings.ui --- a/src/settings/TabBarSettings.ui +++ b/src/settings/TabBarSettings.ui @@ -96,6 +96,13 @@ + + + + Close tab on middle mouse button + + + diff --git a/src/settings/konsole.kcfg b/src/settings/konsole.kcfg --- a/src/settings/konsole.kcfg +++ b/src/settings/konsole.kcfg @@ -88,6 +88,10 @@ false + + + false +