diff --git a/src/DockManager.cpp b/src/DockManager.cpp index 1d65bf22..0523a05e 100644 --- a/src/DockManager.cpp +++ b/src/DockManager.cpp @@ -123,6 +123,7 @@ struct DockManagerPrivate bool RestoringState = false; QVector UninitializedFloatingWidgets; CDockFocusController* FocusController = nullptr; + QString RestoredFocusedDockWidget; CDockWidget* CentralWidget = nullptr; bool IsLeavingMinimized = false; Qt::ToolButtonStyle ToolBarStyleDocked = Qt::ToolButtonIconOnly; @@ -336,6 +337,12 @@ bool DockManagerPrivate::restoreStateFromXml(const QByteArray &state, int versi } } + if (!Testing) + { + // Store the saved focused dock widget name so it can be reapplied after stale focus styling is cleared. + RestoredFocusedDockWidget = s.attributes().value("FocusedDockWidget").toString(); + } + int DockContainerCount = 0; while (s.readNextStartElement()) { @@ -871,6 +878,10 @@ QByteArray CDockManager::saveState(int version) const { s.writeAttribute("CentralWidget", d->CentralWidget->objectName()); } + if (auto FocusedDockWidget = focusedDockWidget()) + { + s.writeAttribute("FocusedDockWidget", FocusedDockWidget->objectName()); + } for (auto Container : d->Containers) { Container->saveState(s); @@ -916,6 +927,13 @@ bool CDockManager::restoreState(const QByteArray &state, int version) show(); } Q_EMIT stateRestored(); + if (Result && !d->RestoredFocusedDockWidget.isEmpty()) + { + if (auto DockWidget = findDockWidget(d->RestoredFocusedDockWidget)) + { + setDockWidgetFocused(DockWidget); + } + } return Result; }