From 92c51dc39e100b6422d4c2a1ecd04b81087b2ee6 Mon Sep 17 00:00:00 2001 From: lashman Date: Sat, 28 Feb 2026 01:56:21 +0200 Subject: [PATCH] Add Launch and Uninstall buttons to detail view header --- src/ui/detail_view.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/ui/detail_view.rs b/src/ui/detail_view.rs index 3345ca0..407ca35 100644 --- a/src/ui/detail_view.rs +++ b/src/ui/detail_view.rs @@ -143,11 +143,47 @@ pub fn build_detail_page(record: &AppImageRecord, db: &Rc) -> adw::Nav ); }); + header.pack_start(&launch_button); + + // Uninstall button + let uninstall_button = gtk::Button::builder() + .icon_name("user-trash-symbolic") + .tooltip_text("Uninstall this AppImage") + .build(); + uninstall_button.add_css_class("flat"); + uninstall_button.update_property(&[ + gtk::accessible::Property::Label("Uninstall application"), + ]); + let record_for_uninstall = record.clone(); + let db_uninstall = db.clone(); + let toast_uninstall = toast_overlay.clone(); + let is_integrated_header = record.integrated; + uninstall_button.connect_clicked(move |_btn| { + let fp = footprint::get_footprint(&db_uninstall, record_for_uninstall.id, record_for_uninstall.size_bytes as u64); + let fp_paths: Vec<(String, String, u64)> = fp.paths.iter() + .filter(|p| p.exists) + .map(|p| ( + p.path.to_string_lossy().to_string(), + p.path_type.label().to_string(), + p.size_bytes, + )) + .collect(); + show_uninstall_dialog( + &toast_uninstall, + &record_for_uninstall, + &db_uninstall, + is_integrated_header, + &fp_paths, + ); + }); + header.pack_end(&uninstall_button); + // Check for Update button let update_button = gtk::Button::builder() .icon_name("software-update-available-symbolic") .tooltip_text("Check for updates") .build(); + update_button.add_css_class("flat"); update_button.update_property(&[ gtk::accessible::Property::Label("Check for updates"), ]);