summaryrefslogtreecommitdiff
path: root/callbacks.c
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-11-06 19:23:12 +0100
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2009-11-06 19:23:12 +0100
commitaccb46582f9dafee80b536c625ede316c03da0f5 (patch)
treeb65b7063ecb538213c752d7baa9455251ef6424d /callbacks.c
parent6711a948681d812317e41edfa8b6d12f8c3758e7 (diff)
case-insensitive filter in gtk filechooser dialogs
Diffstat (limited to 'callbacks.c')
-rw-r--r--callbacks.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/callbacks.c b/callbacks.c
index d799e15c..3a0858e9 100644
--- a/callbacks.c
+++ b/callbacks.c
@@ -219,6 +219,42 @@ on_playscroll_value_changed (GtkRange *widget,
gtkpl_scroll (ps, newscroll);
}
+static gboolean
+file_filter_func (const GtkFileFilterInfo *filter_info, gpointer data) {
+ // get ext
+ const char *p = filter_info->filename + strlen (filter_info->filename)-1;
+ while (p >= filter_info->filename) {
+ if (*p == '.') {
+ break;
+ }
+ p--;
+ }
+ if (*p != '.') {
+ return FALSE;
+ }
+ p++;
+ DB_decoder_t **codecs = plug_get_decoder_list ();
+ for (int i = 0; codecs[i]; i++) {
+ if (codecs[i]->exts && codecs[i]->insert) {
+ const char **exts = codecs[i]->exts;
+ if (exts) {
+ for (int e = 0; exts[e]; e++) {
+ if (!strcasecmp (exts[e], p)) {
+ return TRUE;
+ }
+ }
+ }
+ }
+ }
+ if (!strcasecmp (p, "pls")) {
+ return TRUE;
+ }
+ if (!strcasecmp (p, "m3u")) {
+ return TRUE;
+ }
+ return FALSE;
+}
+
static GtkFileFilter *
set_file_filter (GtkWidget *dlg, const char *name) {
if (!name) {
@@ -229,8 +265,9 @@ set_file_filter (GtkWidget *dlg, const char *name) {
flt = gtk_file_filter_new ();
gtk_file_filter_set_name (flt, name);
+ gtk_file_filter_add_custom (flt, GTK_FILE_FILTER_FILENAME, file_filter_func, NULL, NULL);
+#if 0
DB_decoder_t **codecs = plug_get_decoder_list ();
-
for (int i = 0; codecs[i]; i++) {
if (codecs[i]->exts && codecs[i]->insert) {
const char **exts = codecs[i]->exts;
@@ -250,6 +287,7 @@ set_file_filter (GtkWidget *dlg, const char *name) {
}
gtk_file_filter_add_pattern (flt, "*.pls");
gtk_file_filter_add_pattern (flt, "*.m3u");
+#endif
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dlg), flt);
gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dlg), flt);