diff --git a/src/plugins/effectcomposer/effectcomposerwidget.cpp b/src/plugins/effectcomposer/effectcomposerwidget.cpp index ebd793a3ad7..3be9284f4df 100644 --- a/src/plugins/effectcomposer/effectcomposerwidget.cpp +++ b/src/plugins/effectcomposer/effectcomposerwidget.cpp @@ -16,6 +16,8 @@ #include "theme.h" #include +#include +#include #include #include @@ -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 3ad09a8693c..96cfc80da8d 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 aa7ced784fc..0d75141205e 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);