Fixed update of floating widget window title, make disabled close button look nicer, fixed restoring of floating dock container, change save and restore functionality of dock area to save the current dock widget name instead of the current index to ensure that the right dock widget is active in an area if the number of dock widgets changes for some reasons (i.e. in plugin based applications)

This commit is contained in:
Uwe Kindler
2018-11-02 09:19:53 +01:00
parent a9246f7ce4
commit bc6ffcc02c
9 changed files with 168 additions and 70 deletions

View File

@@ -434,17 +434,11 @@ void CDockWidget::toggleView(bool Open)
void CDockWidget::toggleViewInternal(bool Open)
{
CDockContainerWidget* DockContainer = dockContainer();
CDockWidget* TopLevelDockWidget = nullptr;
CDockWidget* TopLevelDockWidgetBefore = nullptr;
if (DockContainer)
{
TopLevelDockWidgetBefore = DockContainer->topLevelDockWidget();
}
CDockWidget* TopLevelDockWidgetBefore = DockContainer
? DockContainer->topLevelDockWidget() : nullptr;
if (Open)
{
TopLevelDockWidget = TopLevelDockWidgetBefore;
d->showDockWidget();
}
else
@@ -460,32 +454,20 @@ void CDockWidget::toggleViewInternal(bool Open)
d->DockArea->toggleDockWidgetView(this, Open);
}
if (!Open && DockContainer)
if (Open && TopLevelDockWidgetBefore)
{
TopLevelDockWidget = DockContainer->topLevelDockWidget();
CDockWidget::emitTopLevelEventForWidget(TopLevelDockWidgetBefore, false);
}
if (TopLevelDockWidget)
CDockWidget* TopLevelDockWidgetAfter = DockContainer
? DockContainer->topLevelDockWidget() : nullptr;
CDockWidget::emitTopLevelEventForWidget(TopLevelDockWidgetAfter, true);
CFloatingDockContainer* FloatingContainer = DockContainer->floatingWidget();
if (FloatingContainer)
{
CDockWidget::emitTopLevelEventForWidget(TopLevelDockWidget, !Open);
FloatingContainer->updateWindowTitle();
}
CDockWidget* TopLevelDockWidgetAfter = nullptr;
if (DockContainer)
{
TopLevelDockWidgetAfter = DockContainer->topLevelDockWidget();
}
if (TopLevelDockWidgetAfter != TopLevelDockWidgetBefore)
{
CFloatingDockContainer* FloatingContainer = qobject_cast<CFloatingDockContainer*>(DockContainer->parentWidget());
if (FloatingContainer)
{
FloatingContainer->updateWindowTitle(TopLevelDockWidgetAfter ? TopLevelDockWidgetAfter->windowTitle() : "");
}
}
if (!Open)
{
emit closed();