M3: a fresh install follows the desktop's appearance (#1248)

The theme preference defaults to System: dark on a dark desktop, light
where the desktop says nothing. Saved settings and --theme still win.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
mtlcl410
2026-10-22 23:41:18 +08:00
co-authored by Claude Fable 5.1
parent 9526363152
commit 62c595ceba
5 changed files with 31 additions and 6 deletions
+2
View File
@@ -343,6 +343,8 @@ Ranked; detail and the full milestone table in [docs/roadmap.md](docs/roadmap.md
- **2026-10-15 (community, M14, Polish signature panel):** A Polish signature panel listed its details in English: the catalog lacked every signature wording, the changes after signing they name and 34 UI literals. All 101 are translated; `polish_covers_ui_literals` and `polish_says_what_a_signature_says` keep them so. Estimates unchanged.
- **2026-10-14 (M14, Finnish localization):** Added Finnish as another interface and date language, with a 2,674-entry catalog covering every key of the other bundled catalogs and two-form plurals (partitive after numbers other than 1). Calendar dates use partitive month names (`14. lokakuuta 2026`). Coverage tests check commands/tools, scanned UI literals and bundled catalog keys. AI-assisted; native proofreading pending.
- **2026-10-14 (M14, Catalan localization):** Added Catalan as another interface and date language, with a 2,592-entry clean-room catalog, one/other plurals and coverage tests for commands, tools, UI literals and every key in the other catalogs. A native Catalan speaker (the contributor) has reviewed the translation. Estimates unchanged.
- **2026-10-15 (M3, #1248):** A fresh install follows the desktop's appearance: the theme preference defaults to System (dark on a dark desktop, Light where the desktop says nothing); saved settings and `--theme` still win. Dark page rendering is Reading colours, and the page reading themes are #1732.
- **2026-10-13 (M3, native-opening candidate):** Chosen tools survive preparation, conversion and password retries; startup intake waits for pending preparation. Regression tests cover completion, cancellation and document identity. Estimates unchanged.
- **2026-10-13 (community, M3, #531 touchpad momentum):** On Wayland a two-finger swipe keeps gliding after the fingers lift and slows to a stop, measured from the gesture's last 0.1 s and decaying with a 0.35 s time constant through the #759 1:1 path. Any wheel input, click, key, zoom or edge ends it (fingers resting on the touchpad don't yet: the vendored winit binds no Wayland hold gestures); single-page paging, macOS (which sends its own momentum), the web, and Animation effects Off never glide. Unit tests for the physics and two headless view tests. Estimates unchanged.
- **2026-10-13 (M3, native-open admission):** Later prepared replies stay queued while a modal or native picker owns the foreground. Picker completion, cancellation and abandonment wake retained opens. Regressions cover recipient ownership, exactly-once admission, source/history preservation and one-shot repaint requests. Estimates unchanged.
+2 -1
View File
@@ -957,7 +957,8 @@ impl PdfCraftApp {
full_screen_tool: None,
comment_prefs: Default::default(),
theme: ThemeKind::Light,
theme_preference: ThemePreference::Light,
// A fresh install follows the desktop's appearance (#1248); saved settings override.
theme_preference: ThemePreference::System,
reading_colors: Default::default(),
#[cfg(target_os = "linux")]
desktop_theme: None,
+3 -2
View File
@@ -13,11 +13,12 @@ pub enum ThemeKind {
Dark,
}
/// The saved user choice, independent of the light/dark colours currently displayed.
/// The saved user choice, independent of the light/dark colours currently displayed. A fresh
/// install follows the system (#1248); a desktop that says nothing gets Light.
#[derive(Clone, Copy, Debug, PartialEq, Eq, Default, serde::Serialize, serde::Deserialize)]
pub enum ThemePreference {
System,
#[default]
System,
Light,
Dark,
}
+22 -1
View File
@@ -48,10 +48,31 @@ fn open_view_menu(h: &mut Harness<'static, PdfCraftApp>) {
}
}
/// A fresh install follows the desktop's appearance (#1248): dark on a dark desktop, light where
/// the desktop says nothing; a saved choice still wins.
#[test]
fn a_fresh_install_follows_the_system_theme() {
let h = harness();
assert_theme(&h, ThemePreference::System, ThemeKind::Dark);
let mut quiet = Harness::builder().with_size(egui::vec2(1200.0, 800.0)).build_eframe(|_cc| {
let mut app = PdfCraftApp::new();
app.set_option("language", "en").unwrap();
app
});
quiet.run_steps(4);
assert_theme(&quiet, ThemePreference::System, ThemeKind::Light);
let mut app = PdfCraftApp::new();
app.restore(r#"{"theme":"Light"}"#);
assert_eq!(app.theme_preference, ThemePreference::Light, "a saved choice wins over the default");
}
#[test]
fn toolbar_and_view_menu_share_three_state_preferences() {
let mut h = harness();
// Explicit light wins even on a dark desktop, including egui's popup style.
// Fresh, on a dark desktop: System, shown dark. One click on, explicit light wins even on a
// dark desktop, including egui's popup style.
assert_theme(&h, ThemePreference::System, ThemeKind::Dark);
click_toolbar(&mut h, "Use system setting");
assert_theme(&h, ThemePreference::Light, ThemeKind::Light);
click_toolbar(&mut h, "Light gray");
assert_theme(&h, ThemePreference::Dark, ThemeKind::Dark);
+2 -2
View File
@@ -1670,8 +1670,8 @@ milestone = "M3"
status = "shipped"
commands = ["view.theme.system"]
tools = []
evidence = ["crates/ui-egui/tests/it/theme.rs::toolbar_and_view_menu_share_three_state_preferences", "crates/ui-egui/tests/it/theme.rs::saved_preferences_restore_with_legacy_light_dark_settings", "crates/ui-egui/tests/it/control.rs::theme_commands_and_options_report_preference_and_effective_colours"]
notes = "Toolbar, Display theme and --theme system share a persisted System preference that follows OS changes without losing the selected mode; ui.state reports preference and resolved colours separately."
evidence = ["crates/ui-egui/tests/it/theme.rs::a_fresh_install_follows_the_system_theme", "crates/ui-egui/tests/it/theme.rs::toolbar_and_view_menu_share_three_state_preferences", "crates/ui-egui/tests/it/theme.rs::saved_preferences_restore_with_legacy_light_dark_settings", "crates/ui-egui/tests/it/control.rs::theme_commands_and_options_report_preference_and_effective_colours"]
notes = "Toolbar, Display theme and --theme system share a persisted System preference that follows OS changes without losing the selected mode; ui.state reports preference and resolved colours separately. System is the default on a fresh install (#1248), Light where the desktop says nothing; a saved choice wins."
[[feature]]
id = "view.home-view"