From 77d9ef86049d2e738db8930607660da22f401102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20K=C3=B6hler?= Date: Sat, 20 May 2006 10:25:04 +0000 Subject: [PATCH] Extend gnc_file_dialog to take a GList of GtkFileFilters instead of a filter string. Allows patterns like *.[Qq][Ii][Ff] without messing up the dialog, fixes #336124. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@14142 57a11ea4-9604-0410-9ed3-97b8803252fd --- ChangeLog | 9 ++++++++ src/gnome-utils/gnc-file.c | 21 ++++++++++++------- src/gnome-utils/gnc-file.h | 2 +- src/import-export/log-replay/gnc-log-replay.c | 7 ++++++- .../qif-import/druid-qif-import.c | 11 ++++++++-- 5 files changed, 38 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3cdfe1debd..d7b0b03c6b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2006-05-20 Andreas Köhler + + * src/gnome-utils/gnc-file.[ch]: + * src/import-export/log-replay/gnc-log-replay.c: + * src/import-export/qif-import/druid-qif-import.c: Extend + gnc_file_dialog to take a GList of GtkFileFilters instead of a + filter string. Allows patterns like *.[Qq][Ii][Ff] without + messing up the dialog, fixes #336124. + 2006-05-19 David Hampton * src/register/register-gnome/gnucash-grid.c: Make the blue diff --git a/src/gnome-utils/gnc-file.c b/src/gnome-utils/gnc-file.c index b3332b2027..cb4448e9d1 100644 --- a/src/gnome-utils/gnc-file.c +++ b/src/gnome-utils/gnc-file.c @@ -65,7 +65,8 @@ static gint save_in_progress = 0; * or presses "Cancel" or the window manager destroy button) * * * * Args: title - the title of the window * - * filter - the file filter to use * + * filters - list of GtkFileFilters to use, will be * + freed automatically * * default_dir - start the chooser in this directory * * type - what type of dialog (open, save, etc.) * * Return: containing the name of the file the user selected * @@ -73,7 +74,7 @@ static gint save_in_progress = 0; char * gnc_file_dialog (const char * title, - const char * filter, + GList * filters, const char * starting_dir, GNCFileDialogType type ) @@ -144,14 +145,16 @@ gnc_file_dialog (const char * title, GTK_WINDOW(gnc_ui_get_toplevel())); */ - if (filter != NULL) + if (filters != NULL) { - GtkFileFilter* g_filter = gtk_file_filter_new(); + GList* filter; GtkFileFilter* all_filter = gtk_file_filter_new(); - gtk_file_filter_set_name (g_filter, filter); - gtk_file_filter_add_pattern (g_filter, filter); - gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (file_box), g_filter); + for (filter=filters; filter; filter=filter->next) { + g_return_val_if_fail(GTK_IS_FILE_FILTER(filter->data), NULL); + gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (file_box), + GTK_FILE_FILTER (filter->data)); + } gtk_file_filter_set_name (all_filter, _("All files")); gtk_file_filter_add_pattern (all_filter, "*"); @@ -161,7 +164,9 @@ gnc_file_dialog (const char * title, * The latter wins, and the filter ends up diabled. Since we are * only settin the starting directory for the chooser dialog, * everything works as expected. */ - gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (file_box), g_filter); + gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (file_box), + GTK_FILE_FILTER (filters->data)); + g_list_free (filters); } response = gtk_dialog_run(GTK_DIALOG(file_box)); diff --git a/src/gnome-utils/gnc-file.h b/src/gnome-utils/gnc-file.h index 870f30fcb1..d1c0d2ab89 100644 --- a/src/gnome-utils/gnc-file.h +++ b/src/gnome-utils/gnc-file.h @@ -137,7 +137,7 @@ gboolean show_session_error (QofBackendError io_error, GNCFileDialogType type); char * gnc_file_dialog (const char * title, - const char * filter, + GList * filters, const char * starting_dir, GNCFileDialogType type); diff --git a/src/import-export/log-replay/gnc-log-replay.c b/src/import-export/log-replay/gnc-log-replay.c index 276b840671..e2578cf05f 100644 --- a/src/import-export/log-replay/gnc-log-replay.c +++ b/src/import-export/log-replay/gnc-log-replay.c @@ -499,6 +499,7 @@ void gnc_file_log_replay (void) char *default_dir; char read_buf[256]; char *read_retval; + GtkFileFilter *filter; FILE *log_file; char * record_start_str = "===== START"; /* NOTE: This string must match src/engine/TransLog.c (sans newline) */ @@ -517,8 +518,12 @@ void gnc_file_log_replay (void) default_dir = gnc_gconf_get_string(GCONF_SECTION, KEY_LAST_PATH, NULL); if (default_dir == NULL) gnc_init_default_directory(&default_dir); + + filter = gtk_file_filter_new(); + gtk_file_filter_set_name(filter, "*.log"); + gtk_file_filter_add_pattern(filter, "*.[Ll][Oo][Gg]"); selected_filename = gnc_file_dialog(_("Select a .log file to replay"), - "*.log", + g_list_prepend(NULL, filter), default_dir, GNC_FILE_DIALOG_OPEN); diff --git a/src/import-export/qif-import/druid-qif-import.c b/src/import-export/qif-import/druid-qif-import.c index 7e1110e1fb..b9cd496deb 100644 --- a/src/import-export/qif-import/druid-qif-import.c +++ b/src/import-export/qif-import/druid-qif-import.c @@ -348,6 +348,7 @@ gnc_ui_qif_import_select_file_cb(GtkButton * button, gpointer user_data) { QIFImportWindow * wind = user_data; + GtkFileFilter *filter; char * new_file_name; char *file_name, *default_dir; @@ -355,8 +356,14 @@ gnc_ui_qif_import_select_file_cb(GtkButton * button, default_dir = gnc_gconf_get_string(GCONF_SECTION, KEY_LAST_PATH, NULL); if (default_dir == NULL) gnc_init_default_directory(&default_dir); - new_file_name = gnc_file_dialog (_("Select QIF File"), "*.qif", - default_dir, GNC_FILE_DIALOG_IMPORT); + + filter = gtk_file_filter_new (); + gtk_file_filter_set_name (filter, "*.qif"); + gtk_file_filter_add_pattern (filter, "*.[Qq][Ii][Ff]"); + new_file_name = gnc_file_dialog (_("Select QIF File"), + g_list_prepend (NULL, filter), + default_dir, + GNC_FILE_DIALOG_IMPORT); /* Insure valid data, and something that can be freed. */ if (new_file_name == NULL) {