diff options
author | Henning Gruendl <henning.gruendl@qt.io> | 2023-11-23 12:33:21 +0100 |
---|---|---|
committer | Henning Gründl <henning.gruendl@qt.io> | 2023-11-24 13:36:10 +0000 |
commit | b5da50338e39650a58669f0b933017f5e0bd50ea (patch) | |
tree | 1995af7d420bda52afe625ae7cad78748860ef09 | |
parent | 66bda77d432f3039c222e9621b08b5347bdcbcd4 (diff) |
ADS: Prevent saving not displayed workspace
Prevent saving a workspace that was never shown, e.g. only welcome page
was shown and QtDS was closed again. This scenario causes the workspace
to have wrong sizes hence the next time this workspace will be shown
it will look distorted.
This behavior is a result of the startup workspace always being loaded
and always saved. If the workspace was never visually shown, it didn't
get the correct geometry from the main window which results in wrong
sizes of splitters in the workspace.
Change-Id: I780b561e98e72f7d48becf32d178fb600b5d4336
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
-rw-r--r-- | src/libs/advanceddockingsystem/dockmanager.cpp | 12 | ||||
-rw-r--r-- | src/libs/advanceddockingsystem/dockmanager.h | 7 | ||||
-rw-r--r-- | src/libs/advanceddockingsystem/workspace.cpp | 10 | ||||
-rw-r--r-- | src/libs/advanceddockingsystem/workspace.h | 4 | ||||
-rw-r--r-- | src/plugins/qmldesigner/designmodewidget.cpp | 1 |
5 files changed, 18 insertions, 16 deletions
diff --git a/src/libs/advanceddockingsystem/dockmanager.cpp b/src/libs/advanceddockingsystem/dockmanager.cpp index 15e7a9dbb1..af66f03b1a 100644 --- a/src/libs/advanceddockingsystem/dockmanager.cpp +++ b/src/libs/advanceddockingsystem/dockmanager.cpp @@ -94,6 +94,7 @@ public: QtcSettings *m_settings = nullptr; bool m_modeChangeState = false; + bool m_wasShown = false; bool m_workspaceOrderDirty = false; /** @@ -364,8 +365,10 @@ DockManager::DockManager(QWidget *parent) DockManager::~DockManager() { - emit aboutToUnloadWorkspace(d->m_workspace.fileName()); - save(); + if (d->m_wasShown) { + emit aboutToUnloadWorkspace(d->m_workspace.fileName()); + save(); + } saveStartupWorkspace(); saveLockWorkspace(); @@ -1324,6 +1327,11 @@ bool DockManager::isModeChangeState() const return d->m_modeChangeState; } +void DockManager::aboutToShow() +{ + d->m_wasShown = true; +} + expected_str<QString> DockManager::importWorkspace(const QString &filePath) { qCInfo(adsLog) << "Import workspace" << filePath; diff --git a/src/libs/advanceddockingsystem/dockmanager.h b/src/libs/advanceddockingsystem/dockmanager.h index c11bd6ebb1..015e672434 100644 --- a/src/libs/advanceddockingsystem/dockmanager.h +++ b/src/libs/advanceddockingsystem/dockmanager.h @@ -733,6 +733,13 @@ public: static QString readDisplayName(const Utils::FilePath &filePath); static bool writeDisplayName(const Utils::FilePath &filePath, const QString &displayName); + /** + * This is used to limit saving of workspaces to only when they were actually presented ones, + * otherwise it could lead to distorted workspace due to the correct windows sizes not being + * set when never presented/rendered. + */ + void aboutToShow(); + signals: void aboutToUnloadWorkspace(QString fileName); void aboutToLoadWorkspace(QString fileName); diff --git a/src/libs/advanceddockingsystem/workspace.cpp b/src/libs/advanceddockingsystem/workspace.cpp index 760e2c7dd1..d3b0785d90 100644 --- a/src/libs/advanceddockingsystem/workspace.cpp +++ b/src/libs/advanceddockingsystem/workspace.cpp @@ -41,16 +41,6 @@ const QString &Workspace::name() const return m_name; } -void Workspace::setLocked(bool value) -{ - m_locked = value; -} - -bool Workspace::isLocked() const -{ - return m_locked; -} - const Utils::FilePath &Workspace::filePath() const { return m_filePath; diff --git a/src/libs/advanceddockingsystem/workspace.h b/src/libs/advanceddockingsystem/workspace.h index 5e96e5a981..c23db55d6b 100644 --- a/src/libs/advanceddockingsystem/workspace.h +++ b/src/libs/advanceddockingsystem/workspace.h @@ -18,9 +18,6 @@ public: void setName(const QString &name); const QString &name() const; - void setLocked(bool value); - bool isLocked() const; - const Utils::FilePath &filePath() const; QString fileName() const; @@ -53,7 +50,6 @@ private: QString m_name; Utils::FilePath m_filePath; bool m_preset = false; - bool m_locked = false; }; } // namespace ADS diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp index bc566f4f75..fdbcb670b7 100644 --- a/src/plugins/qmldesigner/designmodewidget.cpp +++ b/src/plugins/qmldesigner/designmodewidget.cpp @@ -463,6 +463,7 @@ void DesignModeWidget::setup() this, [this](Utils::Id mode, Utils::Id previousMode) { if (mode == Core::Constants::MODE_DESIGN) { + m_dockManager->aboutToShow(); m_dockManager->reloadActiveWorkspace(); m_dockManager->setModeChangeState(false); } |