From 8cc637f8b7d37d29fca1de0b642cb49eac6151a7 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Mon, 16 Jul 2018 16:57:36 +0200 Subject: [PATCH] New tab to manage the drag out of the tabbar --- src/CMakeLists.txt | 1 + src/DetachableTabBar.cpp | 17 +++++++++++++++++ src/DetachableTabBar.h | 17 +++++++++++++++++ src/ViewContainer.cpp | 9 ++++++++- src/ViewContainer.h | 1 + 5 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 src/DetachableTabBar.cpp create mode 100644 src/DetachableTabBar.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1ba27e0d..feb4f5a2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -55,6 +55,7 @@ set(konsoleprivate_SRCS ${sessionadaptors_SRCS} CopyInputDialog.cpp EditProfileDialog.cpp Emulation.cpp + DetachableTabBar.cpp Filter.cpp History.cpp HistorySizeDialog.cpp diff --git a/src/DetachableTabBar.cpp b/src/DetachableTabBar.cpp new file mode 100644 index 00000000..d747228c --- /dev/null +++ b/src/DetachableTabBar.cpp @@ -0,0 +1,17 @@ +#include "DetachableTabBar.h" +#include + +DetachableTabBar::DetachableTabBar(QWidget *parent) : QTabBar(parent){} + +void DetachableTabBar::mouseMoveEvent(QMouseEvent *event) +{ + QTabBar::mouseMoveEvent(event); +} + +void DetachableTabBar::mouseReleaseEvent(QMouseEvent *event) +{ + QTabBar::mouseReleaseEvent(event); + if (!contentsRect().contains(event->pos())) { + emit detachTab(currentIndex()); + } +} diff --git a/src/DetachableTabBar.h b/src/DetachableTabBar.h new file mode 100644 index 00000000..1b55f5ba --- /dev/null +++ b/src/DetachableTabBar.h @@ -0,0 +1,17 @@ +#ifndef DETACHABLETABBAR_H +#define DETACHABLETABBAR_H + +#include + +class DetachableTabBar : public QTabBar { + Q_OBJECT +public: + DetachableTabBar(QWidget *parent = nullptr); +Q_SIGNALS: + void detachTab(int idx); +protected: + void mouseMoveEvent(QMouseEvent*event) override; + void mouseReleaseEvent(QMouseEvent *event) override; +}; + +#endif diff --git a/src/ViewContainer.cpp b/src/ViewContainer.cpp index b412386c..0b7ebd86 100644 --- a/src/ViewContainer.cpp +++ b/src/ViewContainer.cpp @@ -28,6 +28,7 @@ #include #include #include +#include // KDE #include @@ -42,16 +43,20 @@ #include "ViewManager.h" #include "KonsoleSettings.h" #include "SessionController.h" +#include "DetachableTabBar.h" // TODO Perhaps move everything which is Konsole-specific into different files using namespace Konsole; + TabbedViewContainer::TabbedViewContainer(ViewManager *connectedViewManager, QWidget *parent) : QTabWidget(parent), _connectedViewManager(connectedViewManager), _newTabButton(new QToolButton()) { + auto tabBarWidget = new DetachableTabBar(); + setTabBar(tabBarWidget); setDocumentMode(true); setMovable(true); @@ -66,11 +71,13 @@ TabbedViewContainer::TabbedViewContainer(ViewManager *connectedViewManager, QWid connect(tabBar(), &QTabBar::tabCloseRequested, this, &TabbedViewContainer::closeTerminalTab); - connect(tabBar(), &QTabBar::tabBarDoubleClicked, this, &Konsole::TabbedViewContainer::tabDoubleClicked); connect(tabBar(), &QTabBar::customContextMenuRequested, this, &Konsole::TabbedViewContainer::openTabContextMenu); + connect(tabBarWidget, &DetachableTabBar::detachTab, this, [this](int idx) { + qDebug() << "Trying to detach this"; + }); connect(this, &TabbedViewContainer::currentChanged, this, [this](int index) { if (index != -1) { diff --git a/src/ViewContainer.h b/src/ViewContainer.h index ba79a131..2dabf7a5 100644 --- a/src/ViewContainer.h +++ b/src/ViewContainer.h @@ -28,6 +28,7 @@ #include #include #include +#include // Konsole #include "Profile.h"