@@ -68,6 +68,7 @@ struct DockWidgetTabPrivate
6868 QLabel* IconLabel = nullptr ;
6969 tTabLabel* TitleLabel;
7070 QPoint GlobalDragStartMousePosition;
71+ QPoint DragStartMousePosition;
7172 bool IsActiveTab = false ;
7273 CDockAreaWidget* DockArea = nullptr ;
7374 eDragState DragState = DraggingInactive;
@@ -150,6 +151,15 @@ struct DockWidgetTabPrivate
150151 return w;
151152 }
152153 }
154+
155+ /* *
156+ * Saves the drag start position in global and local coordinates
157+ */
158+ void saveDragStartMousePosition (const QPoint& GlobalPos)
159+ {
160+ GlobalDragStartMousePosition = GlobalPos;
161+ DragStartMousePosition = _this->mapFromGlobal (GlobalPos);
162+ }
153163};
154164// struct DockWidgetTabPrivate
155165
@@ -229,7 +239,6 @@ bool DockWidgetTabPrivate::startFloating(eDragState DraggingState)
229239
230240 ADS_PRINT (" startFloating" );
231241 DragState = DraggingState;
232- auto DragStartMousePosition = _this->mapFromGlobal (GlobalDragStartMousePosition);
233242 QSize Size = DockArea->size ();
234243 IFloatingWidget* FloatingWidget = nullptr ;
235244 bool OpaqueUndocking = CDockManager::configFlags ().testFlag (CDockManager::OpaqueUndocking) ||
@@ -287,7 +296,7 @@ void CDockWidgetTab::mousePressEvent(QMouseEvent* ev)
287296 if (ev->button () == Qt::LeftButton)
288297 {
289298 ev->accept ();
290- d->GlobalDragStartMousePosition = ev->globalPos ();
299+ d->saveDragStartMousePosition ( ev->globalPos () );
291300 d->DragState = DraggingMousePressed;
292301 emit clicked ();
293302 return ;
@@ -304,6 +313,7 @@ void CDockWidgetTab::mouseReleaseEvent(QMouseEvent* ev)
304313 {
305314 auto CurrentDragState = d->DragState ;
306315 d->GlobalDragStartMousePosition = QPoint ();
316+ d->DragStartMousePosition = QPoint ();
307317 d->DragState = DraggingInactive;
308318
309319 switch (CurrentDragState)
@@ -412,7 +422,7 @@ void CDockWidgetTab::contextMenuEvent(QContextMenuEvent* ev)
412422 return ;
413423 }
414424
415- d->GlobalDragStartMousePosition = ev->globalPos ();
425+ d->saveDragStartMousePosition ( ev->globalPos () );
416426 QMenu Menu (this );
417427
418428 const bool isFloatable = d->DockWidget ->features ().testFlag (CDockWidget::DockWidgetFloatable);
@@ -542,7 +552,7 @@ void CDockWidgetTab::mouseDoubleClickEvent(QMouseEvent *event)
542552 if ((!d->DockArea ->dockContainer ()->isFloating () || d->DockArea ->dockWidgetsCount () > 1 )
543553 && d->DockWidget ->features ().testFlag (CDockWidget::DockWidgetFloatable))
544554 {
545- d->GlobalDragStartMousePosition = event->globalPos ();
555+ d->saveDragStartMousePosition ( event->globalPos () );
546556 d->startFloating (DraggingInactive);
547557 }
548558
@@ -585,7 +595,8 @@ void CDockWidgetTab::detachDockWidget()
585595 {
586596 return ;
587597 }
588- d->GlobalDragStartMousePosition = QCursor::pos ();
598+
599+ d->saveDragStartMousePosition (QCursor::pos ());
589600 d->startFloating (DraggingInactive);
590601}
591602
0 commit comments