--- old/src/windows/native/sun/windows/awt_Cursor.cpp 2013-09-04 12:42:33.376378000 +0400 +++ new/src/windows/native/sun/windows/awt_Cursor.cpp 2013-09-04 12:42:33.220377800 +0400 @@ -227,7 +227,7 @@ cur = GetCursor(env , comp); } if (cur != NULL) { - ::SetCursor(cur); + ::SetCursor(cur); } if (AwtCursor::updateCursorID == NULL) { @@ -391,16 +391,9 @@ DASSERT(hCursor); - try { - AwtCursor::setPData(self, ptr_to_jlong(new AwtCursor(env, hCursor, self, xHotSpot, - yHotSpot, nW, nH, nSS, cols, - (BYTE *)andMaskPtr))); - } catch (...) { - if (cols) { - delete[] cols; - } - throw; - } + AwtCursor::setPData(self, ptr_to_jlong(new AwtCursor(env, hCursor, self, xHotSpot, + yHotSpot, nW, nH, nSS, cols, + (BYTE *)andMaskPtr))); CATCH_BAD_ALLOC; } @@ -504,11 +497,11 @@ /* * Class: sun_awt_windows_WGlobalCursorManager - * Method: setCursor + * Method: setCursorImpl * Signature: (Ljava/awt/Component;Ljava/awt/Cursor;)V */ JNIEXPORT void JNICALL -Java_sun_awt_windows_WGlobalCursorManager_setCursor(JNIEnv *env, jobject, +Java_sun_awt_windows_WGlobalCursorManager_setCursorImpl(JNIEnv *env, jobject, jobject, jobject cursor, jboolean u) { TRY; @@ -523,6 +516,28 @@ } else { JNU_ThrowNullPointerException(env, "NullPointerException"); } + CATCH_BAD_ALLOC; +} + +/* + * Class: sun_awt_windows_WGlobalCursorManager + * Method: setCursorDirect + * Signature: (Ljava/awt/Component;Ljava/awt/Cursor;)V + */ +JNIEXPORT void JNICALL +Java_sun_awt_windows_WGlobalCursorManager_setCursorDirect(JNIEnv *env, jobject, + jobject, jobject cursor, jboolean u) +{ + TRY; + + if (cursor != NULL) { + GlobalSetCursorStruct data; + data.cursor = env->NewGlobalRef(cursor); + data.u = u; + GlobalSetCursor((void *)&data); + } else { + JNU_ThrowNullPointerException(env, "NullPointerException"); + } CATCH_BAD_ALLOC; }