diff --git a/app/internal/window/os_windows.go b/app/internal/window/os_windows.go index c5a3560e..58d53c76 100644 --- a/app/internal/window/os_windows.go +++ b/app/internal/window/os_windows.go @@ -281,7 +281,7 @@ func windowProc(hwnd syscall.Handle, msg uint32, wParam, lParam uintptr) uintptr if n, ok := convertKeyCode(wParam); ok { cmd := key.Event{Name: n} if getKeyState(_VK_CONTROL)&0x1000 != 0 { - cmd.Modifiers |= key.ModCommand + cmd.Modifiers |= key.ModCtrl } if getKeyState(_VK_SHIFT)&0x1000 != 0 { cmd.Modifiers |= key.ModShift diff --git a/app/internal/window/os_x11.go b/app/internal/window/os_x11.go index 53943b6a..00458ca9 100644 --- a/app/internal/window/os_x11.go +++ b/app/internal/window/os_x11.go @@ -232,7 +232,7 @@ func (h *x11EventHandler) handleEvents() bool { // available but not CTRL-2. state := kevt.state mods := x11KeyStateToModifiers(state) - if mods.Contain(key.ModCommand) { + if mods.Contain(key.ModCtrl) { kevt.state &^= (C.uint(C.ControlMask) | C.uint(C.ShiftMask)) } l := int(C.Xutf8LookupString(w.xic, kevt, @@ -261,7 +261,7 @@ func (h *x11EventHandler) handleEvents() bool { w.w.Event(key.Event{Name: unicode.ToUpper(r), Modifiers: mods}) } // Send EditEvent only when not a CTRL key combination. - if !mods.Contain(key.ModCommand) { + if !mods.Contain(key.ModCtrl) { w.w.Event(key.EditEvent{Text: string(h.text[:l])}) } } @@ -335,7 +335,7 @@ func (h *x11EventHandler) handleEvents() bool { func x11KeyStateToModifiers(s C.uint) key.Modifiers { var m key.Modifiers if s&C.ControlMask != 0 { - m |= key.ModCommand + m |= key.ModCtrl } if s&C.ShiftMask != 0 { m |= key.ModShift diff --git a/app/internal/xkb/xkb_unix.go b/app/internal/xkb/xkb_unix.go index 77e940aa..398348ed 100644 --- a/app/internal/xkb/xkb_unix.go +++ b/app/internal/xkb/xkb_unix.go @@ -124,7 +124,7 @@ func (x *Context) DispatchKey(keyCode uint32) (events []event.Event) { if n, ok := convertKeysym(sym); ok { cmd := key.Event{Name: n} if C.xkb_state_mod_name_is_active(x.state, (*C.char)(unsafe.Pointer(&_XKB_MOD_NAME_CTRL[0])), C.XKB_STATE_MODS_EFFECTIVE) == 1 { - cmd.Modifiers |= key.ModCommand + cmd.Modifiers |= key.ModCtrl } if C.xkb_state_mod_name_is_active(x.state, (*C.char)(unsafe.Pointer(&_XKB_MOD_NAME_SHIFT[0])), C.XKB_STATE_MODS_EFFECTIVE) == 1 { cmd.Modifiers |= key.ModShift diff --git a/io/key/key.go b/io/key/key.go index 7625b545..bca97812 100644 --- a/io/key/key.go +++ b/io/key/key.go @@ -57,11 +57,12 @@ type EditEvent struct { type Modifiers uint32 const ( - // ModCommand is the command modifier. On macOS - // it is the Cmd key, on other platforms the Ctrl - // key. - ModCommand Modifiers = 1 << iota - // THe shift key. + // ModCtrl is the ctrl modifier key. + ModCtrl Modifiers = 1 << iota + // ModCommand is the command modifier key + // found on Apple keyboards. + ModCommand + // ModShift is the shift modifier key. ModShift ) @@ -111,6 +112,9 @@ func (e Event) String() string { func (m Modifiers) String() string { var strs []string + if m.Contain(ModCtrl) { + strs = append(strs, "ModCtrl") + } if m.Contain(ModCommand) { strs = append(strs, "ModCommand") } diff --git a/io/key/mod.go b/io/key/mod.go new file mode 100644 index 00000000..c5db56cb --- /dev/null +++ b/io/key/mod.go @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: Unlicense OR MIT + +// +build !darwin + +package key + +// ModShortcut is the platform's shortcut modifier, usually the Ctrl +// key. On Apple platforms it is the Cmd key. +const ModShortcut = ModCtrl diff --git a/io/key/mod_darwin.go b/io/key/mod_darwin.go new file mode 100644 index 00000000..c0f14377 --- /dev/null +++ b/io/key/mod_darwin.go @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: Unlicense OR MIT + +package key + +// ModShortcut is the platform's shortcut modifier, usually the Ctrl +// key. On Apple platforms it is the Cmd key. +const ModShortcut = ModCommand