diff --git a/sources/editor/ui/qetelementeditor.cpp b/sources/editor/ui/qetelementeditor.cpp index 8a5df0ee2..28712d4ac 100644 --- a/sources/editor/ui/qetelementeditor.cpp +++ b/sources/editor/ui/qetelementeditor.cpp @@ -78,8 +78,9 @@ QETElementEditor::QETElementEditor(QWidget *parent) : //ui->m_display_menu->insertMenu(ui->m_zoom_in_action, menu); setWindowState(Qt::WindowMaximized); - readSettings(); + readSettings(); // restoreGeometry before show() show(); + readSettingsState(); // restoreState() must be called after show() in Qt6 } /** @@ -951,16 +952,28 @@ void QETElementEditor::readSettings() restoreGeometry(geometry.toByteArray()); } - QVariant state = settings.value("elementeditor/state"); - if (state.isValid()) { - restoreState(state.toByteArray()); - } - auto data = m_elmt_scene->elementData(); data.m_drawing_information = settings.value("elementeditor/default-informations", "").toString(); m_elmt_scene->setElementData(data); } +/** + * @brief QETElementEditor::readSettingsState + * Restore the window state (docks, toolbars). + * Must be called AFTER show() in Qt6 for restoreState() to work correctly. + */ +void QETElementEditor::readSettingsState() +{ + QSettings settings; + + QVariant state = settings.value("elementeditor/state"); + if (state.isValid()) { + if (!restoreState(state.toByteArray())) { + settings.remove("elementeditor/state"); + } + } +} + /** * @brief QETElementEditor::writeSettings * Write some setting of this widget in the diff --git a/sources/editor/ui/qetelementeditor.h b/sources/editor/ui/qetelementeditor.h index 579d9bab4..b164017f8 100644 --- a/sources/editor/ui/qetelementeditor.h +++ b/sources/editor/ui/qetelementeditor.h @@ -116,6 +116,7 @@ class QETElementEditor : public QMainWindow private: bool canClose(); void readSettings(); + void readSettingsState(); void writeSettings() const; void setupActions(); void updateAction(); diff --git a/sources/qetapp.cpp b/sources/qetapp.cpp index d8afcc34b..0463be2ee 100644 --- a/sources/qetapp.cpp +++ b/sources/qetapp.cpp @@ -1975,6 +1975,7 @@ void QETApp::openTitleBlockTemplate(const TitleBlockTemplateLocation &location, qet_template_editor -> setOpenForDuplication(duplicate); qet_template_editor -> edit(location); qet_template_editor -> show(); + qet_template_editor -> readSettingsState(); // must run after show() in Qt6 } /** @@ -1986,6 +1987,7 @@ void QETApp::openTitleBlockTemplate(const QString &filepath) { QETTitleBlockTemplateEditor *qet_template_editor = new QETTitleBlockTemplateEditor(); qet_template_editor -> edit(filepath); qet_template_editor -> show(); + qet_template_editor -> readSettingsState(); // must run after show() in Qt6 } /** diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index 6e5e5d1d6..a17412a72 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -135,8 +135,9 @@ QETDiagramEditor::QETDiagramEditor(const QStringList &files, QWidget *parent) : connect(&m_workspace, &QMdiArea::subWindowActivated, this, &QETDiagramEditor::subWindowActivated); connect(QApplication::clipboard(), &QClipboard::dataChanged, this, &QETDiagramEditor::slot_updatePasteAction); - readSettings(); + readSettings(); // restoreGeometry before show() show(); + readSettingsState(); // restoreState() must be called after show() in Qt6 //If valid file path is given as arguments uint opened_projects = 0; @@ -2227,10 +2228,6 @@ void QETDiagramEditor::readSettings() QVariant geometry = settings.value("diagrameditor/geometry"); if (geometry.isValid()) restoreGeometry(geometry.toByteArray()); - // etat de la fenetre (barres d'outils, docks...) - QVariant state = settings.value("diagrameditor/state"); - if (state.isValid()) restoreState(state.toByteArray()); - // gestion des projets (onglets ou fenetres) bool tabbed = settings.value("diagrameditor/viewmode", "tabbed") == "tabbed"; if (tabbed) { @@ -2240,6 +2237,24 @@ void QETDiagramEditor::readSettings() } } +/** + @brief QETDiagramEditor::readSettingsState + Restore the window state (docks, toolbars). + Must be called AFTER show() in Qt6 for restoreState() to work correctly. +*/ +void QETDiagramEditor::readSettingsState() +{ + QSettings settings; + + // etat de la fenetre (barres d'outils, docks...) + QVariant state = settings.value("diagrameditor/state"); + if (state.isValid()) { + if (!restoreState(state.toByteArray())) { + settings.remove("diagrameditor/state"); + } + } +} + /** @brief QETDiagramEditor::writeSettings Write the settings diff --git a/sources/qetdiagrameditor.h b/sources/qetdiagrameditor.h index a1b08c037..31e6ce82c 100644 --- a/sources/qetdiagrameditor.h +++ b/sources/qetdiagrameditor.h @@ -127,6 +127,7 @@ class QETDiagramEditor : public QETMainWindow void setWindowedMode(); void setTabbedMode(); void readSettings(); + void readSettingsState(); void writeSettings(); void activateProject(QETProject *); void activateProject(ProjectView *); diff --git a/sources/titleblock/qettemplateeditor.cpp b/sources/titleblock/qettemplateeditor.cpp index 3a316f15b..e3a44ecbb 100644 --- a/sources/titleblock/qettemplateeditor.cpp +++ b/sources/titleblock/qettemplateeditor.cpp @@ -358,6 +358,7 @@ void QETTitleBlockTemplateEditor::newTemplate() QETTitleBlockTemplateEditor *qet_template_editor = new QETTitleBlockTemplateEditor(); qet_template_editor -> edit(TitleBlockTemplateLocation()); qet_template_editor -> show(); + qet_template_editor -> readSettingsState(); // must run after show() in Qt6 } /** @@ -645,10 +646,25 @@ void QETTitleBlockTemplateEditor::readSettings() // window size and position QVariant geometry = settings.value("titleblocktemplateeditor/geometry"); if (geometry.isValid()) restoreGeometry(geometry.toByteArray()); +} + +/** + @brief QETTitleBlockTemplateEditor::readSettingsState + Restore the window state (docks, toolbars). + Must be called AFTER show() in Qt6 for restoreState() to work correctly + -- callers are responsible for calling this after show(), since this + window isn't shown by its own constructor. +*/ +void QETTitleBlockTemplateEditor::readSettingsState() +{ + QSettings settings; - // window state (toolbars, docks...) QVariant state = settings.value("titleblocktemplateeditor/state"); - if (state.isValid()) restoreState(state.toByteArray()); + if (state.isValid()) { + if (!restoreState(state.toByteArray())) { + settings.remove("titleblocktemplateeditor/state"); + } + } } /** diff --git a/sources/titleblock/qettemplateeditor.h b/sources/titleblock/qettemplateeditor.h index 67ac3c231..cfb6709b7 100644 --- a/sources/titleblock/qettemplateeditor.h +++ b/sources/titleblock/qettemplateeditor.h @@ -108,6 +108,7 @@ class QETTitleBlockTemplateEditor : public QETMainWindow { public slots: void readSettings(); + void readSettingsState(); void writeSettings(); void selectedCellsChanged(const QList&); void duplicateCurrentLocation();