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
|
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
|