Fix overflow, race condition, and format bugs

This commit is contained in:
2026-03-07 22:14:48 +02:00
parent 150d483fbe
commit f471d22767
18 changed files with 600 additions and 113 deletions

View File

@@ -317,13 +317,23 @@ pub fn build_settings_dialog() -> adw::PreferencesDialog {
// Wire high contrast to apply immediately
{
let original_theme: std::rc::Rc<std::cell::RefCell<Option<gtk::glib::GString>>> =
std::rc::Rc::new(std::cell::RefCell::new(
gtk::Settings::default().and_then(|s| s.gtk_theme_name())
));
let orig_theme = original_theme.clone();
contrast_row.connect_active_notify(move |row| {
if let Some(settings) = gtk::Settings::default() {
if row.is_active() {
// Capture current theme before switching (if not already captured)
let mut saved = orig_theme.borrow_mut();
if saved.is_none() {
*saved = settings.gtk_theme_name();
}
settings.set_gtk_theme_name(Some("HighContrast"));
} else {
// Revert to the default Adwaita theme
settings.set_gtk_theme_name(Some("Adwaita"));
let saved = orig_theme.borrow();
settings.set_gtk_theme_name(saved.as_deref());
}
}
});
@@ -331,12 +341,16 @@ pub fn build_settings_dialog() -> adw::PreferencesDialog {
// Wire large text to apply immediately
{
let original_dpi: std::rc::Rc<Cell<i32>> = std::rc::Rc::new(Cell::new(0));
// Capture the initial DPI at construction so we can restore it later
let initial_dpi = gtk::Settings::default()
.map(|s| s.gtk_xft_dpi())
.unwrap_or(0);
let original_dpi: std::rc::Rc<Cell<i32>> = std::rc::Rc::new(Cell::new(initial_dpi));
let orig_dpi = original_dpi.clone();
large_text_row.connect_active_notify(move |row| {
if let Some(settings) = gtk::Settings::default() {
if row.is_active() {
// Store original DPI before modifying
// Store original DPI before modifying (refresh if not yet set)
let current_dpi = settings.gtk_xft_dpi();
if current_dpi > 0 {
orig_dpi.set(current_dpi);