[devhelp/webkit2-for-3.4: 9/9] Port search to WebKit2



commit 7306013f206f6732243c695be0c6f54a679100bb
Author: Sergio Villar Senin <svillar igalia com>
Date:   Fri Mar 2 14:58:00 2012 +0100

    Port search to WebKit2

 src/dh-window.c |   91 +++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 58 insertions(+), 33 deletions(-)
---
diff --git a/src/dh-window.c b/src/dh-window.c
index 9bc3c1d..f5a5206 100644
--- a/src/dh-window.c
+++ b/src/dh-window.c
@@ -161,6 +161,7 @@ static void           window_tab_set_title           (DhWindow        *window,
                                                       const gchar     *title);
 static void           window_close_tab               (DhWindow *window,
                                                       gint      page_num);
+static gboolean       do_search                      (DhWindow *window);
 
 G_DEFINE_TYPE (DhWindow, dh_window, GTK_TYPE_WINDOW);
 
@@ -281,18 +282,22 @@ static void
 window_activate_find (GtkAction *action,
                       DhWindow  *window)
 {
-#ifdef HAVE_WEBKIT2
-/* TODO: Find API */
-#else
         DhWindowPriv  *priv;
+#ifndef HAVE_WEBKIT2
         WebKitWebView *web_view;
-
+#endif
         priv = window->priv;
-        web_view = window_get_active_web_view (window);
 
         gtk_widget_show (priv->findbar);
         gtk_widget_grab_focus (priv->findbar);
 
+#ifdef HAVE_WEBKIT2
+        /* The behaviour for WebKit1 is to re-enable highlighting without
+           starting a new search. WebKit2 API does not allow that
+           without invoking a new search. */
+        do_search (window);
+#else
+        web_view = window_get_active_web_view (window);
         webkit_web_view_set_highlight_text_matches (web_view, TRUE);
 #endif /* HAVE_WEBKIT2 */
 }
@@ -1509,14 +1514,21 @@ window_web_view_button_press_event_cb (WebKitWebView  *web_view,
 static gboolean
 do_search (DhWindow *window)
 {
+        DhWindowPriv         *priv = window->priv;
 #ifdef HAVE_WEBKIT2
-/* TODO: Find API */
+        WebKitFindController *find_controller;
+        guint                 find_options = WEBKIT_FIND_OPTIONS_WRAP_AROUND;
+        const gchar          *search_text;
+
+        find_controller = webkit_web_view_get_find_controller (window_get_active_web_view (window));
+        if (!egg_find_bar_get_case_sensitive (EGG_FIND_BAR (priv->findbar)))
+                find_options |= WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE;
+
+        search_text = egg_find_bar_get_search_string (EGG_FIND_BAR (priv->findbar));
+        webkit_find_controller_search (find_controller, search_text, find_options, G_MAXUINT);
 #else
-        DhWindowPriv  *priv = window->priv;
         WebKitWebView *web_view;
 
-        priv->find_source_id = 0;
-
         web_view = window_get_active_web_view (window);
 
         webkit_web_view_unmark_text_matches (web_view);
@@ -1532,6 +1544,8 @@ do_search (DhWindow *window)
                 TRUE, TRUE);
 #endif /* HAVE_WEBKIT2 */
 
+        priv->find_source_id = 0;
+
 	return FALSE;
 }
 
@@ -1555,6 +1569,9 @@ window_find_case_changed_cb (GObject    *object,
                              GParamSpec *pspec,
                              DhWindow   *window)
 {
+#ifdef HAVE_WEBKIT2
+        do_search (window);
+#else
         DhWindowPriv  *priv = window->priv;;
         WebKitWebView *view;
         const gchar   *string;
@@ -1564,9 +1581,7 @@ window_find_case_changed_cb (GObject    *object,
 
         string = egg_find_bar_get_search_string (EGG_FIND_BAR (priv->findbar));
         case_sensitive = egg_find_bar_get_case_sensitive (EGG_FIND_BAR (priv->findbar));
-#ifdef HAVE_WEBKIT2
-/* TODO: Find API */
-#else
+
         webkit_web_view_unmark_text_matches (view);
         webkit_web_view_mark_text_matches (view, string, case_sensitive, 0);
         webkit_web_view_set_highlight_text_matches (view, TRUE);
@@ -1577,20 +1592,23 @@ static void
 window_find_next_cb (GtkEntry *entry,
                      DhWindow *window)
 {
-        DhWindowPriv  *priv = window->priv;
-        WebKitWebView *view;
-        const gchar   *string;
-        gboolean       case_sensitive;
-
+        DhWindowPriv         *priv = window->priv;
+        WebKitWebView        *view;
+#ifdef HAVE_WEBKIT2
+        WebKitFindController *find_controller;
+#else
+        const gchar          *string;
+        gboolean              case_sensitive;
+#endif
         view = window_get_active_web_view (window);
 
         gtk_widget_show (priv->findbar);
-
-        string = egg_find_bar_get_search_string (EGG_FIND_BAR (priv->findbar));
-        case_sensitive = egg_find_bar_get_case_sensitive (EGG_FIND_BAR (priv->findbar));
 #ifdef HAVE_WEBKIT2
-/* TODO: Find API */
+        find_controller = webkit_web_view_get_find_controller (view);
+        webkit_find_controller_search_next(find_controller);
 #else
+        string = egg_find_bar_get_search_string (EGG_FIND_BAR (priv->findbar));
+        case_sensitive = egg_find_bar_get_case_sensitive (EGG_FIND_BAR (priv->findbar));
         webkit_web_view_search_text (view, string, case_sensitive, TRUE, TRUE);
 #endif
 }
@@ -1599,20 +1617,24 @@ static void
 window_find_previous_cb (GtkEntry *entry,
                          DhWindow *window)
 {
-        DhWindowPriv  *priv = window->priv;
-        WebKitWebView *view;
-        const gchar   *string;
-        gboolean       case_sensitive;
-
+        DhWindowPriv         *priv = window->priv;
+        WebKitWebView        *view;
+#ifdef HAVE_WEBKIT2
+        WebKitFindController *find_controller;
+#else
+        const gchar          *string;
+        gboolean             case_sensitive;
+#endif
         view = window_get_active_web_view (window);
 
         gtk_widget_show (priv->findbar);
 
-        string = egg_find_bar_get_search_string (EGG_FIND_BAR (priv->findbar));
-        case_sensitive = egg_find_bar_get_case_sensitive (EGG_FIND_BAR (priv->findbar));
 #ifdef HAVE_WEBKIT2
-/* TODO: Find API */
+        find_controller = webkit_web_view_get_find_controller (view);
+        webkit_find_controller_search_previous(find_controller);
 #else
+        string = egg_find_bar_get_search_string (EGG_FIND_BAR (priv->findbar));
+        case_sensitive = egg_find_bar_get_case_sensitive (EGG_FIND_BAR (priv->findbar));
         webkit_web_view_search_text (view, string, case_sensitive, FALSE, TRUE);
 #endif
 }
@@ -1621,14 +1643,17 @@ static void
 window_findbar_close_cb (GtkWidget *widget,
                          DhWindow  *window)
 {
-        DhWindowPriv  *priv = window->priv;
-        WebKitWebView *view;
-
+        DhWindowPriv         *priv = window->priv;
+        WebKitWebView        *view;
+#ifdef HAVE_WEBKIT2
+        WebKitFindController *find_controller;
+#endif
         view = window_get_active_web_view (window);
 
         gtk_widget_hide (priv->findbar);
 #ifdef HAVE_WEBKIT2
-/* TODO: Find API */
+        find_controller = webkit_web_view_get_find_controller (view);
+        webkit_find_controller_search_finish (find_controller);
 #else
         webkit_web_view_set_highlight_text_matches (view, FALSE);
 #endif



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]