aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Gruendl <henning.gruendl@qt.io>2023-11-23 12:33:21 +0100
committerHenning Gründl <henning.gruendl@qt.io>2023-11-24 13:36:10 +0000
commitb5da50338e39650a58669f0b933017f5e0bd50ea (patch)
tree1995af7d420bda52afe625ae7cad78748860ef09
parent66bda77d432f3039c222e9621b08b5347bdcbcd4 (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.cpp12
-rw-r--r--src/libs/advanceddockingsystem/dockmanager.h7
-rw-r--r--src/libs/advanceddockingsystem/workspace.cpp10
-rw-r--r--src/libs/advanceddockingsystem/workspace.h4
-rw-r--r--src/plugins/qmldesigner/designmodewidget.cpp1
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);
}