@@ -77,14 +77,12 @@ bool dispatch_hook_enabled(uint64_t timestamp) {
7777
7878 // Populate the hook start event.
7979 uio_event .time = timestamp ;
80- uio_event .reserved = 0x00 ;
81-
8280 uio_event .type = EVENT_HOOK_ENABLED ;
8381 uio_event .mask = 0x00 ;
8482
8583 // Fire the hook start event.
8684 dispatch_event (& uio_event );
87- consumed = uio_event .reserved & 0x01 ;
85+ consumed = uio_event .mask & MASK_CONSUME ;
8886
8987 return consumed ;
9088}
@@ -94,8 +92,6 @@ bool dispatch_hook_disabled(uint64_t timestamp) {
9492
9593 // Populate the hook stop event.
9694 uio_event .time = timestamp ;
97- uio_event .reserved = 0x00 ;
98-
9995 uio_event .type = EVENT_HOOK_DISABLED ;
10096 uio_event .mask = 0x00 ;
10197
@@ -104,7 +100,7 @@ bool dispatch_hook_disabled(uint64_t timestamp) {
104100
105101 // Deinitialize native input helper functions.
106102 unload_input_helper ();
107- consumed = uio_event .reserved & 0x01 ;
103+ consumed = uio_event .mask & MASK_CONSUME ;
108104
109105 return consumed ;
110106}
@@ -116,10 +112,11 @@ bool dispatch_key_press(uint64_t timestamp, CGEventRef event_ref) {
116112
117113 // Populate key pressed event.
118114 uio_event .time = timestamp ;
119- uio_event .reserved = 0x00 ;
120-
121115 uio_event .type = EVENT_KEY_PRESSED ;
122116 uio_event .mask = get_modifiers ();
117+ if (CGEventGetIntegerValueField (event_ref , kCGEventSourceUnixProcessID )) {
118+ uio_event .mask |= MASK_EMULATED ;
119+ }
123120
124121 uio_event .data .keyboard .keycode = keycode_to_scancode (keycode );
125122 uio_event .data .keyboard .rawcode = keycode ;
@@ -131,7 +128,7 @@ bool dispatch_key_press(uint64_t timestamp, CGEventRef event_ref) {
131128
132129 // Fire key pressed event.
133130 dispatch_event (& uio_event );
134- consumed = uio_event .reserved & 0x01 ;
131+ consumed = uio_event .mask & MASK_CONSUME ;
135132
136133 // If the pressed event was not consumed...
137134 if (!consumed ) {
@@ -141,10 +138,11 @@ bool dispatch_key_press(uint64_t timestamp, CGEventRef event_ref) {
141138 for (unsigned int i = 0 ; i < length ; i ++ ) {
142139 // Populate key typed event.
143140 uio_event .time = timestamp ;
144- uio_event .reserved = 0x00 ;
145-
146141 uio_event .type = EVENT_KEY_TYPED ;
147142 uio_event .mask = get_modifiers ();
143+ if (CGEventGetIntegerValueField (event_ref , kCGEventSourceUnixProcessID )) {
144+ uio_event .mask |= MASK_EMULATED ;
145+ }
148146
149147 uio_event .data .keyboard .keycode = VC_UNDEFINED ;
150148 uio_event .data .keyboard .rawcode = keycode ;
@@ -157,7 +155,7 @@ bool dispatch_key_press(uint64_t timestamp, CGEventRef event_ref) {
157155
158156 // Populate key typed event.
159157 dispatch_event (& uio_event );
160- consumed = uio_event .reserved & 0x01 ;
158+ consumed = uio_event .mask & MASK_CONSUME ;
161159 }
162160 }
163161
@@ -171,10 +169,11 @@ bool dispatch_key_release(uint64_t timestamp, CGEventRef event_ref) {
171169
172170 // Populate key released event.
173171 uio_event .time = timestamp ;
174- uio_event .reserved = 0x00 ;
175-
176172 uio_event .type = EVENT_KEY_RELEASED ;
177173 uio_event .mask = get_modifiers ();
174+ if (CGEventGetIntegerValueField (event_ref , kCGEventSourceUnixProcessID )) {
175+ uio_event .mask |= MASK_EMULATED ;
176+ }
178177
179178 uio_event .data .keyboard .keycode = keycode_to_scancode (keycode );
180179 uio_event .data .keyboard .rawcode = keycode ;
@@ -186,7 +185,7 @@ bool dispatch_key_release(uint64_t timestamp, CGEventRef event_ref) {
186185
187186 // Fire key released event.
188187 dispatch_event (& uio_event );
189- consumed = uio_event .reserved & 0x01 ;
188+ consumed = uio_event .mask & MASK_CONSUME ;
190189
191190 return consumed ;
192191}
@@ -469,10 +468,11 @@ bool dispatch_button_press(uint64_t timestamp, CGEventRef event_ref, uint16_t bu
469468
470469 // Populate mouse pressed event.
471470 uio_event .time = timestamp ;
472- uio_event .reserved = 0x00 ;
473-
474471 uio_event .type = EVENT_MOUSE_PRESSED ;
475472 uio_event .mask = get_modifiers ();
473+ if (CGEventGetIntegerValueField (event_ref , kCGEventSourceUnixProcessID )) {
474+ uio_event .mask |= MASK_EMULATED ;
475+ }
476476
477477 uio_event .data .mouse .button = button ;
478478 uio_event .data .mouse .clicks = click_count ;
@@ -486,7 +486,7 @@ bool dispatch_button_press(uint64_t timestamp, CGEventRef event_ref, uint16_t bu
486486
487487 // Fire mouse pressed event.
488488 dispatch_event (& uio_event );
489- consumed = uio_event .reserved & 0x01 ;
489+ consumed = uio_event .mask & MASK_CONSUME ;
490490
491491 return consumed ;
492492}
@@ -498,10 +498,11 @@ bool dispatch_button_release(uint64_t timestamp, CGEventRef event_ref, uint16_t
498498
499499 // Populate mouse released event.
500500 uio_event .time = timestamp ;
501- uio_event .reserved = 0x00 ;
502-
503501 uio_event .type = EVENT_MOUSE_RELEASED ;
504502 uio_event .mask = get_modifiers ();
503+ if (CGEventGetIntegerValueField (event_ref , kCGEventSourceUnixProcessID )) {
504+ uio_event .mask |= MASK_EMULATED ;
505+ }
505506
506507 uio_event .data .mouse .button = button ;
507508 uio_event .data .mouse .clicks = click_count ;
@@ -515,16 +516,17 @@ bool dispatch_button_release(uint64_t timestamp, CGEventRef event_ref, uint16_t
515516
516517 // Fire mouse released event.
517518 dispatch_event (& uio_event );
518- consumed = uio_event .reserved & 0x01 ;
519+ consumed = uio_event .mask & MASK_CONSUME ;
519520
520521 // If the pressed event was not consumed...
521- if (uio_event . reserved ^ 0x01 && !is_mouse_dragged ()) {
522+ if (! consumed && !is_mouse_dragged ()) {
522523 // Populate mouse clicked event.
523524 uio_event .time = timestamp ;
524- uio_event .reserved = 0x00 ;
525-
526525 uio_event .type = EVENT_MOUSE_CLICKED ;
527526 uio_event .mask = get_modifiers ();
527+ if (CGEventGetIntegerValueField (event_ref , kCGEventSourceUnixProcessID )) {
528+ uio_event .mask |= MASK_EMULATED ;
529+ }
528530
529531 uio_event .data .mouse .button = button ;
530532 uio_event .data .mouse .clicks = click_count ;
@@ -538,7 +540,7 @@ bool dispatch_button_release(uint64_t timestamp, CGEventRef event_ref, uint16_t
538540
539541 // Fire mouse clicked event.
540542 dispatch_event (& uio_event );
541- consumed = uio_event .reserved & 0x01 ; // TODO Should we track this flag for consumed events?
543+ consumed = uio_event .mask & MASK_CONSUME ; // TODO Should we track this flag for consumed events?
542544 }
543545
544546 // Reset the number of clicks.
@@ -562,15 +564,16 @@ bool dispatch_mouse_move(uint64_t timestamp, CGEventRef event_ref) {
562564
563565 // Populate mouse motion event.
564566 uio_event .time = timestamp ;
565- uio_event .reserved = 0x00 ;
566-
567567 if (is_mouse_dragged ()) {
568568 uio_event .type = EVENT_MOUSE_DRAGGED ;
569569 }
570570 else {
571571 uio_event .type = EVENT_MOUSE_MOVED ;
572572 }
573573 uio_event .mask = get_modifiers ();
574+ if (CGEventGetIntegerValueField (event_ref , kCGEventSourceUnixProcessID )) {
575+ uio_event .mask |= MASK_EMULATED ;
576+ }
574577
575578 uio_event .data .mouse .button = MOUSE_NOBUTTON ;
576579 uio_event .data .mouse .clicks = click_count ;
@@ -583,14 +586,14 @@ bool dispatch_mouse_move(uint64_t timestamp, CGEventRef event_ref) {
583586
584587 // Fire mouse motion event.
585588 dispatch_event (& uio_event );
586- consumed = uio_event .reserved & 0x01 ;
589+ consumed = uio_event .mask & MASK_CONSUME ;
587590
588591 return consumed ;
589592}
590593
591594bool dispatch_mouse_wheel (uint64_t timestamp , CGEventRef event_ref ) {
592595 bool consumed = false;
593-
596+
594597 // Reset the click count and previous button.
595598 click_count = 0 ;
596599 click_button = MOUSE_NOBUTTON ;
@@ -603,10 +606,11 @@ bool dispatch_mouse_wheel(uint64_t timestamp, CGEventRef event_ref) {
603606
604607 // Populate mouse wheel event.
605608 uio_event .time = timestamp ;
606- uio_event .reserved = 0x00 ;
607-
608609 uio_event .type = EVENT_MOUSE_WHEEL ;
609610 uio_event .mask = get_modifiers ();
611+ if (CGEventGetIntegerValueField (event_ref , kCGEventSourceUnixProcessID )) {
612+ uio_event .mask |= MASK_EMULATED ;
613+ }
610614
611615 uio_event .data .wheel .x = event_point .x ;
612616 uio_event .data .wheel .y = event_point .y ;
@@ -665,7 +669,7 @@ bool dispatch_mouse_wheel(uint64_t timestamp, CGEventRef event_ref) {
665669
666670 // Fire mouse wheel event.
667671 dispatch_event (& uio_event );
668- consumed = uio_event .reserved & 0x01 ;
672+ consumed = uio_event .mask & MASK_CONSUME ;
669673 }
670674
671675 return consumed ;
0 commit comments