From 17c9f673bd35cf5571acf291bb409296eb4ad0d9 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Sat, 9 Aug 2025 14:57:11 -0500 Subject: [PATCH] [studio] Fix navigate back not to iterate on the first item twice --- src/olympic/studio/modlib/src/context.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/olympic/studio/modlib/src/context.cpp b/src/olympic/studio/modlib/src/context.cpp index 674400fd..b9010c61 100644 --- a/src/olympic/studio/modlib/src/context.cpp +++ b/src/olympic/studio/modlib/src/context.cpp @@ -8,13 +8,18 @@ namespace studio { void navigateTo(Context &ctx, ox::StringParam filePath, ox::StringParam navArgs) noexcept { ox::String path = std::move(filePath); - if (beginsWith(path, "uuid://")) { + if (keel::isUuidUrl(path)) { auto const [p, err] = keel::uuidUrlToPath(keelCtx(ctx), path); if (err) { return; } path = p; } + //if ( + // auto const [np, err] = ctx.navStack.back(); + // !err && np->filePath == path && np->navArgs == navArgs.view()) { + // return; + //} ctx.navStack.resize(ctx.navIdx + 1); ctx.navStack.emplace_back(ox::String{path}, ox::String{navArgs.view()}); try { @@ -49,8 +54,9 @@ void navigateBack(Context &ctx) noexcept { } void navigateForward(Context &ctx) noexcept { - while (ctx.navIdx < ctx.navStack.size()) { - auto const &n = ctx.navStack[ctx.navIdx]; + auto const nextIdx = ctx.navIdx + 1; + while (nextIdx < ctx.navStack.size()) { + auto const &n = ctx.navStack[nextIdx]; try { ctx.navCallback(n.filePath, n.navArgs); } catch (std::exception const &e) { @@ -58,7 +64,7 @@ void navigateForward(Context &ctx) noexcept { oxErrf("navigateForward failed: {}", e.what()); } if (!ctx.project->exists(n.filePath)) { - std::ignore = ctx.navStack.erase(ctx.navIdx); + std::ignore = ctx.navStack.erase(nextIdx); continue; } ++ctx.navIdx;