diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2024-01-29 16:34:48 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2024-01-29 15:32:18 +0000 |
commit | 2122ff37f12705bf0964d444bf2e874cc3a5c6df (patch) | |
tree | 5b4d56f9a1c52d8d3d4451e746516c951b5f1914 | |
parent | 65ea37c13f025301129b78f79d9f412dbb727b1f (diff) |
EffectComposer: Consider effect changes to be part of current document
This will allow saving effects when current document is saved for any
reason, including at application shutdown.
If effect is not yet saved once (i.e. it doesn't have a name yet), it
will not be saved in response to global save triggers to avoid
complications with requiring user input to provide the name.
Fixes: QDS-11436
Fixes: QDS-11446
Change-Id: I412ee4893e926d527b4f03f5f6c0c9b4e923bc1e
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
3 files changed, 27 insertions, 0 deletions
diff --git a/src/plugins/effectcomposer/effectcomposerwidget.cpp b/src/plugins/effectcomposer/effectcomposerwidget.cpp index ebd793a3ad..3be9284f4d 100644 --- a/src/plugins/effectcomposer/effectcomposerwidget.cpp +++ b/src/plugins/effectcomposer/effectcomposerwidget.cpp @@ -16,6 +16,8 @@ #include "theme.h" #include <coreplugin/icore.h> +#include <coreplugin/idocument.h> +#include <coreplugin/editormanager/editormanager.h> #include <qmldesigner/documentmanager.h> #include <qmldesigner/qmldesignerconstants.h> @@ -108,6 +110,23 @@ EffectComposerWidget::EffectComposerWidget(EffectComposerView *view) m_importScan.timer->start(100); }); + + connect(m_effectComposerModel.data(), &EffectComposerModel::hasUnsavedChangesChanged, + this, [this]() { + if (m_effectComposerModel->hasUnsavedChanges() && !m_effectComposerModel->currentComposition().isEmpty()) { + if (auto doc = QmlDesigner::QmlDesignerPlugin::instance()->documentManager().currentDesignDocument()) + doc->setModified(); + } + }); + + connect(Core::EditorManager::instance(), &Core::EditorManager::aboutToSave, + this, [this](Core::IDocument *document) { + if (m_effectComposerModel->hasUnsavedChanges()) { + QString compName = m_effectComposerModel->currentComposition(); + if (!compName.isEmpty()) + m_effectComposerModel->saveComposition(compName); + } + }); } diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp index 3ad09a8693..96cfc80da8 100644 --- a/src/plugins/qmldesigner/components/integration/designdocument.cpp +++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp @@ -427,6 +427,12 @@ bool DesignDocument::hasProject() const return !DocumentManager::currentProjectDirPath().isEmpty(); } +void DesignDocument::setModified() +{ + if (!m_documentTextModifier.isNull()) + m_documentTextModifier->textDocument()->setModified(true); +} + void DesignDocument::changeToInFileComponentModel(ComponentTextModifier *textModifer) { m_inFileComponentTextModifier.reset(textModifer); diff --git a/src/plugins/qmldesigner/components/integration/designdocument.h b/src/plugins/qmldesigner/components/integration/designdocument.h index aa7ced784f..0d75141205 100644 --- a/src/plugins/qmldesigner/components/integration/designdocument.h +++ b/src/plugins/qmldesigner/components/integration/designdocument.h @@ -89,6 +89,8 @@ public: Utils::FilePath projectFolder() const; bool hasProject() const; + void setModified(); + signals: void displayNameChanged(const QString &newFileName); void dirtyStateChanged(bool newState); |