@@ -6,7 +6,7 @@ use crate::evdev_error::EvdevError;
66use crate :: grab_device_request:: GrabDeviceRequest ;
77use crate :: grabbed_device:: GrabbedDevice ;
88use crate :: runtime:: get_runtime;
9- use evdev:: enums:: { EventCode , EventType } ;
9+ use evdev:: enums:: { EventCode , EventType , EV_SYN } ;
1010use evdev:: util:: { event_code_to_int, int_to_event_code} ;
1111use evdev:: { DeviceWrapper , InputEvent , ReadFlag , ReadStatus } ;
1212use libc:: c_uint;
@@ -23,7 +23,7 @@ use std::io::ErrorKind;
2323use std:: os:: fd:: AsRawFd ;
2424use std:: path:: PathBuf ;
2525use std:: sync:: atomic:: { AtomicBool , Ordering } ;
26- use std:: sync:: { mpsc, Arc , OnceLock , RwLock , RwLockWriteGuard } ;
26+ use std:: sync:: { mpsc, Arc , OnceLock , RwLock } ;
2727use std:: time:: { Duration , Instant } ;
2828use tokio:: task:: JoinHandle ;
2929
@@ -335,7 +335,22 @@ impl EventLoopManager {
335335 let device = devices
336336 . get ( device_id) // O(1) slab lookup
337337 . ok_or_else ( || EvdevError :: new ( -libc:: ENODEV ) ) ?;
338- device. write_event ( event_type, code, value)
338+
339+ debug ! (
340+ "Write evdev event: device_id={} event_type={} code={} value={}" ,
341+ device_id, event_type, code, value
342+ ) ;
343+
344+ device
345+ . uinput
346+ . write_event ( EventType :: EV_KEY as c_uint , code, value)
347+ . map_err ( |err| EvdevError :: from ( err) ) ?;
348+
349+ // Send SYN_REPORT
350+ device
351+ . uinput
352+ . write_syn_event ( EV_SYN :: SYN_REPORT )
353+ . map_err ( |err| err. into ( ) )
339354 }
340355
341356 pub fn write_key_code_event (
@@ -358,9 +373,23 @@ impl EventLoopManager {
358373 error ! ( "Failed to find scan code for key: {}" , key_code) ;
359374 Err ( Box :: new ( EvdevError :: new ( -libc:: ENODATA ) ) )
360375 }
361- Some ( code) => device
362- . write_event ( EventType :: EV_KEY as c_uint , code, value)
363- . map_err ( |err| err. into ( ) ) ,
376+ Some ( code) => {
377+ debug ! (
378+ "Write key code evdev event: key_code={} value={}" ,
379+ key_code, value
380+ ) ;
381+
382+ device
383+ . uinput
384+ . write_event ( EventType :: EV_KEY as c_uint , code, value)
385+ . map_err ( |err| EvdevError :: from ( err) ) ?;
386+
387+ // Send SYN_REPORT
388+ device
389+ . uinput
390+ . write_syn_event ( EV_SYN :: SYN_REPORT )
391+ . map_err ( |err| err. into ( ) )
392+ }
364393 }
365394 }
366395
@@ -503,6 +532,7 @@ impl EventLoopThread {
503532 if !consumed {
504533 let ( event_type, event_code) = event_code_to_int ( & event. event_code ) ;
505534 grabbed_device
535+ . uinput
506536 . write_event ( event_type, event_code, event. value )
507537 . inspect_err ( |e| {
508538 error ! (
0 commit comments