From e4f62942b7ebf4aef6eb20cc07bb93672552a265 Mon Sep 17 00:00:00 2001 From: David Capello Date: Tue, 21 Apr 2015 10:24:42 -0300 Subject: [PATCH] Fix scroll issues when we clone a view --- src/app/ui/main_window.cpp | 11 ++++++++--- src/app/ui/workspace.cpp | 6 ++++++ src/app/ui/workspace_panel.cpp | 5 +++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/app/ui/main_window.cpp b/src/app/ui/main_window.cpp index 1b70d822d..d36ef83cd 100644 --- a/src/app/ui/main_window.cpp +++ b/src/app/ui/main_window.cpp @@ -292,11 +292,16 @@ void MainWindow::onCloseTab(Tabs* tabs, TabView* tabView) void MainWindow::onCloneTab(Tabs* tabs, TabView* tabView, int pos) { + EditorView::SetScrollUpdateMethod(EditorView::KeepOrigin); + WorkspaceView* view = dynamic_cast(tabView); - WorkspaceView* copy = view->cloneWorkspaceView(); - ASSERT(copy); + WorkspaceView* clone = view->cloneWorkspaceView(); + ASSERT(clone); + m_workspace->addViewToPanel( - static_cast(tabs)->panel(), copy, true, pos); + static_cast(tabs)->panel(), clone, true, pos); + + clone->onClonedFrom(view); } void MainWindow::onContextMenuTab(Tabs* tabs, TabView* tabView) diff --git a/src/app/ui/workspace.cpp b/src/app/ui/workspace.cpp index 343d6f7d1..a7b8eff67 100644 --- a/src/app/ui/workspace.cpp +++ b/src/app/ui/workspace.cpp @@ -215,6 +215,7 @@ DropViewAtResult Workspace::dropViewAt(const gfx::Point& pos, WorkspaceView* vie int pos = tabs->getDropTabIndex(); DropViewAtResult result; + WorkspaceView* originalView = view; if (clone) { view = view->cloneWorkspaceView(); result = DropViewAtResult::CLONED_VIEW; @@ -225,6 +226,10 @@ DropViewAtResult Workspace::dropViewAt(const gfx::Point& pos, WorkspaceView* vie } addViewToPanel(dropPanel, view, true, pos); + + if (result == DropViewAtResult::CLONED_VIEW) + view->onClonedFrom(originalView); + return result; } else @@ -239,6 +244,7 @@ void Workspace::addViewToPanel(WorkspacePanel* panel, WorkspaceView* view, bool m_views.push_back(view); setActiveView(view); + layout(); } WorkspacePanel* Workspace::getViewPanel(WorkspaceView* view) diff --git a/src/app/ui/workspace_panel.cpp b/src/app/ui/workspace_panel.cpp index 4d1134a33..951a0827b 100644 --- a/src/app/ui/workspace_panel.cpp +++ b/src/app/ui/workspace_panel.cpp @@ -244,6 +244,7 @@ DropViewAtResult WorkspacePanel::dropViewAt(const gfx::Point& pos, WorkspacePane ASSERT(from); DropViewAtResult result; Workspace* workspace = getWorkspace(); + WorkspaceView* originalView = view; if (clone) { view = view->cloneWorkspaceView(); result = DropViewAtResult::CLONED_VIEW; @@ -305,6 +306,10 @@ DropViewAtResult WorkspacePanel::dropViewAt(const gfx::Point& pos, WorkspacePane workspace->addViewToPanel(newPanel, view, true, -1); parent->layout(); + + if (result == DropViewAtResult::CLONED_VIEW) + view->onClonedFrom(originalView); + return result; }