From 59dc43adf637511d92373d83eb8154aff365bf00 Mon Sep 17 00:00:00 2001 From: itsdaxen Date: Sat, 8 Aug 2026 01:28:11 +0300 Subject: [PATCH] Make restoreState restore the focused dock widget --- src/DockManager.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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; }