Skip to content

Commit 3f09d5c

Browse files
Fixed initial position for CFloatingDockContainer when dragging a tab outside of the tabbar
1 parent 3407945 commit 3f09d5c

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

src/DockWidgetTab.cpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)