app: send keypress events for modifier keys

This change causes modifier keys (Control, Shift, Alt, Super) to be sent
to the application as key.Event events. These will still continue to be
used as modifiers for other key and pointer events as they are today.

This commit also adds a minor cleanup to use constants for function
keys in the OS-specific keypress handling functions.

Signed-off-by: Jeff Williams <kanobe@gmail.com>
This commit is contained in:
Jeff Williams
2022-01-12 08:36:45 -05:00
committed by Elias Naur
parent fcaadb3698
commit 13183522dd
6 changed files with 110 additions and 38 deletions
+20 -12
View File
@@ -267,33 +267,41 @@ func convertKeysym(s C.xkb_keysym_t) (string, bool) {
case C.XKB_KEY_Page_Down:
n = key.NamePageDown
case C.XKB_KEY_F1:
n = "F1"
n = key.NameF1
case C.XKB_KEY_F2:
n = "F2"
n = key.NameF2
case C.XKB_KEY_F3:
n = "F3"
n = key.NameF3
case C.XKB_KEY_F4:
n = "F4"
n = key.NameF4
case C.XKB_KEY_F5:
n = "F5"
n = key.NameF5
case C.XKB_KEY_F6:
n = "F6"
n = key.NameF6
case C.XKB_KEY_F7:
n = "F7"
n = key.NameF7
case C.XKB_KEY_F8:
n = "F8"
n = key.NameF8
case C.XKB_KEY_F9:
n = "F9"
n = key.NameF9
case C.XKB_KEY_F10:
n = "F10"
n = key.NameF10
case C.XKB_KEY_F11:
n = "F11"
n = key.NameF11
case C.XKB_KEY_F12:
n = "F12"
n = key.NameF12
case C.XKB_KEY_Tab, C.XKB_KEY_KP_Tab, C.XKB_KEY_ISO_Left_Tab:
n = key.NameTab
case 0x20, C.XKB_KEY_KP_Space:
n = key.NameSpace
case C.XKB_KEY_Control_L, C.XKB_KEY_Control_R:
n = key.NameCtrl
case C.XKB_KEY_Shift_L, C.XKB_KEY_Shift_R:
n = key.NameShift
case C.XKB_KEY_Alt_L, C.XKB_KEY_Alt_R:
n = key.NameAlt
case C.XKB_KEY_Super_L, C.XKB_KEY_Super_R:
n = key.NameSuper
default:
return "", false
}
+8
View File
@@ -905,6 +905,14 @@ func convertKeyCode(code C.jint) (string, bool) {
n = key.NameEnter
case C.AKEYCODE_ENTER:
n = key.NameEnter
case C.AKEYCODE_CTRL_LEFT, C.AKEYCODE_CTRL_RIGHT:
n = key.NameCtrl
case C.AKEYCODE_SHIFT_LEFT, C.AKEYCODE_SHIFT_RIGHT:
n = key.NameShift
case C.AKEYCODE_ALT_LEFT, C.AKEYCODE_ALT_RIGHT:
n = key.NameAlt
case C.AKEYCODE_META_LEFT, C.AKEYCODE_META_RIGHT:
n = key.NameSuper
default:
return "", false
}
+33 -2
View File
@@ -677,6 +677,7 @@ func osMain() {
func translateKey(k string) (string, bool) {
var n string
switch k {
case "ArrowUp":
n = key.NameUpArrow
@@ -706,8 +707,38 @@ func translateKey(k string) (string, bool) {
n = key.NameTab
case " ":
n = key.NameSpace
case "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12":
n = k
case "F1":
n = key.NameF1
case "F2":
n = key.NameF2
case "F3":
n = key.NameF3
case "F4":
n = key.NameF4
case "F5":
n = key.NameF5
case "F6":
n = key.NameF6
case "F7":
n = key.NameF7
case "F8":
n = key.NameF8
case "F9":
n = key.NameF9
case "F10":
n = key.NameF10
case "F11":
n = key.NameF11
case "F12":
n = key.NameF12
case "Control":
n = key.NameCtrl
case "Shift":
n = key.NameShift
case "Alt":
n = key.NameAlt
case "OS":
n = key.NameSuper
default:
r, s := utf8.DecodeRuneInString(k)
// If there is exactly one printable character, return that.
+12 -12
View File
@@ -610,29 +610,29 @@ func convertKey(k rune) (string, bool) {
case C.NSPageDownFunctionKey:
n = key.NamePageDown
case C.NSF1FunctionKey:
n = "F1"
n = key.NameF1
case C.NSF2FunctionKey:
n = "F2"
n = key.NameF2
case C.NSF3FunctionKey:
n = "F3"
n = key.NameF3
case C.NSF4FunctionKey:
n = "F4"
n = key.NameF4
case C.NSF5FunctionKey:
n = "F5"
n = key.NameF5
case C.NSF6FunctionKey:
n = "F6"
n = key.NameF6
case C.NSF7FunctionKey:
n = "F7"
n = key.NameF7
case C.NSF8FunctionKey:
n = "F8"
n = key.NameF8
case C.NSF9FunctionKey:
n = "F9"
n = key.NameF9
case C.NSF10FunctionKey:
n = "F10"
n = key.NameF10
case C.NSF11FunctionKey:
n = "F11"
n = key.NameF11
case C.NSF12FunctionKey:
n = "F12"
n = key.NameF12
case 0x09, 0x19:
n = key.NameTab
case 0x20:
+21 -12
View File
@@ -739,6 +739,7 @@ func convertKeyCode(code uintptr) (string, bool) {
return string(rune(code)), true
}
var r string
switch code {
case windows.VK_ESCAPE:
r = key.NameEscape
@@ -765,29 +766,29 @@ func convertKeyCode(code uintptr) (string, bool) {
case windows.VK_NEXT:
r = key.NamePageDown
case windows.VK_F1:
r = "F1"
r = key.NameF1
case windows.VK_F2:
r = "F2"
r = key.NameF2
case windows.VK_F3:
r = "F3"
r = key.NameF3
case windows.VK_F4:
r = "F4"
r = key.NameF4
case windows.VK_F5:
r = "F5"
r = key.NameF5
case windows.VK_F6:
r = "F6"
r = key.NameF6
case windows.VK_F7:
r = "F7"
r = key.NameF7
case windows.VK_F8:
r = "F8"
r = key.NameF8
case windows.VK_F9:
r = "F9"
r = key.NameF9
case windows.VK_F10:
r = "F10"
r = key.NameF10
case windows.VK_F11:
r = "F11"
r = key.NameF11
case windows.VK_F12:
r = "F12"
r = key.NameF12
case windows.VK_TAB:
r = key.NameTab
case windows.VK_SPACE:
@@ -814,6 +815,14 @@ func convertKeyCode(code uintptr) (string, bool) {
r = "]"
case windows.VK_OEM_7:
r = "'"
case windows.VK_CONTROL:
r = key.NameCtrl
case windows.VK_SHIFT:
r = key.NameShift
case windows.VK_MENU:
r = key.NameAlt
case windows.VK_LWIN, windows.VK_RWIN:
r = key.NameSuper
default:
return "", false
}
+16
View File
@@ -133,6 +133,22 @@ const (
NamePageDown = "⇟"
NameTab = "⇥"
NameSpace = "Space"
NameCtrl = "⌃"
NameShift = "⇧"
NameAlt = "⎇"
NameSuper = "⊞"
NameF1 = "F1"
NameF2 = "F2"
NameF3 = "F3"
NameF4 = "F4"
NameF5 = "F5"
NameF6 = "F6"
NameF7 = "F7"
NameF8 = "F8"
NameF9 = "F9"
NameF10 = "F10"
NameF11 = "F11"
NameF12 = "F12"
)
// Contain reports whether m contains all modifiers