shortcut.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package desktop
  2. import (
  3. "runtime"
  4. "strings"
  5. "fyne.io/fyne/v2"
  6. )
  7. // Declare conformity with Shortcut interface
  8. var _ fyne.Shortcut = (*CustomShortcut)(nil)
  9. var _ fyne.KeyboardShortcut = (*CustomShortcut)(nil)
  10. // CustomShortcut describes a shortcut desktop event.
  11. type CustomShortcut struct {
  12. fyne.KeyName
  13. Modifier fyne.KeyModifier
  14. }
  15. // Key returns the key name of this shortcut.
  16. // @implements KeyboardShortcut
  17. func (cs *CustomShortcut) Key() fyne.KeyName {
  18. return cs.KeyName
  19. }
  20. // Mod returns the modifier of this shortcut.
  21. // @implements KeyboardShortcut
  22. func (cs *CustomShortcut) Mod() fyne.KeyModifier {
  23. return cs.Modifier
  24. }
  25. // ShortcutName returns the shortcut name associated to the event
  26. func (cs *CustomShortcut) ShortcutName() string {
  27. id := &strings.Builder{}
  28. id.WriteString("CustomDesktop:")
  29. id.WriteString(modifierToString(cs.Modifier))
  30. id.WriteString("+")
  31. id.WriteString(string(cs.KeyName))
  32. return id.String()
  33. }
  34. func modifierToString(mods fyne.KeyModifier) string {
  35. s := []string{}
  36. if (mods & fyne.KeyModifierShift) != 0 {
  37. s = append(s, string("Shift"))
  38. }
  39. if (mods & fyne.KeyModifierControl) != 0 {
  40. s = append(s, string("Control"))
  41. }
  42. if (mods & fyne.KeyModifierAlt) != 0 {
  43. s = append(s, string("Alt"))
  44. }
  45. if (mods & fyne.KeyModifierSuper) != 0 {
  46. if runtime.GOOS == "darwin" {
  47. s = append(s, string("Command"))
  48. } else {
  49. s = append(s, string("Super"))
  50. }
  51. }
  52. return strings.Join(s, "+")
  53. }