From ea5bbfb2186310eb8a84845410c9b4e302565222 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Sat, 6 Dec 2025 13:42:10 +0100 Subject: [PATCH] only update controller assignment after user input (#629) --- src/ui/gui.rs | 12 ++++++++++-- src/ui/gui/appwindow.slint | 1 + src/ui/gui/controller_page.slint | 2 ++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/ui/gui.rs b/src/ui/gui.rs index ca452607..2cbf4911 100644 --- a/src/ui/gui.rs +++ b/src/ui/gui.rs @@ -191,6 +191,7 @@ fn controller_window( std::rc::Rc::new(controllers); app.set_controller_names(slint::ModelRc::from(controller_names_model)); + let controller_changed = slint::VecModel::default(); let selected_controllers = slint::VecModel::default(); for selected in config.input.controller_assignment.iter() { let mut found = false; @@ -204,11 +205,16 @@ fn controller_window( if !found { selected_controllers.push(0); } + controller_changed.push(false); } let selected_controllers_model: std::rc::Rc> = std::rc::Rc::new(selected_controllers); app.set_selected_controller(slint::ModelRc::from(selected_controllers_model)); + let controller_changed_model: std::rc::Rc> = + std::rc::Rc::new(controller_changed); + app.set_controller_changed(slint::ModelRc::from(controller_changed_model)); + let weak_app = app.as_weak(); app.on_input_profile_button_clicked(move || { let dialog = InputProfileDialog::new().unwrap(); @@ -269,8 +275,10 @@ pub fn save_settings(app: &AppWindow, controller_paths: &[Option]) { } for (i, selected_controller) in app.get_selected_controller().iter().enumerate() { - config.input.controller_assignment[i] = - controller_paths[selected_controller as usize].clone(); + if app.get_controller_changed().row_data(i).unwrap_or(false) { + config.input.controller_assignment[i] = + controller_paths[selected_controller as usize].clone(); + } } } diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index b0e5bf18..da387b23 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -47,6 +47,7 @@ export component AppWindow inherits Window { in-out property rom_dir <=> SettingsData.rom_dir; in-out property emulate_vru <=> ControllerData.emulate_vru; in-out property controller_enabled <=> ControllerData.controller_enabled; + in-out property controller_changed <=> ControllerData.controller_changed; in-out property transferpak <=> ControllerData.transferpak; in-out property selected_profile_binding <=> ControllerData.selected_profile_binding; in-out property input_profiles <=> ControllerData.input_profiles; diff --git a/src/ui/gui/controller_page.slint b/src/ui/gui/controller_page.slint index 3e26dff3..47eb3f15 100644 --- a/src/ui/gui/controller_page.slint +++ b/src/ui/gui/controller_page.slint @@ -13,6 +13,7 @@ export global ControllerData { in-out property <[string]> input_profiles; in-out property <[string]> controller_names; in-out property <[int]> selected_controller; + in-out property <[bool]> controller_changed; in-out property blank_profiles; } @@ -114,6 +115,7 @@ export component ControllerConfig inherits Page { current-index: ControllerData.selected_controller[player]; selected => { ControllerData.selected_controller[player] = self.current-index; + ControllerData.controller_changed[player] = true; } } }