--- a/jdk/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.m Fri Aug 14 13:59:40 2015 -0500
+++ b/jdk/src/java.desktop/macosx/native/libosxapp/NSApplicationAWT.m Thu Aug 06 17:55:32 2015 +0300
@@ -349,6 +349,7 @@
&& [event subtype] == NativeSyncQueueEvent) {
[seenDummyEventLock lockWhenCondition:NO];
[seenDummyEventLock unlockWithCondition:YES];
+
} else if ([event type] == NSApplicationDefined && [event subtype] == ExecuteBlockEvent) {
void (^block)() = (void (^)()) [event data1];
block();
@@ -387,9 +388,7 @@
[pool drain];
}
-
-
-- (void)postDummyEvent {
+- (void)postDummyEvent:(bool)useCocoa {
seenDummyEventLock = [[NSConditionLock alloc] initWithCondition:NO];
dummyEventTimestamp = [NSProcessInfo processInfo].systemUptime;
@@ -403,19 +402,28 @@
subtype: NativeSyncQueueEvent
data1: 0
data2: 0];
- [NSApp postEvent: event atStart: NO];
+ if (useCocoa) {
+ [NSApp postEvent:event atStart:NO];
+ } else {
+ ProcessSerialNumber psn;
+ GetCurrentProcess(&psn);
+ CGEventPostToPSN(&psn, [event CGEvent]);
+ }
[pool drain];
}
-- (void)waitForDummyEvent:(long long) timeout {
+- (void)waitForDummyEvent:(double)timeout {
+ bool unlock = true;
if (timeout >= 0) {
- double sec = ((double) timeout)/1000;
- [seenDummyEventLock lockWhenCondition:YES
+ double sec = timeout / 1000;
+ unlock = [seenDummyEventLock lockWhenCondition:YES
beforeDate:[NSDate dateWithTimeIntervalSinceNow:sec]];
} else {
[seenDummyEventLock lockWhenCondition:YES];
}
- [seenDummyEventLock unlock];
+ if (unlock) {
+ [seenDummyEventLock unlock];
+ }
[seenDummyEventLock release];
seenDummyEventLock = nil;