Skip to content

Commit f8e5ac2

Browse files
committed
fix(keyboard): ensure context is passed further down
1 parent 3fae478 commit f8e5ac2

1 file changed

Lines changed: 27 additions & 22 deletions

File tree

keyboard.go

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,10 @@ func SnoopAllKeyboards(ctx context.Context, kbds <-chan *KeyboardDevice) <-chan
149149
log.Debug().Caller().
150150
Msgf("Tracking keys on device %s.", kbd.fd.Name())
151151
wg.Add(1)
152-
go func(k *KeyboardDevice, keyCh chan KeyEvent) {
152+
go func(ctx context.Context, k *KeyboardDevice, keyCh chan KeyEvent) {
153153
defer wg.Done()
154-
kbdSnoop(k, keyCh)
155-
}(kbd, keys)
154+
kbdSnoop(ctx, k, keyCh)
155+
}(ctx, kbd, keys)
156156
}
157157
go func() {
158158
<-ctx.Done()
@@ -170,7 +170,7 @@ func SnoopKeyboard(ctx context.Context, kbd *KeyboardDevice) <-chan KeyEvent {
170170
wg.Add(1)
171171
go func() {
172172
defer wg.Done()
173-
kbdSnoop(kbd, keys)
173+
kbdSnoop(ctx, kbd, keys)
174174
}()
175175
go func() {
176176
<-ctx.Done()
@@ -180,28 +180,33 @@ func SnoopKeyboard(ctx context.Context, kbd *KeyboardDevice) <-chan KeyEvent {
180180
return keys
181181
}
182182

183-
func kbdSnoop(kbd *KeyboardDevice, keys chan KeyEvent) {
183+
func kbdSnoop(ctx context.Context, kbd *KeyboardDevice, keys chan KeyEvent) {
184184
norm := C.enum_libevdev_read_flag(C.LIBEVDEV_READ_FLAG_NORMAL)
185185
for {
186-
var ev C.struct_input_event
187-
C.libevdev_next_event(kbd.dev, C.uint(norm), &ev)
188-
e := NewKeyEvent(ev)
189-
if e.Value != 2 {
190-
switch e.EventName {
191-
case "KEY_CAPSLOCK":
192-
kbd.modifiers.ToggleCapsLock()
193-
case "KEY_LEFTSHIFT", "KEY_RIGHTSHIFT":
194-
kbd.modifiers.ToggleShift()
195-
case "KEY_LEFTCTRL", "KEY_RIGHTCTRL":
196-
kbd.modifiers.ToggleCtrl()
197-
case "KEY_LEFTALT", "KEY_RIGHTALT":
198-
kbd.modifiers.ToggleAlt()
199-
case "KEY_LEFTMETA", "KEY_RIGHTMETA":
200-
kbd.modifiers.ToggleMeta()
186+
select {
187+
case <-ctx.Done():
188+
return
189+
default:
190+
var ev C.struct_input_event
191+
C.libevdev_next_event(kbd.dev, C.uint(norm), &ev)
192+
e := NewKeyEvent(ev)
193+
if e.Value != 2 {
194+
switch e.EventName {
195+
case "KEY_CAPSLOCK":
196+
kbd.modifiers.ToggleCapsLock()
197+
case "KEY_LEFTSHIFT", "KEY_RIGHTSHIFT":
198+
kbd.modifiers.ToggleShift()
199+
case "KEY_LEFTCTRL", "KEY_RIGHTCTRL":
200+
kbd.modifiers.ToggleCtrl()
201+
case "KEY_LEFTALT", "KEY_RIGHTALT":
202+
kbd.modifiers.ToggleAlt()
203+
case "KEY_LEFTMETA", "KEY_RIGHTMETA":
204+
kbd.modifiers.ToggleMeta()
205+
}
201206
}
207+
e.updateRune(kbd.modifiers)
208+
keys <- *e
202209
}
203-
e.updateRune(kbd.modifiers)
204-
keys <- *e
205210
}
206211
}
207212

0 commit comments

Comments
 (0)