#[derive(Clone, Debug, Default, PartialEq)]
pub struct DesktopPreferences {
pub accent_color: Option<[f32; 3]>,
pub high_contrast: Option<bool>,
pub reduced_motion: Option<bool>,
pub text_scale: Option<f32>,
pub font: Option<String>,
pub titlebar_double_click: Option<TitlebarAction>,
pub titlebar_middle_click: Option<TitlebarAction>,
pub titlebar_right_click: Option<TitlebarAction>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum TitlebarAction {
None,
ToggleMaximize,
Minimize,
Menu,
}
#[cfg(test)]
mod tests {
use super::*;
use std::{cell::RefCell, rc::Rc};
#[gpui::test]
fn observers_read_the_new_snapshot_and_stop_when_dropped(cx: &mut crate::TestAppContext) {
let received = Rc::new(RefCell::new(Vec::new()));
let observations = received.clone();
let subscription = cx.update(|app| {
assert_eq!(app.desktop_preferences(), DesktopPreferences::default());
app.observe_desktop_preferences(move |app| {
observations.borrow_mut().push(app.desktop_preferences());
})
});
let preferences = DesktopPreferences {
high_contrast: Some(true),
reduced_motion: Some(false),
text_scale: Some(1.5),
..Default::default()
};
cx.test_platform()
.simulate_desktop_preferences(preferences.clone());
assert_eq!(*received.borrow(), vec![preferences]);
drop(subscription);
cx.test_platform()
.simulate_desktop_preferences(DesktopPreferences::default());
assert_eq!(received.borrow().len(), 1);
cx.update(|app| assert_eq!(app.desktop_preferences(), DesktopPreferences::default()));
}
}