aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2012-06-06 17:24:13 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2012-06-06 17:24:13 +0200
commit71bc7f8df1582efbcf552bd7d769f904160b82d6 (patch)
treeb12af42512d1aa7416e56456635e831fcd9aa2ba
parent92eeaa0e66cf35f31e5c2ecf5e8503a38c9aa6c7 (diff)
downloadgtk-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.c28
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();