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