@@ -262,12 +262,16 @@ IFloatingWidget* DockAreaTitleBarPrivate::makeAreaFloating(const QPoint& Offset,
262262{
263263 QSize Size = DockArea->size ();
264264 this ->DragState = DragState;
265- bool OpaqueUndocking = CDockManager::testConfigFlag (CDockManager::OpaqueUndocking) ||
266- (DraggingFloatingWidget != DragState);
265+ bool CreateFloatingDockContainer = CDockManager::testConfigFlag (
266+ CDockManager::OpaqueUndocking) || (DraggingFloatingWidget != DragState);
267267 CFloatingDockContainer* FloatingDockContainer = nullptr ;
268268 IFloatingWidget* FloatingWidget;
269- if (OpaqueUndocking )
269+ if (CreateFloatingDockContainer )
270270 {
271+ if (DockArea->autoHideDockContainer ())
272+ {
273+ DockArea->autoHideDockContainer ()->cleanupAndDelete ();
274+ }
271275 FloatingWidget = FloatingDockContainer = new CFloatingDockContainer (DockArea);
272276 }
273277 else
@@ -297,7 +301,7 @@ IFloatingWidget* DockAreaTitleBarPrivate::makeAreaFloating(const QPoint& Offset,
297301// ============================================================================
298302void DockAreaTitleBarPrivate::startFloating (const QPoint& Offset)
299303{
300- if (DockArea->autoHideDockContainer () != nullptr )
304+ if (DockArea->autoHideDockContainer ())
301305 {
302306 DockArea->autoHideDockContainer ()->hide ();
303307 }
@@ -428,11 +432,6 @@ void CDockAreaTitleBar::onUndockButtonClicked()
428432{
429433 if (d->DockArea ->features ().testFlag (CDockWidget::DockWidgetFloatable))
430434 {
431- if (d->DockArea ->autoHideDockContainer ())
432- {
433- d->DockArea ->autoHideDockContainer ()->cleanupAndDelete ();
434- }
435-
436435 d->makeAreaFloating (mapFromGlobal (QCursor::pos ()), DraggingInactive);
437436 }
438437}
@@ -590,6 +589,10 @@ void CDockAreaTitleBar::mouseReleaseEvent(QMouseEvent* ev)
590589 if (ev->button () == Qt::LeftButton)
591590 {
592591 ADS_PRINT (" CDockAreaTitleBar::mouseReleaseEvent" );
592+ if (CDockManager::testConfigFlag (CDockManager::OpaqueUndocking))
593+ {
594+ releaseMouse ();
595+ }
593596 ev->accept ();
594597 auto CurrentDragState = d->DragState ;
595598 d->DragStartMousePos = QPoint ();
@@ -650,6 +653,10 @@ void CDockAreaTitleBar::mouseMoveEvent(QMouseEvent* ev)
650653 d->startFloating (d->DragStartMousePos );
651654 auto Overlay = d->DockArea ->dockManager ()->containerOverlay ();
652655 Overlay->setAllowedAreas (OuterDockAreas);
656+ if (CDockManager::testConfigFlag (CDockManager::OpaqueUndocking))
657+ {
658+ grabMouse ();
659+ }
653660 }
654661
655662 return ;
@@ -671,10 +678,6 @@ void CDockAreaTitleBar::mouseDoubleClickEvent(QMouseEvent *event)
671678 {
672679 return ;
673680 }
674- if (d->DockArea ->autoHideDockContainer ())
675- {
676- d->DockArea ->autoHideDockContainer ()->cleanupAndDelete ();
677- }
678681
679682 d->makeAreaFloating (event->pos (), DraggingInactive);
680683}
0 commit comments