Fix overflow, race condition, and format bugs
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user