< prev index next >
src/java.desktop/windows/native/libawt/windows/awt_Toolkit.cpp
Print this page
@@ -319,10 +319,11 @@
// initialize kb state array
::GetKeyboardState(m_lastKeyboardState);
m_waitEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL);
+ isInDoDragDropLoop = FALSE;
eventNumber = 0;
}
AwtToolkit::~AwtToolkit() {
/*
@@ -2661,12 +2662,19 @@
JNIEXPORT jboolean JNICALL
Java_sun_awt_windows_WToolkit_syncNativeQueue(JNIEnv *env, jobject self, jlong timeout)
{
AwtToolkit & tk = AwtToolkit::GetInstance();
DWORD eventNumber = tk.eventNumber;
+ if (!tk.isInDoDragDropLoop) {
tk.PostMessage(WM_SYNC_WAIT, 0, 0);
- ::WaitForSingleObject(tk.m_waitEvent, INFINITE);
+ for(long t = 2; t < timeout &&
+ WAIT_TIMEOUT == ::WaitForSingleObject(tk.m_waitEvent, 2); t+=2) {
+ if (tk.isInDoDragDropLoop) {
+ break;
+ }
+ }
+ }
DWORD newEventNumber = tk.eventNumber;
return (newEventNumber - eventNumber) > 2;
}
} /* extern "C" */
< prev index next >