FReply SDockingTabWell::StartDraggingTab( TSharedRef<SDockTab> TabToStartDragging, FVector2D InTabGrabOffsetFraction, const FPointerEvent& MouseEvent ) { Tabs.Remove(TabToStartDragging); // We just removed the foreground tab. ForegroundTabIndex = INDEX_NONE; ParentTabStackPtr.Pin()->OnTabRemoved(TabToStartDragging->GetLayoutIdentifier()); // Tha tab well keeps track of which tab we are dragging; we treat is specially during rendering and layout. TabBeingDraggedPtr = TabToStartDragging; TabGrabOffsetFraction = InTabGrabOffsetFraction; // We are about to start dragging a tab, so make sure its offset is correct this->ChildBeingDraggedOffset = ComputeDraggedTabOffset( MouseEvent.FindGeometry(SharedThis(this)), MouseEvent, InTabGrabOffsetFraction ); // Start dragging. TSharedRef<FDockingDragOperation> DragDropOperation = FDockingDragOperation::New( TabToStartDragging, InTabGrabOffsetFraction, GetDockArea().ToSharedRef(), ParentTabStackPtr.Pin()->GetTabStackGeometry().Size ); return FReply::Handled().BeginDragDrop( DragDropOperation ); }
FReply SDockingTabWell::StartDraggingTab( TSharedRef<SDockTab> TabToStartDragging, FVector2D InTabGrabOffsetFraction, const FPointerEvent& MouseEvent ) { const bool bCanLeaveTabWell = TabToStartDragging->GetTabManager()->GetPrivateApi().CanTabLeaveTabWell( TabToStartDragging ); // We are about to start dragging a tab, so make sure its offset is correct this->ChildBeingDraggedOffset = ComputeDraggedTabOffset( MouseEvent.FindGeometry(SharedThis(this)), MouseEvent, InTabGrabOffsetFraction ); // Tha tab well keeps track of which tab we are dragging; we treat is specially during rendering and layout. TabBeingDraggedPtr = TabToStartDragging; TabGrabOffsetFraction = InTabGrabOffsetFraction; Tabs.Remove(TabToStartDragging); if (bCanLeaveTabWell) { // We just removed the foreground tab. ForegroundTabIndex = INDEX_NONE; ParentTabStackPtr.Pin()->OnTabRemoved(TabToStartDragging->GetLayoutIdentifier()); #if PLATFORM_MAC // On Mac we need to activate the app as we may be dragging a window that is set to be invisible if the app is inactive FPlatformMisc::ActivateApplication(); #endif // Start dragging. TSharedRef<FDockingDragOperation> DragDropOperation = FDockingDragOperation::New( TabToStartDragging, InTabGrabOffsetFraction, GetDockArea().ToSharedRef(), ParentTabStackPtr.Pin()->GetTabStackGeometry().Size ); return FReply::Handled().BeginDragDrop( DragDropOperation ); } else { return FReply::Handled().CaptureMouse(SharedThis(this)); } }