@@ -50,6 +50,7 @@ type Keyboard struct {
50
50
modifiers int64 // like shift, alt, ctrl, ...
51
51
pressedKeys map [int64 ]bool // tracks keys through down() and up()
52
52
layoutName string // us by default
53
+ layout keyboardlayout.KeyboardLayout
53
54
}
54
55
55
56
// NewKeyboard returns a new keyboard with a "us" layout.
@@ -59,6 +60,7 @@ func NewKeyboard(ctx context.Context, session *Session) *Keyboard {
59
60
session : session ,
60
61
pressedKeys : make (map [int64 ]bool ),
61
62
layoutName : "us" ,
63
+ layout : keyboardlayout .GetKeyboardLayout ("us" ),
62
64
}
63
65
}
64
66
@@ -113,8 +115,7 @@ func (k *Keyboard) Type(text string, opts goja.Value) {
113
115
114
116
func (k * Keyboard ) down (key string ) error {
115
117
keyInput := keyboardlayout .KeyInput (key )
116
- layout := keyboardlayout .GetKeyboardLayout (k .layoutName )
117
- if _ , ok := layout .ValidKeys [keyInput ]; ! ok {
118
+ if _ , ok := k .layout .ValidKeys [keyInput ]; ! ok {
118
119
return fmt .Errorf ("%q is not a valid key for layout %q" , key , k .layoutName )
119
120
}
120
121
@@ -148,8 +149,7 @@ func (k *Keyboard) down(key string) error {
148
149
149
150
func (k * Keyboard ) up (key string ) error {
150
151
keyInput := keyboardlayout .KeyInput (key )
151
- layout := keyboardlayout .GetKeyboardLayout (k .layoutName )
152
- if _ , ok := layout .ValidKeys [keyInput ]; ! ok {
152
+ if _ , ok := k .layout .ValidKeys [keyInput ]; ! ok {
153
153
return fmt .Errorf ("'%s' is not a valid key for layout '%s'" , key , k .layoutName )
154
154
}
155
155
@@ -178,28 +178,18 @@ func (k *Keyboard) insertText(text string) error {
178
178
return nil
179
179
}
180
180
181
- func (k * Keyboard ) keyDefinitionFromKey (keyString keyboardlayout.KeyInput ) keyboardlayout.KeyDefinition {
182
- layout := keyboardlayout .GetKeyboardLayout (k .layoutName )
183
- srcKeyDef , ok := layout .Keys [keyString ]
184
- // Find based on key value instead of code
181
+ func (k * Keyboard ) keyDefinitionFromKey (key keyboardlayout.KeyInput ) keyboardlayout.KeyDefinition {
182
+ shift := k .modifiers & ModifierKeyShift
183
+
184
+ // Find directly from the keyboard layout
185
+ srcKeyDef , ok := k .layout .Keys [key ]
186
+ // Try to find based on key value instead of code
185
187
if ! ok {
186
- for key , def := range layout .Keys {
187
- if def .Key == string (keyString ) {
188
- keyString , srcKeyDef = key , def
189
- ok = true // don't look for a shift key below
190
- break
191
- }
192
- }
188
+ srcKeyDef , ok = k .layout .KeyDefinition (key )
193
189
}
194
- // try to find with the shift key value
195
- shift := k .modifiers & ModifierKeyShift
190
+ // Try to find with the shift key value
196
191
if ! ok {
197
- for key , def := range layout .Keys {
198
- if def .ShiftKey == string (keyString ) {
199
- keyString , srcKeyDef = key , def
200
- break
201
- }
202
- }
192
+ key , srcKeyDef = k .layout .ShiftKeyDefinition (key )
203
193
shift = k .modifiers | ModifierKeyShift
204
194
}
205
195
@@ -214,8 +204,8 @@ func (k *Keyboard) keyDefinitionFromKey(keyString keyboardlayout.KeyInput) keybo
214
204
if srcKeyDef .KeyCode != 0 {
215
205
keyDef .KeyCode = srcKeyDef .KeyCode
216
206
}
217
- if keyString != "" {
218
- keyDef .Code = string (keyString )
207
+ if key != "" {
208
+ keyDef .Code = string (key )
219
209
}
220
210
if srcKeyDef .Location != 0 {
221
211
keyDef .Location = srcKeyDef .Location
0 commit comments