fix: binary search won't work for name comparison

This commit is contained in:
Ashley Wulber 2025-06-30 10:45:03 -04:00 • committed by Jeremy Soller
parent bbaa1935f4
commit 6813da21b5

View file

@ -114,7 +114,6 @@ pub fn main() -> Result<(), Box<dyn Error>> {
// Sort user data by uid // Sort user data by uid
user_datas.sort_by(|a, b| a.uid.cmp(&b.uid)); user_datas.sort_by(|a, b| a.uid.cmp(&b.uid));
let (mut greeter_config, greeter_config_handler) = CosmicGreeterConfig::load(); let (mut greeter_config, greeter_config_handler) = CosmicGreeterConfig::load();
// Filter out users that were removed from the system since the last time we loaded config // Filter out users that were removed from the system since the last time we loaded config
greeter_config.users.retain(|uid, _| { greeter_config.users.retain(|uid, _| {
@ -846,12 +845,6 @@ impl App {
None => Task::none(), None => Task::none(),
} }
} }
fn user_data_index(user_datas: &[UserData], username: &str) -> Option<usize> {
user_datas
.binary_search_by(|probe| probe.name.as_str().cmp(username))
.ok()
}
} }
/// Implement [`cosmic::Application`] to integrate with COSMIC. /// Implement [`cosmic::Application`] to integrate with COSMIC.
@ -1104,7 +1097,11 @@ impl cosmic::Application for App {
} }
self.entering_name = true; self.entering_name = true;
self.selected_username = NameIndexPair { self.selected_username = NameIndexPair {
data_idx: Self::user_data_index(&self.flags.user_datas, &username), data_idx: self
.flags
.user_datas
.iter()
.position(|d| d.name == username),
username, username,
}; };
if focus_input { if focus_input {
@ -1117,7 +1114,11 @@ impl cosmic::Application for App {
} }
if self.entering_name || username != self.selected_username.username { if self.entering_name || username != self.selected_username.username {
self.entering_name = false; self.entering_name = false;
let data_idx = Self::user_data_index(&self.flags.user_datas, &username); let data_idx = self
.flags
.user_datas
.iter()
.position(|d| d.name == username);
self.selected_username = NameIndexPair { username, data_idx }; self.selected_username = NameIndexPair { username, data_idx };
self.common.surface_images.clear(); self.common.surface_images.clear();
if let Some(session) = data_idx.and_then(|i| { if let Some(session) = data_idx.and_then(|i| {
@ -1155,7 +1156,11 @@ impl cosmic::Application for App {
.map(|uid| self.flags.greeter_config.users.entry(uid)) .map(|uid| self.flags.greeter_config.users.entry(uid))
}) })
}) else { }) else {
log::error!("Couldn't find user: {:?}", self.selected_username.username); log::error!(
"Couldn't find user: {:?} {:?}",
self.selected_username.username,
self.selected_username.data_idx,
);
return Task::none(); return Task::none();
}; };