aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGustavo Noronha Silva <gns@gnome.org>2009-12-26 09:58:59 +0800
committerGustavo Noronha Silva <gns@gnome.org>2010-01-16 05:51:34 +0800
commitb573119b1338722ba9f6016b72064f6fcf681dfc (patch)
tree0ad68177ff112b923ad67ae3d68cdbbb618d68ee
parentbac714eab6253cf088761501117937e9b48bcea9 (diff)
downloadgsoc2013-epiphany-b573119b1338722ba9f6016b72064f6fcf681dfc.tar.gz
gsoc2013-epiphany-b573119b1338722ba9f6016b72064f6fcf681dfc.tar.zst
gsoc2013-epiphany-b573119b1338722ba9f6016b72064f6fcf681dfc.zip
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
-rw-r--r--src/ephy-find-toolbar.c35
1 files changed, 31 insertions, 4 deletions
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);
}