@@ -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