From bbaa1935f4134d1c6c0fbec85746713119656e13 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Mon, 30 Jun 2025 09:36:05 -0400 Subject: [PATCH] feat: last user --- cosmic-greeter-config/src/lib.rs | 1 + src/greeter.rs | 29 ++++++++++++++++++++++++----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/cosmic-greeter-config/src/lib.rs b/cosmic-greeter-config/src/lib.rs index 0327d08..bd4407d 100644 --- a/cosmic-greeter-config/src/lib.rs +++ b/cosmic-greeter-config/src/lib.rs @@ -17,6 +17,7 @@ pub const CONFIG_VERSION: u64 = 1; pub struct Config { #[serde(skip_serializing_if = "HashMap::is_empty")] pub users: HashMap, + pub last_user: Option, } impl Config { diff --git a/src/greeter.rs b/src/greeter.rs index 2e3b240..b5f2e49 100644 --- a/src/greeter.rs +++ b/src/greeter.rs @@ -891,11 +891,22 @@ impl cosmic::Application for App { .collect(); usernames.sort_by(|a, b| a.1.cmp(&b.1)); - //TODO: use last selected user - let (username, uid) = flags - .user_datas - .first() - .map(|x| (x.name.clone(), NonZeroU32::new(x.uid))) + let last_user = flags.greeter_config.last_user.as_ref(); + + let (username, uid) = last_user + .and_then(|last_user| { + flags + .user_datas + .iter() + .find(|d| d.uid == last_user.get()) + .map(|x| (x.name.clone(), NonZeroU32::new(x.uid))) + }) + .or_else(|| { + flags + .user_datas + .first() + .map(|x| (x.name.clone(), NonZeroU32::new(x.uid))) + }) .unwrap_or_default(); let mut session_names: Vec<_> = flags.sessions.keys().map(|x| x.to_string()).collect(); @@ -1158,6 +1169,14 @@ impl cosmic::Application for App { }; let uid = *user_entry.key(); + self.flags.greeter_config.last_user = Some(uid); + if let Err(err) = handler.set("last_user", &self.flags.greeter_config.last_user) { + log::error!( + "Failed to set {:?} as last user: {:?}", + self.flags.greeter_config.last_user, + err + ); + } match user_entry { hash_map::Entry::Vacant(entry) => { let last_session = Some(self.selected_session.clone());