@@ -262,12 +262,16 @@ IFloatingWidget* DockAreaTitleBarPrivate::makeAreaFloating(const QPoint& Offset,
262
262
{
263
263
QSize Size = DockArea->size ();
264
264
this ->DragState = DragState;
265
- bool OpaqueUndocking = CDockManager::testConfigFlag (CDockManager::OpaqueUndocking) ||
266
- (DraggingFloatingWidget != DragState);
265
+ bool CreateFloatingDockContainer = CDockManager::testConfigFlag (
266
+ CDockManager::OpaqueUndocking) || (DraggingFloatingWidget != DragState);
267
267
CFloatingDockContainer* FloatingDockContainer = nullptr ;
268
268
IFloatingWidget* FloatingWidget;
269
- if (OpaqueUndocking )
269
+ if (CreateFloatingDockContainer )
270
270
{
271
+ if (DockArea->autoHideDockContainer ())
272
+ {
273
+ DockArea->autoHideDockContainer ()->cleanupAndDelete ();
274
+ }
271
275
FloatingWidget = FloatingDockContainer = new CFloatingDockContainer (DockArea);
272
276
}
273
277
else
@@ -297,7 +301,7 @@ IFloatingWidget* DockAreaTitleBarPrivate::makeAreaFloating(const QPoint& Offset,
297
301
// ============================================================================
298
302
void DockAreaTitleBarPrivate::startFloating (const QPoint& Offset)
299
303
{
300
- if (DockArea->autoHideDockContainer () != nullptr )
304
+ if (DockArea->autoHideDockContainer ())
301
305
{
302
306
DockArea->autoHideDockContainer ()->hide ();
303
307
}
@@ -428,11 +432,6 @@ void CDockAreaTitleBar::onUndockButtonClicked()
428
432
{
429
433
if (d->DockArea ->features ().testFlag (CDockWidget::DockWidgetFloatable))
430
434
{
431
- if (d->DockArea ->autoHideDockContainer ())
432
- {
433
- d->DockArea ->autoHideDockContainer ()->cleanupAndDelete ();
434
- }
435
-
436
435
d->makeAreaFloating (mapFromGlobal (QCursor::pos ()), DraggingInactive);
437
436
}
438
437
}
@@ -590,6 +589,10 @@ void CDockAreaTitleBar::mouseReleaseEvent(QMouseEvent* ev)
590
589
if (ev->button () == Qt::LeftButton)
591
590
{
592
591
ADS_PRINT (" CDockAreaTitleBar::mouseReleaseEvent" );
592
+ if (CDockManager::testConfigFlag (CDockManager::OpaqueUndocking))
593
+ {
594
+ releaseMouse ();
595
+ }
593
596
ev->accept ();
594
597
auto CurrentDragState = d->DragState ;
595
598
d->DragStartMousePos = QPoint ();
@@ -650,6 +653,10 @@ void CDockAreaTitleBar::mouseMoveEvent(QMouseEvent* ev)
650
653
d->startFloating (d->DragStartMousePos );
651
654
auto Overlay = d->DockArea ->dockManager ()->containerOverlay ();
652
655
Overlay->setAllowedAreas (OuterDockAreas);
656
+ if (CDockManager::testConfigFlag (CDockManager::OpaqueUndocking))
657
+ {
658
+ grabMouse ();
659
+ }
653
660
}
654
661
655
662
return ;
@@ -671,10 +678,6 @@ void CDockAreaTitleBar::mouseDoubleClickEvent(QMouseEvent *event)
671
678
{
672
679
return ;
673
680
}
674
- if (d->DockArea ->autoHideDockContainer ())
675
- {
676
- d->DockArea ->autoHideDockContainer ()->cleanupAndDelete ();
677
- }
678
681
679
682
d->makeAreaFloating (event->pos (), DraggingInactive);
680
683
}
0 commit comments