79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
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
|
|
}
|
|
}
|