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:
@@ -141,6 +141,53 @@ impl PolicyPage {
|
||||
}
|
||||
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.
|
||||
let apply_group = adw::PreferencesGroup::new();
|
||||
let apply = adw::ActionRow::builder()
|
||||
|
||||
Reference in New Issue
Block a user