espanso/native/libmacbridge/bridge.mm

65 lines
1.8 KiB
Plaintext
Raw Normal View History

2019-09-05 15:20:52 +00:00
#include "bridge.h"
#import <Foundation/Foundation.h>
2019-09-05 16:34:03 +00:00
#include "AppDelegate.h"
2019-09-05 17:18:55 +00:00
#include <string.h>
2019-09-05 15:20:52 +00:00
extern "C" {
2019-09-05 16:34:03 +00:00
}
#include <vector>
void register_keypress_callback(void * self, KeypressCallback callback) {
keypress_callback = callback;
interceptor_instance = self;
2019-09-05 15:20:52 +00:00
}
int32_t initialize() {
AppDelegate *delegate = [[AppDelegate alloc] init];
NSApplication * application = [NSApplication sharedApplication];
[application setDelegate:delegate];
}
int32_t eventloop() {
[NSApp run];
2019-09-05 16:34:03 +00:00
}
void send_string(const char * string) {
2019-09-05 17:18:55 +00:00
char * stringCopy = strdup(string);
dispatch_async(dispatch_get_main_queue(), ^(void) {
// Convert the c string to a UniChar array as required by the CGEventKeyboardSetUnicodeString method
NSString *nsString = [NSString stringWithUTF8String:stringCopy];
CFStringRef cfString = (__bridge CFStringRef) nsString;
std::vector <UniChar> buffer(nsString.length);
CFStringGetCharacters(cfString, CFRangeMake(0, nsString.length), buffer.data());
free(stringCopy);
// Send the event
CGEventRef e = CGEventCreateKeyboardEvent(NULL, 0x31, true);
CGEventKeyboardSetUnicodeString(e, buffer.size(), buffer.data());
CGEventPost(kCGHIDEventTap, e);
CFRelease(e);
});
2019-09-05 16:34:03 +00:00
}
void delete_string(int32_t count) {
2019-09-05 17:18:55 +00:00
dispatch_async(dispatch_get_main_queue(), ^(void) {
for (int i = 0; i < count; i++) {
CGEventRef keydown;
keydown = CGEventCreateKeyboardEvent(NULL, 0x33, true);
CGEventPost(kCGHIDEventTap, keydown);
CFRelease(keydown);
2019-09-05 16:34:03 +00:00
2019-09-05 17:18:55 +00:00
usleep(2000);
2019-09-05 16:34:03 +00:00
2019-09-05 17:18:55 +00:00
CGEventRef keyup;
keyup = CGEventCreateKeyboardEvent(NULL, 0x33, false);
CGEventPost(kCGHIDEventTap, keyup);
CFRelease(keyup);
2019-09-05 16:34:03 +00:00
2019-09-05 17:18:55 +00:00
usleep(2000);
}
});
2019-09-05 15:20:52 +00:00
}