[evince] Remove EggFindBar and use GtkSearchBar with EvSearchBox instead



commit d37358b195190f298f9e1a2593398110c63a8d4b
Author: Carlos Garcia Campos <cgarcia igalia com>
Date:   Tue Apr 7 14:58:03 2015 +0200

    Remove EggFindBar and use GtkSearchBar with EvSearchBox instead

 po/POTFILES.in     |    1 -
 shell/Makefile.am  |    2 -
 shell/eggfindbar.c |  827 ----------------------------------------------------
 shell/eggfindbar.h |   89 ------
 shell/ev-window.c  |  381 ++++++++-----------------
 5 files changed, 120 insertions(+), 1180 deletions(-)
---
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 68d3a6c..2ad581e 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -40,7 +40,6 @@ previewer/ev-previewer.c
 previewer/ev-previewer-window.c
 properties/ev-properties-main.c
 properties/ev-properties-view.c
-shell/eggfindbar.c
 shell/ev-annotation-properties-dialog.c
 shell/ev-application.c
 shell/ev-history.c
diff --git a/shell/Makefile.am b/shell/Makefile.am
index debb80b..0c7e5b8 100644
--- a/shell/Makefile.am
+++ b/shell/Makefile.am
@@ -7,8 +7,6 @@ libexec_PROGRAMS = evinced
 endif
 
 evince_SOURCES=                                \
-       eggfindbar.c                    \
-       eggfindbar.h                    \
        ev-annotation-properties-dialog.h \
        ev-annotation-properties-dialog.c \
        ev-bookmarks.h                  \
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 7092d85..f9802ae 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -41,7 +41,6 @@
 #include <gio/gio.h>
 #include <gtk/gtk.h>
 
-#include "eggfindbar.h"
 #include "ev-find-sidebar.h"
 
 #include "ev-application.h"
@@ -89,6 +88,7 @@
 #include "ev-toolbar.h"
 #include "ev-bookmarks.h"
 #include "ev-recent-view.h"
+#include "ev-search-box.h"
 
 #ifdef ENABLE_DBUS
 #include "ev-gdbus-generated.h"
@@ -129,7 +129,8 @@ struct _EvWindowPrivate {
        GtkWidget *hpaned;
        GtkWidget *view_box;
        GtkWidget *sidebar;
-       GtkWidget *find_bar;
+       GtkWidget *search_box;
+       GtkWidget *search_bar;
        GtkWidget *scrolled_window;
        GtkWidget *view;
        GtkWidget *loading_message;
@@ -211,7 +212,6 @@ struct _EvWindowPrivate {
        EvJob            *reload_job;
        EvJob            *thumbnail_job;
        EvJob            *save_job;
-       EvJob            *find_job;
 
        /* Printing */
        GQueue           *print_queue;
@@ -276,8 +276,6 @@ struct _EvWindowPrivate {
 #define FULLSCREEN_POPUP_TIMEOUT 2
 #define FULLSCREEN_TRANSITION_DURATION 1000 /* in milliseconds */
 
-#define FIND_PAGE_RATE_REFRESH 100
-
 static const gchar *document_print_settings[] = {
        GTK_PRINT_SETTINGS_COLLATE,
        GTK_PRINT_SETTINGS_REVERSE,
@@ -352,10 +350,6 @@ static void        view_handle_link_cb                     (EvView           *view,
 static void     activate_link_cb                        (GObject          *object,
                                                         EvLink           *link,
                                                         EvWindow         *window);
-static void     ev_window_update_find_status_message    (EvWindow         *ev_window);
-static void     find_bar_search_changed_cb              (EggFindBar       *find_bar,
-                                                        GParamSpec       *param,
-                                                        EvWindow         *ev_window);
 static void     view_external_link_cb                   (EvWindow         *window,
                                                         EvLinkAction     *action);
 static void     ev_window_load_file_remote              (EvWindow         *ev_window,
@@ -372,7 +366,6 @@ static void     ev_window_setup_bookmarks               (EvWindow         *windo
 static void     ev_window_show_find_bar                 (EvWindow         *ev_window,
                                                         gboolean          restart);
 static void     ev_window_close_find_bar                (EvWindow         *ev_window);
-static void     ev_window_clear_find_job                (EvWindow         *ev_window);
 static void     ev_window_destroy_recent_view           (EvWindow         *ev_window);
 static void     recent_view_item_activated_cb           (EvRecentView     *recent_view,
                                                          const char       *uri,
@@ -421,7 +414,7 @@ ev_window_update_actions_sensitivity (EvWindow *ev_window)
        gboolean override_restrictions = TRUE;
        gboolean can_get_text = FALSE;
        gboolean can_find = FALSE;
-       gboolean can_find_in_page = FALSE;
+       gboolean can_find_in_page;
        gboolean presentation_mode;
        gboolean recent_view_mode;
        gboolean dual_mode = FALSE;
@@ -553,8 +546,7 @@ ev_window_update_actions_sensitivity (EvWindow *ev_window)
        ev_window_set_action_enabled (ev_window, "annot-properties", !recent_view_mode);
        ev_window_set_action_enabled (ev_window, "remove-annot", !recent_view_mode);
 
-       can_find_in_page = (ev_window->priv->find_job &&
-                           ev_job_find_has_results (EV_JOB_FIND (ev_window->priv->find_job)));
+       can_find_in_page = ev_search_box_has_results (EV_SEARCH_BOX (ev_window->priv->search_box));
 
        ev_window_set_action_enabled (ev_window, "copy",
                                        has_pages &&
@@ -626,18 +618,16 @@ static void
 update_chrome_visibility (EvWindow *window)
 {
        EvWindowPrivate *priv = window->priv;
-       gboolean toolbar, findbar, sidebar;
+       gboolean toolbar, sidebar;
        gboolean presentation;
 
        presentation = EV_WINDOW_IS_PRESENTATION (window);
 
        toolbar = ((priv->chrome & EV_CHROME_TOOLBAR) != 0  || 
                   (priv->chrome & EV_CHROME_RAISE_TOOLBAR) != 0) && !presentation;
-       findbar = (priv->chrome & EV_CHROME_FINDBAR) != 0;
        sidebar = (priv->chrome & EV_CHROME_SIDEBAR) != 0 && priv->document && !presentation;
 
        set_widget_visibility (priv->toolbar, toolbar);
-       set_widget_visibility (priv->find_bar, findbar);
        set_widget_visibility (priv->sidebar, sidebar);
 }
 
@@ -969,8 +959,6 @@ ev_window_page_changed_cb (EvWindow        *ev_window,
 {
        ev_window_update_actions_sensitivity (ev_window);
 
-       ev_window_update_find_status_message (ev_window);
-
        if (ev_window->priv->metadata && !ev_window_is_empty (ev_window))
                ev_metadata_set_int (ev_window->priv->metadata, "page", new_page);
 }
@@ -1543,27 +1531,20 @@ ev_window_setup_document (EvWindow *ev_window)
        info = ev_document_get_info (document);
        update_document_mode (ev_window, info->mode);
 
-       if (EV_IS_DOCUMENT_FIND (document)) {
-               EvFindOptions options;
-
-               options = ev_document_find_get_supported_options (EV_DOCUMENT_FIND (document));
-               egg_find_bar_enable_case_sensitive (EGG_FIND_BAR (ev_window->priv->find_bar),
-                                                   options & EV_FIND_CASE_SENSITIVE);
-               egg_find_bar_enable_whole_words_only (EGG_FIND_BAR (ev_window->priv->find_bar),
-                                                     options & EV_FIND_WHOLE_WORDS_ONLY);
-
-               if (ev_window->priv->search_string &&
-                   !EV_WINDOW_IS_PRESENTATION (ev_window)) {
-                       ev_window_show_find_bar (ev_window, FALSE);
-                       egg_find_bar_set_search_string (EGG_FIND_BAR (ev_window->priv->find_bar), 
ev_window->priv->search_string);
-               }
+       if (ev_window->priv->search_string && EV_IS_DOCUMENT_FIND (document) &&
+           !EV_WINDOW_IS_PRESENTATION (ev_window)) {
+               GtkSearchEntry *entry;
 
-               g_clear_pointer (&ev_window->priv->search_string, g_free);
+               ev_window_show_find_bar (ev_window, FALSE);
+               entry = ev_search_box_get_entry (EV_SEARCH_BOX (ev_window->priv->search_box));
+               gtk_entry_set_text (GTK_ENTRY (entry), ev_window->priv->search_string);
        }
 
+       g_clear_pointer (&ev_window->priv->search_string, g_free);
+
        if (EV_WINDOW_IS_PRESENTATION (ev_window))
                gtk_widget_grab_focus (ev_window->priv->presentation_view);
-       else if (!gtk_widget_get_visible (ev_window->priv->find_bar))
+       else if (!gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (ev_window->priv->search_bar)))
                gtk_widget_grab_focus (ev_window->priv->view);
 
        return FALSE;
@@ -1851,11 +1832,9 @@ ev_window_reload_job_cb (EvJob    *job,
        }
 
        /* Restart the search after reloading */
-       if (gtk_widget_is_visible (ev_window->priv->find_bar)) {
-               find_bar_search_changed_cb (EGG_FIND_BAR (ev_window->priv->find_bar),
-                                           NULL, ev_window);
-       }
-       
+       if (gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (ev_window->priv->search_bar)))
+               ev_search_box_restart (EV_SEARCH_BOX (ev_window->priv->search_box));
+
        ev_window_clear_reload_job (ev_window);
        ev_window->priv->in_reload = FALSE;
 }
@@ -2304,9 +2283,11 @@ ev_window_open_document (EvWindow       *ev_window,
 
        if (search_string && EV_IS_DOCUMENT_FIND (document) &&
            mode != EV_WINDOW_MODE_PRESENTATION) {
+               GtkSearchEntry *entry;
+
                ev_window_show_find_bar (ev_window, FALSE);
-               egg_find_bar_set_search_string (EGG_FIND_BAR (ev_window->priv->find_bar),
-                                               search_string);
+               entry = ev_search_box_get_entry (EV_SEARCH_BOX (ev_window->priv->search_box));
+               gtk_entry_set_text (GTK_ENTRY (entry), search_string);
        }
 
        /* Create a monitor for the document */
@@ -2323,7 +2304,6 @@ ev_window_open_recent_view (EvWindow *ev_window)
                return;
 
        gtk_widget_hide (ev_window->priv->hpaned);
-       gtk_widget_hide (ev_window->priv->find_bar);
 
        ev_window->priv->recent_view = EV_RECENT_VIEW (ev_recent_view_new ());
        g_signal_connect_object (ev_window->priv->recent_view,
@@ -3951,16 +3931,16 @@ ev_window_cmd_edit_find_next (GSimpleAction *action,
                              gpointer       user_data)
 {
        EvWindow *ev_window = user_data;
-       gboolean find_bar_hidden;
+       gboolean search_mode_enabled;
 
        if (EV_WINDOW_IS_PRESENTATION (ev_window))
                return;
 
-       find_bar_hidden = !gtk_widget_get_visible (ev_window->priv->find_bar);
+       search_mode_enabled = gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (ev_window->priv->search_bar));
        ev_window_show_find_bar (ev_window, FALSE);
 
        /* Use idle to make sure view allocation happens before find */
-       if (find_bar_hidden)
+       if (!search_mode_enabled)
                g_idle_add ((GSourceFunc)find_next_idle_cb, ev_window);
        else
                ev_window_find_next (ev_window);
@@ -3979,16 +3959,16 @@ ev_window_cmd_edit_find_previous (GSimpleAction *action,
                                  gpointer       user_data)
 {
        EvWindow *ev_window = user_data;
-       gboolean find_bar_hidden;
+       gboolean search_mode_enabled;
 
        if (EV_WINDOW_IS_PRESENTATION (ev_window))
                return;
 
-       find_bar_hidden = !gtk_widget_get_visible (ev_window->priv->find_bar);
+       search_mode_enabled = gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (ev_window->priv->search_bar));
        ev_window_show_find_bar (ev_window, FALSE);
 
        /* Use idle to make sure view allocation happens before find */
-       if (find_bar_hidden)
+       if (!search_mode_enabled)
                g_idle_add ((GSourceFunc)find_previous_idle_cb, ev_window);
        else
                ev_window_find_previous (ev_window);
@@ -4525,7 +4505,6 @@ ev_window_cmd_edit_save_settings (GSimpleAction *action,
        EvDocumentModel *model = priv->model;
        GSettings       *settings = priv->default_settings;
        EvSizingMode     sizing_mode;
-       EvView          *view = EV_VIEW (ev_window->priv->view);
 
        g_settings_set_boolean (settings, "continuous",
                                ev_document_model_get_continuous (model));
@@ -4755,7 +4734,7 @@ ev_window_cmd_escape (GSimpleAction *action,
        EvWindow *window = user_data;
        ev_view_autoscroll_stop (EV_VIEW (window->priv->view));
 
-       if (gtk_widget_get_visible (window->priv->find_bar))
+       if (gtk_search_bar_get_search_mode (GTK_SEARCH_BAR (window->priv->search_bar)))
                ev_window_close_find_bar (window);
        else if (ev_document_model_get_fullscreen (window->priv->model))
                ev_window_stop_fullscreen (window, TRUE);
@@ -5166,198 +5145,73 @@ recent_view_item_activated_cb (EvRecentView *recent_view,
 }
 
 static void
-ev_window_update_find_status_message (EvWindow *ev_window)
+search_entry_stop_search_cb (GtkSearchEntry *entry,
+                            EvWindow       *ev_window)
 {
-       gchar *message;
-
-       if (!ev_window->priv->find_job)
-               return;
-       
-       if (ev_job_is_finished (ev_window->priv->find_job)) {
-               EvJobFind *job_find = EV_JOB_FIND (ev_window->priv->find_job);
-
-               if (ev_job_find_has_results (job_find)) {
-                       gint n_results;
-
-                       n_results = ev_job_find_get_n_results (job_find,
-                                                              ev_document_model_get_page 
(ev_window->priv->model));
-                       /* TRANS: Sometimes this could be better translated as
-                          "%d hit(s) on this page".  Therefore this string
-                          contains plural cases. */
-                       message = g_strdup_printf (ngettext ("%d found on this page",
-                                                            "%d found on this page",
-                                                            n_results),
-                                                  n_results);
-               } else {
-                       message = g_strdup (_("Not found"));
-               }
-       } else {
-               gdouble percent;
-
-               percent = ev_job_find_get_progress (EV_JOB_FIND (ev_window->priv->find_job));
-               message = g_strdup_printf (_("%3d%% remaining to search"),
-                                          (gint) ((1.0 - percent) * 100));
-       }
-       
-       egg_find_bar_set_status_text (EGG_FIND_BAR (ev_window->priv->find_bar), message);
-       g_free (message);
+       ev_window_close_find_bar (ev_window);
 }
 
 static void
-ev_window_find_job_finished_cb (EvJobFind *job,
-                               EvWindow  *ev_window)
+search_started_cb (EvSearchBox *search_box,
+                  EvJobFind   *job,
+                  EvWindow    *ev_window)
 {
-       ev_window_update_find_status_message (ev_window);
-       ev_window_clear_find_job (ev_window);
-}
+       if (!ev_window->priv->document || !EV_IS_DOCUMENT_FIND (ev_window->priv->document))
+               return;
 
-/**
-  * find_bar_check_refresh_rate:
-  *
-  * Check whether the current page should trigger an status update in the
-  * find bar given its document size and the rate page.
-  *
-  * For documents with less pages than page_rate, it will return TRUE for
-  * every page.  For documents with more pages, it will return TRUE every
-  * ((total_pages / page rate) + 1).
-  *
-  * This slow down the update rate in the GUI, making the search more
-  * responsive.
-  */
-static inline gboolean
-find_check_refresh_rate (EvJobFind *job, gint page_rate)
-{
-       return ((job->current_page % (gint)((job->n_pages / page_rate) + 1)) == 0);
-}
-
-static void
-ev_window_find_job_updated_cb (EvJobFind *job,
-                              gint       page,
-                              EvWindow  *ev_window)
-{
-       /* Adjust the status update when searching for a term according
-        * to the document size in pages.  For documents smaller (or equal)
-        * than 100 pages, it will be updated in every page.  A value of
-        * 100 is enough to update the find bar every 1%.
-        */
-       if (find_check_refresh_rate (job, FIND_PAGE_RATE_REFRESH)) {
-               ev_window_update_actions_sensitivity (ev_window);
-               ev_window_update_find_status_message (ev_window);
-               ev_find_sidebar_update (EV_FIND_SIDEBAR (ev_window->priv->find_sidebar));
-       }
+       ev_view_find_search_changed (EV_VIEW (ev_window->priv->view));
+       ev_view_find_started (EV_VIEW (ev_window->priv->view), job);
+       ev_find_sidebar_start (EV_FIND_SIDEBAR (ev_window->priv->find_sidebar), job);
 }
 
 static void
-ev_window_clear_find_job (EvWindow *ev_window)
+search_updated_cb (EvSearchBox *search_box,
+                  gint         page,
+                  EvWindow    *ev_window)
 {
-       if (ev_window->priv->find_job != NULL) {
-               if (!ev_job_is_finished (ev_window->priv->find_job))
-                       ev_job_cancel (ev_window->priv->find_job);
-
-               g_signal_handlers_disconnect_by_func (ev_window->priv->find_job,
-                                                     ev_window_find_job_finished_cb,
-                                                     ev_window);
-               g_signal_handlers_disconnect_by_func (ev_window->priv->find_job,
-                                                     ev_window_find_job_updated_cb,
-                                                     ev_window);
-               g_object_unref (ev_window->priv->find_job);
-               ev_window->priv->find_job = NULL;
-       }
+       ev_window_update_actions_sensitivity (ev_window);
+       ev_find_sidebar_update (EV_FIND_SIDEBAR (ev_window->priv->find_sidebar));
 }
 
 static void
-find_bar_previous_cb (EggFindBar *find_bar,
-                     EvWindow   *ev_window)
+search_cleared_cb (EvSearchBox *search_box,
+                  EvWindow    *ev_window)
 {
-       ev_window_find_previous (ev_window);
-}
 
-static void
-find_bar_next_cb (EggFindBar *find_bar,
-                 EvWindow   *ev_window)
-{
-       ev_window_find_next (ev_window);
-}
+       ev_window_update_actions_sensitivity (ev_window);
+       ev_find_sidebar_clear (EV_FIND_SIDEBAR (ev_window->priv->find_sidebar));
 
-static void
-find_bar_close_cb (EggFindBar *find_bar,
-                  EvWindow   *ev_window)
-{
-       ev_window_close_find_bar (ev_window);
+       ev_view_find_search_changed (EV_VIEW (ev_window->priv->view));
+       gtk_widget_queue_draw (GTK_WIDGET (ev_window->priv->view));
 }
 
 static void
-ev_window_search_start (EvWindow *ev_window)
+search_previous_cb (EvSearchBox *search_box,
+                   EvWindow    *ev_window)
 {
-       EggFindBar *find_bar = EGG_FIND_BAR (ev_window->priv->find_bar);
-       const char *search_string;
-
-       if (!ev_window->priv->document || !EV_IS_DOCUMENT_FIND (ev_window->priv->document))
-               return;
-
-       search_string = egg_find_bar_get_search_string (find_bar);
-
-       ev_window_clear_find_job (ev_window);
-       if (search_string && search_string[0]) {
-               EvFindOptions options = EV_FIND_DEFAULT;
-
-               ev_window->priv->find_job = ev_job_find_new (ev_window->priv->document,
-                                                            ev_document_model_get_page 
(ev_window->priv->model),
-                                                            ev_document_get_n_pages 
(ev_window->priv->document),
-                                                            search_string,
-                                                            FALSE);
-
-               if (egg_find_bar_get_case_sensitive (find_bar))
-                       options |= EV_FIND_CASE_SENSITIVE;
-               if (egg_find_bar_get_whole_words_only (find_bar))
-                       options |= EV_FIND_WHOLE_WORDS_ONLY;
-               ev_job_find_set_options (EV_JOB_FIND (ev_window->priv->find_job), options);
-
-               ev_view_find_started (EV_VIEW (ev_window->priv->view), EV_JOB_FIND 
(ev_window->priv->find_job));
-               ev_find_sidebar_start (EV_FIND_SIDEBAR (ev_window->priv->find_sidebar),
-                                      EV_JOB_FIND (ev_window->priv->find_job));
-
-               g_signal_connect (ev_window->priv->find_job, "finished",
-                                 G_CALLBACK (ev_window_find_job_finished_cb),
-                                 ev_window);
-               g_signal_connect (ev_window->priv->find_job, "updated",
-                                 G_CALLBACK (ev_window_find_job_updated_cb),
-                                 ev_window);
-               ev_job_scheduler_push_job (ev_window->priv->find_job, EV_JOB_PRIORITY_NONE);
-       } else {
-               ev_window_update_actions_sensitivity (ev_window);
-               egg_find_bar_set_status_text (find_bar, NULL);
-               ev_find_sidebar_clear (EV_FIND_SIDEBAR (ev_window->priv->find_sidebar));
-               gtk_widget_queue_draw (GTK_WIDGET (ev_window->priv->view));
-       }
+       ev_window_find_previous (ev_window);
 }
 
 static void
-find_bar_search_changed_cb (EggFindBar *find_bar,
-                           GParamSpec *param,
-                           EvWindow   *ev_window)
+search_next_cb (EvSearchBox *search_box,
+               EvWindow    *ev_window)
 {
-       /* Either the string or case sensitivity could have changed. */
-       ev_view_find_search_changed (EV_VIEW (ev_window->priv->view));
-       ev_window_search_start (ev_window);
+       ev_window_find_next (ev_window);
 }
 
 static void
-find_bar_visibility_changed_cb (EggFindBar *find_bar,
-                               GParamSpec *param,
-                               EvWindow   *ev_window)
+search_bar_search_mode_enabled_changed (GtkSearchBar *search_bar,
+                                       GParamSpec   *param,
+                                       EvWindow     *ev_window)
 {
-       gboolean visible;
+       gboolean enabled = gtk_search_bar_get_search_mode (search_bar);
 
-       visible = gtk_widget_get_visible (GTK_WIDGET (find_bar));
-
-       if (ev_window->priv->document &&
-           EV_IS_DOCUMENT_FIND (ev_window->priv->document)) {
-               ev_view_find_set_highlight_search (EV_VIEW (ev_window->priv->view), visible);
-               ev_window_update_actions_sensitivity (ev_window);
+       ev_view_find_set_highlight_search (EV_VIEW (ev_window->priv->view), enabled);
+       ev_window_update_actions_sensitivity (ev_window);
 
-               if (!visible)
-                       egg_find_bar_set_status_text (EGG_FIND_BAR (ev_window->priv->find_bar), NULL);
+       if (!enabled) {
+               /* Handle the case of search bar close button clicked */
+               ev_window_close_find_bar (ev_window);
        }
 }
 
@@ -5365,8 +5219,8 @@ static void
 ev_window_show_find_bar (EvWindow *ev_window,
                         gboolean  restart)
 {
-       if (gtk_widget_get_visible (ev_window->priv->find_bar)) {
-               gtk_widget_grab_focus (ev_window->priv->find_bar);
+       if (gtk_widget_get_visible (ev_window->priv->find_sidebar)) {
+               gtk_widget_grab_focus (ev_window->priv->search_box);
                return;
        }
 
@@ -5386,19 +5240,24 @@ ev_window_show_find_bar (EvWindow *ev_window,
                         ev_window->priv->find_sidebar, FALSE, FALSE);
        gtk_widget_show (ev_window->priv->find_sidebar);
 
-       update_chrome_flag (ev_window, EV_CHROME_FINDBAR, TRUE);
-       update_chrome_visibility (ev_window);
-       gtk_widget_grab_focus (ev_window->priv->find_bar);
+
+       gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (ev_window->priv->search_bar), TRUE);
+       gtk_widget_grab_focus (ev_window->priv->search_box);
        g_action_group_change_action_state (G_ACTION_GROUP (ev_window), "toggle-find", g_variant_new_boolean 
(TRUE));
 
-       if (restart && ev_window->priv->find_job)
-               ev_window_find_restart (ev_window);
+       if (restart) {
+               GtkSearchEntry *entry = ev_search_box_get_entry (EV_SEARCH_BOX (ev_window->priv->search_box));
+               const char     *search_string = gtk_entry_get_text (GTK_ENTRY (entry));
+
+               if (search_string && search_string[0])
+                       ev_window_find_restart (ev_window);
+       }
 }
 
 static void
 ev_window_close_find_bar (EvWindow *ev_window)
 {
-       if (!gtk_widget_get_visible (ev_window->priv->find_bar))
+       if (!gtk_widget_get_visible (ev_window->priv->find_sidebar))
                return;
 
        g_object_ref (ev_window->priv->find_sidebar);
@@ -5406,9 +5265,9 @@ ev_window_close_find_bar (EvWindow *ev_window)
                              ev_window->priv->find_sidebar);
        gtk_paned_pack1 (GTK_PANED (ev_window->priv->hpaned),
                         ev_window->priv->sidebar, FALSE, FALSE);
+       gtk_widget_hide (ev_window->priv->find_sidebar);
 
-       update_chrome_flag (ev_window, EV_CHROME_FINDBAR, FALSE);
-       update_chrome_visibility (ev_window);
+       gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (ev_window->priv->search_bar), FALSE);
        gtk_widget_grab_focus (ev_window->priv->view);
        g_action_group_change_action_state (G_ACTION_GROUP (ev_window), "toggle-find", g_variant_new_boolean 
(FALSE));
 
@@ -5662,10 +5521,6 @@ ev_window_dispose (GObject *object)
                ev_window_clear_thumbnail_job (window);
        }
 
-       if (priv->find_job) {
-               ev_window_clear_find_job (window);
-       }
-       
        if (priv->local_uri) {
                ev_window_clear_local_uri (window);
                priv->local_uri = NULL;
@@ -5702,14 +5557,6 @@ ev_window_dispose (GObject *object)
                priv->attach_list = NULL;
        }
 
-       if (priv->find_bar) {
-               g_signal_handlers_disconnect_by_func
-                       (window->priv->find_bar,
-                        G_CALLBACK (find_bar_close_cb),
-                        window);
-               priv->find_bar = NULL;
-       }
-
        if (priv->uri) {
                g_free (priv->uri);
                priv->uri = NULL;
@@ -6834,6 +6681,7 @@ ev_window_init (EvWindow *ev_window)
        GObject *mpkeys;
        guint page_cache_mb;
        gboolean allow_links_change_zoom;
+       GtkEntry *search_entry;
 #ifdef ENABLE_DBUS
        GDBusConnection *connection;
        static gint window_id = 0;
@@ -6931,13 +6779,24 @@ ev_window_init (EvWindow *ev_window)
                          G_CALLBACK (activate_link_cb),
                          ev_window);
 
-       /* Find Bar */
-       ev_window->priv->find_bar = egg_find_bar_new ();
-       gtk_style_context_add_class (gtk_widget_get_style_context (ev_window->priv->find_bar),
-                                    GTK_STYLE_CLASS_PRIMARY_TOOLBAR);
+       /* Search Bar */
+       ev_window->priv->search_bar = gtk_search_bar_new ();
+       gtk_search_bar_set_show_close_button (GTK_SEARCH_BAR (ev_window->priv->search_bar), TRUE);
+
+       ev_window->priv->search_box = ev_search_box_new (ev_window->priv->model);
+       search_entry = GTK_ENTRY (ev_search_box_get_entry (EV_SEARCH_BOX (ev_window->priv->search_box)));
+       gtk_entry_set_width_chars (search_entry, 32);
+       gtk_entry_set_max_length (search_entry, 512);
+       gtk_container_add (GTK_CONTAINER (ev_window->priv->search_bar),
+                          ev_window->priv->search_box);
+       gtk_widget_show (ev_window->priv->search_box);
+
+       /* We don't use gtk_search_bar_connect_entry, because it clears the entry when the
+        * search is closed, but we want to keep the current search.
+        */
        gtk_box_pack_start (GTK_BOX (ev_window->priv->main_box),
-                           ev_window->priv->find_bar,
-                           FALSE, TRUE, 0);
+                           ev_window->priv->search_bar, FALSE, TRUE, 0);
+       gtk_widget_show (ev_window->priv->search_bar);
 
        /* Add the main area */
        ev_window->priv->hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL);
@@ -7170,33 +7029,33 @@ ev_window_init (EvWindow *ev_window)
                          ev_window);
 
        /* Connect to find bar signals */
-       g_signal_connect (ev_window->priv->find_bar,
-                         "previous",
-                         G_CALLBACK (find_bar_previous_cb),
+       g_signal_connect (ev_window->priv->search_box,
+                         "started",
+                         G_CALLBACK (search_started_cb),
                          ev_window);
-       g_signal_connect (ev_window->priv->find_bar,
-                         "next",
-                         G_CALLBACK (find_bar_next_cb),
+       g_signal_connect (ev_window->priv->search_box,
+                         "updated",
+                         G_CALLBACK (search_updated_cb),
                          ev_window);
-       g_signal_connect (ev_window->priv->find_bar,
-                         "close",
-                         G_CALLBACK (find_bar_close_cb),
+       g_signal_connect (ev_window->priv->search_box,
+                         "cleared",
+                         G_CALLBACK (search_cleared_cb),
                          ev_window);
-       g_signal_connect (ev_window->priv->find_bar,
-                         "notify::search-string",
-                         G_CALLBACK (find_bar_search_changed_cb),
+       g_signal_connect (ev_window->priv->search_box,
+                         "previous",
+                         G_CALLBACK (search_previous_cb),
                          ev_window);
-       g_signal_connect (ev_window->priv->find_bar,
-                         "notify::case-sensitive",
-                         G_CALLBACK (find_bar_search_changed_cb),
+       g_signal_connect (ev_window->priv->search_box,
+                         "next",
+                         G_CALLBACK (search_next_cb),
                          ev_window);
-       g_signal_connect (ev_window->priv->find_bar,
-                         "notify::whole-words-only",
-                         G_CALLBACK (find_bar_search_changed_cb),
+       g_signal_connect (search_entry,
+                         "stop-search",
+                         G_CALLBACK (search_entry_stop_search_cb),
                          ev_window);
-       g_signal_connect (ev_window->priv->find_bar,
-                         "notify::visible",
-                         G_CALLBACK (find_bar_visibility_changed_cb),
+       g_signal_connect (ev_window->priv->search_bar,
+                         "notify::search-mode-enabled",
+                         G_CALLBACK (search_bar_search_mode_enabled_changed),
                          ev_window);
 
        /* Popups */


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