mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-06 01:45:36 +00:00
io/key: add ModAlt, ModSuper
Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
@@ -210,8 +210,11 @@ func (w *window) keyEvent(e js.Value) {
|
||||
k := e.Get("key").String()
|
||||
if n, ok := translateKey(k); ok {
|
||||
cmd := key.Event{Name: n}
|
||||
if e.Call("getModifierState", "Alt").Bool() {
|
||||
cmd.Modifiers |= key.ModAlt
|
||||
}
|
||||
if e.Call("getModifierState", "Control").Bool() {
|
||||
cmd.Modifiers |= key.ModCommand
|
||||
cmd.Modifiers |= key.ModCtrl
|
||||
}
|
||||
if e.Call("getModifierState", "Shift").Bool() {
|
||||
cmd.Modifiers |= key.ModShift
|
||||
|
||||
@@ -119,6 +119,12 @@ func gio_onFrameCallback(view C.CFTypeRef) {
|
||||
func gio_onKeys(view C.CFTypeRef, cstr *C.char, ti C.double, mods C.NSUInteger) {
|
||||
str := C.GoString(cstr)
|
||||
var kmods key.Modifiers
|
||||
if mods&C.NSAlternateKeyMask != 0 {
|
||||
kmods |= key.ModAlt
|
||||
}
|
||||
if mods&C.NSControlKeyMask != 0 {
|
||||
kmods |= key.ModCtrl
|
||||
}
|
||||
if mods&C.NSCommandKeyMask != 0 {
|
||||
kmods |= key.ModCommand
|
||||
}
|
||||
|
||||
@@ -94,6 +94,9 @@ const (
|
||||
_USER_TIMER_MINIMUM = 0x0000000A
|
||||
|
||||
_VK_CONTROL = 0x11
|
||||
_VK_LWIN = 0x5B
|
||||
_VK_MENU = 0x12
|
||||
_VK_RWIN = 0x5C
|
||||
_VK_SHIFT = 0x10
|
||||
|
||||
_VK_BACK = 0x08
|
||||
@@ -280,6 +283,12 @@ func windowProc(hwnd syscall.Handle, msg uint32, wParam, lParam uintptr) uintptr
|
||||
case _WM_KEYDOWN, _WM_SYSKEYDOWN:
|
||||
if n, ok := convertKeyCode(wParam); ok {
|
||||
cmd := key.Event{Name: n}
|
||||
if getKeyState(_VK_LWIN)&0x1000 != 0 || getKeyState(_VK_RWIN)&0x1000 != 0 {
|
||||
cmd.Modifiers |= key.ModSuper
|
||||
}
|
||||
if getKeyState(_VK_MENU)&0x1000 != 0 {
|
||||
cmd.Modifiers |= key.ModAlt
|
||||
}
|
||||
if getKeyState(_VK_CONTROL)&0x1000 != 0 {
|
||||
cmd.Modifiers |= key.ModCtrl
|
||||
}
|
||||
|
||||
@@ -334,6 +334,12 @@ func (h *x11EventHandler) handleEvents() bool {
|
||||
|
||||
func x11KeyStateToModifiers(s C.uint) key.Modifiers {
|
||||
var m key.Modifiers
|
||||
if s&C.Mod1Mask != 0 {
|
||||
m |= key.ModAlt
|
||||
}
|
||||
if s&C.Mod4Mask != 0 {
|
||||
m |= key.ModSuper
|
||||
}
|
||||
if s&C.ControlMask != 0 {
|
||||
m |= key.ModCtrl
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user