Add default application selector for browsers, email, and file managers

This commit is contained in:
lashman
2026-02-28 00:10:39 +02:00
parent 585320b363
commit c622057830
2 changed files with 196 additions and 0 deletions

View File

@@ -1123,6 +1123,62 @@ fn build_system_tab(record: &AppImageRecord, db: &Rc<Database>, toast_overlay: &
}
}
// Default Application group
if let Some(ref cats) = record.categories {
let caps = integrator::detect_default_capabilities(cats);
if !caps.is_empty() && record.integrated {
let default_group = adw::PreferencesGroup::builder()
.title("Default Application")
.description(
"Set this app as your system default for tasks it can handle."
)
.build();
let app_id = integrator::make_app_id(
record.app_name.as_deref().unwrap_or(&record.filename),
);
for cap in &caps {
let row = adw::ActionRow::builder()
.title(cap.label())
.build();
let set_btn = gtk::Button::builder()
.label("Set Default")
.valign(gtk::Align::Center)
.build();
set_btn.add_css_class("flat");
let db_def = db.clone();
let record_id = record.id;
let app_id_clone = app_id.clone();
let cap_clone = cap.clone();
let toast_def = toast_overlay.clone();
set_btn.connect_clicked(move |btn| {
match integrator::set_default_app(
&db_def, record_id, &app_id_clone, &cap_clone,
) {
Ok(()) => {
toast_def.add_toast(adw::Toast::new(
&format!("Set as default {}", cap_clone.label().to_lowercase()),
));
btn.set_sensitive(false);
btn.set_label("Default");
}
Err(e) => {
log::error!("Failed to set default app: {}", e);
toast_def.add_toast(adw::Toast::new("Failed to set default"));
}
}
});
row.add_suffix(&set_btn);
default_group.add(&row);
}
inner.append(&default_group);
}
}
// Runtime Compatibility group
let compat_group = adw::PreferencesGroup::builder()
.title("Compatibility")