62 setWindowMethodID = (*env)->GetMethodID(env, cx, "setWindow", "(J)Z"); 63 DASSERT(setWindowMethodID != NULL); 64 } 65 66 static gboolean filenameFilterCallback(const GtkFileFilterInfo * filter_info, gpointer obj) 67 { 68 JNIEnv *env; 69 jstring filename; 70 71 env = (JNIEnv *) JNU_GetEnv(jvm, JNI_VERSION_1_2); 72 73 filename = (*env)->NewStringUTF(env, filter_info->filename); 74 JNU_CHECK_EXCEPTION_RETURN(env, FALSE); 75 76 return (*env)->CallBooleanMethod(env, obj, filenameFilterCallbackMethodID, 77 filename); 78 } 79 80 static void quit(JNIEnv * env, jobject jpeer, gboolean isSignalHandler) 81 { 82 jthrowable pendingException; 83 if (pendingException = (*env)->ExceptionOccurred(env)) { 84 (*env)->ExceptionClear(env); 85 } 86 87 GtkWidget * dialog = (GtkWidget*)jlong_to_ptr( 88 (*env)->GetLongField(env, jpeer, widgetFieldID)); 89 90 if (dialog != NULL) 91 { 92 // Callbacks from GTK signals are made within the GTK lock 93 // So, within a signal handler there is no need to call 94 // gdk_threads_enter() / gtk->gdk_threads_leave() 95 if (!isSignalHandler) { 96 gtk->gdk_threads_enter(); 97 } 98 99 gtk->gtk_widget_hide (dialog); 100 gtk->gtk_widget_destroy (dialog); 101 102 gtk->gtk_main_quit (); 103 | 62 setWindowMethodID = (*env)->GetMethodID(env, cx, "setWindow", "(J)Z"); 63 DASSERT(setWindowMethodID != NULL); 64 } 65 66 static gboolean filenameFilterCallback(const GtkFileFilterInfo * filter_info, gpointer obj) 67 { 68 JNIEnv *env; 69 jstring filename; 70 71 env = (JNIEnv *) JNU_GetEnv(jvm, JNI_VERSION_1_2); 72 73 filename = (*env)->NewStringUTF(env, filter_info->filename); 74 JNU_CHECK_EXCEPTION_RETURN(env, FALSE); 75 76 return (*env)->CallBooleanMethod(env, obj, filenameFilterCallbackMethodID, 77 filename); 78 } 79 80 static void quit(JNIEnv * env, jobject jpeer, gboolean isSignalHandler) 81 { 82 jthrowable pendingException = (*env)->ExceptionOccurred(env); 83 if (pendingException) { 84 (*env)->ExceptionClear(env); 85 } 86 87 GtkWidget * dialog = (GtkWidget*)jlong_to_ptr( 88 (*env)->GetLongField(env, jpeer, widgetFieldID)); 89 90 if (dialog != NULL) 91 { 92 // Callbacks from GTK signals are made within the GTK lock 93 // So, within a signal handler there is no need to call 94 // gdk_threads_enter() / gtk->gdk_threads_leave() 95 if (!isSignalHandler) { 96 gtk->gdk_threads_enter(); 97 } 98 99 gtk->gtk_widget_hide (dialog); 100 gtk->gtk_widget_destroy (dialog); 101 102 gtk->gtk_main_quit (); 103 |