Skip to content

Commit 42b4ed6

Browse files
[gnc-file.c] move datafile filter to gnc-file.c
effectively reverts 6c5f905 and reinstate in gnc-file.c, because the datafile filter is useful for non-dbi file dialog too
1 parent dde1046 commit 42b4ed6

File tree

3 files changed

+60
-58
lines changed

3 files changed

+60
-58
lines changed

gnucash/gnome-utils/dialog-file-access.c

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
* Boston, MA 02110-1301, USA gnu@gnu.org *
2323
\********************************************************************/
2424

25-
#include <stdbool.h>
2625
#include <config.h>
2726

2827
#include <gtk/gtk.h>
@@ -34,7 +33,6 @@
3433
#include "dialog-utils.h"
3534
#include "dialog-file-access.h"
3635
#include "gnc-file.h"
37-
#include "gnc-filepath-utils.h"
3836
#include "gnc-plugin-file-history.h"
3937
#include "gnc-session.h"
4038

@@ -251,15 +249,6 @@ get_default_database( void )
251249
return default_db;
252250
}
253251

254-
typedef bool (*CharToBool)(const char*);
255-
256-
static bool datafile_filter (const GtkFileFilterInfo* filter_info,
257-
CharToBool filename_checker)
258-
{
259-
return filter_info && filter_info->filename &&
260-
filename_checker (filter_info->filename);
261-
}
262-
263252
static void free_file_access_window (FileAccessWindow *faw)
264253
{
265254
g_free (faw->starting_dir);
@@ -357,30 +346,8 @@ gnc_ui_file_access (GtkWindow *parent, int type)
357346
faw->fileChooser = GTK_FILE_CHOOSER(fileChooser);
358347
gtk_box_pack_start( GTK_BOX(file_chooser), GTK_WIDGET(fileChooser), TRUE, TRUE, 6 );
359348

360-
/* set up .gnucash filters for Datafile operations */
361-
GtkFileFilter *filter = gtk_file_filter_new ();
362-
gtk_file_filter_set_name (filter, _("All files"));
363-
gtk_file_filter_add_pattern (filter, "*");
364-
gtk_file_chooser_add_filter (faw->fileChooser, filter);
365-
366-
filter = gtk_file_filter_new ();
367-
/* Translators: *.gnucash and *.xac are file patterns and must not
368-
be translated*/
369-
gtk_file_filter_set_name (filter, _("Datafiles only (*.gnucash, *.xac)"));
370-
gtk_file_filter_add_custom (filter, GTK_FILE_FILTER_FILENAME,
371-
(GtkFileFilterFunc)datafile_filter,
372-
gnc_filename_is_datafile, NULL);
373-
gtk_file_chooser_add_filter (faw->fileChooser, filter);
374-
gtk_file_chooser_set_filter (faw->fileChooser, filter);
375-
376-
filter = gtk_file_filter_new ();
377-
/* Translators: *.gnucash.*.gnucash, *.xac.*.xac are file
378-
patterns and must not be translated*/
379-
gtk_file_filter_set_name (filter, _("Backups only (*.gnucash.*.gnucash, *.xac.*.xac)"));
380-
gtk_file_filter_add_custom (filter, GTK_FILE_FILTER_FILENAME,
381-
(GtkFileFilterFunc)datafile_filter,
382-
gnc_filename_is_backup, NULL);
383-
gtk_file_chooser_add_filter (faw->fileChooser, filter);
349+
gnc_file_chooser_add_filters (faw->fileChooser,
350+
gnc_file_chooser_get_datafile_filters ());
384351

385352
/* Set the default directory */
386353
if (type == FILE_ACCESS_OPEN || type == FILE_ACCESS_SAVE_AS)

gnucash/gnome-utils/gnc-file.c

Lines changed: 54 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include <config.h>
2323

24+
#include <stdbool.h>
2425
#include <gtk/gtk.h>
2526
#include <glib/gi18n.h>
2627
#include <errno.h>
@@ -63,6 +64,58 @@ static QofLogModule log_module = GNC_MOD_GUI;
6364
static GNCShutdownCB shutdown_cb = NULL;
6465
static gint save_in_progress = 0;
6566

67+
typedef bool (*CharToBool)(const char*);
68+
69+
static bool datafile_filter (const GtkFileFilterInfo* info, CharToBool checker)
70+
{
71+
return info && info->filename && checker (info->filename);
72+
}
73+
74+
GList*
75+
gnc_file_chooser_get_datafile_filters ()
76+
{
77+
/* Translators: *.gnucash.*.gnucash, *.xac.*.xac are file patterns
78+
and must not be translated*/
79+
const char* datafiles = N_("Datafiles only (*.gnucash, *.xac)");
80+
const char* backups = N_("Backups only (*.gnucash.*.gnucash, *.xac.*.xac)");
81+
GList* rv = NULL;
82+
83+
GtkFileFilter *filter = gtk_file_filter_new ();
84+
gtk_file_filter_set_name (filter, _(datafiles));
85+
gtk_file_filter_add_custom (filter, GTK_FILE_FILTER_FILENAME,
86+
(GtkFileFilterFunc)datafile_filter,
87+
gnc_filename_is_datafile, NULL);
88+
rv = g_list_prepend (rv, filter);
89+
90+
filter = gtk_file_filter_new ();
91+
gtk_file_filter_set_name (filter, _(backups));
92+
gtk_file_filter_add_custom (filter, GTK_FILE_FILTER_FILENAME,
93+
(GtkFileFilterFunc)datafile_filter,
94+
gnc_filename_is_backup, NULL);
95+
rv = g_list_prepend (rv, filter);
96+
97+
return g_list_reverse (rv);
98+
}
99+
100+
void
101+
gnc_file_chooser_add_filters (GtkFileChooser* file_box, GList *filters)
102+
{
103+
g_return_if_fail (GTK_IS_WIDGET (file_box));
104+
if (filters == NULL) return;
105+
106+
for (GList* node = filters; node; node = node->next)
107+
gtk_file_chooser_add_filter (file_box, GTK_FILE_FILTER (node->data));
108+
109+
GtkFileFilter* all_filter = gtk_file_filter_new();
110+
gtk_file_filter_set_name (all_filter, _("All files"));
111+
gtk_file_filter_add_pattern (all_filter, "*");
112+
gtk_file_chooser_add_filter (file_box, all_filter);
113+
114+
/* preselect the first filter */
115+
gtk_file_chooser_set_filter (file_box, filters->data);
116+
g_list_free (filters);
117+
}
118+
66119
// gnc_file_dialog_int is used both by gnc_file_dialog and gnc_file_dialog_multi
67120
static GSList *
68121
gnc_file_dialog_int (GtkWindow *parent,
@@ -135,29 +188,7 @@ gnc_file_dialog_int (GtkWindow *parent,
135188
gtk_window_set_modal(GTK_WINDOW(file_box), TRUE);
136189

137190
if (filters != NULL)
138-
{
139-
GList* filter;
140-
GtkFileFilter* all_filter = gtk_file_filter_new();
141-
142-
for (filter = filters; filter; filter = filter->next)
143-
{
144-
g_return_val_if_fail(GTK_IS_FILE_FILTER(filter->data), NULL);
145-
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (file_box),
146-
GTK_FILE_FILTER (filter->data));
147-
}
148-
149-
gtk_file_filter_set_name (all_filter, _("All files"));
150-
gtk_file_filter_add_pattern (all_filter, "*");
151-
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (file_box), all_filter);
152-
153-
/* Note: You cannot set a file filter and preselect a file name.
154-
* The latter wins, and the filter ends up disabled. Since we are
155-
* only setting the starting directory for the chooser dialog,
156-
* everything works as expected. */
157-
gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (file_box),
158-
GTK_FILE_FILTER (filters->data));
159-
g_list_free (filters);
160-
}
191+
gnc_file_chooser_add_filters (GTK_FILE_CHOOSER (file_box), filters);
161192

162193
response = gtk_dialog_run(GTK_DIALOG(file_box));
163194

gnucash/gnome-utils/gnc-file.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,10 @@ void gnc_file_do_export(GtkWindow *parent, const char* filename);
140140
void gnc_file_do_save_as(GtkWindow *parent, const char* filename);
141141
void gnc_file_revert (GtkWindow *parent);
142142

143+
GList* gnc_file_chooser_get_datafile_filters (void);
144+
145+
void gnc_file_chooser_add_filters (GtkFileChooser* file_box, GList *filters);
146+
143147
/** Tell the user about errors in the backends
144148
145149
*/

0 commit comments

Comments
 (0)