From: Philip Chimento Date: Sun, 12 Feb 2012 12:11:23 +0000 (+0100) Subject: Implement recommended file suffixes in dialog X-Git-Tag: v0.9~31^2~3 X-Git-Url: https://git.stderr.nl/gitweb?p=projects%2Fchimara%2Fchimara.git;a=commitdiff_plain;h=3235a688697a3b015988a5312aed9116f6f8aa59 Implement recommended file suffixes in dialog When creating a file with glk_fileref_create_by_prompt(), there will be a file filter active for the recommended file extension. For fileusage_InputRecord and fileusage_Transcript, there will also be a filter for text/plain files selectable. In any case there is also an "All files" filter selectable. --- diff --git a/libchimara/fileref.c b/libchimara/fileref.c index 3db89a2..8bda95f 100644 --- a/libchimara/fileref.c +++ b/libchimara/fileref.c @@ -261,6 +261,48 @@ glk_fileref_create_by_prompt(glui32 usage, glui32 fmode, glui32 rock) return NULL; } + /* Set up a file filter with suggested extensions */ + GtkFileFilter *filter = gtk_file_filter_new(); + switch(usage & fileusage_TypeMask) + { + case fileusage_Data: + gtk_file_filter_set_name(filter, _("Data files (*.glkdata)")); + gtk_file_filter_add_pattern(filter, "*.glkdata"); + break; + case fileusage_SavedGame: + gtk_file_filter_set_name(filter, _("Saved games (*.glksave)")); + gtk_file_filter_add_pattern(filter, "*.glksave"); + break; + case fileusage_InputRecord: + gtk_file_filter_set_name(filter, _("Text files (*.txt)")); + gtk_file_filter_add_pattern(filter, "*.txt"); + break; + case fileusage_Transcript: + gtk_file_filter_set_name(filter, _("Transcript files (*.txt)")); + gtk_file_filter_add_pattern(filter, "*.txt"); + break; + default: + ILLEGAL_PARAM("Unknown file usage: %u", usage); + gdk_threads_leave(); + return NULL; + } + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), filter); + + /* Add a "text mode" filter for text files */ + if((usage & fileusage_TypeMask) == fileusage_InputRecord || (usage & fileusage_TypeMask) == fileusage_Transcript) + { + filter = gtk_file_filter_new(); + gtk_file_filter_set_name(filter, _("All text files")); + gtk_file_filter_add_mime_type(filter, "text/plain"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), filter); + } + + /* Add another non-restricted filter */ + filter = gtk_file_filter_new(); + gtk_file_filter_set_name(filter, _("All files")); + gtk_file_filter_add_pattern(filter, "*"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), filter); + if(glk_data->current_dir) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(chooser), glk_data->current_dir);