95 const char* chooser_folder; 96 const char* chooser_filename; 97 const char* chooser_title; 98 const int chooser_type = type == 0 ? GTK_FILE_CHOOSER_ACTION_OPEN : GTK_FILE_CHOOSER_ACTION_SAVE; 99 100 if (!jstring_to_utf_get(env, folder, &chooser_folder)) { 101 return create_empty_result(); 102 } 103 104 if (!jstring_to_utf_get(env, title, &chooser_title)) { 105 jstring_to_utf_release(env, folder, chooser_folder); 106 return create_empty_result(); 107 } 108 109 if (!jstring_to_utf_get(env, name, &chooser_filename)) { 110 jstring_to_utf_release(env, folder, chooser_folder); 111 jstring_to_utf_release(env, title, chooser_title); 112 return create_empty_result(); 113 } 114 115 GtkWidget* chooser = glass_file_chooser_dialog( 116 chooser_title, 117 gdk_window_handle_to_gtk(parent), 118 static_cast<GtkFileChooserAction>(chooser_type), 119 (chooser_type == GTK_FILE_CHOOSER_ACTION_OPEN ? GTK_STOCK_OPEN : GTK_STOCK_SAVE) 120 ); 121 122 if (chooser_type == GTK_FILE_CHOOSER_ACTION_SAVE) { 123 gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(chooser), chooser_filename); 124 gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER (chooser), TRUE); 125 } 126 127 gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(chooser), (JNI_TRUE == multiple)); 128 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(chooser), chooser_folder); 129 GSList* filters = setup_GtkFileFilters(GTK_FILE_CHOOSER(chooser), env, jFilters, default_filter_index); 130 131 if (gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_ACCEPT) { 132 GSList* fnames_gslist = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(chooser)); 133 guint fnames_list_len = g_slist_length(fnames_gslist); 134 LOG1("FileChooser selected files: %d\n", fnames_list_len) 135 136 if (fnames_list_len > 0) { 137 jFileNames = env->NewObjectArray((jsize)fnames_list_len, jStringCls, NULL); 138 EXCEPTION_OCCURED(env); 139 for (guint i = 0; i < fnames_list_len; i++) { 140 filename = (char*)g_slist_nth(fnames_gslist, i)->data; 179 return result; 180 } 181 182 JNIEXPORT jstring JNICALL Java_com_sun_glass_ui_gtk_GtkCommonDialogs__1showFolderChooser 183 (JNIEnv *env, jclass clazz, jlong parent, jstring folder, jstring title) { 184 (void)clazz; 185 186 jstring jfilename = NULL; 187 const char *chooser_folder; 188 const char *chooser_title; 189 190 if (!jstring_to_utf_get(env, folder, &chooser_folder)) { 191 return NULL; 192 } 193 194 if (!jstring_to_utf_get(env, title, &chooser_title)) { 195 jstring_to_utf_release(env, folder, chooser_folder); 196 return NULL; 197 } 198 199 GtkWidget* chooser = glass_file_chooser_dialog( 200 chooser_title, 201 gdk_window_handle_to_gtk(parent), 202 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, 203 GTK_STOCK_OPEN 204 ); 205 206 if (chooser_folder != NULL) { 207 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(chooser), 208 chooser_folder); 209 } 210 211 if (gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_ACCEPT) { 212 gchar* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser)); 213 jfilename = env->NewStringUTF(filename); 214 LOG1("Selected folder: %s\n", filename); 215 g_free(filename); 216 } 217 218 jstring_to_utf_release(env, folder, chooser_folder); 219 jstring_to_utf_release(env, title, chooser_title); 220 221 gtk_widget_destroy(chooser); 222 return jfilename; 223 } 224 | 95 const char* chooser_folder; 96 const char* chooser_filename; 97 const char* chooser_title; 98 const int chooser_type = type == 0 ? GTK_FILE_CHOOSER_ACTION_OPEN : GTK_FILE_CHOOSER_ACTION_SAVE; 99 100 if (!jstring_to_utf_get(env, folder, &chooser_folder)) { 101 return create_empty_result(); 102 } 103 104 if (!jstring_to_utf_get(env, title, &chooser_title)) { 105 jstring_to_utf_release(env, folder, chooser_folder); 106 return create_empty_result(); 107 } 108 109 if (!jstring_to_utf_get(env, name, &chooser_filename)) { 110 jstring_to_utf_release(env, folder, chooser_folder); 111 jstring_to_utf_release(env, title, chooser_title); 112 return create_empty_result(); 113 } 114 115 GtkWidget* chooser = gtk_file_chooser_dialog_new(chooser_title, gdk_window_handle_to_gtk(parent), 116 static_cast<GtkFileChooserAction>(chooser_type), 117 GTK_STOCK_CANCEL, 118 GTK_RESPONSE_CANCEL, 119 (chooser_type == GTK_FILE_CHOOSER_ACTION_OPEN ? GTK_STOCK_OPEN : GTK_STOCK_SAVE), 120 GTK_RESPONSE_ACCEPT, 121 NULL); 122 123 if (chooser_type == GTK_FILE_CHOOSER_ACTION_SAVE) { 124 gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(chooser), chooser_filename); 125 gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER (chooser), TRUE); 126 } 127 128 gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(chooser), (JNI_TRUE == multiple)); 129 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(chooser), chooser_folder); 130 GSList* filters = setup_GtkFileFilters(GTK_FILE_CHOOSER(chooser), env, jFilters, default_filter_index); 131 132 if (gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_ACCEPT) { 133 GSList* fnames_gslist = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(chooser)); 134 guint fnames_list_len = g_slist_length(fnames_gslist); 135 LOG1("FileChooser selected files: %d\n", fnames_list_len) 136 137 if (fnames_list_len > 0) { 138 jFileNames = env->NewObjectArray((jsize)fnames_list_len, jStringCls, NULL); 139 EXCEPTION_OCCURED(env); 140 for (guint i = 0; i < fnames_list_len; i++) { 141 filename = (char*)g_slist_nth(fnames_gslist, i)->data; 180 return result; 181 } 182 183 JNIEXPORT jstring JNICALL Java_com_sun_glass_ui_gtk_GtkCommonDialogs__1showFolderChooser 184 (JNIEnv *env, jclass clazz, jlong parent, jstring folder, jstring title) { 185 (void)clazz; 186 187 jstring jfilename = NULL; 188 const char *chooser_folder; 189 const char *chooser_title; 190 191 if (!jstring_to_utf_get(env, folder, &chooser_folder)) { 192 return NULL; 193 } 194 195 if (!jstring_to_utf_get(env, title, &chooser_title)) { 196 jstring_to_utf_release(env, folder, chooser_folder); 197 return NULL; 198 } 199 200 GtkWidget* chooser = gtk_file_chooser_dialog_new( 201 chooser_title, 202 gdk_window_handle_to_gtk(parent), 203 GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, 204 GTK_STOCK_CANCEL, 205 GTK_RESPONSE_CANCEL, 206 GTK_STOCK_OPEN, 207 GTK_RESPONSE_ACCEPT, 208 NULL); 209 210 if (chooser_folder != NULL) { 211 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(chooser), 212 chooser_folder); 213 } 214 215 if (gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_ACCEPT) { 216 gchar* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser)); 217 jfilename = env->NewStringUTF(filename); 218 LOG1("Selected folder: %s\n", filename); 219 g_free(filename); 220 } 221 222 jstring_to_utf_release(env, folder, chooser_folder); 223 jstring_to_utf_release(env, title, chooser_title); 224 225 gtk_widget_destroy(chooser); 226 return jfilename; 227 } 228 |