feat: improve keyboard shortcuts

This commit is contained in:
electria 2026-08-28 21:11:53 -07:00
commit f7340ffcb9
Signed by: electria
SSH key fingerprint: SHA256:8LlB3ucPbBHqozqkhsNbaV5oG3SlzzqUj8FZDL6IPQs

View file

@ -18,7 +18,7 @@ enum Message {
PickedDb(Option<FileHandle>),
ChangePassword(String),
ChangeSecurity(bool),
ToggleSecurity,
OpenDb,
DbOpened(Result<keepass::Database, String>),
@ -104,7 +104,7 @@ impl State {
Message::PickedDb(None) => eprintln!("no path received from picker"),
Message::ChangePassword(password) => self.password = password,
Message::ChangeSecurity(bool) => self.is_secure = bool,
Message::ToggleSecurity => self.is_secure = !self.is_secure,
Message::OpenDb => return self.open_db(),
Message::DbOpened(result) => {
@ -273,7 +273,7 @@ impl State {
.into(),
widget::checkbox(self.is_secure)
.label("security")
.on_toggle(Message::ChangeSecurity)
.on_toggle(|_| Message::ToggleSecurity)
.into(),
])
.spacing(10)
@ -322,17 +322,19 @@ impl State {
.filter_map(move |((db_loaded, db_path_exists), event)| match event {
iced::Event::Keyboard(keyboard::Event::KeyPressed { key, modifiers, .. }) => {
match key.as_ref() {
Key::Character("p" | "f" | "i") if !db_loaded => Some(Message::PickDb),
Key::Character("v" | "s") if !db_loaded => Some(Message::ToggleSecurity),
Key::Named(key::Named::Enter) if !db_loaded && db_path_exists => {
Some(Message::OpenDb)
}
Key::Named(key::Named::Tab) => Some(if modifiers.shift() {
Message::FocusPrevious
} else {
Message::FocusNext
}),
Key::Character("/") => Some(Message::FocusSearch),
Key::Named(key::Named::Enter) if !db_loaded && db_path_exists => {
Some(Message::OpenDb)
}
Key::Character("p" | "f" | "i") if !db_loaded => Some(Message::PickDb),
Key::Character("/" | "f") => Some(Message::FocusSearch),
Key::Character("h") | Key::Named(key::Named::ArrowLeft) => {
Some(Message::SelectionLeft)