]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-view.c
Rename error as mdvi_error to avoid symbol conflicts with the libc error.
[evince.git] / shell / ev-view.c
index bc3cb980daf295efb03aad5d20d5f0fb6b504b65..1685aee823eb8c8070111dcda836083913ed187e 100644 (file)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  */
 
-#include <config.h>
+#include "config.h"
+
 #include <stdlib.h>
 #include <math.h>
 #include <string.h>
-#include <gtk/gtkalignment.h>
+
 #include <glib/gi18n.h>
-#include <gtk/gtkbindings.h>
-#include <gtk/gtkselection.h>
-#include <gtk/gtkclipboard.h>
+#include <gtk/gtk.h>
 #include <gdk/gdkkeysyms.h>
 
-#include "ev-marshal.h"
-#include "ev-view.h"
-#include "ev-view-private.h"
-#include "ev-utils.h"
-#include "ev-document-links.h"
-#include "ev-document-images.h"
-#include "ev-document-find.h"
-#include "ev-document-transition.h"
+#include "ev-application.h"
 #include "ev-document-forms.h"
+#include "ev-document-images.h"
+#include "ev-document-links.h"
 #include "ev-document-misc.h"
-#include "ev-job-queue.h"
+#include "ev-document-transition.h"
+#include "ev-marshal.h"
 #include "ev-page-cache.h"
 #include "ev-pixbuf-cache.h"
 #include "ev-transition-animation.h"
+#include "ev-utils.h"
+#include "ev-view.h"
+#include "ev-view-private.h"
+
 #if !GTK_CHECK_VERSION (2, 11, 7)
 #include "ev-tooltip.h"
 #endif
-#include "ev-application.h"
 
 #define EV_VIEW_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), EV_TYPE_VIEW, EvViewClass))
 #define EV_IS_VIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EV_TYPE_VIEW))
 #define EV_VIEW_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), EV_TYPE_VIEW, EvViewClass))
 
-
 enum {
        PROP_0,
-       PROP_FIND_STATUS,
        PROP_CONTINUOUS,
        PROP_DUAL_PAGE,
        PROP_FULLSCREEN,
@@ -128,7 +124,7 @@ static void       set_scroll_adjustment                      (EvView
 static void       add_scroll_binding_keypad                  (GtkBindingSet      *binding_set,
                                                              guint               keyval,
                                                              GdkModifierType modifiers,
-                                                             EvScrollType       scroll,
+                                                             GtkScrollType       scroll,
                                                              gboolean            horizontal);
 static void       ensure_rectangle_is_visible                (EvView             *view,
                                                              GdkRectangle       *rect);
@@ -230,9 +226,6 @@ static void   draw_loading_text                          (EvView             *view,
                                                              GdkRectangle       *expose_area);
 
 /*** Callbacks ***/
-static void       find_changed_cb                            (EvDocument         *document,
-                                                             int                 page,
-                                                             EvView             *view);
 static void       job_finished_cb                            (EvPixbufCache      *pixbuf_cache,
                                                              GdkRegion          *region,
                                                              EvView             *view);
@@ -305,10 +298,11 @@ static void       ev_view_handle_cursor_over_xy              (EvView *view,
                                                              gint y);
 
 /*** Find ***/
-static void       update_find_status_message                 (EvView             *view,
-                                                             gboolean            this_page);
-static void       ev_view_set_find_status                    (EvView             *view,
-                                                             const char         *message);
+static gint         ev_view_find_get_n_results               (EvView             *view,
+                                                             gint                page);
+static EvRectangle *ev_view_find_get_result                  (EvView             *view,
+                                                             gint                page,
+                                                             gint                result);
 static void       jump_to_find_result                        (EvView             *view);
 static void       jump_to_find_page                          (EvView             *view, 
                                                              EvViewFindDirection direction,
@@ -580,25 +574,25 @@ static void
 add_scroll_binding_keypad (GtkBindingSet  *binding_set,
                           guint           keyval,
                           GdkModifierType modifiers,
-                          EvScrollType    scroll,
+                          GtkScrollType   scroll,
                           gboolean        horizontal)
 {
   guint keypad_keyval = keyval - GDK_Left + GDK_KP_Left;
 
   gtk_binding_entry_add_signal (binding_set, keyval, modifiers,
                                 "binding_activated", 2,
-                                EV_TYPE_SCROLL_TYPE, scroll,
+                                GTK_TYPE_SCROLL_TYPE, scroll,
                                G_TYPE_BOOLEAN, horizontal);
   gtk_binding_entry_add_signal (binding_set, keypad_keyval, modifiers,
                                 "binding_activated", 2,
-                                EV_TYPE_SCROLL_TYPE, scroll,
+                                GTK_TYPE_SCROLL_TYPE, scroll,
                                G_TYPE_BOOLEAN, horizontal);
 }
 
 void
 ev_view_scroll (EvView        *view,
-               EvScrollType   scroll,
-               gboolean horizontal)
+               GtkScrollType  scroll,
+               gboolean       horizontal)
 {
        GtkAdjustment *adjustment;
        double value, increment;
@@ -609,12 +603,12 @@ ev_view_scroll (EvView        *view,
 
        if (view->presentation || view->sizing_mode == EV_SIZING_BEST_FIT) {
                switch (scroll) {
-                       case EV_SCROLL_PAGE_BACKWARD:
-                       case EV_SCROLL_STEP_BACKWARD:
+                       case GTK_SCROLL_PAGE_BACKWARD:
+                       case GTK_SCROLL_STEP_BACKWARD:
                                ev_view_previous_page (view);
                                break;
-                       case EV_SCROLL_PAGE_FORWARD:
-                       case EV_SCROLL_STEP_FORWARD:
+                       case GTK_SCROLL_PAGE_FORWARD:
+                       case GTK_SCROLL_STEP_FORWARD:
                                ev_view_next_page (view);
                                break;
                        default:
@@ -635,7 +629,7 @@ ev_view_scroll (EvView        *view,
                last_page = TRUE;
 
        switch (scroll) {
-               case EV_SCROLL_PAGE_BACKWARD:
+               case GTK_SCROLL_PAGE_BACKWARD:
                        /* Do not jump backwards if at the first page */
                        if (value == (adjustment->lower) && first_page) {
                                /* Do nothing */
@@ -648,7 +642,7 @@ ev_view_scroll (EvView        *view,
                                value = MAX (value - increment, adjustment->lower);
                        }
                        break;
-               case EV_SCROLL_PAGE_FORWARD:
+               case GTK_SCROLL_PAGE_FORWARD:
                        /* Do not jump forward if at the last page */
                        if (value == (adjustment->upper - adjustment->page_size) && last_page) {
                                /* Do nothing */
@@ -661,16 +655,16 @@ ev_view_scroll (EvView        *view,
                                value = MIN (value + increment, adjustment->upper - adjustment->page_size);
                        }
                        break;
-               case EV_SCROLL_STEP_BACKWARD:
+               case GTK_SCROLL_STEP_BACKWARD:
                        value -= adjustment->step_increment;
                        break;
-               case EV_SCROLL_STEP_FORWARD:
+               case GTK_SCROLL_STEP_FORWARD:
                        value += adjustment->step_increment;
                        break;
-               case EV_SCROLL_STEP_DOWN:
+               case GTK_SCROLL_STEP_DOWN:
                        value -= adjustment->step_increment / 10;
                        break;
-               case EV_SCROLL_STEP_UP:
+               case GTK_SCROLL_STEP_UP:
                        value += adjustment->step_increment / 10;
                        break;
                default:
@@ -2549,7 +2543,7 @@ ev_view_expose_event (GtkWidget      *widget,
 
                draw_one_page (view, i, cr, &page_area, &border, &(event->area), &page_ready);
 
-               if (page_ready && EV_IS_DOCUMENT_FIND (view->document) && view->highlight_find_results)
+               if (page_ready && view->find_pages && view->highlight_find_results)
                        highlight_find_results (view, i);
        }
 
@@ -3044,15 +3038,20 @@ ev_view_motion_notify_event (GtkWidget      *widget,
                }
        }
        
-       /* For the Evince 0.4.x release, we limit selection to un-rotated
-        * documents only.
-        */
-       if (view->pressed_button == 1 && view->rotation == 0) {
+       switch (view->pressed_button) {
+       case 1:
+               /* For the Evince 0.4.x release, we limit selection to un-rotated
+                * documents only.
+                */
+               if (view->rotation != 0)
+                       return FALSE;
 
                /* Schedule timeout to scroll during selection and additionally 
                 * scroll once to allow arbitrary speed. */
                if (!view->selection_scroll_id)
-                   view->selection_scroll_id = g_timeout_add (SCROLL_TIME, (GSourceFunc)selection_scroll_timeout_cb, view);
+                   view->selection_scroll_id = g_timeout_add (SCROLL_TIME,
+                                                              (GSourceFunc)selection_scroll_timeout_cb,
+                                                              view);
                else 
                    selection_scroll_timeout_cb (view);
 
@@ -3069,7 +3068,7 @@ ev_view_motion_notify_event (GtkWidget      *widget,
                        view->selection_update_id = g_idle_add ((GSourceFunc)selection_update_idle_cb, view);
 
                return TRUE;
-       } else if (view->pressed_button == 2) {
+       case 2:
                if (!view->drag_info.in_drag) {
                        gboolean start;
                        int i;
@@ -3119,10 +3118,11 @@ ev_view_motion_notify_event (GtkWidget      *widget,
 
                        return TRUE;
                }
-       } else if (view->pressed_button <= 0) {
+
+               break;
+       default:
                ev_view_handle_cursor_over_xy (view, x, y);
-               return TRUE;
-       }
+       } 
 
        return FALSE;
 }
@@ -3380,7 +3380,7 @@ ev_view_goto_window_create (EvView *view)
        g_signal_connect (view->goto_entry, "activate",
                          G_CALLBACK (ev_view_goto_entry_activate),
                          view);
-       gtk_box_pack_start_defaults (GTK_BOX (hbox), view->goto_entry);
+       gtk_box_pack_start (GTK_BOX (hbox), view->goto_entry, TRUE, TRUE, 0);
        gtk_widget_show (view->goto_entry);
        gtk_widget_realize (view->goto_entry);
 }
@@ -3610,15 +3610,12 @@ draw_rubberband (GtkWidget *widget, GdkWindow *window,
 static void
 highlight_find_results (EvView *view, int page)
 {
-       EvDocumentFind *find;
-       int i, results = 0;
-
-       find = EV_DOCUMENT_FIND (view->document);
+       gint i, n_results = 0;
 
-       results = ev_document_find_get_n_results (find, page);
+       n_results = ev_view_find_get_n_results (view, page);
 
-       for (i = 0; i < results; i++) {
-               EvRectangle rectangle;
+       for (i = 0; i < n_results; i++) {
+               EvRectangle *rectangle;
                GdkRectangle view_rectangle;
                guchar alpha;
 
@@ -3628,8 +3625,8 @@ highlight_find_results (EvView *view, int page)
                        alpha = 0x20;
                }
 
-               ev_document_find_get_result (find, page, i, &rectangle);
-               doc_rect_to_view_rect (view, page, &rectangle, &view_rectangle);
+               rectangle = ev_view_find_get_result (view, page, i);
+               doc_rect_to_view_rect (view, page, rectangle, &view_rectangle);
                draw_rubberband (GTK_WIDGET (view), view->layout.bin_window,
                                 &view_rectangle, alpha);
         }
@@ -3824,8 +3821,6 @@ ev_view_finalize (GObject *object)
 {
        EvView *view = EV_VIEW (object);
 
-       g_free (view->find_status);
-
        clear_selection (view);
        clear_link_selected (view);
 
@@ -3975,9 +3970,6 @@ ev_view_get_property (GObject *object,
        EvView *view = EV_VIEW (object);
 
        switch (prop_id) {
-               case PROP_FIND_STATUS:
-                       g_value_set_string (value, view->find_status);
-                       break;
                case PROP_CONTINUOUS:
                        g_value_set_boolean (value, view->continuous);
                        break;
@@ -4093,14 +4085,6 @@ ev_view_class_init (EvViewClass *class)
                         G_TYPE_OBJECT);
 
 
-       g_object_class_install_property (object_class,
-                                        PROP_FIND_STATUS,
-                                        g_param_spec_string ("find-status",
-                                                             "Find Status Message",
-                                                             "The find status message",
-                                                             NULL,
-                                                             G_PARAM_READABLE));
-
        g_object_class_install_property (object_class,
                                         PROP_CONTINUOUS,
                                         g_param_spec_boolean ("continuous",
@@ -4168,22 +4152,22 @@ ev_view_class_init (EvViewClass *class)
 
        binding_set = gtk_binding_set_by_class (class);
 
-       add_scroll_binding_keypad (binding_set, GDK_Left,  0, EV_SCROLL_STEP_BACKWARD, TRUE);
-       add_scroll_binding_keypad (binding_set, GDK_Right, 0, EV_SCROLL_STEP_FORWARD,  TRUE);
-       add_scroll_binding_keypad (binding_set, GDK_Left,  GDK_MOD1_MASK, EV_SCROLL_STEP_DOWN, TRUE);
-       add_scroll_binding_keypad (binding_set, GDK_Right, GDK_MOD1_MASK, EV_SCROLL_STEP_UP,  TRUE);
-       add_scroll_binding_keypad (binding_set, GDK_Up,    0, EV_SCROLL_STEP_BACKWARD, FALSE);
-       add_scroll_binding_keypad (binding_set, GDK_Down,  0, EV_SCROLL_STEP_FORWARD,  FALSE);
-       add_scroll_binding_keypad (binding_set, GDK_Up,    GDK_MOD1_MASK, EV_SCROLL_STEP_DOWN, FALSE);
-       add_scroll_binding_keypad (binding_set, GDK_Down,  GDK_MOD1_MASK, EV_SCROLL_STEP_UP,  FALSE);
-       gtk_binding_entry_add_signal (binding_set, GDK_H, 0, "binding_activated", 2, EV_TYPE_SCROLL_TYPE,
-                                     EV_SCROLL_STEP_BACKWARD, G_TYPE_BOOLEAN, TRUE);
-       gtk_binding_entry_add_signal (binding_set, GDK_J, 0, "binding_activated", 2, EV_TYPE_SCROLL_TYPE,
-                                     EV_SCROLL_STEP_FORWARD, G_TYPE_BOOLEAN, FALSE);
-       gtk_binding_entry_add_signal (binding_set, GDK_K, 0, "binding_activated", 2, EV_TYPE_SCROLL_TYPE,
-                                     EV_SCROLL_STEP_BACKWARD, G_TYPE_BOOLEAN, FALSE);
-       gtk_binding_entry_add_signal (binding_set, GDK_L, 0, "binding_activated", 2, EV_TYPE_SCROLL_TYPE,
-                                     EV_SCROLL_STEP_FORWARD, G_TYPE_BOOLEAN, TRUE);
+       add_scroll_binding_keypad (binding_set, GDK_Left,  0, GTK_SCROLL_STEP_BACKWARD, TRUE);
+       add_scroll_binding_keypad (binding_set, GDK_Right, 0, GTK_SCROLL_STEP_FORWARD,  TRUE);
+       add_scroll_binding_keypad (binding_set, GDK_Left,  GDK_MOD1_MASK, GTK_SCROLL_STEP_DOWN, TRUE);
+       add_scroll_binding_keypad (binding_set, GDK_Right, GDK_MOD1_MASK, GTK_SCROLL_STEP_UP,  TRUE);
+       add_scroll_binding_keypad (binding_set, GDK_Up,    0, GTK_SCROLL_STEP_BACKWARD, FALSE);
+       add_scroll_binding_keypad (binding_set, GDK_Down,  0, GTK_SCROLL_STEP_FORWARD,  FALSE);
+       add_scroll_binding_keypad (binding_set, GDK_Up,    GDK_MOD1_MASK, GTK_SCROLL_STEP_DOWN, FALSE);
+       add_scroll_binding_keypad (binding_set, GDK_Down,  GDK_MOD1_MASK, GTK_SCROLL_STEP_UP,  FALSE);
+       gtk_binding_entry_add_signal (binding_set, GDK_H, 0, "binding_activated", 2, GTK_TYPE_SCROLL_TYPE,
+                                     GTK_SCROLL_STEP_BACKWARD, G_TYPE_BOOLEAN, TRUE);
+       gtk_binding_entry_add_signal (binding_set, GDK_J, 0, "binding_activated", 2, GTK_TYPE_SCROLL_TYPE,
+                                     GTK_SCROLL_STEP_FORWARD, G_TYPE_BOOLEAN, FALSE);
+       gtk_binding_entry_add_signal (binding_set, GDK_K, 0, "binding_activated", 2, GTK_TYPE_SCROLL_TYPE,
+                                     GTK_SCROLL_STEP_BACKWARD, G_TYPE_BOOLEAN, FALSE);
+       gtk_binding_entry_add_signal (binding_set, GDK_L, 0, "binding_activated", 2, GTK_TYPE_SCROLL_TYPE,
+                                     GTK_SCROLL_STEP_FORWARD, G_TYPE_BOOLEAN, TRUE);
        
 }
 
@@ -4225,25 +4209,6 @@ ev_view_init (EvView *view)
 
 /*** Callbacks ***/
 
-static void
-find_changed_cb (EvDocument *document, int page, EvView *view)
-{
-       double percent;
-       int n_pages;
-
-       percent = ev_document_find_get_progress
-                       (EV_DOCUMENT_FIND (view->document)); 
-       n_pages = ev_page_cache_get_n_pages (view->page_cache);
-       
-       if (view->jump_to_find_result == TRUE) {
-               jump_to_find_page (view, EV_VIEW_FIND_NEXT, 0);
-               jump_to_find_result (view);
-       }
-       update_find_status_message (view, percent * n_pages >= n_pages - 1 );
-       if (view->current_page == page)
-               gtk_widget_queue_draw (GTK_WIDGET (view));
-}
-
 static void
 ev_view_change_page (EvView *view,
                     gint    new_page)
@@ -4336,10 +4301,7 @@ page_changed_cb (EvPageCache *page_cache,
                gtk_widget_queue_draw (GTK_WIDGET (view));
        }
 
-       if (EV_IS_DOCUMENT_FIND (view->document)) {
-               view->find_result = 0;
-               update_find_status_message (view, TRUE);
-       }
+       view->find_result = 0;
 }
 
 static void
@@ -4521,12 +4483,8 @@ ev_view_set_document (EvView     *view,
                clear_caches (view);
 
                if (view->document) {
-                        g_signal_handlers_disconnect_by_func (view->document,
-                                                              find_changed_cb,
-                                                              view);
                        g_object_unref (view->document);
                        view->page_cache = NULL;
-
                 }
 
                view->document = document;
@@ -4534,13 +4492,6 @@ ev_view_set_document (EvView     *view,
 
                if (view->document) {
                        g_object_ref (view->document);
-                       if (EV_IS_DOCUMENT_FIND (view->document)) {
-                               g_signal_connect (view->document,
-                                                 "find_changed",
-                                                 G_CALLBACK (find_changed_cb),
-                                                 view);
-                       }
-
                        setup_caches (view);
                 }
 
@@ -5141,71 +5092,32 @@ ev_view_set_zoom_for_size (EvView *view,
 }
 
 /*** Find ***/
-static void
-update_find_status_message (EvView *view, gboolean this_page)
-{
-       char *message;
-
-       if (this_page) {
-               int results;
-
-               results = ev_document_find_get_n_results
-                               (EV_DOCUMENT_FIND (view->document),
-                                view->current_page);
-               /* 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",
-                                                    results),
-                                          results);
-       } else {
-               double percent;
-
-               percent = ev_document_find_get_progress
-                               (EV_DOCUMENT_FIND (view->document));
-               message = g_strdup_printf (_("%3d%% remaining to search"),
-                                          (int) ((1.0 - percent) * 100));
-               
-       }
-       ev_view_set_find_status (view, message);
-       g_free (message);
-}
-
-const char *
-ev_view_get_find_status (EvView *view)
+static gint
+ev_view_find_get_n_results (EvView *view, gint page)
 {
-       g_return_val_if_fail (EV_IS_VIEW (view), NULL);
-
-       return view->find_status;
+       return view->find_pages ? g_list_length (view->find_pages[page]) : 0;
 }
 
-static void
-ev_view_set_find_status (EvView *view, const char *message)
+static EvRectangle *
+ev_view_find_get_result (EvView *view, gint page, gint result)
 {
-       g_return_if_fail (EV_IS_VIEW (view));
-
-       g_free (view->find_status);
-       view->find_status = g_strdup (message);
-       g_object_notify (G_OBJECT (view), "find-status");
+       return view->find_pages ? (EvRectangle *) g_list_nth_data (view->find_pages[page], result) : NULL;
 }
 
 static void
 jump_to_find_result (EvView *view)
 {
-       EvDocumentFind *find = EV_DOCUMENT_FIND (view->document);
-       EvRectangle rect;
-       GdkRectangle view_rect;
-       int n_results;
-       int page = view->current_page;
+       gint n_results;
+       gint page = view->current_page;
 
-       n_results = ev_document_find_get_n_results (find, page);
+       n_results = ev_view_find_get_n_results (view, page);
 
-       if (n_results > 0  && view->find_result < n_results) {
-               ev_document_find_get_result
-                       (find, page, view->find_result, &rect);
+       if (n_results > 0 && view->find_result < n_results) {
+               EvRectangle *rect;
+               GdkRectangle view_rect;
 
-               doc_rect_to_view_rect (view, page, &rect, &view_rect);
+               rect = ev_view_find_get_result (view, page, view->find_result);
+               doc_rect_to_view_rect (view, page, rect, &view_rect);
                ensure_rectangle_is_visible (view, &view_rect);
        }
 }
@@ -5228,7 +5140,6 @@ jump_to_find_page (EvView *view, EvViewFindDirection direction, gint shift)
        n_pages = ev_page_cache_get_n_pages (view->page_cache);
 
        for (i = 0; i < n_pages; i++) {
-               int has_results;
                int page;
                
                if (direction == EV_VIEW_FIND_NEXT)
@@ -5239,53 +5150,39 @@ jump_to_find_page (EvView *view, EvViewFindDirection direction, gint shift)
                
                if (page >= n_pages) {
                        page = page - n_pages;
-               }
-               if (page < 0) 
+               } else if (page < 0) 
                        page = page + n_pages;
-               
-               has_results = ev_document_find_page_has_results
-                               (EV_DOCUMENT_FIND (view->document), page);
-               if (has_results == -1) {
-                       break;
-               } else if (has_results == 1) {
+
+               if (ev_view_find_get_n_results (view, page) > 0) {
                        ev_page_cache_set_current_page (view->page_cache, page);
                        break;
                }
        }
 }
 
-gboolean
-ev_view_can_find_next (EvView *view)
+void
+ev_view_find_changed (EvView *view, GList **results, gint page)
 {
-       if (EV_IS_DOCUMENT_FIND (view->document)) {
-               EvDocumentFind *find = EV_DOCUMENT_FIND (view->document);
-               int i, n_pages;
-
-               n_pages = ev_page_cache_get_n_pages (view->page_cache);
-               for (i = 0; i < n_pages; i++) {
-                       if (ev_document_find_get_n_results (find, i) > 0) {
-                               return TRUE;
-                       }
-               }
+       view->find_pages = results;
+       
+       if (view->jump_to_find_result == TRUE) {
+               jump_to_find_page (view, EV_VIEW_FIND_NEXT, 0);
+               jump_to_find_result (view);
        }
 
-       return FALSE;
+       if (view->current_page == page)
+               gtk_widget_queue_draw (GTK_WIDGET (view));
 }
 
 void
 ev_view_find_next (EvView *view)
 {
-       int n_results, n_pages;
-       EvDocumentFind *find = EV_DOCUMENT_FIND (view->document);
-
-       n_results = ev_document_find_get_n_results (find, view->current_page);
-
-       n_pages = ev_page_cache_get_n_pages (view->page_cache);
+       gint n_results;
 
+       n_results = ev_view_find_get_n_results (view, view->current_page);
        view->find_result++;
 
        if (view->find_result >= n_results) {
-
                view->find_result = 0;
                jump_to_find_page (view, EV_VIEW_FIND_NEXT, 1);
                jump_to_find_result (view);
@@ -5295,42 +5192,14 @@ ev_view_find_next (EvView *view)
        }
 }
 
-gboolean
-ev_view_can_find_previous (EvView *view)
-{
-       if (EV_IS_DOCUMENT_FIND (view->document)) {
-               EvDocumentFind *find = EV_DOCUMENT_FIND (view->document);
-               int i, n_pages;
-
-               n_pages = ev_page_cache_get_n_pages (view->page_cache);
-               for (i = n_pages - 1; i >= 0; i--) {
-                       if (ev_document_find_get_n_results (find, i) > 0) {
-                               return TRUE;
-                       }
-               }
-       }
-
-       return FALSE;
-}
 void
 ev_view_find_previous (EvView *view)
 {
-       int n_results, n_pages;
-       EvDocumentFind *find = EV_DOCUMENT_FIND (view->document);
-       EvPageCache *page_cache;
-
-       page_cache = ev_page_cache_get (view->document);
-
-       n_results = ev_document_find_get_n_results (find, view->current_page);
-
-       n_pages = ev_page_cache_get_n_pages (page_cache);
-
        view->find_result--;
 
        if (view->find_result < 0) {
-
                jump_to_find_page (view, EV_VIEW_FIND_PREV, -1);
-               view->find_result = ev_document_find_get_n_results (find, view->current_page) - 1;
+               view->find_result = ev_view_find_get_n_results (view, view->current_page) - 1;
                jump_to_find_result (view);
        } else {
                jump_to_find_result (view);
@@ -5339,14 +5208,15 @@ ev_view_find_previous (EvView *view)
 }
 
 void
-ev_view_search_changed (EvView *view)
+ev_view_find_search_changed (EvView *view)
 {
        /* search string has changed, focus on new search result */
        view->jump_to_find_result = TRUE;
+       view->find_pages = NULL;
 }
 
 void
-ev_view_set_highlight_search (EvView *view, gboolean value)
+ev_view_find_set_highlight_search (EvView *view, gboolean value)
 {
        view->highlight_find_results = value;
        gtk_widget_queue_draw (GTK_WIDGET (view));
@@ -5355,11 +5225,7 @@ ev_view_set_highlight_search (EvView *view, gboolean value)
 void
 ev_view_find_cancel (EvView *view)
 {
-       if (EV_IS_DOCUMENT_FIND (view->document)) {
-               EvDocumentFind *find = EV_DOCUMENT_FIND (view->document);
-
-               ev_document_find_cancel (find);
-       }
+       view->find_pages = NULL;
 }
 
 /*** Selections ***/
@@ -6051,25 +5917,6 @@ ev_sizing_mode_get_type (void)
   return etype;
 }
 
-GType
-ev_scroll_type_get_type (void)
-{
-  static GType etype = 0;
-  if (etype == 0) {
-    static const GEnumValue values[] = {
-      { EV_SCROLL_PAGE_FORWARD, "EV_SCROLL_PAGE_FORWARD", "scroll-page-forward" },
-      { EV_SCROLL_PAGE_BACKWARD, "EV_SCROLL_PAGE_BACKWARD", "scroll-page-backward" },
-      { EV_SCROLL_STEP_FORWARD, "EV_SCROLL_STEP_FORWARD", "scroll-step-forward" },
-      { EV_SCROLL_STEP_FORWARD, "EV_SCROLL_STEP_FORWARD", "scroll-step-forward" },
-      { EV_SCROLL_STEP_UP, "EV_SCROLL_STEP_UP", "scroll-step-up" },
-      { EV_SCROLL_STEP_DOWN, "EV_SCROLL_STEP_DOWN", "scroll-step-down" },
-      { 0, NULL, NULL }
-    };
-    etype = g_enum_register_static ("EvScrollType", values);
-  }
-  return etype;
-}
-
 void
 ev_view_update_view_size (EvView *view, GtkScrolledWindow * scrolled_window)
 {