Revision: 2516
Author: elias_naur
Date: 2006-07-15 11:31:09 -0700 (Sat, 15 Jul 2006)
ViewCVS: http://svn.sourceforge.net/java-game-lib/?rev=2516&view=rev
Log Message:
-----------
Windows: Don't release clipboard data before use
Modified Paths:
--------------
trunk/LWJGL/src/native/windows/org_lwjgl_Sys.c
Modified: trunk/LWJGL/src/native/windows/org_lwjgl_Sys.c
===================================================================
--- trunk/LWJGL/src/native/windows/org_lwjgl_Sys.c 2006-07-15 17:44:53 UTC (rev 2515)
+++ trunk/LWJGL/src/native/windows/org_lwjgl_Sys.c 2006-07-15 18:31:09 UTC (rev 2516)
@@ -142,43 +142,50 @@
return JNI_TRUE;
}
-const void * getClipboard(int type)
-{
-
- void * ret;
- HANDLE hglb;
- // Open the clipboard
- if (!OpenClipboard(NULL))
- return NULL;
-
- hglb = GetClipboardData(type);
- if (hglb != NULL) {
- ret = GlobalLock(hglb);
- if (ret != NULL) {
- GlobalUnlock(hglb);
- }
- }
-
- // Close the clipboard now we're done
- CloseClipboard();
-
- return ret;
-
-}
-
JNIEXPORT jstring JNICALL Java_org_lwjgl_NativeSysImplementation_getClipboard
(JNIEnv * env, jobject ignored)
{
// Check to see if there's text available in the clipboard
BOOL textAvailable = IsClipboardFormatAvailable(CF_TEXT);
BOOL unicodeAvailable = IsClipboardFormatAvailable(CF_UNICODETEXT);
+ void *clipboard_data;
+ jstring ret;
+ HANDLE hglb;
+ const wchar_t * str;
if (unicodeAvailable) {
- const wchar_t * str = (const wchar_t *) getClipboard(CF_UNICODETEXT);
- return (*env)->NewString(env, str, wcslen(str));
+ if (!OpenClipboard(NULL))
+ return NULL;
+ hglb = GetClipboardData(CF_UNICODETEXT);
+ if (hglb == NULL) {
+ CloseClipboard();
+ return NULL;
+ }
+ clipboard_data = GlobalLock(hglb);
+ if (clipboard_data == NULL) {
+ CloseClipboard();
+ return NULL;
+ }
+ str = (const wchar_t *)clipboard_data;
+ ret = (*env)->NewString(env, str, wcslen(str));
} else if (textAvailable) {
- return NewStringNative(env, (const char *) getClipboard(CF_TEXT));
+ if (!OpenClipboard(NULL))
+ return NULL;
+ hglb = GetClipboardData(CF_TEXT);
+ if (hglb == NULL) {
+ CloseClipboard();
+ return NULL;
+ }
+ clipboard_data = GlobalLock(hglb);
+ if (clipboard_data == NULL) {
+ CloseClipboard();
+ return NULL;
+ }
+ ret = NewStringNative(env, (const char *) clipboard_data);
} else {
return NULL;
}
+ GlobalUnlock(hglb);
+ CloseClipboard();
+ return ret;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|