feat(gui): advanced expander surfaces non-master PAM stacks in Policy tab

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
michael
2026-04-27 11:16:51 -07:00
parent ae372df577
commit e19ffc9c9b

View File

@@ -141,6 +141,53 @@ impl PolicyPage {
} }
pref_page.add(&group); pref_page.add(&group);
// Advanced expander — non-master stacks the daemon discovered. Toggling
// any of these triggers polkit at SetPolicy time; no special GUI plumbing.
let advanced_group = adw::PreferencesGroup::new();
let expander = adw::ExpanderRow::builder()
.title("Advanced")
.subtitle("Per-stack overrides for any PAM stack the daemon knows about.")
.build();
let mut others: Vec<&String> = current
.stacks
.keys()
.filter(|k| !MASTER_STACKS.contains(&k.as_str()))
.collect();
others.sort();
for stack_name in others {
let mode = current
.stacks
.get(stack_name)
.map(|s| s.mode)
.unwrap_or(Mode::Disabled);
let labels: Vec<&str> = MODE_LABELS.iter().map(|(l, _)| *l).collect();
let model = gtk::StringList::new(&labels);
let combo = adw::ComboRow::builder()
.title(stack_name.as_str())
.model(&model)
.selected(mode_to_combo_index(mode))
.build();
let me = self.clone();
let s = stack_name.clone();
combo.connect_selected_notify(move |c| {
let new_mode = combo_index_to_mode(c.selected());
me.working
.borrow_mut()
.stacks
.entry(s.clone())
.or_insert(StackPolicy {
mode: Mode::Disabled,
methods: vec![Method::Fido2],
})
.mode = new_mode;
});
expander.add_row(&combo);
}
advanced_group.add(&expander);
pref_page.add(&advanced_group);
// Apply button row at the bottom. // Apply button row at the bottom.
let apply_group = adw::PreferencesGroup::new(); let apply_group = adw::PreferencesGroup::new();
let apply = adw::ActionRow::builder() let apply = adw::ActionRow::builder()