From 1f43e06847f0339bfcb5a5d3d7c6f59e96477a4b Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 28 Sep 2020 17:53:48 +0300 Subject: [PATCH] QmlDesigner: Respect cancel on crumblebar save confirmation dialog Change-Id: I682494100ff90c45e3a4bb1137701d603c548478 Fixes: QDS-2704 Reviewed-by: Thomas Hartmann Reviewed-by: Mahmoud Badri --- .../components/componentcore/crumblebar.cpp | 18 +++++++++++------- .../components/componentcore/crumblebar.h | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/plugins/qmldesigner/components/componentcore/crumblebar.cpp b/src/plugins/qmldesigner/components/componentcore/crumblebar.cpp index 743038f694a..33f44af9dca 100644 --- a/src/plugins/qmldesigner/components/componentcore/crumblebar.cpp +++ b/src/plugins/qmldesigner/components/componentcore/crumblebar.cpp @@ -133,14 +133,13 @@ Utils::CrumblePath *CrumbleBar::crumblePath() return m_crumblePath; } -void CrumbleBar::showSaveDialog() +bool CrumbleBar::showSaveDialog() { + bool canceled = false; bool alwaysSave = DesignerSettings::getValue(DesignerSettingsKey::ALWAYS_SAVE_IN_CRUMBLEBAR).toBool(); if (alwaysSave) { Core::DocumentManager::saveModifiedDocumentSilently(currentDesignDocument()->editor()->document()); } else { - bool canceled; - Core::DocumentManager::saveModifiedDocument(currentDesignDocument()->editor()->document(), tr("Save the changes to preview them correctly."), &canceled, @@ -149,13 +148,20 @@ void CrumbleBar::showSaveDialog() DesignerSettings::setValue(DesignerSettingsKey::ALWAYS_SAVE_IN_CRUMBLEBAR, alwaysSave); } + return !canceled; } void CrumbleBar::onCrumblePathElementClicked(const QVariant &data) { CrumbleBarInfo clickedCrumbleBarInfo = data.value(); - if (clickedCrumbleBarInfo == crumblePath()->dataForLastIndex().value()) + if (clickedCrumbleBarInfo == crumblePath()->dataForLastIndex().value()) + return; + + bool inlineComp = !clickedCrumbleBarInfo.modelNode.isValid() + && clickedCrumbleBarInfo.fileName == currentDesignDocument()->fileName(); + + if (!inlineComp && !showSaveDialog()) return; while (clickedCrumbleBarInfo != crumblePath()->dataForLastIndex().value()) @@ -165,13 +171,11 @@ void CrumbleBar::onCrumblePathElementClicked(const QVariant &data) crumblePath()->popElement(); m_isInternalCalled = true; - if (!clickedCrumbleBarInfo.modelNode.isValid() - && clickedCrumbleBarInfo.fileName == currentDesignDocument()->fileName()) { + if (inlineComp) { nextFileIsCalledInternally(); currentDesignDocument()->changeToDocumentModel(); QmlDesignerPlugin::instance()->viewManager().setComponentViewToMaster(); } else { - showSaveDialog(); crumblePath()->popElement(); nextFileIsCalledInternally(); Core::EditorManager::openEditor(clickedCrumbleBarInfo.fileName.toString(), diff --git a/src/plugins/qmldesigner/components/componentcore/crumblebar.h b/src/plugins/qmldesigner/components/componentcore/crumblebar.h index cd19e1faa24..473c5e937be 100644 --- a/src/plugins/qmldesigner/components/componentcore/crumblebar.h +++ b/src/plugins/qmldesigner/components/componentcore/crumblebar.h @@ -49,7 +49,7 @@ public: private: void onCrumblePathElementClicked(const QVariant &data); void updateVisibility(); - void showSaveDialog(); + bool showSaveDialog(); private: bool m_isInternalCalled = false;