From 37c8a70f41f4a6435c9a6dbb38cee33b8fdc4a5a Mon Sep 17 00:00:00 2001 From: yggverse Date: Sat, 22 Mar 2025 15:42:20 +0200 Subject: [PATCH] reverse redirections chain --- .../item/page/navigation/request/info/dialog.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/app/browser/window/tab/item/page/navigation/request/info/dialog.rs b/src/app/browser/window/tab/item/page/navigation/request/info/dialog.rs index 98b77158..04dc06e5 100644 --- a/src/app/browser/window/tab/item/page/navigation/request/info/dialog.rs +++ b/src/app/browser/window/tab/item/page/navigation/request/info/dialog.rs @@ -55,19 +55,28 @@ impl Dialog for PreferencesDialog { }); if info.redirect.is_some() { d.add(&{ + // collect redirections into the vector, + // to reverse chain before add its members to widget + // * capacity optimized for Gemini protocol (as default) + let mut v = Vec::with_capacity(5); + let g = PreferencesGroup::new(); let p = PreferencesPage::builder() .title("Redirect") .icon_name("insert-link-symbolic") .build(); p.add(&{ - fn chain(g: &PreferencesGroup, i: &Info) { - g.add(&ActionRow::builder().title(i.request().unwrap()).build()); + fn chain<'a>(v: &mut Vec<&'a Info>, i: &'a Info) { + v.push(i); if let Some(ref r) = i.redirect { - chain(g, r) + chain(v, r) } } - chain(&g, info); + chain(&mut v, info); + v.reverse(); + for r in v { + g.add(&ActionRow::builder().title(r.request().unwrap()).build()); + } g }); p