diff --git a/pixstrip-core/src/storage.rs b/pixstrip-core/src/storage.rs index 224ba73..997ded0 100644 --- a/pixstrip-core/src/storage.rs +++ b/pixstrip-core/src/storage.rs @@ -188,6 +188,7 @@ pub struct SessionState { pub metadata_mode: Option, pub watermark_enabled: Option, pub rename_enabled: Option, + pub last_seen_version: Option, } pub struct SessionStore { diff --git a/pixstrip-gtk/src/app.rs b/pixstrip-gtk/src/app.rs index b1cdd60..ee4602a 100644 --- a/pixstrip-gtk/src/app.rs +++ b/pixstrip-gtk/src/app.rs @@ -409,6 +409,32 @@ fn build_ui(app: &adw::Application) { window.present(); crate::welcome::show_welcome_if_first_launch(&window); + + // Auto-show What's New dialog on first launch after update + { + let current_version = env!("CARGO_PKG_VERSION").to_string(); + let session = pixstrip_core::storage::SessionStore::new(); + let sess = session.load().unwrap_or_default(); + let last_seen = sess.last_seen_version.clone().unwrap_or_default(); + + if last_seen != current_version { + // Update stored version immediately + let mut updated_sess = sess; + updated_sess.last_seen_version = Some(current_version.clone()); + let _ = session.save(&updated_sess); + + // Only show dialog if this is not the very first run + // (welcome wizard handles first run) + let config_store = pixstrip_core::storage::ConfigStore::new(); + let config = config_store.load().unwrap_or_default(); + if config.first_run_complete && !last_seen.is_empty() { + let w = window.clone(); + glib::idle_add_local_once(move || { + show_whats_new_dialog(&w); + }); + } + } + } } fn build_menu() -> gtk::gio::Menu {