diff --git a/src/blackgui/guiapplication.cpp b/src/blackgui/guiapplication.cpp index 7f791bc1f..3e0ba86ea 100644 --- a/src/blackgui/guiapplication.cpp +++ b/src/blackgui/guiapplication.cpp @@ -59,6 +59,7 @@ #include #include #include +#include #include #include #include @@ -411,12 +412,26 @@ namespace BlackGui return filename; } + int CGuiApplication::hashForStateSettingsSchema(const QMainWindow *window) + { + unsigned int hash = 0; + for (auto obj : window->findChildren(QString(), Qt::FindDirectChildrenOnly)) + { + hash ^= qHash(obj->objectName()); + } + for (auto obj : window->findChildren(QString(), Qt::FindDirectChildrenOnly)) + { + hash ^= qHash(obj->objectName()); + } + return static_cast((hash & 0xffff) ^ (hash >> 16)); + } + bool CGuiApplication::saveWindowGeometryAndState(const QMainWindow *window) const { if (!window) { return false; } QSettings settings(fileForWindowGeometryAndStateSettings(), QSettings::IniFormat); settings.setValue("geometry", window->saveGeometry()); - settings.setValue("windowState", window->saveState()); + settings.setValue("windowState", window->saveState(hashForStateSettingsSchema(window))); return true; } @@ -466,7 +481,7 @@ namespace BlackGui logSub.changeSubscription(pattern); window->restoreGeometry(g); - window->restoreState(s); + window->restoreState(s, hashForStateSettingsSchema(window)); } return true; } diff --git a/src/blackgui/guiapplication.h b/src/blackgui/guiapplication.h index 3e0714cc7..c777f95df 100644 --- a/src/blackgui/guiapplication.h +++ b/src/blackgui/guiapplication.h @@ -399,6 +399,9 @@ namespace BlackGui //! Settings ini filename static const QString &fileForWindowGeometryAndStateSettings(); + + //! Hash of names of toolbars and dockwidgets + static int hashForStateSettingsSchema(const QMainWindow *window); }; } // ns