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;