@@ -190,19 +190,20 @@ class DockContainerWidgetPrivate
190190 * Creates a new tab for a widget dropped into the center of a section
191191 */
192192 void dropIntoCenterOfSection (CFloatingDockContainer* FloatingWidget,
193- CDockAreaWidget* TargetArea);
193+ CDockAreaWidget* TargetArea, int TabIndex = - 2 );
194194
195195 /* *
196196 * Drop floating widget into dock area
197197 */
198198 void dropIntoSection (CFloatingDockContainer* FloatingWidget,
199- CDockAreaWidget* TargetArea, DockWidgetArea area);
199+ CDockAreaWidget* TargetArea, DockWidgetArea area, int TabIndex = - 2 );
200200
201201 /* *
202202 * Moves the dock widget or dock area given in Widget parameter to a
203203 * new dock widget area
204204 */
205- void moveToNewSection (QWidget* Widget, CDockAreaWidget* TargetArea, DockWidgetArea area);
205+ void moveToNewSection (QWidget* Widget, CDockAreaWidget* TargetArea, DockWidgetArea area,
206+ int TabIndex = -2 );
206207
207208 /* *
208209 * Moves the dock widget or dock area given in Widget parameter to a
@@ -213,7 +214,7 @@ class DockContainerWidgetPrivate
213214 /* *
214215 * Creates a new tab for a widget dropped into the center of a section
215216 */
216- void moveIntoCenterOfSection (QWidget* Widget, CDockAreaWidget* TargetArea);
217+ void moveIntoCenterOfSection (QWidget* Widget, CDockAreaWidget* TargetArea, int TabIndex = - 2 );
217218
218219 /* *
219220 * Moves the dock widget or dock area given in Widget parameter to
@@ -535,12 +536,13 @@ void DockContainerWidgetPrivate::dropIntoAutoHideSideBar(CFloatingDockContainer*
535536
536537// ============================================================================
537538void DockContainerWidgetPrivate::dropIntoCenterOfSection (
538- CFloatingDockContainer* FloatingWidget, CDockAreaWidget* TargetArea)
539+ CFloatingDockContainer* FloatingWidget, CDockAreaWidget* TargetArea, int TabIndex )
539540{
540541 CDockContainerWidget* FloatingContainer = FloatingWidget->dockContainer ();
541542 auto NewDockWidgets = FloatingContainer->dockWidgets ();
542543 auto TopLevelDockArea = FloatingContainer->topLevelDockArea ();
543544 int NewCurrentIndex = -1 ;
545+ TabIndex = (TabIndex < 0 ) ? 0 : TabIndex;
544546
545547 // If the floating widget contains only one single dock are, then the
546548 // current dock widget of the dock area will also be the future current
@@ -553,7 +555,7 @@ void DockContainerWidgetPrivate::dropIntoCenterOfSection(
553555 for (int i = 0 ; i < NewDockWidgets.count (); ++i)
554556 {
555557 CDockWidget* DockWidget = NewDockWidgets[i];
556- TargetArea->insertDockWidget (i, DockWidget, false );
558+ TargetArea->insertDockWidget (TabIndex + i, DockWidget, false );
557559 // If the floating widget contains multiple visible dock areas, then we
558560 // simply pick the first visible open dock widget and make it
559561 // the current one.
@@ -562,21 +564,22 @@ void DockContainerWidgetPrivate::dropIntoCenterOfSection(
562564 NewCurrentIndex = i;
563565 }
564566 }
565- TargetArea->setCurrentIndex (NewCurrentIndex);
567+ TargetArea->setCurrentIndex (NewCurrentIndex + TabIndex );
566568 TargetArea->updateTitleBarVisibility ();
567569 return ;
568570}
569571
570572
571573// ============================================================================
572574void DockContainerWidgetPrivate::dropIntoSection (CFloatingDockContainer* FloatingWidget,
573- CDockAreaWidget* TargetArea, DockWidgetArea area)
575+ CDockAreaWidget* TargetArea, DockWidgetArea area, int TabIndex )
574576{
577+ qDebug () << " DockContainerWidgetPrivate::dropIntoSection TabIndex: " << TabIndex;
575578 // Dropping into center means all dock widgets in the dropped floating
576579 // widget will become tabs of the drop area
577580 if (CenterDockWidgetArea == area)
578581 {
579- dropIntoCenterOfSection (FloatingWidget, TargetArea);
582+ dropIntoCenterOfSection (FloatingWidget, TargetArea, TabIndex );
580583 return ;
581584 }
582585
@@ -666,11 +669,15 @@ void DockContainerWidgetPrivate::dropIntoSection(CFloatingDockContainer* Floatin
666669
667670
668671// ============================================================================
669- void DockContainerWidgetPrivate::moveIntoCenterOfSection (QWidget* Widget, CDockAreaWidget* TargetArea)
672+ void DockContainerWidgetPrivate::moveIntoCenterOfSection (QWidget* Widget, CDockAreaWidget* TargetArea,
673+ int TabIndex)
670674{
675+ qDebug () << " DockContainerWidgetPrivate::moveIntoCenterOfSection TabIndex: "
676+ << TabIndex;
671677 auto DroppedDockWidget = qobject_cast<CDockWidget*>(Widget);
672678 auto DroppedArea = qobject_cast<CDockAreaWidget*>(Widget);
673679
680+ TabIndex = (TabIndex < 0 ) ? 0 : TabIndex;
674681 if (DroppedDockWidget)
675682 {
676683 CDockAreaWidget* OldDockArea = DroppedDockWidget->dockAreaWidget ();
@@ -683,7 +690,7 @@ void DockContainerWidgetPrivate::moveIntoCenterOfSection(QWidget* Widget, CDockA
683690 {
684691 OldDockArea->removeDockWidget (DroppedDockWidget);
685692 }
686- TargetArea->insertDockWidget (0 , DroppedDockWidget, true );
693+ TargetArea->insertDockWidget (TabIndex , DroppedDockWidget, true );
687694 }
688695 else
689696 {
@@ -692,9 +699,9 @@ void DockContainerWidgetPrivate::moveIntoCenterOfSection(QWidget* Widget, CDockA
692699 for (int i = 0 ; i < NewDockWidgets.count (); ++i)
693700 {
694701 CDockWidget* DockWidget = NewDockWidgets[i];
695- TargetArea->insertDockWidget (i, DockWidget, false );
702+ TargetArea->insertDockWidget (TabIndex + i, DockWidget, false );
696703 }
697- TargetArea->setCurrentIndex (NewCurrentIndex);
704+ TargetArea->setCurrentIndex (TabIndex + NewCurrentIndex);
698705 DroppedArea->dockContainer ()->removeDockArea (DroppedArea);
699706 DroppedArea->deleteLater ();
700707 }
@@ -705,13 +712,16 @@ void DockContainerWidgetPrivate::moveIntoCenterOfSection(QWidget* Widget, CDockA
705712
706713
707714// ============================================================================
708- void DockContainerWidgetPrivate::moveToNewSection (QWidget* Widget, CDockAreaWidget* TargetArea, DockWidgetArea area)
715+ void DockContainerWidgetPrivate::moveToNewSection (QWidget* Widget, CDockAreaWidget* TargetArea, DockWidgetArea area,
716+ int TabIndex)
709717{
718+ qDebug () << " DockContainerWidgetPrivate::moveToNewSection TabIndex: "
719+ << TabIndex;
710720 // Dropping into center means all dock widgets in the dropped floating
711721 // widget will become tabs of the drop area
712722 if (CenterDockWidgetArea == area)
713723 {
714- moveIntoCenterOfSection (Widget, TargetArea);
724+ moveIntoCenterOfSection (Widget, TargetArea, TabIndex );
715725 return ;
716726 }
717727
@@ -1705,7 +1715,6 @@ void CDockContainerWidget::dropFloatingWidget(CFloatingDockContainer* FloatingWi
17051715 bool Dropped = false ;
17061716
17071717 CDockAreaWidget* DockArea = dockAreaAt (TargetPos);
1708- std::cout << " DockArea: " << DockArea << " dropArea: " << dropArea << std::endl;
17091718 if (DockArea)
17101719 {
17111720 auto dropOverlay = d->DockManager ->dockAreaOverlay ();
@@ -1720,7 +1729,8 @@ void CDockContainerWidget::dropFloatingWidget(CFloatingDockContainer* FloatingWi
17201729 if (dropArea != InvalidDockWidgetArea)
17211730 {
17221731 ADS_PRINT (" Dock Area Drop Content: " << dropArea);
1723- d->dropIntoSection (FloatingWidget, DockArea, dropArea);
1732+ int TabIndex = d->DockManager ->dockAreaOverlay ()->tabIndexUnderCursor ();
1733+ d->dropIntoSection (FloatingWidget, DockArea, dropArea, TabIndex);
17241734 Dropped = true ;
17251735 }
17261736 }
@@ -1773,12 +1783,14 @@ void CDockContainerWidget::dropFloatingWidget(CFloatingDockContainer* FloatingWi
17731783
17741784
17751785// ============================================================================
1776- void CDockContainerWidget::dropWidget (QWidget* Widget, DockWidgetArea DropArea, CDockAreaWidget* TargetAreaWidget)
1786+ void CDockContainerWidget::dropWidget (QWidget* Widget, DockWidgetArea DropArea, CDockAreaWidget* TargetAreaWidget,
1787+ int TabIndex)
17771788{
1789+ qDebug () << " CDockContainerWidget::dropWidget TabIndex: " << TabIndex;
17781790 CDockWidget* SingleDockWidget = topLevelDockWidget ();
17791791 if (TargetAreaWidget)
17801792 {
1781- d->moveToNewSection (Widget, TargetAreaWidget, DropArea);
1793+ d->moveToNewSection (Widget, TargetAreaWidget, DropArea, TabIndex );
17821794 }
17831795 else if (internal::isSideBarArea (DropArea))
17841796 {
0 commit comments