Fix a bug where overlay widgets from another container widget

would not be correctly transferred into the container widget that it's
dragged into.
This commit is contained in:
Syarif Fakhri
2022-09-06 17:42:26 +08:00
parent 6e35a9e7a7
commit fde133c25e
7 changed files with 82 additions and 57 deletions

View File

@@ -100,7 +100,6 @@ struct DockManagerPrivate
CDockManager* _this;
QList<CFloatingDockContainer*> FloatingWidgets;
QList<CFloatingDockContainer*> HiddenFloatingWidgets;
QList<COverlayDockContainer*> OverlayWidgets;
QList<CDockContainerWidget*> Containers;
CDockOverlay* ContainerOverlay;
CDockOverlay* DockAreaOverlay;
@@ -148,15 +147,6 @@ struct DockManagerPrivate
}
}
void deleteOverlayWidgets()
{
for (auto OverlayWidget : OverlayWidgets)
{
OverlayWidget->cleanupAndDelete();
}
OverlayWidgets.clear();
}
void markDockWidgetsDirty()
{
for (auto DockWidget : DockWidgetsMap)
@@ -441,7 +431,7 @@ bool DockManagerPrivate::restoreState(const QByteArray& State, int version)
// Hide updates of floating widgets from use
hideFloatingWidgets();
deleteOverlayWidgets();
_this->deleteOverlayWidgets();
markDockWidgetsDirty();
if (!restoreStateFromXml(state, version))
@@ -539,12 +529,6 @@ CDockManager::~CDockManager()
delete FloatingWidget;
}
auto OverlayWidgets = d->OverlayWidgets;
for (auto OverlayWidget : OverlayWidgets)
{
delete OverlayWidget;
}
delete d;
}
@@ -636,14 +620,6 @@ void CDockManager::registerFloatingWidget(CFloatingDockContainer* FloatingWidget
ADS_PRINT("d->FloatingWidgets.count() " << d->FloatingWidgets.count());
}
//============================================================================
void CDockManager::registerOverlayWidget(COverlayDockContainer* OverlayWidget)
{
d->OverlayWidgets.append(OverlayWidget);
Q_EMIT overlayWidgetCreated(OverlayWidget);
ADS_PRINT("d->OverlayWidgets.count() " << d->OverlayWidgets.count());
}
//============================================================================
void CDockManager::removeFloatingWidget(CFloatingDockContainer* FloatingWidget)
@@ -651,12 +627,6 @@ void CDockManager::removeFloatingWidget(CFloatingDockContainer* FloatingWidget)
d->FloatingWidgets.removeAll(FloatingWidget);
}
//============================================================================
void CDockManager::removeOverlayWidget(COverlayDockContainer* OverlayWidget)
{
d->OverlayWidgets.removeAll(OverlayWidget);
}
//============================================================================
void CDockManager::registerDockContainer(CDockContainerWidget* DockContainer)
{