< prev index next >
src/java.desktop/macosx/native/libawt_lwawt/awt/LWCToolkit.m
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -68,17 +68,34 @@
static pthread_cond_t sAppKitStarted_cv = PTHREAD_COND_INITIALIZER;
@implementation AWTToolkit
static long eventCount;
+static BOOL inDoDragDropLoop;
+
++ (BOOL) inDoDragDropLoop {
+ @synchronized(self) {
+ return inDoDragDropLoop;
+ }
+}
+
++ (void) setInDoDragDropLoop:(BOOL)val {
+ @synchronized(self) {
+ inDoDragDropLoop = val;
+ }
+}
+ (long) getEventCount{
+ @synchronized(self) {
return eventCount;
+ }
}
+ (void) eventCountPlusPlus{
+ @synchronized(self) {
eventCount++;
+ }
}
+ (jint) scrollStateWithEvent: (NSEvent*) event {
if ([event type] != NSScrollWheel) {
@@ -418,14 +435,20 @@
// - CGEventPost(), see CRobot.m
// It was found that if we post an event via CGEventPost in robot and
// immediately after this we will post the second event via
// [NSApp postEvent] then sometimes the second event will be handled
// first. The opposite isn't proved, but we use both here to be safer.
+
+ // If the native drag is in progress, skip native sync.
+ if (!AWTToolkit.inDoDragDropLoop) {
[theApp postDummyEvent:false];
[theApp waitForDummyEvent:timeout / 2.0];
+ }
+ if (!AWTToolkit.inDoDragDropLoop) {
[theApp postDummyEvent:true];
[theApp waitForDummyEvent:timeout / 2.0];
+ }
} else {
// could happen if we are embedded inside SWT application,
// in this case just spin a single empty block through
// the event loop to give it a chance to process pending events
< prev index next >