QmlDesigner: Respect cancel on crumblebar save confirmation dialog

Change-Id: I682494100ff90c45e3a4bb1137701d603c548478
Fixes: QDS-2704
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
Miikka Heikkinen
2020-09-28 17:53:48 +03:00
parent 8adb284783
commit 1f43e06847
2 changed files with 12 additions and 8 deletions

View File

@@ -133,14 +133,13 @@ Utils::CrumblePath *CrumbleBar::crumblePath()
return m_crumblePath; return m_crumblePath;
} }
void CrumbleBar::showSaveDialog() bool CrumbleBar::showSaveDialog()
{ {
bool canceled = false;
bool alwaysSave = DesignerSettings::getValue(DesignerSettingsKey::ALWAYS_SAVE_IN_CRUMBLEBAR).toBool(); bool alwaysSave = DesignerSettings::getValue(DesignerSettingsKey::ALWAYS_SAVE_IN_CRUMBLEBAR).toBool();
if (alwaysSave) { if (alwaysSave) {
Core::DocumentManager::saveModifiedDocumentSilently(currentDesignDocument()->editor()->document()); Core::DocumentManager::saveModifiedDocumentSilently(currentDesignDocument()->editor()->document());
} else { } else {
bool canceled;
Core::DocumentManager::saveModifiedDocument(currentDesignDocument()->editor()->document(), Core::DocumentManager::saveModifiedDocument(currentDesignDocument()->editor()->document(),
tr("Save the changes to preview them correctly."), tr("Save the changes to preview them correctly."),
&canceled, &canceled,
@@ -149,13 +148,20 @@ void CrumbleBar::showSaveDialog()
DesignerSettings::setValue(DesignerSettingsKey::ALWAYS_SAVE_IN_CRUMBLEBAR, alwaysSave); DesignerSettings::setValue(DesignerSettingsKey::ALWAYS_SAVE_IN_CRUMBLEBAR, alwaysSave);
} }
return !canceled;
} }
void CrumbleBar::onCrumblePathElementClicked(const QVariant &data) void CrumbleBar::onCrumblePathElementClicked(const QVariant &data)
{ {
CrumbleBarInfo clickedCrumbleBarInfo = data.value<CrumbleBarInfo>(); CrumbleBarInfo clickedCrumbleBarInfo = data.value<CrumbleBarInfo>();
if (clickedCrumbleBarInfo == crumblePath()->dataForLastIndex().value<CrumbleBarInfo>()) if (clickedCrumbleBarInfo == crumblePath()->dataForLastIndex().value<CrumbleBarInfo>())
return;
bool inlineComp = !clickedCrumbleBarInfo.modelNode.isValid()
&& clickedCrumbleBarInfo.fileName == currentDesignDocument()->fileName();
if (!inlineComp && !showSaveDialog())
return; return;
while (clickedCrumbleBarInfo != crumblePath()->dataForLastIndex().value<CrumbleBarInfo>()) while (clickedCrumbleBarInfo != crumblePath()->dataForLastIndex().value<CrumbleBarInfo>())
@@ -165,13 +171,11 @@ void CrumbleBar::onCrumblePathElementClicked(const QVariant &data)
crumblePath()->popElement(); crumblePath()->popElement();
m_isInternalCalled = true; m_isInternalCalled = true;
if (!clickedCrumbleBarInfo.modelNode.isValid() if (inlineComp) {
&& clickedCrumbleBarInfo.fileName == currentDesignDocument()->fileName()) {
nextFileIsCalledInternally(); nextFileIsCalledInternally();
currentDesignDocument()->changeToDocumentModel(); currentDesignDocument()->changeToDocumentModel();
QmlDesignerPlugin::instance()->viewManager().setComponentViewToMaster(); QmlDesignerPlugin::instance()->viewManager().setComponentViewToMaster();
} else { } else {
showSaveDialog();
crumblePath()->popElement(); crumblePath()->popElement();
nextFileIsCalledInternally(); nextFileIsCalledInternally();
Core::EditorManager::openEditor(clickedCrumbleBarInfo.fileName.toString(), Core::EditorManager::openEditor(clickedCrumbleBarInfo.fileName.toString(),

View File

@@ -49,7 +49,7 @@ public:
private: private:
void onCrumblePathElementClicked(const QVariant &data); void onCrumblePathElementClicked(const QVariant &data);
void updateVisibility(); void updateVisibility();
void showSaveDialog(); bool showSaveDialog();
private: private:
bool m_isInternalCalled = false; bool m_isInternalCalled = false;