diff --git a/event.go b/event.go index 435b39e30f..6646e653ec 100644 --- a/event.go +++ b/event.go @@ -1,8 +1,18 @@ package fyne +// HardwareKey contains information associated with physical key events +// Most applications should use KeyName for cross-platform compatibility. +type HardwareKey struct { + // ScanCode represents a hardware ID for (normally desktop) keyboard events. + ScanCode int +} + // KeyEvent describes a keyboard input event. type KeyEvent struct { + // Name describes the keyboard event that is consistent across platforms. Name KeyName + // Physical is a platform specific field that reports the hardware information of physical keyboard events. + Physical HardwareKey } // PointEvent describes a pointer input event. The position is relative to the diff --git a/internal/driver/glfw/window.go b/internal/driver/glfw/window.go index df61da8b5b..20af3098de 100644 --- a/internal/driver/glfw/window.go +++ b/internal/driver/glfw/window.go @@ -1092,7 +1092,7 @@ func keyToName(code glfw.Key, scancode int) fyne.KeyName { keyName := glfw.GetKeyName(code, scancode) ret, ok = keyNameMap[keyName] if !ok { - return "" + return fyne.KeyUnknown } return ret @@ -1120,8 +1120,8 @@ func (w *window) capturesTab(modifier desktop.Modifier) bool { func (w *window) keyPressed(_ *glfw.Window, key glfw.Key, scancode int, action glfw.Action, mods glfw.ModifierKey) { keyName := keyToName(key, scancode) + keyEvent := &fyne.KeyEvent{Name: keyName, Physical: fyne.HardwareKey{ScanCode: scancode}} - keyEvent := &fyne.KeyEvent{Name: keyName} keyDesktopModifier := desktopModifier(mods) pendingMenuToggle := w.menuTogglePending pendingMenuDeactivation := w.menuDeactivationPending @@ -1168,9 +1168,6 @@ func (w *window) keyPressed(_ *glfw.Window, key glfw.Key, scancode int, action g // key repeat will fall through to TypedKey and TypedShortcut } - if keyName == "" { // don't emit unknown - return - } if (keyName == fyne.KeyTab && !w.capturesTab(keyDesktopModifier)) || w.triggersShortcut(keyName, keyDesktopModifier) { return } diff --git a/key.go b/key.go index 4d3c4b3d6b..dd9bd53595 100644 --- a/key.go +++ b/key.go @@ -167,4 +167,10 @@ const ( KeyPlus KeyName = "+" // KeyBackTick is the key "`" on a US keyboard KeyBackTick KeyName = "`" + + // KeyUnknown is used for key events where the underlying hardware generated an + // event that Fyne could not decode. + // + // Since: 2.1 + KeyUnknown KeyName = "" )