From 2cbbfd21aab7e0e9c1a62570f4a2854787d5797e Mon Sep 17 00:00:00 2001 From: Priec Date: Mon, 8 Sep 2025 22:11:53 +0200 Subject: [PATCH] revert works on login, now do the same for other pages as well --- client/src/modes/handlers/event.rs | 17 ++++++++++++++++- client/src/pages/login/logic.rs | 13 +++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/client/src/modes/handlers/event.rs b/client/src/modes/handlers/event.rs index 9c99f9d..748f88e 100644 --- a/client/src/modes/handlers/event.rs +++ b/client/src/modes/handlers/event.rs @@ -365,11 +365,26 @@ impl EventHandler { if !overlay_active { if let Page::Login(login_page) = &mut router.current { let outcome = - login::event::handle_login_event(event, app_state, login_page)?; + login::event::handle_login_event(event.clone(), app_state, login_page)?; // Only return if the login page actually consumed the key if !outcome.get_message_if_ok().is_empty() { return Ok(outcome); } + // Allow core actions via space-sequence even on Login page + if let Event::Key(k) = &event { + if let Some(sequence_action) = config.matches_key_sequence_generalized(&[k.code]) { + if matches!(sequence_action, "revert" | "save" | "force_quit" | "save_and_quit") { + let outcome = self.handle_core_action( + sequence_action, + auth_state, + terminal, + app_state, + router, + ).await?; + return Ok(outcome); + } + } + } } else if let Page::Register(register_page) = &mut router.current { let outcome = crate::pages::register::event::handle_register_event( event, diff --git a/client/src/pages/login/logic.rs b/client/src/pages/login/logic.rs index 1eabffe..bd7525b 100644 --- a/client/src/pages/login/logic.rs +++ b/client/src/pages/login/logic.rs @@ -9,6 +9,7 @@ use crate::ui::handlers::context::DialogPurpose; use common::proto::komp_ac::auth::LoginResponse; use crate::pages::login::LoginFormState; use crate::state::pages::auth::UserRole; +use canvas::DataProvider; use anyhow::{Context, Result, anyhow}; use tokio::spawn; use tokio::sync::mpsc; @@ -108,7 +109,19 @@ pub async fn revert( login_state: &mut LoginFormState, app_state: &mut AppState, ) -> String { + // Clear the underlying state login_state.clear(); + + // Also clear values inside the editor’s data provider + { + let dp = login_state.editor.data_provider_mut(); + dp.set_field_value(0, "".to_string()); + dp.set_field_value(1, "".to_string()); + dp.set_current_field(0); + dp.set_current_cursor_pos(0); + dp.set_has_unsaved_changes(false); + } + app_state.hide_dialog(); "Login reverted".to_string() }