diff options
author | Gustavo Noronha Silva <gns@src.gnome.org> | 2009-01-20 07:48:58 +0800 |
---|---|---|
committer | Gustavo Noronha Silva <gns@src.gnome.org> | 2009-01-20 07:48:58 +0800 |
commit | 204e4d53d1f29b4ed4c2b66ff16634aa9dbe25a4 (patch) | |
tree | 31acebe5b56ac44ce189182f58546a6f58bc7667 /src/ephy-location-action.c | |
parent | 8ecf59b151f949cb9e2bf8edb849c3a6df13d7b5 (diff) | |
download | gsoc2013-epiphany-204e4d53d1f29b4ed4c2b66ff16634aa9dbe25a4.tar gsoc2013-epiphany-204e4d53d1f29b4ed4c2b66ff16634aa9dbe25a4.tar.gz gsoc2013-epiphany-204e4d53d1f29b4ed4c2b66ff16634aa9dbe25a4.tar.bz2 gsoc2013-epiphany-204e4d53d1f29b4ed4c2b66ff16634aa9dbe25a4.tar.lz gsoc2013-epiphany-204e4d53d1f29b4ed4c2b66ff16634aa9dbe25a4.tar.xz gsoc2013-epiphany-204e4d53d1f29b4ed4c2b66ff16634aa9dbe25a4.tar.zst gsoc2013-epiphany-204e4d53d1f29b4ed4c2b66ff16634aa9dbe25a4.zip |
Implement multiple keyword-based AND-search for the location bar
Bug #568101
svn path=/trunk/; revision=8706
Diffstat (limited to 'src/ephy-location-action.c')
-rw-r--r-- | src/ephy-location-action.c | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/ephy-location-action.c b/src/ephy-location-action.c index c33664e39..94deac3cd 100644 --- a/src/ephy-location-action.c +++ b/src/ephy-location-action.c @@ -98,7 +98,7 @@ match_func (GtkEntryCompletion *completion, gboolean ret = FALSE; GtkTreeModel *model; - GRegex *regex; + GSList *search_terms; model = gtk_entry_completion_get_model (completion); @@ -112,12 +112,26 @@ match_func (GtkEntryCompletion *completion, if (!key) return FALSE; - regex = ephy_location_entry_get_regex (data); - - ret = (g_regex_match (regex, item, G_REGEX_MATCH_NOTEMPTY, NULL) - || g_regex_match (regex, url, G_REGEX_MATCH_NOTEMPTY, NULL) - || g_regex_match (regex, keywords, G_REGEX_MATCH_NOTEMPTY, NULL) - ); + search_terms = ephy_location_entry_get_search_terms (data); + + if (search_terms) + { + GSList *iter; + GRegex *current = NULL; + + ret = TRUE; + for (iter = search_terms; iter != NULL; iter = iter->next) + { + current = (GRegex*) iter->data; + if ((!g_regex_match (current, item, G_REGEX_MATCH_NOTEMPTY, NULL)) && + (!g_regex_match (current, url, G_REGEX_MATCH_NOTEMPTY, NULL)) && + (!g_regex_match (current, keywords, G_REGEX_MATCH_NOTEMPTY, NULL))) + { + ret = FALSE; + break; + } + } + } g_free (item); g_free (url); |