diff options
author | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2022-03-04 16:26:18 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@qt.io> | 2022-03-10 08:42:52 +0000 |
commit | ccca8ccd1b357b07100623cd9c438cd8e38660ab (patch) | |
tree | 6205773d8f68f496c56db30421cec8479484593d | |
parent | 23487939bf44bd78f99ad59563a99cc45e8a9591 (diff) |
QmlDesigner: Fix crumblebar recursion
If a file that already exist in crumblebar is pushed into crumblebar,
pop the bar until the first instance of the specified file is on
the top of the bar and skip the push.
Fixes: QDS-6307
Change-Id: I75f7d575db3fc6bb5b629ea1e6b61ea2905726b4
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Samuel Ghinet <samuel.ghinet@qt.io>
-rw-r--r-- | src/plugins/qmldesigner/components/componentcore/crumblebar.cpp | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/plugins/qmldesigner/components/componentcore/crumblebar.cpp b/src/plugins/qmldesigner/components/componentcore/crumblebar.cpp index c729fd07512..82032b3fc2e 100644 --- a/src/plugins/qmldesigner/components/componentcore/crumblebar.cpp +++ b/src/plugins/qmldesigner/components/componentcore/crumblebar.cpp @@ -83,20 +83,29 @@ void CrumbleBar::pushFile(const Utils::FilePath &fileName) if (!m_isInternalCalled) { crumblePath()->clear(); } else { - CrumbleBarInfo lastElementCrumbleBarInfo = crumblePath()->dataForLastIndex().value<CrumbleBarInfo>(); + // If the path already exists in crumblePath, pop up to first instance of that to avoid + // cyclical crumblePath + int match = -1; + for (int i = crumblePath()->length() - 1; i >= 0; --i) { + CrumbleBarInfo info = crumblePath()->dataForIndex(i).value<CrumbleBarInfo>(); + if (info.fileName == fileName) + match = i; + } - if (!lastElementCrumbleBarInfo.displayName.isEmpty() - && lastElementCrumbleBarInfo.fileName == fileName) - crumblePath()->popElement(); + if (match != -1) { + for (int i = crumblePath()->length() - 1 - match; i > 0; --i) + crumblePath()->popElement(); + } } - CrumbleBarInfo crumbleBarInfo; - crumbleBarInfo.fileName = fileName; - - crumblePath()->pushElement(fileName.fileName(), QVariant::fromValue(crumbleBarInfo)); + CrumbleBarInfo info = crumblePath()->dataForLastIndex().value<CrumbleBarInfo>(); + if (info.fileName != fileName) { + CrumbleBarInfo crumbleBarInfo; + crumbleBarInfo.fileName = fileName; + crumblePath()->pushElement(fileName.fileName(), QVariant::fromValue(crumbleBarInfo)); + } m_isInternalCalled = false; - updateVisibility(); } |