reverse redirections chain

This commit is contained in:
yggverse 2025-03-22 15:42:20 +02:00
parent f8dc2ceccd
commit 37c8a70f41

View file

@ -55,19 +55,28 @@ impl Dialog for PreferencesDialog {
}); });
if info.redirect.is_some() { if info.redirect.is_some() {
d.add(&{ 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 g = PreferencesGroup::new();
let p = PreferencesPage::builder() let p = PreferencesPage::builder()
.title("Redirect") .title("Redirect")
.icon_name("insert-link-symbolic") .icon_name("insert-link-symbolic")
.build(); .build();
p.add(&{ p.add(&{
fn chain(g: &PreferencesGroup, i: &Info) { fn chain<'a>(v: &mut Vec<&'a Info>, i: &'a Info) {
g.add(&ActionRow::builder().title(i.request().unwrap()).build()); v.push(i);
if let Some(ref r) = i.redirect { 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 g
}); });
p p