From b573119b1338722ba9f6016b72064f6fcf681dfc Mon Sep 17 00:00:00 2001 From: Gustavo Noronha Silva Date: Fri, 25 Dec 2009 23:58:59 -0200 Subject: Make text search faster by delaying the actual search This makes sure that we do not search for 1-2 characters when the user starts typing, making the search for longer words faster. Bug #598322 --- src/ephy-find-toolbar.c | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/ephy-find-toolbar.c b/src/ephy-find-toolbar.c index 71f255258..196957de1 100644 --- a/src/ephy-find-toolbar.c +++ b/src/ephy-find-toolbar.c @@ -48,6 +48,7 @@ struct _EphyFindToolbarPrivate gulong set_focus_handler; guint source_id; guint find_again_source_id; + guint find_source_id; char *find_string; guint preedit_changed : 1; guint prevent_activate : 1; @@ -268,20 +269,40 @@ real_find (EphyFindToolbarPrivate *priv, return EPHY_FIND_FOUND; } +static gboolean +do_search (EphyFindToolbar *toolbar) +{ + EphyFindToolbarPrivate *priv = toolbar->priv; + EphyEmbedFindResult result; + + priv->find_source_id = 0; + + ephy_find_toolbar_mark_matches (toolbar); + + result = real_find (priv, TRUE); + set_status (toolbar, result); + + return FALSE; +} + static void entry_changed_cb (GtkEntry *entry, EphyFindToolbar *toolbar) { EphyFindToolbarPrivate *priv = toolbar->priv; - EphyEmbedFindResult result; g_free (priv->find_string); priv->find_string = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->entry))); - ephy_find_toolbar_mark_matches (toolbar); + if (priv->find_source_id != 0) { + g_source_remove (priv->find_source_id); + priv->find_source_id = 0; + } - result = real_find (priv, TRUE); - set_status (toolbar, result); + if (strlen (priv->find_string) == 0) + return; + + priv->find_source_id = g_timeout_add (300, (GSourceFunc)do_search, toolbar); } static gboolean @@ -612,6 +633,12 @@ ephy_find_toolbar_dispose (GObject *object) priv->find_again_source_id = 0; } + if (priv->find_source_id != 0) + { + g_source_remove (priv->find_source_id); + priv->find_source_id = 0; + } + G_OBJECT_CLASS (ephy_find_toolbar_parent_class)->dispose (object); } -- cgit v1.2.3