Update: use hid event in macos

This commit is contained in:
vcaesar 2025-05-17 12:33:16 -07:00
parent 73c07dc991
commit 5c2864485d
3 changed files with 16 additions and 10 deletions

View File

@ -90,7 +90,8 @@ MMKeyCode keyCodeForChar(const char c) {
#if defined(IS_MACOSX) #if defined(IS_MACOSX)
CFStringRef createStringForKey(CGKeyCode keyCode){ CFStringRef createStringForKey(CGKeyCode keyCode){
TISInputSourceRef currentKeyboard = TISCopyCurrentASCIICapableKeyboardInputSource(); // TISInputSourceRef currentKeyboard = TISCopyCurrentASCIICapableKeyboardInputSource();
TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardLayoutInputSource();
CFDataRef layoutData = (CFDataRef) TISGetInputSourceProperty( CFDataRef layoutData = (CFDataRef) TISGetInputSourceProperty(
currentKeyboard, kTISPropertyUnicodeKeyLayoutData); currentKeyboard, kTISPropertyUnicodeKeyLayoutData);

View File

@ -58,7 +58,7 @@
if (pid != 0) { if (pid != 0) {
CGEventPostToPid(pid, event); CGEventPostToPid(pid, event);
} else { } else {
CGEventPost(kCGSessionEventTap, event); CGEventPost(kCGHIDEventTap, event);
} }
CFRelease(event); CFRelease(event);
@ -179,7 +179,8 @@ void toggleKeyCode(MMKeyCode code, const bool down, MMKeyFlags flags, uintptr pi
NX_SYSDEFINED, loc, &event, kNXEventDataVersion, 0, FALSE); NX_SYSDEFINED, loc, &event, kNXEventDataVersion, 0, FALSE);
assert(KERN_SUCCESS == kr); assert(KERN_SUCCESS == kr);
} else { } else {
CGEventRef keyEvent = CGEventCreateKeyboardEvent(NULL, (CGKeyCode)code, down); CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef keyEvent = CGEventCreateKeyboardEvent(source, (CGKeyCode)code, down);
assert(keyEvent != NULL); assert(keyEvent != NULL);
CGEventSetType(keyEvent, down ? kCGEventKeyDown : kCGEventKeyUp); CGEventSetType(keyEvent, down ? kCGEventKeyDown : kCGEventKeyUp);
@ -273,7 +274,8 @@ void toggleKey(char c, const bool down, MMKeyFlags flags, uintptr pid) {
convert characters to a keycode, but does not support adding modifier flags. convert characters to a keycode, but does not support adding modifier flags.
It is only used in typeString(). It is only used in typeString().
-- if you need modifier keys, use the above functions instead. */ -- if you need modifier keys, use the above functions instead. */
CGEventRef keyEvent = CGEventCreateKeyboardEvent(NULL, 0, down); CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef keyEvent = CGEventCreateKeyboardEvent(source, 0, down);
if (keyEvent == NULL) { if (keyEvent == NULL) {
fputs("Could not create keyboard event.\n", stderr); fputs("Could not create keyboard event.\n", stderr);
return; return;

View File

@ -83,12 +83,13 @@
/* Move the mouse to a specific point. */ /* Move the mouse to a specific point. */
void moveMouse(MMPointInt32 point){ void moveMouse(MMPointInt32 point){
#if defined(IS_MACOSX) #if defined(IS_MACOSX)
CGEventRef move = CGEventCreateMouseEvent(NULL, kCGEventMouseMoved, CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef move = CGEventCreateMouseEvent(source, kCGEventMouseMoved,
CGPointFromMMPointInt32(point), kCGMouseButtonLeft); CGPointFromMMPointInt32(point), kCGMouseButtonLeft);
calculateDeltas(&move, point); calculateDeltas(&move, point);
CGEventPost(kCGSessionEventTap, move); CGEventPost(kCGHIDEventTap, move);
CFRelease(move); CFRelease(move);
#elif defined(USE_X11) #elif defined(USE_X11)
Display *display = XGetMainDisplay(); Display *display = XGetMainDisplay();
@ -103,12 +104,13 @@ void moveMouse(MMPointInt32 point){
void dragMouse(MMPointInt32 point, const MMMouseButton button){ void dragMouse(MMPointInt32 point, const MMMouseButton button){
#if defined(IS_MACOSX) #if defined(IS_MACOSX)
const CGEventType dragType = MMMouseDragToCGEventType(button); const CGEventType dragType = MMMouseDragToCGEventType(button);
CGEventRef drag = CGEventCreateMouseEvent(NULL, dragType, CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef drag = CGEventCreateMouseEvent(source, dragType,
CGPointFromMMPointInt32(point), (CGMouseButton)button); CGPointFromMMPointInt32(point), (CGMouseButton)button);
calculateDeltas(&drag, point); calculateDeltas(&drag, point);
CGEventPost(kCGSessionEventTap, drag); CGEventPost(kCGHIDEventTap, drag);
CFRelease(drag); CFRelease(drag);
#else #else
moveMouse(point); moveMouse(point);
@ -145,9 +147,10 @@ void toggleMouse(bool down, MMMouseButton button) {
#if defined(IS_MACOSX) #if defined(IS_MACOSX)
const CGPoint currentPos = CGPointFromMMPointInt32(location()); const CGPoint currentPos = CGPointFromMMPointInt32(location());
const CGEventType mouseType = MMMouseToCGEventType(down, button); const CGEventType mouseType = MMMouseToCGEventType(down, button);
CGEventRef event = CGEventCreateMouseEvent(NULL, mouseType, currentPos, (CGMouseButton)button); CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef event = CGEventCreateMouseEvent(source, mouseType, currentPos, (CGMouseButton)button);
CGEventPost(kCGSessionEventTap, event); CGEventPost(kCGHIDEventTap, event);
CFRelease(event); CFRelease(event);
#elif defined(USE_X11) #elif defined(USE_X11)
Display *display = XGetMainDisplay(); Display *display = XGetMainDisplay();