Skip to content

Commit 0b82ff3

Browse files
Fix issue #351: #351 (#357)
1 parent 130b0de commit 0b82ff3

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

src/DockContainerWidget.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1565,8 +1565,9 @@ void CDockContainerWidget::dropFloatingWidget(CFloatingDockContainer* FloatingWi
15651565
}
15661566

15671567
if (Dropped)
1568-
{
1569-
FloatingWidget->deleteLater();
1568+
{
1569+
// Fix https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/351
1570+
FloatingWidget->hideAndDeleteLater();
15701571

15711572
// If we dropped a floating widget with only one single dock widget, then we
15721573
// drop a top level widget that changes from floating to docked now

src/FloatingDockContainer.cpp

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,7 @@ struct FloatingDockContainerPrivate
373373
CDockAreaWidget *SingleDockArea = nullptr;
374374
QPoint DragStartPos;
375375
bool Hiding = false;
376+
bool AutoHideChildren = true;
376377
#ifdef Q_OS_LINUX
377378
QWidget* MouseEventHandler = nullptr;
378379
CFloatingWidgetTitleBar* TitleBar = nullptr;
@@ -841,15 +842,18 @@ void CFloatingDockContainer::hideEvent(QHideEvent *event)
841842
return;
842843
}
843844

844-
d->Hiding = true;
845-
for (auto DockArea : d->DockContainer->openedDockAreas())
845+
if ( d->AutoHideChildren )
846846
{
847-
for (auto DockWidget : DockArea->openedDockWidgets())
847+
d->Hiding = true;
848+
for ( auto DockArea : d->DockContainer->openedDockAreas() )
848849
{
849-
DockWidget->toggleView(false);
850+
for ( auto DockWidget : DockArea->openedDockWidgets() )
851+
{
852+
DockWidget->toggleView( false );
853+
}
850854
}
855+
d->Hiding = false;
851856
}
852-
d->Hiding = false;
853857
}
854858

855859

@@ -1035,6 +1039,18 @@ QList<CDockWidget*> CFloatingDockContainer::dockWidgets() const
10351039
return d->DockContainer->dockWidgets();
10361040
}
10371041

1042+
//============================================================================
1043+
void CFloatingDockContainer::hideAndDeleteLater()
1044+
{
1045+
// Widget has been redocked, so it must be hidden right way (see
1046+
// https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/351)
1047+
// but AutoHideChildren must be set to false because "this" still contains
1048+
// dock widgets that shall not be toggled hidden.
1049+
d->AutoHideChildren = false;
1050+
hide();
1051+
deleteLater();
1052+
}
1053+
10381054
//============================================================================
10391055
void CFloatingDockContainer::finishDragging()
10401056
{

src/FloatingDockContainer.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,11 @@ private Q_SLOTS:
258258
*/
259259
QList<CDockWidget*> dockWidgets() const;
260260

261+
/**
262+
* This function hides the floating bar instantely and delete it later.
263+
*/
264+
void hideAndDeleteLater();
265+
261266
#ifdef Q_OS_LINUX
262267
/**
263268
* This is a function that responds to FloatingWidgetTitleBar::maximizeRequest()

0 commit comments

Comments
 (0)