aboutsummaryrefslogtreecommitdiffstats
path: root/lib/widgets/ephy-location-entry.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/widgets/ephy-location-entry.c')
-rw-r--r--lib/widgets/ephy-location-entry.c113
1 files changed, 12 insertions, 101 deletions
diff --git a/lib/widgets/ephy-location-entry.c b/lib/widgets/ephy-location-entry.c
index 0282589ff..c531b7169 100644
--- a/lib/widgets/ephy-location-entry.c
+++ b/lib/widgets/ephy-location-entry.c
@@ -38,6 +38,7 @@
#include <gdk/gdkkeysyms.h>
#include <gtk/gtktoolbar.h>
#include <gtk/gtkentry.h>
+#include <gtk/gtkentrycompletion.h>
#include <gtk/gtkwindow.h>
#include <gtk/gtkcellrenderertext.h>
#include <gtk/gtkcellrendererpixbuf.h>
@@ -90,24 +91,6 @@ struct _EphyLocationEntryPrivate
guint needs_reset : 1;
};
-static const struct
-{
- const char *prefix;
- int len;
-}
-web_prefixes [] =
-{
- { "http://www.", 11 },
- { "http://ftp.", 11 },
- { "http://", 7 },
- { "https://www.", 12 },
- { "https://", 8 },
- { "ftp://", 6},
- { "ftp://ftp.", 10},
- { "www.", 4 },
- { "ftp.", 4}
-};
-
static const GtkTargetEntry url_drag_types [] =
{
{ EPHY_DND_URL_TYPE, 0, 0 },
@@ -435,88 +418,6 @@ entry_activate_after_cb (GtkEntry *entry,
}
static gboolean
-keyword_match (const char *list,
- const char *keyword)
-{
- const char *p;
- gsize keyword_len;
-
- p = list;
- keyword_len = strlen (keyword);
-
- while (*p)
- {
- int i;
-
- for (i = 0; i < keyword_len; i++)
- {
- if (p[i] != keyword[i])
- {
- goto next_token;
- }
- }
-
- return TRUE;
-
- next_token:
-
- while (*p && !g_ascii_ispunct(*p) && !g_ascii_isspace(*p)) p++;
- while (*p && (g_ascii_ispunct(*p) || g_ascii_isspace(*p))) p++;
- }
-
- return FALSE;
-}
-
-static gboolean
-completion_func (GtkEntryCompletion *completion,
- const char *key,
- GtkTreeIter *iter,
- gpointer data)
-{
- int i, len_key, len_prefix;
- char *item = NULL;
- char *keywords = NULL;
- gboolean ret = FALSE;
- EphyLocationEntry *le = EPHY_LOCATION_ENTRY (data);
- GtkTreeModel *model;
-
- model = gtk_entry_completion_get_model (completion);
-
- gtk_tree_model_get (model, iter,
- le->priv->text_col, &item,
- le->priv->keywords_col, &keywords,
- -1);
-
- len_key = strlen (key);
- if (!strncasecmp (key, item, len_key))
- {
- ret = TRUE;
- }
- else if (keyword_match (keywords, key))
- {
- ret = TRUE;
- }
- else
- {
- for (i = 0; i < G_N_ELEMENTS (web_prefixes); i++)
- {
- len_prefix = web_prefixes[i].len;
- if (!strncmp (web_prefixes[i].prefix, item, len_prefix) &&
- !strncasecmp (key, item + len_prefix, len_key))
- {
- ret = TRUE;
- break;
- }
- }
- }
-
- g_free (item);
- g_free (keywords);
-
- return ret;
-}
-
-static gboolean
match_selected_cb (GtkEntryCompletion *completion,
GtkTreeModel *model,
GtkTreeIter *iter,
@@ -1039,6 +940,17 @@ extracell_data_func (GtkCellLayout *cell_layout,
}
void
+ephy_location_entry_set_completion_func (EphyLocationEntry *le,
+ GtkEntryCompletionMatchFunc completion_func)
+{
+ EphyLocationEntryPrivate *priv = le->priv;
+ GtkEntryCompletion *completion;
+
+ completion = gtk_entry_get_completion (GTK_ENTRY (priv->icon_entry->entry));
+ gtk_entry_completion_set_match_func (completion, completion_func, NULL, NULL);
+}
+
+void
ephy_location_entry_set_completion (EphyLocationEntry *le,
GtkTreeModel *model,
guint text_col,
@@ -1071,7 +983,6 @@ ephy_location_entry_set_completion (EphyLocationEntry *le,
completion = gtk_entry_completion_new ();
gtk_entry_completion_set_model (completion, sort_model);
g_object_unref (sort_model);
- gtk_entry_completion_set_match_func (completion, completion_func, le, NULL);
g_signal_connect (completion, "match-selected",
G_CALLBACK (match_selected_cb), le);
g_signal_connect_after (completion, "action-activated",