Skip to content

Commit ac427fc

Browse files
Use libsuinput for _click() and _combo()
1 parent 6d2d341 commit ac427fc

1 file changed

Lines changed: 10 additions & 7 deletions

File tree

src/__init__.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ def _error_handler(result, fn, args):
7373
_libsuinput.suinput_create.errcheck = _error_handler
7474
_libsuinput.suinput_write_event.errcheck = _error_handler
7575
_libsuinput.suinput_emit.errcheck = _error_handler
76+
_libsuinput.suinput_emit_click.errcheck = _error_handler
77+
_libsuinput.suinput_emit_combo.errcheck = _error_handler
7678
_libsuinput.suinput_syn.errcheck = _error_handler
7779
_libsuinput.suinput_destroy.errcheck = _error_handler
7880

@@ -215,8 +217,9 @@ def emit_click(self, event, syn=True):
215217
ev_type, ev_code = event
216218
if ev_type != 0x01:
217219
raise ValueError("event must be of type KEY or BTN")
218-
self.emit(event, 1, False)
219-
self.emit(event, 0, syn)
220+
_libsuinput.suinput_emit_click(self.__uinput_fd, ev_code)
221+
if syn:
222+
self.syn()
220223

221224
def emit_combo(self, events, syn=True):
222225
"""Emit key combination. Only KEY and BTN events are accepted,
@@ -227,12 +230,12 @@ def emit_combo(self, events, syn=True):
227230
228231
`syn` if True, Device.syn(self) is called before returning.
229232
"""
230-
if not all([ev_type == 0x01 for ev_type, _ in events]):
233+
ev_types, ev_codes = zip(*events)
234+
if not all([ev_type == 0x01 for ev_type in ev_types]):
231235
raise ValueError("all events must be of type KEY or BTN")
232-
for event in events:
233-
self.emit(event, 1, False)
234-
for event in reversed(events):
235-
self.emit(event, 0, False)
236+
237+
arrtype = ctypes.c_uint16 * len(events)
238+
_libsuinput.suinput_emit_combo(self.__uinput_fd, arrtype(*ev_codes), len(events))
236239
if syn:
237240
self.syn()
238241

0 commit comments

Comments
 (0)