From 1525da6bea0c6324ca1a0556113577e89e734716 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Thu, 11 Apr 2024 19:38:54 +0200 Subject: [PATCH] fix(displays): on display changes, keep same display active --- cosmic-settings/src/pages/display/mod.rs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/cosmic-settings/src/pages/display/mod.rs b/cosmic-settings/src/pages/display/mod.rs index 402eff3..ea4c2e9 100644 --- a/cosmic-settings/src/pages/display/mod.rs +++ b/cosmic-settings/src/pages/display/mod.rs @@ -487,6 +487,12 @@ impl Page { /// Reloads the display list, and all information relevant to the active display. pub fn update_displays(&mut self, list: List) { + let active_display_name = self + .display_tabs + .text_remove(self.display_tabs.active()) + .unwrap_or_default(); + let mut active_tab_pos: u16 = 0; + self.active_display = OutputKey::null(); self.display_tabs.clear(); self.list = list; @@ -498,18 +504,21 @@ impl Page { .map(|(key, output)| (&*output.name, key)) .collect::>(); - for (name, id) in sorted_outputs { + for (pos, (name, id)) in sorted_outputs.into_iter().enumerate() { let Some(output) = self.list.outputs.get(id) else { continue; }; - self.display_tabs - .insert() - .text(crate::utils::display_name(&output.name, output.physical)) - .data::(id); + let text = crate::utils::display_name(&output.name, output.physical); + + if text == active_display_name { + active_tab_pos = pos as u16; + } + + self.display_tabs.insert().text(text).data::(id); } - self.display_tabs.activate_position(0); + self.display_tabs.activate_position(active_tab_pos); // Retrieve data for the first, activated display. self.set_display(self.display_tabs.active());