Improve UX, add popover tour, metadata, and hicolor icons

- Redesign tutorial tour from modal dialogs to popovers pointing at actual UI elements
- Add beginner-friendly improvements: help buttons, tooltips, welcome wizard enhancements
- Add AppStream metainfo with screenshots, branding, categories, keywords, provides
- Update desktop file with GTK category and SingleMainWindow
- Add hicolor icon theme with all sizes (16-512px)
- Fix debounce SourceId panic in rename step
- Various step UI improvements and bug fixes
This commit is contained in:
2026-03-08 14:18:15 +02:00
parent 8d754017fa
commit f3668c45c3
26 changed files with 2292 additions and 473 deletions

View File

@@ -500,6 +500,7 @@ fn build_empty_state() -> gtk::Box {
.pixel_size(64)
.css_classes(["dim-label"])
.build();
icon.set_accessible_role(gtk::AccessibleRole::Presentation);
let title = gtk::Label::builder()
.label("Drop images here")
@@ -529,6 +530,16 @@ fn build_empty_state() -> gtk::Box {
browse_button.add_css_class("suggested-action");
browse_button.add_css_class("pill");
let hint = gtk::Label::builder()
.label("Start by adding your images below, then use the Next button to configure each processing step.")
.css_classes(["dim-label", "caption"])
.halign(gtk::Align::Center)
.justify(gtk::Justification::Center)
.wrap(true)
.margin_bottom(8)
.build();
inner.append(&hint);
inner.append(&icon);
inner.append(&title);
inner.append(&subtitle);
@@ -778,11 +789,19 @@ fn build_loaded_state(state: &AppState) -> gtk::Box {
}
});
// Set accessible label on thumbnail picture
picture.update_property(&[
gtk::accessible::Property::Label(&format!("Thumbnail of {}", file_name)),
]);
// Set checkbox state
let check = find_check_button(overlay.upcast_ref::<gtk::Widget>());
if let Some(ref check) = check {
let is_excluded = excluded.borrow().contains(&path);
check.set_active(!is_excluded);
check.update_property(&[
gtk::accessible::Property::Label(&format!("Include {} in processing", file_name)),
]);
// Wire checkbox toggle
let excl = excluded.clone();