mirror of
https://github.com/apognu/tuigreet.git
synced 2024-09-11 07:25:29 +03:00
Always close user menu when user is selected (#131).
This commit is contained in:
parent
f65c70689b
commit
f988ed188d
@ -62,6 +62,7 @@ pub enum Mode {
|
||||
#[default]
|
||||
Username,
|
||||
Password,
|
||||
Action,
|
||||
Users,
|
||||
Command,
|
||||
Sessions,
|
||||
|
@ -91,6 +91,9 @@ impl Ipc {
|
||||
AuthMessageType::Info => {
|
||||
greeter.remove_prompt();
|
||||
|
||||
greeter.previous_mode = greeter.mode;
|
||||
greeter.mode = Mode::Action;
|
||||
|
||||
if let Some(message) = &mut greeter.message {
|
||||
message.push('\n');
|
||||
message.push_str(auth_message.trim_end());
|
||||
|
@ -240,6 +240,8 @@ pub async fn handle(greeter: Arc<RwLock<Greeter>>, input: KeyEvent, ipc: Ipc) ->
|
||||
greeter.username = MaskedString::from(username, name);
|
||||
}
|
||||
|
||||
greeter.mode = greeter.previous_mode;
|
||||
|
||||
validate_username(&mut greeter, &ipc).await;
|
||||
}
|
||||
|
||||
@ -271,7 +273,7 @@ pub async fn handle(greeter: Arc<RwLock<Greeter>>, input: KeyEvent, ipc: Ipc) ->
|
||||
greeter.mode = greeter.previous_mode;
|
||||
}
|
||||
|
||||
Mode::Processing => {}
|
||||
_ => {}
|
||||
},
|
||||
|
||||
// Do not handle any other controls keybindings
|
||||
@ -296,7 +298,7 @@ async fn insert_key(greeter: &mut Greeter, c: char) {
|
||||
Mode::Username => &greeter.username.value,
|
||||
Mode::Password => &greeter.buffer,
|
||||
Mode::Command => &greeter.buffer,
|
||||
Mode::Users | Mode::Sessions | Mode::Power | Mode::Processing => return,
|
||||
_ => return,
|
||||
};
|
||||
|
||||
let index = (value.chars().count() as i16 + greeter.cursor_offset) as usize;
|
||||
@ -322,7 +324,7 @@ async fn delete_key(greeter: &mut Greeter, key: KeyCode) {
|
||||
Mode::Username => &greeter.username.value,
|
||||
Mode::Password => &greeter.buffer,
|
||||
Mode::Command => &greeter.buffer,
|
||||
Mode::Users | Mode::Sessions | Mode::Power | Mode::Processing => return,
|
||||
_ => return,
|
||||
};
|
||||
|
||||
let index = match key {
|
||||
@ -341,7 +343,7 @@ async fn delete_key(greeter: &mut Greeter, key: KeyCode) {
|
||||
Mode::Username => greeter.username.value = value,
|
||||
Mode::Password => greeter.buffer = value,
|
||||
Mode::Command => greeter.buffer = value,
|
||||
Mode::Users | Mode::Sessions | Mode::Power | Mode::Processing => return,
|
||||
_ => return,
|
||||
};
|
||||
|
||||
if let KeyCode::Delete = key {
|
||||
|
@ -35,11 +35,13 @@ pub fn draw(greeter: &mut Greeter, f: &mut Frame) -> Result<(u16, u16), Box<dyn
|
||||
let (message, message_height) = get_message_height(greeter, container_padding, 1);
|
||||
let (greeting, greeting_height) = get_greeting_height(greeter, container_padding, 0);
|
||||
|
||||
let should_display_answer = greeter.mode == Mode::Password;
|
||||
|
||||
let constraints = [
|
||||
Constraint::Length(greeting_height), // Greeting
|
||||
Constraint::Length(1), // Username
|
||||
Constraint::Length(if greeter.mode == Mode::Username { 0 } else { prompt_padding }), // Prompt padding
|
||||
Constraint::Length(if greeter.mode == Mode::Username { 0 } else { 1 }), // Answer
|
||||
Constraint::Length(greeting_height), // Greeting
|
||||
Constraint::Length(1), // Username
|
||||
Constraint::Length(if should_display_answer { prompt_padding } else { 0 }), // Prompt padding
|
||||
Constraint::Length(if should_display_answer { 1 } else { 0 }), // Answer
|
||||
];
|
||||
|
||||
let chunks = Layout::default().direction(Direction::Vertical).constraints(constraints.as_ref()).split(frame);
|
||||
@ -67,7 +69,7 @@ pub fn draw(greeter: &mut Greeter, f: &mut Frame) -> Result<(u16, u16), Box<dyn
|
||||
let username_value = Paragraph::new(username_value_text);
|
||||
|
||||
match greeter.mode {
|
||||
Mode::Username | Mode::Password => {
|
||||
Mode::Username | Mode::Password | Mode::Action => {
|
||||
f.render_widget(username_label, chunks[USERNAME_INDEX]);
|
||||
|
||||
if !greeter.user_menu || !greeter.username.value.is_empty() {
|
||||
|
@ -18,6 +18,7 @@ pub fn should_hide_cursor(greeter: &Greeter) -> bool {
|
||||
|| greeter.mode == Mode::Sessions
|
||||
|| greeter.mode == Mode::Power
|
||||
|| greeter.mode == Mode::Processing
|
||||
|| greeter.mode == Mode::Action
|
||||
}
|
||||
|
||||
// Computes the height of the main window where we display content, depending on
|
||||
@ -37,7 +38,7 @@ pub fn get_height(greeter: &Greeter) -> u16 {
|
||||
let prompt_padding = greeter.prompt_padding();
|
||||
|
||||
let initial = match greeter.mode {
|
||||
Mode::Username | Mode::Command => (2 * container_padding) + 1,
|
||||
Mode::Username | Mode::Action | Mode::Command => (2 * container_padding) + 1,
|
||||
Mode::Password => match greeter.prompt {
|
||||
Some(_) => (2 * container_padding) + prompt_padding + 2,
|
||||
None => (2 * container_padding) + 1,
|
||||
|
Loading…
Reference in New Issue
Block a user