From cd69cdedb951836ed4a8eb8058651f444de181a3 Mon Sep 17 00:00:00 2001 From: Christian Dywan Date: Tue, 2 Nov 2010 22:14:25 +0100 Subject: [PATCH] Search inline directly when preedit text changes --- toolbars/midori-findbar.c | 35 ++++++++++++++++++++++++++--------- toolbars/midori-findbar.h | 5 +++++ 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/toolbars/midori-findbar.c b/toolbars/midori-findbar.c index edb8f35d..503168de 100644 --- a/toolbars/midori-findbar.c +++ b/toolbars/midori-findbar.c @@ -97,22 +97,29 @@ midori_findbar_case_sensitive (MidoriFindbar* findbar) } void -midori_findbar_find (MidoriFindbar* findbar, - gboolean forward) +midori_findbar_find_text (MidoriFindbar* findbar, + const gchar* text, + gboolean forward) { MidoriBrowser* browser = midori_browser_get_for_widget (GTK_WIDGET (findbar)); - const gchar* text; gboolean case_sensitive; GtkWidget* view; if (!(view = midori_browser_get_current_tab (browser))) return; - text = gtk_entry_get_text (GTK_ENTRY (findbar->find_text)); case_sensitive = midori_findbar_case_sensitive (findbar); midori_view_search_text (MIDORI_VIEW (view), text, case_sensitive, forward); } +void +midori_findbar_find (MidoriFindbar* findbar, + gboolean forward) +{ + const gchar* text = gtk_entry_get_text (GTK_ENTRY (findbar->find_text)); + midori_findbar_find_text (findbar, text, forward); +} + void midori_findbar_invoke (MidoriFindbar* findbar) { @@ -161,20 +168,28 @@ midori_findbar_button_close_clicked_cb (GtkWidget* widget, } static void -midori_findbar_text_changed_cb (GtkWidget* entry, - MidoriFindbar* findbar) +midori_findbar_preedit_changed_cb (GtkWidget* entry, + const gchar* preedit, + MidoriFindbar* findbar) { if (findbar->find_typing) { MidoriBrowser* browser = midori_browser_get_for_widget (entry); GtkWidget* view = midori_browser_get_current_tab (browser); - const gchar* text = gtk_entry_get_text (GTK_ENTRY (entry)); midori_view_unmark_text_matches (MIDORI_VIEW (view)); - if (g_utf8_strlen (text, -1) > 1) - midori_findbar_find (findbar, TRUE); + if (g_utf8_strlen (preedit, -1) > 1) + midori_findbar_find_text (findbar, preedit, TRUE); } } +static void +midori_findbar_text_changed_cb (GtkWidget* entry, + MidoriFindbar* findbar) +{ + const gchar* text = gtk_entry_get_text (GTK_ENTRY (entry)); + midori_findbar_preedit_changed_cb (entry, text, findbar); +} + static gboolean midori_findbar_text_focus_out_event_cb (GtkWidget* entry, GdkEventFocus* event, @@ -227,6 +242,8 @@ midori_findbar_init (MidoriFindbar* findbar) G_CALLBACK (midori_findbar_entry_clear_icon_released_cb), NULL); g_signal_connect (findbar->find_text, "activate", G_CALLBACK (midori_findbar_next_activate_cb), findbar); + g_signal_connect (findbar->find_text, "preedit-changed", + G_CALLBACK (midori_findbar_preedit_changed_cb), findbar); g_signal_connect (findbar->find_text, "changed", G_CALLBACK (midori_findbar_text_changed_cb), findbar); g_signal_connect (findbar->find_text, "focus-out-event", diff --git a/toolbars/midori-findbar.h b/toolbars/midori-findbar.h index fffa497f..e74691c8 100644 --- a/toolbars/midori-findbar.h +++ b/toolbars/midori-findbar.h @@ -42,6 +42,11 @@ void midori_findbar_find (MidoriFindbar* findbar, gboolean forward); +void +midori_findbar_find_text (MidoriFindbar* findbar, + const gchar* text, + gboolean forward); + void midori_findbar_set_can_find (MidoriFindbar* findbar, gboolean can_find);