diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-06-06 17:24:13 +0200 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2012-06-06 17:24:13 +0200 |
commit | 71bc7f8df1582efbcf552bd7d769f904160b82d6 (patch) | |
tree | b12af42512d1aa7416e56456635e831fcd9aa2ba | |
parent | 92eeaa0e66cf35f31e5c2ecf5e8503a38c9aa6c7 (diff) | |
download | gtk-vlc-player-71bc7f8df1582efbcf552bd7d769f904160b82d6.tar.gz |
cache filter patterns for quick-open feature
instead of recalculating them for each file checked
-rw-r--r-- | src/quick-open.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/quick-open.c b/src/quick-open.c index 8be163f..e0a5a5f 100644 --- a/src/quick-open.c +++ b/src/quick-open.c @@ -69,28 +69,36 @@ quickopen_menu_refresh_item_activate_cb(GtkWidget *widget, static inline gboolean quickopen_filter(const gchar *name) { + static GPatternSpec **patterns = NULL; + guint name_length = strlen(name); gchar *name_reversed = g_strreverse(g_strdup(name)); - gchar **filters, **filter; gchar *quickopen_directory; gchar *trans_name, *p; - gboolean res; + gboolean res = FALSE; + + if (patterns == NULL) { + patterns = (GPatternSpec **) + g_strsplit(EXPERIMENT_MOVIE_FILTER, ";", 0); - filters = g_strsplit(EXPERIMENT_MOVIE_FILTER, ";", 0); - for (filter = filters; *filter != NULL; filter++) { - GPatternSpec *pattern = g_pattern_spec_new(*filter); + for (GPatternSpec **filter = patterns; *filter != NULL; filter++) { + GPatternSpec *pattern; + + pattern = g_pattern_spec_new((gchar *)*filter); + g_free(*filter); + *filter = pattern; + } + } - res = g_pattern_match(pattern, name_length, + for (GPatternSpec **pattern = patterns; *pattern != NULL; pattern++) { + res = g_pattern_match(*pattern, name_length, name, name_reversed); - g_pattern_spec_free(pattern); if (res) break; } - res = *filter == NULL; - g_strfreev(filters); g_free(name_reversed); - if (res) + if (!res) return FALSE; quickopen_directory = config_get_quickopen_directory(); |