Also clear the overlay internals when floating an overlay

Fixes a crash.

Relates to #162
This commit is contained in:
Sergio Martins
2021-02-05 16:29:27 +00:00
parent f1e4f7ecda
commit 621c3dbeca
5 changed files with 28 additions and 8 deletions

View File

@@ -486,16 +486,25 @@ void MainWindowBase::toggleOverlayOnSideBar(DockWidgetBase *dw)
}
}
void MainWindowBase::clearSideBarOverlay()
void MainWindowBase::clearSideBarOverlay(bool deleteFrame)
{
if (!d->m_overlayedDockWidget)
return;
Frame *frame = d->m_overlayedDockWidget->frame();
d->m_overlayedDockWidget->setParent(nullptr);
Q_EMIT d->m_overlayedDockWidget->isOverlayedChanged(false);
d->m_overlayedDockWidget = nullptr;
delete frame;
frame->unoverlay();
if (deleteFrame) {
d->m_overlayedDockWidget->setParent(nullptr);
Q_EMIT d->m_overlayedDockWidget->isOverlayedChanged(false);
d->m_overlayedDockWidget = nullptr;
delete frame;
} else {
// No cleanup, just unset. When we drag the overlay it becomes a normal floating window
// meaning we reuse Frame. Don't delete it.
Q_EMIT d->m_overlayedDockWidget->isOverlayedChanged(false);
d->m_overlayedDockWidget = nullptr;
}
}
SideBar *MainWindowBase::sideBarForDockWidget(const DockWidgetBase *dw) const