From 2703b3f5ae7c9e1d062822a41114e6baf5ae83d7 Mon Sep 17 00:00:00 2001 From: Sahil Nirkhe Date: Thu, 23 Nov 2023 13:14:18 +0530 Subject: [PATCH 1/2] use different event source for special keys Signed-off-by: Sahil Nirkhe --- OSXvnc-server/VNCServer.h | 1 + OSXvnc-server/VNCServer.m | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/OSXvnc-server/VNCServer.h b/OSXvnc-server/VNCServer.h index 001ec8d..b226561 100644 --- a/OSXvnc-server/VNCServer.h +++ b/OSXvnc-server/VNCServer.h @@ -33,6 +33,7 @@ // This flag will try to change the modifier key state to the required set for the unicode key that came in BOOL pressModsForKeys; CGEventSourceRef vncSourceRef; + CGEventSourceRef specialKeysVncSourceRef; CGEventTapLocation vncTapLocation; TISInputSourceRef unicodeInputSource; diff --git a/OSXvnc-server/VNCServer.m b/OSXvnc-server/VNCServer.m index 63227e7..87abcb2 100644 --- a/OSXvnc-server/VNCServer.m +++ b/OSXvnc-server/VNCServer.m @@ -375,6 +375,7 @@ - (void) rfbRunning { // Doesn't combine with any other sources NSLog(@"Using Private Event Source"); vncSourceRef = CGEventSourceCreate(kCGEventSourceStatePrivate); + specialKeysVncSourceRef = CGEventSourceCreate(kCGEventSourceStateHIDSystemState); break; case 1: // Combines only with other User Session Events @@ -761,7 +762,13 @@ - (void) sendKeyEvent: (CGKeyCode) keyCode down: (BOOL) down modifiers: (CGEvent CFRelease(event); } else { - CGEventRef event = CGEventCreateKeyboardEvent(vncSourceRef, keyCode, down); + CGEventRef event; + int specialKeysStartingFrom = 96; + if (specialKeysVncSourceRef != NULL && keyCode >= specialKeysStartingFrom){ + event = CGEventCreateKeyboardEvent(specialKeysVncSourceRef, keyCode, down); + }else { + event = CGEventCreateKeyboardEvent(vncSourceRef, keyCode, down); + } // The value of this function escapes me (since you still need to specify the keyCode for it to work // CGEventKeyboardSetUnicodeString (event, 1, (const UniChar *) &keySym); From b45687a85e6ad0707e2aed31b7f571b884ed2dbf Mon Sep 17 00:00:00 2001 From: Sahil Nirkhe Date: Thu, 23 Nov 2023 13:21:52 +0530 Subject: [PATCH 2/2] fixing indentation Signed-off-by: Sahil Nirkhe --- OSXvnc-server/VNCServer.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OSXvnc-server/VNCServer.m b/OSXvnc-server/VNCServer.m index 87abcb2..2401c73 100644 --- a/OSXvnc-server/VNCServer.m +++ b/OSXvnc-server/VNCServer.m @@ -763,10 +763,10 @@ - (void) sendKeyEvent: (CGKeyCode) keyCode down: (BOOL) down modifiers: (CGEvent } else { CGEventRef event; - int specialKeysStartingFrom = 96; + int specialKeysStartingFrom = 96; if (specialKeysVncSourceRef != NULL && keyCode >= specialKeysStartingFrom){ event = CGEventCreateKeyboardEvent(specialKeysVncSourceRef, keyCode, down); - }else { + }else { event = CGEventCreateKeyboardEvent(vncSourceRef, keyCode, down); }