From b86d2fe8cd65c4e77975740e0ae1409c1658a797 Mon Sep 17 00:00:00 2001 From: Lea Anthony Date: Sun, 18 Jul 2021 13:11:15 +1000 Subject: [PATCH] [windows] Support more accelerator keys --- v2/internal/ffenestri/ffenestri_windows.go | 1 + v2/internal/ffenestri/windows_menu.go | 5 + .../ffenestri/windows_menu_callbacks.go | 113 ++++++++++++++---- 3 files changed, 93 insertions(+), 26 deletions(-) diff --git a/v2/internal/ffenestri/ffenestri_windows.go b/v2/internal/ffenestri/ffenestri_windows.go index da8454ada..e08f36a87 100644 --- a/v2/internal/ffenestri/ffenestri_windows.go +++ b/v2/internal/ffenestri/ffenestri_windows.go @@ -136,6 +136,7 @@ func createApplicationMenu(hwnd uintptr) { //export handleKeypressInGo func handleKeypressInGo(keycode uint16, modifiers uint8) { + //fmt.Printf("Key code: %#x\n", keycode) menuID, menuType := getCallbackForKeyPress(keycode, modifiers) if menuID == "" { return diff --git a/v2/internal/ffenestri/windows_menu.go b/v2/internal/ffenestri/windows_menu.go index fd56cb18b..9a5b36f46 100644 --- a/v2/internal/ffenestri/windows_menu.go +++ b/v2/internal/ffenestri/windows_menu.go @@ -3,6 +3,7 @@ package ffenestri import ( + "fmt" "github.com/wailsapp/wails/v2/internal/menumanager" "github.com/wailsapp/wails/v2/pkg/menu" "github.com/wailsapp/wails/v2/pkg/menu/keys" @@ -200,6 +201,10 @@ func (m *Menu) processAccelerator(menuitem *menumanager.ProcessedMenuItem) { } var keycode = calculateKeycode(strings.ToLower(menuitem.Accelerator.Key)) + if keycode == 0 { + fmt.Printf("WARNING: Key '%s' is unsupported in windows. Cannot bind callback.", menuitem.Accelerator.Key) + return + } addMenuCallback(keycode, modifiers, menuitem.ID, m.menuType) } diff --git a/v2/internal/ffenestri/windows_menu_callbacks.go b/v2/internal/ffenestri/windows_menu_callbacks.go index 8f55239c9..9bfae895b 100644 --- a/v2/internal/ffenestri/windows_menu_callbacks.go +++ b/v2/internal/ffenestri/windows_menu_callbacks.go @@ -36,30 +36,91 @@ func calculateKeycode(key string) uint16 { // TODO: Complete this list var keymap = map[string]uint16{ - "a": 0x41, - "b": 0x42, - "c": 0x43, - "d": 0x44, - "e": 0x45, - "f": 0x46, - "g": 0x47, - "h": 0x48, - "i": 0x49, - "j": 0x4A, - "k": 0x4B, - "l": 0x4C, - "m": 0x4D, - "n": 0x4E, - "o": 0x4F, - "p": 0x50, - "q": 0x51, - "r": 0x52, - "s": 0x53, - "t": 0x54, - "u": 0x55, - "v": 0x56, - "w": 0x57, - "x": 0x58, - "y": 0x59, - "z": 0x5A, + "0": 0x30, + "1": 0x31, + "2": 0x32, + "3": 0x33, + "4": 0x34, + "5": 0x35, + "6": 0x36, + "7": 0x37, + "8": 0x38, + "9": 0x39, + "a": 0x41, + "b": 0x42, + "c": 0x43, + "d": 0x44, + "e": 0x45, + "f": 0x46, + "g": 0x47, + "h": 0x48, + "i": 0x49, + "j": 0x4A, + "k": 0x4B, + "l": 0x4C, + "m": 0x4D, + "n": 0x4E, + "o": 0x4F, + "p": 0x50, + "q": 0x51, + "r": 0x52, + "s": 0x53, + "t": 0x54, + "u": 0x55, + "v": 0x56, + "w": 0x57, + "x": 0x58, + "y": 0x59, + "z": 0x5A, + "backspace": 0x08, + "tab": 0x09, + "return": 0x0D, + "enter": 0x0D, + "escape": 0x1B, + "left": 0x25, + "right": 0x27, + "up": 0x26, + "down": 0x28, + "space": 0x20, + "delete": 0x2E, + "home": 0x24, + "end": 0x23, + "page up": 0x21, + "page down": 0x22, + "f1": 0x70, + "f2": 0x71, + "f3": 0x72, + "f4": 0x73, + "f5": 0x74, + "f6": 0x75, + "f7": 0x76, + "f8": 0x77, + "f9": 0x78, + "f10": 0x79, + "f11": 0x7A, + "f12": 0x7B, + "f13": 0x7C, + "f14": 0x7D, + "f15": 0x7E, + "f16": 0x7F, + "f17": 0x80, + "f18": 0x81, + "f19": 0x82, + "f20": 0x83, + "f21": 0x84, + "f22": 0x85, + "f23": 0x86, + "f24": 0x87, + // Windows doesn't have these apparently so use 0 for unsupported + "f25": 0, + "f26": 0, + "f27": 0, + "f28": 0, + "f29": 0, + "f30": 0, + "f31": 0, + "f32": 0, + "f33": 0, + "f34": 0, + "f35": 0, }