package main import ( "strings" "gioui.org/io/event" "gioui.org/io/key" "gioui.org/layout" "git.julianfamily.org/keepassgo/clipboard" ) const ( shortcutSearch = "search" shortcutSave = "save" shortcutLock = "lock" shortcutNewEntry = "new-entry" shortcutCopyUser = "copy-user" shortcutCopyPassword = "copy-password" shortcutCopyURL = "copy-url" ) func (u *ui) processShortcuts(gtx layout.Context) { event.Op(gtx.Ops, u) for { ev, ok := gtx.Event( key.Filter{Name: "F", Required: key.ModShortcut}, key.Filter{Name: "S", Required: key.ModShortcut}, key.Filter{Name: "L", Required: key.ModShortcut}, key.Filter{Name: "N", Required: key.ModShortcut}, key.Filter{Name: "U", Required: key.ModShortcut}, key.Filter{Name: "P", Required: key.ModShortcut}, key.Filter{Name: "O", Required: key.ModShortcut}, key.Filter{Name: key.NameTab, Optional: key.ModShift}, key.Filter{Name: key.NameLeftArrow}, key.Filter{Name: key.NameRightArrow}, key.Filter{Name: key.NameUpArrow}, key.Filter{Name: key.NameDownArrow}, key.Filter{Name: key.NameReturn}, ) if !ok { break } ke, ok := ev.(key.Event) if !ok || ke.State != key.Press { continue } u.handleKeyPress(ke.Name, ke.Modifiers) } } func (u *ui) performShortcut(name string) error { switch name { case shortcutSearch: u.keyboardFocus = focusSearch return nil case shortcutSave: return u.saveAction() case shortcutLock: return u.lockAction() case shortcutNewEntry: u.state.BeginNewEntry() u.loadSelectedEntryIntoEditor() u.entryPath.SetText(strings.Join(u.state.CurrentPath, " / ")) u.keyboardFocus = detailFocusID(detailFieldTitle) return nil case shortcutCopyUser: return u.copySelectedFieldAction(clipboard.TargetUsername) case shortcutCopyPassword: return u.copySelectedFieldAction(clipboard.TargetPassword) case shortcutCopyURL: return u.copySelectedFieldAction(clipboard.TargetURL) default: return nil } }