bool Workspace::dropViewAt(const gfx::Point& pos, WorkspaceView* view) { WorkspaceTabs* tabs = getTabsAt(pos); WorkspacePanel* panel = getPanelAt(pos); if (panel) { // Create new panel return panel->dropViewAt(pos, getViewPanel(view), view); } else if (tabs && tabs != getViewPanel(view)->tabs()) { // Dock tab in other tabs WorkspacePanel* dropPanel = tabs->panel(); ASSERT(dropPanel); int pos = tabs->getDropTabIndex(); removeView(view); addViewToPanel(dropPanel, view, true, pos); return true; } else return false; }
DropViewAtResult Workspace::dropViewAt(const gfx::Point& pos, WorkspaceView* view, bool clone) { WorkspaceTabs* tabs = getTabsAt(pos); WorkspacePanel* panel = getPanelAt(pos); if (panel) { // Create new panel return panel->dropViewAt(pos, getViewPanel(view), view, clone); } else if (tabs && tabs != getViewPanel(view)->tabs()) { // Dock tab in other tabs WorkspacePanel* dropPanel = tabs->panel(); ASSERT(dropPanel); int pos = tabs->getDropTabIndex(); DropViewAtResult result; WorkspaceView* originalView = view; if (clone) { view = view->cloneWorkspaceView(); result = DropViewAtResult::CLONED_VIEW; } else { removeView(view); result = DropViewAtResult::MOVED_TO_OTHER_PANEL; } addViewToPanel(dropPanel, view, true, pos); if (result == DropViewAtResult::CLONED_VIEW) view->onClonedFrom(originalView); return result; } else return DropViewAtResult::NOTHING; }