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