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);
|
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()
|
||||||
|
|||||||
Reference in New Issue
Block a user