diff --git a/src/libs/advanceddockingsystem/dockmanager.cpp b/src/libs/advanceddockingsystem/dockmanager.cpp index 80e45881256..39b7062c098 100644 --- a/src/libs/advanceddockingsystem/dockmanager.cpp +++ b/src/libs/advanceddockingsystem/dockmanager.cpp @@ -98,6 +98,7 @@ namespace ADS bool m_autorestoreLastWorkspace; // This option is set in the Workspace Manager! QSettings *m_settings = nullptr; QString m_workspacePresetsPath; + bool m_modeChangeState; /** * Private data constructor @@ -576,6 +577,9 @@ namespace ADS bool DockManager::save() { + if (isModeChangeState()) + return false; + emit aboutToSaveWorkspace(); bool result = write(activeWorkspace(), saveState(), parentWidget()); @@ -836,6 +840,16 @@ namespace ADS return result; } + void DockManager::setModeChangeState(bool value) + { + d->m_modeChangeState = value; + } + + bool DockManager::isModeChangeState() const + { + return d->m_modeChangeState; + } + bool DockManager::write(const QString &workspace, const QByteArray &data, QString *errorString) const { Utils::FilePath filename = workspaceNameToFileName(workspace); diff --git a/src/libs/advanceddockingsystem/dockmanager.h b/src/libs/advanceddockingsystem/dockmanager.h index e52646437f9..a987a1977b3 100644 --- a/src/libs/advanceddockingsystem/dockmanager.h +++ b/src/libs/advanceddockingsystem/dockmanager.h @@ -473,6 +473,9 @@ public: bool isWorkspacePreset(const QString &workspace) const; + void setModeChangeState(bool value); + bool isModeChangeState() const; + signals: void aboutToUnloadWorkspace(QString workspaceName); void aboutToLoadWorkspace(QString workspaceName); diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp index 29bb90f51fe..d92bf6f6b3c 100644 --- a/src/plugins/qmldesigner/designmodewidget.cpp +++ b/src/plugins/qmldesigner/designmodewidget.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include #include @@ -381,6 +382,23 @@ void DesignModeWidget::setup() setupNavigatorHistory(currentDesignDocument()->textEditor()); m_dockManager->initialize(); + + connect(Core::ModeManager::instance(), &Core::ModeManager::currentModeChanged, + this, [this](Core::Id mode, Core::Id oldMode) { + if (mode == Core::Constants::MODE_DESIGN) { + m_dockManager->reloadActiveWorkspace(); + m_dockManager->setModeChangeState(false); + } + + if (oldMode == Core::Constants::MODE_DESIGN + && mode != Core::Constants::MODE_DESIGN) { + m_dockManager->save(); + m_dockManager->setModeChangeState(true); + for (auto floatingWidget : m_dockManager->floatingWidgets()) + floatingWidget->hide(); + } + }); + viewManager().enableWidgets(); readSettings(); show();