aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@qt.io>2022-03-04 16:26:18 +0200
committerMiikka Heikkinen <miikka.heikkinen@qt.io>2022-03-10 08:42:52 +0000
commitccca8ccd1b357b07100623cd9c438cd8e38660ab (patch)
tree6205773d8f68f496c56db30421cec8479484593d
parent23487939bf44bd78f99ad59563a99cc45e8a9591 (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.cpp27
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();
}