< prev index next >

src/java.desktop/macosx/native/libawt_lwawt/awt/CRobot.m

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 21,31 **** * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ - #import "jni_util.h" #import <JavaNativeFoundation/JavaNativeFoundation.h> #import <ApplicationServices/ApplicationServices.h> --- 21,30 ----
*** 33,42 **** --- 32,42 ---- #import "LWCToolkit.h" #import "sun_lwawt_macosx_CRobot.h" #import "java_awt_event_InputEvent.h" #import "java_awt_event_KeyEvent.h" #import "sizecalc.h" + #import "ThreadUtilities.h" // Starting number for event numbers generated by Robot. // Apple docs don't mention at all what are the requirements // for these numbers. It seems that they must be higher // than event numbers from real events, which start at some
*** 95,104 **** --- 95,105 ---- { // Set things up to let our app act like a synthetic keyboard and mouse. // Always set all states, in case Apple ever changes default behaviors. static int setupDone = 0; if (!setupDone) { + [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ int i; jint* tmp; jboolean copy = JNI_FALSE; setupDone = 1;
*** 127,136 **** --- 128,138 ---- } for (i = 0; i < gNumberOfButtons; ++i) { gsButtonEventNumber[i] = ROBOT_EVENT_NUMBER_START; } + }]; } } /* * Class: sun_lwawt_macosx_CRobot
*** 237,254 **** */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CRobot_mouseWheel (JNIEnv *env, jobject peer, jint wheelAmt) { CGEventRef event = CGEventCreateScrollWheelEvent(NULL, kCGScrollEventUnitLine, k_JAVA_ROBOT_WHEEL_COUNT, wheelAmt); - if (event != NULL) { CGEventPost(kCGSessionEventTap, event); CFRelease(event); } } /* * Class: sun_lwawt_macosx_CRobot * Method: keyEvent --- 239,257 ---- */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CRobot_mouseWheel (JNIEnv *env, jobject peer, jint wheelAmt) { + [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ CGEventRef event = CGEventCreateScrollWheelEvent(NULL, kCGScrollEventUnitLine, k_JAVA_ROBOT_WHEEL_COUNT, wheelAmt); if (event != NULL) { CGEventPost(kCGSessionEventTap, event); CFRelease(event); } + }]; } /* * Class: sun_lwawt_macosx_CRobot * Method: keyEvent
*** 256,272 **** */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CRobot_keyEvent (JNIEnv *env, jobject peer, jint javaKeyCode, jboolean keyPressed) { CGKeyCode keyCode = GetCGKeyCode(javaKeyCode); - CGEventRef event = CGEventCreateKeyboardEvent(NULL, keyCode, keyPressed); if (event != NULL) { CGEventPost(kCGSessionEventTap, event); CFRelease(event); } } /* * Class: sun_lwawt_macosx_CRobot * Method: nativeGetScreenPixels --- 259,276 ---- */ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CRobot_keyEvent (JNIEnv *env, jobject peer, jint javaKeyCode, jboolean keyPressed) { + [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ CGKeyCode keyCode = GetCGKeyCode(javaKeyCode); CGEventRef event = CGEventCreateKeyboardEvent(NULL, keyCode, keyPressed); if (event != NULL) { CGEventPost(kCGSessionEventTap, event); CFRelease(event); } + }]; } /* * Class: sun_lwawt_macosx_CRobot * Method: nativeGetScreenPixels
*** 331,347 **** --- 335,353 ---- ****************************************************/ static void PostMouseEvent(const CGPoint point, CGMouseButton button, CGEventType type, int clickCount, int eventNumber) { + [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ CGEventRef mouseEvent = CGEventCreateMouseEvent(NULL, type, point, button); if (mouseEvent != NULL) { CGEventSetIntegerValueField(mouseEvent, kCGMouseEventClickState, clickCount); CGEventSetIntegerValueField(mouseEvent, kCGMouseEventNumber, eventNumber); CGEventPost(kCGSessionEventTap, mouseEvent); CFRelease(mouseEvent); } + }]; } static inline CGKeyCode GetCGKeyCode(jint javaKeyCode) { CRobotKeyCodeMapping *keyCodeMapping = [CRobotKeyCodeMapping sharedInstance];
< prev index next >