From 71bc7f8df1582efbcf552bd7d769f904160b82d6 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Wed, 6 Jun 2012 17:24:13 +0200 Subject: cache filter patterns for quick-open feature instead of recalculating them for each file checked --- src/quick-open.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'src/quick-open.c') 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(); -- cgit v1.2.3