From a50ffb14e10186c48f90612f0b5d73d2fe27facb 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 | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/olympic/studio/modlib/src/context.cpp b/src/olympic/studio/modlib/src/context.cpp index 674400fd..4a0ec623 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 { @@ -46,11 +51,14 @@ void navigateBack(Context &ctx) noexcept { } break; } + oxDebugf("back: navIdx: {}", ctx.navIdx); } void navigateForward(Context &ctx) noexcept { - while (ctx.navIdx < ctx.navStack.size()) { - auto const &n = ctx.navStack[ctx.navIdx]; + oxDebugf("fwd 1: navIdx: {}", 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,12 +66,13 @@ 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; break; } + oxDebugf("fwd 2: navIdx: {}", ctx.navIdx); } } \ No newline at end of file