From 3d5262c36f54a8648b4ae6d78293f44cd069968f Mon Sep 17 00:00:00 2001 From: 21pages Date: Fri, 20 Sep 2024 11:06:56 +0800 Subject: [PATCH] opt gtk sudo ui, fix edit button show (#9399) Signed-off-by: 21pages --- src/platform/gtk_sudo.rs | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/platform/gtk_sudo.rs b/src/platform/gtk_sudo.rs index a3727134e..0105b335c 100644 --- a/src/platform/gtk_sudo.rs +++ b/src/platform/gtk_sudo.rs @@ -30,7 +30,7 @@ use std::{ const EXIT_CODE: i32 = -1; enum Message { - PasswordPrompt(String), + PasswordPrompt((String, bool)), Password((String, String)), ErrorDialog(String), Cancel, @@ -107,24 +107,20 @@ fn ui(args: Vec) { let username = Arc::new(Mutex::new(crate::platform::get_active_username())); let username_clone = username.clone(); - let first_prompt = Arc::new(Mutex::new(true)); application.connect_activate(glib::clone!(@weak application =>move |_| { let rx_to_ui = rx_to_ui_clone.clone(); let tx_from_ui = tx_from_ui_clone.clone(); let last_password = Arc::new(Mutex::new(String::new())); let username = username_clone.clone(); - let first_prompt = first_prompt.clone(); glib::timeout_add_local(std::time::Duration::from_millis(50), move || { if let Ok(msg) = rx_to_ui.lock().unwrap().try_recv() { match msg { - Message::PasswordPrompt(err_msg) => { + Message::PasswordPrompt((err_msg, show_edit)) => { let last_pwd = last_password.lock().unwrap().clone(); let username = username.lock().unwrap().clone(); - let first = first_prompt.lock().unwrap().clone(); - *first_prompt.lock().unwrap() = false; - if let Some((username, password)) = password_prompt(&username, &last_pwd, &err_msg, first) { + if let Some((username, password)) = password_prompt(&username, &last_pwd, &err_msg, show_edit) { *last_password.lock().unwrap() = password.clone(); if let Err(e) = tx_from_ui .lock() @@ -157,7 +153,7 @@ fn ui(args: Vec) { let acitve_user = crate::platform::get_active_username(); let mut initial_password = None; if acitve_user != "root" { - if let Err(e) = tx_to_ui_clone.send(Message::PasswordPrompt("".to_string())) { + if let Err(e) = tx_to_ui_clone.send(Message::PasswordPrompt(("".to_string(), true))) { log::error!("Channel error: {e:?}"); std::process::exit(EXIT_CODE); } @@ -385,7 +381,7 @@ fn ui_parent( let err_msg = if first { "" } else { "Sorry, try again." }; first = false; if let Err(e) = - tx_to_ui.send(Message::PasswordPrompt(err_msg.to_string())) + tx_to_ui.send(Message::PasswordPrompt((err_msg.to_string(), false))) { log::error!("Channel error: {e:?}"); kill_child(child); @@ -627,6 +623,7 @@ fn password_prompt( user_box.add(&user_entry); user_box.set_halign(gtk::Align::Center); user_box.set_valign(gtk::Align::Center); + user_box.set_vexpand(true); content_area.add(&user_box); edit_button.connect_clicked( @@ -690,21 +687,21 @@ fn password_prompt( let cancel_button = gtk::Button::builder() .label(translate("Cancel".to_string())) - .expand(true) + .hexpand(true) .build(); cancel_button.connect_clicked(glib::clone!(@weak dialog => move |_| { dialog.response(gtk::ResponseType::Cancel); })); let authenticate_button = gtk::Button::builder() .label(translate("Authenticate".to_string())) - .expand(true) + .hexpand(true) .build(); authenticate_button.connect_clicked(glib::clone!(@weak dialog => move |_| { dialog.response(gtk::ResponseType::Ok); })); let button_box = gtk::Box::builder() .orientation(gtk::Orientation::Horizontal) - .expand(true) + .hexpand(true) .homogeneous(true) .spacing(10) .margin_top(10)