From 9cdf885dd456f0ce02534aec2960190a8ed596a8 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Thu, 19 Feb 2026 00:12:23 -0600 Subject: [PATCH] When saving sizes/manual configuration, keep any existing controllers that are not currently available --- ProfileManager.cpp | 50 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/ProfileManager.cpp b/ProfileManager.cpp index 29c1b8942..186dc7cc8 100644 --- a/ProfileManager.cpp +++ b/ProfileManager.cpp @@ -718,6 +718,8 @@ bool ProfileManager::SaveSizes() /*-----------------------------------------------------*\ | Write controller data for each controller | \*-----------------------------------------------------*/ + std::size_t new_saved_controller_index = 0; + for(std::size_t controller_index = 0; controller_index < controllers.size(); controller_index++) { /*-------------------------------------------------*\ @@ -730,11 +732,47 @@ bool ProfileManager::SaveSizes() break; } - /*-------------------------------------------------*\ - | Read the controller data for this controller into | - | the profile json | - \*-------------------------------------------------*/ - profile_json["controllers"][controller_index] = controllers[controller_index]->GetDeviceDescriptionJSON(); + for(std::size_t zone_index = 0; zone_index < controllers[controller_index]->GetZoneCount(); zone_index++) + { + if(controllers[controller_index]->GetZoneFlags(zone_index) & ZONE_FLAG_MANUALLY_CONFIGURED) + { + /*---------------------------------------------*\ + | Read the controller data for this controller | + | into the profile json if manually configured | + \*---------------------------------------------*/ + profile_json["controllers"][new_saved_controller_index] = controllers[controller_index]->GetDeviceDescriptionJSON(); + new_saved_controller_index++; + } + } + } + + /*-----------------------------------------------------*\ + | Loop through the previously saved sizes and add any | + | controllers that were previously saved but not in the | + | current controllers list | + \*-----------------------------------------------------*/ + for(std::size_t old_saved_controller_index = 0; old_saved_controller_index < manually_configured_rgb_controllers.size(); old_saved_controller_index++) + { + bool found = false; + + for(std::size_t controller_index = 0; controller_index < controllers.size(); controller_index++) + { + if(ProfileManager::CompareControllers(manually_configured_rgb_controllers[old_saved_controller_index], controllers[controller_index])) + { + found = true; + break; + } + } + + if(!found) + { + /*---------------------------------------------*\ + | Read the controller data for this controller | + | into the profile json | + \*---------------------------------------------*/ + profile_json["controllers"][new_saved_controller_index] = manually_configured_rgb_controllers[old_saved_controller_index]->GetDeviceDescriptionJSON(); + new_saved_controller_index++; + } } controller_file << std::setw(4) << profile_json << std::endl; @@ -745,7 +783,7 @@ bool ProfileManager::SaveSizes() controller_file.close(); /*-----------------------------------------------------*\ - | Initialize manually configured controllers list | + | Reinitialize manually configured controllers list | \*-----------------------------------------------------*/ manually_configured_rgb_controllers = GetControllerListFromSizes();