Index: src/ViewContainer.h =================================================================== --- src/ViewContainer.h +++ src/ViewContainer.h @@ -172,8 +172,9 @@ * the new view has been created. * @param sessionControllerId The identifier of the view. */ +#if 0 void moveViewRequest(int index, int sessionControllerId); - +#endif /** Emitted when the active view changes */ void activeViewChanged(TerminalDisplay *view); Index: src/ViewContainer.cpp =================================================================== --- src/ViewContainer.cpp +++ src/ViewContainer.cpp @@ -48,6 +48,8 @@ #include "DetachableTabBar.h" #include "TerminalDisplay.h" #include "ViewSplitter.h" +#include "MainWindow.h" +#include "Session.h" // TODO Perhaps move everything which is Konsole-specific into different files @@ -159,20 +161,15 @@ void TabbedViewContainer::moveTabToWindow(int index, QWidget *window) { - // TODO: Fix Detaching. - /* - const int id = terminalAt(index)->sessionController()->identifier(); - // This one line here will be removed as soon as I finish my new split handling. - // it's hacky but it works. - const auto widgets = window->findChildren(); - const auto currentPos = QCursor::pos(); - for(const auto dropWidget : widgets) { - if (dropWidget->rect().contains(dropWidget->mapFromGlobal(currentPos))) { - emit dropWidget->moveViewRequest(-1, id); - removeView(terminalAt(index)); - } + auto splitterToMove = viewSplitterAt(index); + auto manager = window->findChild(); + auto terminals = splitterToMove->getTerminalDisplays(); + foreach(TerminalDisplay* terminal, terminals) { + auto session = terminal->sessionController()->session().data(); + manager->attachView(terminal, session); } - */ + manager->activeContainer()->addSplitter(splitterToMove); + forgetView(splitterToMove); } void TabbedViewContainer::konsoleConfigChanged() Index: src/ViewManager.h =================================================================== --- src/ViewManager.h +++ src/ViewManager.h @@ -196,6 +196,7 @@ /** Reorder the terminal display history list */ void updateTerminalDisplayHistory(TerminalDisplay *terminalDisplay = nullptr, bool remove = false); + QHash forgetTab(TabbedViewContainer* container, ViewSplitter* splitter); Q_SIGNALS: /** Emitted when the last view is removed from the view manager */ void empty(); @@ -387,7 +388,9 @@ // called when a ViewContainer requests a view be // moved +#if 0 void containerMoveViewRequest(int index, int sessionControllerId); +#endif void detachView(TabbedViewContainer *container, QWidget *view); void detachTab(TabbedViewContainer *container); Index: src/ViewManager.cpp =================================================================== --- src/ViewManager.cpp +++ src/ViewManager.cpp @@ -391,12 +391,11 @@ detachView(container, container->activeViewSplitter()->activeTerminalDisplay()); } -void ViewManager::detachTab(TabbedViewContainer *container) +QHash ViewManager::forgetTab(TabbedViewContainer* container, ViewSplitter* splitter) { #if !defined(ENABLE_DETACHING) return; #endif - auto splitter = container->activeViewSplitter()->getToplevelSplitter(); splitter->setParent(nullptr); auto terminals = splitter->getTerminalDisplays(); QHash detachedSessions; @@ -411,9 +410,17 @@ controller->deleteLater(); _terminalDisplayHistory.removeAll(terminal); } + return detachedSessions; +} +void ViewManager::detachTab(TabbedViewContainer *container) +{ +#if !defined(ENABLE_DETACHING) + return; +#endif + auto splitter = container->activeViewSplitter()->getToplevelSplitter(); + auto detachedSessions = forgetTab(container, splitter); emit tabDetached(splitter, detachedSessions); - removeContainer(container); } void ViewManager::detachView(TabbedViewContainer *container, QWidget *view) @@ -685,8 +692,10 @@ this, &ViewManager::newViewRequest); connect(container, &Konsole::TabbedViewContainer::newViewWithProfileRequest, this, &Konsole::ViewManager::newViewWithProfileRequest); +#if 0 connect(container, &Konsole::TabbedViewContainer::moveViewRequest, this, &Konsole::ViewManager::containerMoveViewRequest); +#endif connect(container, &Konsole::TabbedViewContainer::viewRemoved, this, &Konsole::ViewManager::viewDestroyed); connect(container, &Konsole::TabbedViewContainer::activeViewChanged, this, @@ -695,6 +704,7 @@ return container; } +#if 0 void ViewManager::containerMoveViewRequest(int index, int id) { Q_UNUSED(index); @@ -708,6 +718,8 @@ controller->session()->refresh(); container->currentWidget()->setFocus(); } +#endif + void ViewManager::setNavigationMethod(NavigationMethod method) {