From: <eli...@us...> - 2008-04-29 18:32:13
|
Revision: 3048 http://java-game-lib.svn.sourceforge.net/java-game-lib/?rev=3048&view=rev Author: elias_naur Date: 2008-04-29 11:32:08 -0700 (Tue, 29 Apr 2008) Log Message: ----------- Windows: Added error handling to nCreateWindow Modified Paths: -------------- trunk/LWJGL/src/native/windows/org_lwjgl_opengl_Display.c Modified: trunk/LWJGL/src/native/windows/org_lwjgl_opengl_Display.c =================================================================== --- trunk/LWJGL/src/native/windows/org_lwjgl_opengl_Display.c 2008-04-27 13:37:00 UTC (rev 3047) +++ trunk/LWJGL/src/native/windows/org_lwjgl_opengl_Display.c 2008-04-29 18:32:08 UTC (rev 3048) @@ -178,6 +178,15 @@ return getAvailableDisplayModes(env); } +static void destroyWindow() { + jclass display_class_global = (jclass)(LONG_PTR)GetWindowLongPtr(display_hwnd, GWLP_USERDATA); + closeWindow(&display_hwnd, &display_hdc); + if (display_class_global != NULL) + (*env)->DeleteGlobalRef(env, display_class_global); + freeLargeIcon(); + freeSmallIcon(); +} + JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nCreateWindow(JNIEnv *env, jobject self, jobject mode, jboolean fullscreen, jint x, jint y, jboolean undecorated, jlong parent_hwnd) { jclass cls_displayMode = (*env)->GetObjectClass(env, mode); jfieldID fid_width = (*env)->GetFieldID(env, cls_displayMode, "width", "I"); @@ -199,15 +208,15 @@ return; } display_hdc = GetDC(display_hwnd); + if (display_hdc == NULL) { + destroyWindow(); + throwException(env, "Failed to get the window DC."); + return; + } } JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_nDestroyWindow(JNIEnv *env, jclass clazz) { - jclass display_class_global = (jclass)(LONG_PTR)GetWindowLongPtr(display_hwnd, GWLP_USERDATA); - closeWindow(&display_hwnd, &display_hdc); - if (display_class_global != NULL) - (*env)->DeleteGlobalRef(env, display_class_global); - freeLargeIcon(); - freeSmallIcon(); + destroyWindow(); } JNIEXPORT void JNICALL Java_org_lwjgl_opengl_WindowsDisplay_clientToScreen(JNIEnv *env, jclass unused, jlong hwnd_int, jobject buffer_handle) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |