diff --git a/src/gui/draw.rs b/src/gui/draw.rs index b70853b..644ef4f 100644 --- a/src/gui/draw.rs +++ b/src/gui/draw.rs @@ -498,9 +498,7 @@ impl SoundpadGui { ui.add_space(5.0); ui.horizontal(|ui| { // ---------- Microphone selection ---------- - let mut mics: Vec<(&String, &String)> = - self.audio_player_state.all_inputs.iter().collect(); - mics.sort_by_key(|(k, _)| *k); + let mics = &self.audio_player_state.all_inputs_sorted; let mut selected_input = self.audio_player_state.current_input.to_owned(); let prev_input = selected_input.to_owned(); @@ -514,7 +512,7 @@ impl SoundpadGui { ) .show_ui(ui, |ui| { for (name, nick) in mics { - ui.selectable_value(&mut selected_input, name.to_owned(), nick); + ui.selectable_value(&mut selected_input, name.clone(), nick); } }); diff --git a/src/types/gui.rs b/src/types/gui.rs index 8e4cb1d..64b4c2f 100644 --- a/src/types/gui.rs +++ b/src/types/gui.rs @@ -55,6 +55,7 @@ pub struct AudioPlayerState { pub current_input: String, pub all_inputs: HashMap, + pub all_inputs_sorted: Vec<(String, String)>, pub is_daemon_running: bool, } diff --git a/src/utils/gui.rs b/src/utils/gui.rs index 9687666..271c538 100644 --- a/src/utils/gui.rs +++ b/src/utils/gui.rs @@ -90,7 +90,18 @@ pub fn start_app_state_thread(audio_player_state_shared: Arc = guard + .all_inputs + .iter() + .map(|(k, v)| (k.clone(), v.clone())) + .collect(); + sorted.sort_by(|a, b| a.0.cmp(&b.0)); + guard.all_inputs_sorted = sorted; + } + guard.is_daemon_running = true; }