From e311f6b230c70fd3893d7733c6a5a00f00890bb6 Mon Sep 17 00:00:00 2001 From: lashman Date: Sat, 28 Feb 2026 01:42:35 +0200 Subject: [PATCH] Consolidate detail view from 4 tabs to 2 (About + Details) Merge Overview into About tab, combine System + Security + Storage into a single Details tab. Map old GSettings tab names to new ones for backward compatibility. --- data/app.driftwood.Driftwood.gschema.xml | 10 +++--- src/ui/detail_view.rs | 40 ++++++++++++++---------- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/data/app.driftwood.Driftwood.gschema.xml b/data/app.driftwood.Driftwood.gschema.xml index cf73e71..d3a0b0b 100644 --- a/data/app.driftwood.Driftwood.gschema.xml +++ b/data/app.driftwood.Driftwood.gschema.xml @@ -57,14 +57,12 @@ - - - - + + - 'overview' + 'about' Last detail view tab - The last selected tab in the detail view (overview, system, security, storage). + The last selected tab in the detail view (about or details). false diff --git a/src/ui/detail_view.rs b/src/ui/detail_view.rs index 99bc3b1..a0320a9 100644 --- a/src/ui/detail_view.rs +++ b/src/ui/detail_view.rs @@ -32,29 +32,35 @@ pub fn build_detail_page(record: &AppImageRecord, db: &Rc) -> adw::Nav view_stack.set_vhomogeneous(false); view_stack.set_enable_transitions(false); - // Build tab pages - let overview_page = build_overview_tab(record, db); - view_stack.add_titled(&overview_page, Some("overview"), "Overview"); - view_stack.page(&overview_page).set_icon_name(Some("info-symbolic")); + // Build tab pages (2-tab layout: About + Details) + let about_page = build_overview_tab(record, db); + view_stack.add_titled(&about_page, Some("about"), "About"); + view_stack.page(&about_page).set_icon_name(Some("info-symbolic")); - let system_page = build_system_tab(record, db, &toast_overlay); - view_stack.add_titled(&system_page, Some("system"), "System"); - view_stack.page(&system_page).set_icon_name(Some("system-run-symbolic")); + // Details tab combines System + Security + Storage + let system_content = build_system_tab(record, db, &toast_overlay); + let security_content = build_security_tab(record, db); + let storage_content = build_storage_tab(record, db, &toast_overlay); - let security_page = build_security_tab(record, db); - view_stack.add_titled(&security_page, Some("security"), "Security"); - view_stack.page(&security_page).set_icon_name(Some("security-medium-symbolic")); + let details_page = gtk::Box::builder() + .orientation(gtk::Orientation::Vertical) + .build(); + details_page.append(&system_content); + details_page.append(&security_content); + details_page.append(&storage_content); - let storage_page = build_storage_tab(record, db, &toast_overlay); - view_stack.add_titled(&storage_page, Some("storage"), "Storage"); - view_stack.page(&storage_page).set_icon_name(Some("drive-harddisk-symbolic")); + view_stack.add_titled(&details_page, Some("details"), "Details"); + view_stack.page(&details_page).set_icon_name(Some("applications-system-symbolic")); - // Restore last-used tab from GSettings + // Restore last-used tab from GSettings (map old tab names to new ones) let settings = gio::Settings::new(crate::config::APP_ID); let saved_tab = settings.string("detail-tab"); - if view_stack.child_by_name(&saved_tab).is_some() { - view_stack.set_visible_child_name(&saved_tab); - } + let mapped_tab = match saved_tab.as_str() { + "overview" | "about" => "about", + "system" | "security" | "storage" | "details" => "details", + _ => "about", + }; + view_stack.set_visible_child_name(mapped_tab); // Persist tab choice on switch view_stack.connect_visible_child_name_notify(move |stack| {