62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
package desktop
|
|
|
|
import (
|
|
"runtime"
|
|
"strings"
|
|
|
|
"fyne.io/fyne/v2"
|
|
)
|
|
|
|
// Declare conformity with Shortcut interface
|
|
var _ fyne.Shortcut = (*CustomShortcut)(nil)
|
|
var _ fyne.KeyboardShortcut = (*CustomShortcut)(nil)
|
|
|
|
// CustomShortcut describes a shortcut desktop event.
|
|
type CustomShortcut struct {
|
|
fyne.KeyName
|
|
Modifier fyne.KeyModifier
|
|
}
|
|
|
|
// Key returns the key name of this shortcut.
|
|
// @implements KeyboardShortcut
|
|
func (cs *CustomShortcut) Key() fyne.KeyName {
|
|
return cs.KeyName
|
|
}
|
|
|
|
// Mod returns the modifier of this shortcut.
|
|
// @implements KeyboardShortcut
|
|
func (cs *CustomShortcut) Mod() fyne.KeyModifier {
|
|
return cs.Modifier
|
|
}
|
|
|
|
// ShortcutName returns the shortcut name associated to the event
|
|
func (cs *CustomShortcut) ShortcutName() string {
|
|
id := &strings.Builder{}
|
|
id.WriteString("CustomDesktop:")
|
|
id.WriteString(modifierToString(cs.Modifier))
|
|
id.WriteString("+")
|
|
id.WriteString(string(cs.KeyName))
|
|
return id.String()
|
|
}
|
|
|
|
func modifierToString(mods fyne.KeyModifier) string {
|
|
s := []string{}
|
|
if (mods & fyne.KeyModifierShift) != 0 {
|
|
s = append(s, string("Shift"))
|
|
}
|
|
if (mods & fyne.KeyModifierControl) != 0 {
|
|
s = append(s, string("Control"))
|
|
}
|
|
if (mods & fyne.KeyModifierAlt) != 0 {
|
|
s = append(s, string("Alt"))
|
|
}
|
|
if (mods & fyne.KeyModifierSuper) != 0 {
|
|
if runtime.GOOS == "darwin" {
|
|
s = append(s, string("Command"))
|
|
} else {
|
|
s = append(s, string("Super"))
|
|
}
|
|
}
|
|
return strings.Join(s, "+")
|
|
}
|