]> www.fi.muni.cz Git - evince.git/commitdiff
Move ev_view_update_view_size() from libview to ev-window again and make
authorCarlos Garcia Campos <carlosgc@gnome.org>
Mon, 6 Apr 2009 17:05:52 +0000 (17:05 +0000)
committerCarlos Garcia Campos <carlosgc@src.gnome.org>
Mon, 6 Apr 2009 17:05:52 +0000 (17:05 +0000)
2009-04-06  Carlos Garcia Campos  <carlosgc@gnome.org>

* libview/ev-view.[ch]: (ev_view_set_zoom),
(ev_view_update_view_size):
* shell/ev-window.c: (ev_window_set_view_size),
(ev_window_sizing_mode_changed_cb), (ev_window_init):

Move ev_view_update_view_size() from libview to ev-window again
and make sure the view is not redrawn when calling
ev_view_set_zoom more than once with the same zoom scale.

svn path=/trunk/; revision=3573

ChangeLog
libview/ev-view.c
libview/ev-view.h
shell/ev-window.c

index 4b0cd3b2691b609a5e6f6a0de8d761227fabf8f1..389388a99f0d58456abca0423178975e7ea40328 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,15 @@
-2009-04-06  Nickolay V. Shmyrev  <nshmyrev@yandex.ru>
+2009-04-06  Carlos Garcia Campos  <carlosgc@gnome.org>
+
+       * libview/ev-view.[ch]: (ev_view_set_zoom),
+       (ev_view_update_view_size):
+       * shell/ev-window.c: (ev_window_set_view_size),
+       (ev_window_sizing_mode_changed_cb), (ev_window_init):
+
+       Move ev_view_update_view_size() from libview to ev-window again
+       and make sure the view is not redrawn when calling
+       ev_view_set_zoom more than once with the same zoom scale.
+       
+2009-04-05  Nickolay V. Shmyrev  <nshmyrev@yandex.ru>
 
        * shell/ev-window.c:
 
index 7626f8647611674305264e00835ffb5d2adbeabf..8e7fc4a3647affc29d5a4ece96a23c84a5d4c62d 100644 (file)
@@ -2218,9 +2218,7 @@ ev_view_size_allocate (GtkWidget      *widget,
        
        if (view->sizing_mode == EV_SIZING_FIT_WIDTH ||
            view->sizing_mode == EV_SIZING_BEST_FIT) {
-
                g_signal_emit (view, signals[SIGNAL_ZOOM_INVALID], 0);
-
                ev_view_size_request (widget, &widget->requisition);
        }
        
@@ -4441,6 +4439,9 @@ ev_view_set_zoom (EvView   *view,
                       view->sizing_mode == EV_SIZING_FREE ? view->min_scale : 0,
                       view->max_scale);
 
+       if (scale == view->scale)
+               return;
+
        if (ABS (view->scale - scale) < EPSILON)
                return;
 
@@ -5834,38 +5835,3 @@ ev_view_previous_page (EvView *view)
        }
 }
                
-/*** Enum description for usage in signal ***/
-
-void
-ev_view_update_view_size (EvView *view, GtkScrolledWindow * scrolled_window)
-{
-       int width, height;
-       GtkRequisition vsb_requisition;
-       GtkRequisition hsb_requisition;
-       int scrollbar_spacing;
-       
-       /* Calculate the width available for the content */ 
-       width  = GTK_WIDGET (scrolled_window)->allocation.width;
-       height = GTK_WIDGET (scrolled_window)->allocation.height;
-
-       if (gtk_scrolled_window_get_shadow_type (scrolled_window) == GTK_SHADOW_IN 
-           && view) {
-               width -=  2 * GTK_WIDGET(view)->style->xthickness;
-               height -= 2 * GTK_WIDGET(view)->style->ythickness;
-       }
-
-       gtk_widget_size_request (scrolled_window->vscrollbar, &vsb_requisition);
-       gtk_widget_size_request (scrolled_window->hscrollbar, &hsb_requisition);
-       gtk_widget_style_get (GTK_WIDGET (scrolled_window), 
-                             "scrollbar_spacing", 
-                             &scrollbar_spacing, 
-                             NULL);
-       
-       if (EV_IS_VIEW(view)) {
-               ev_view_set_zoom_for_size (EV_VIEW (view),
-                                          MAX (1, width),
-                                          MAX (1, height),
-                                          vsb_requisition.width + scrollbar_spacing,
-                                          hsb_requisition.height + scrollbar_spacing);
-       }
-}
index 0c9db0a2eeca16985b4a57c6bc9edbef2fd27e9b..2ff3aefe8aa00c9316cba7d68585225eb8dc4676 100644 (file)
@@ -133,9 +133,6 @@ gboolean       ev_view_next_page      (EvView         *view);
 gboolean       ev_view_previous_page     (EvView         *view);
 gchar*         ev_view_page_label_from_dest (EvView *view, EvLinkDest *dest);
 
-void           ev_view_update_view_size   (EvView            *view,
-                                          GtkScrolledWindow *scrolled_window);
-
 void          ev_view_autoscroll_start   (EvView *view);
 void           ev_view_autoscroll_stop    (EvView *view);
 
index ca41ba790d740071b3fd0d244c136f1088e51cd7..71741e0bcba1fa585c05e83ab6644dd60bad0062 100644 (file)
@@ -4120,51 +4120,59 @@ save_sizing_mode (EvWindow *window)
                                                enum_value->value_nick);
 }
 
+static void
+ev_window_set_view_size (EvWindow *window)
+{
+       gint width, height;
+       GtkRequisition vsb_requisition;
+       GtkRequisition hsb_requisition;
+       gint scrollbar_spacing;
+       GtkWidget *scrolled_window = window->priv->scrolled_window;
+
+       if (!window->priv->view)
+               return;
+
+       /* Calculate the width available for the content */
+       width  = scrolled_window->allocation.width;
+       height = scrolled_window->allocation.height;
+
+       if (gtk_scrolled_window_get_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window)) == GTK_SHADOW_IN) {
+               width -=  2 * window->priv->view->style->xthickness;
+               height -= 2 * window->priv->view->style->ythickness;
+       }
+
+       gtk_widget_size_request (GTK_SCROLLED_WINDOW (scrolled_window)->vscrollbar,
+                                &vsb_requisition);
+       gtk_widget_size_request (GTK_SCROLLED_WINDOW (scrolled_window)->hscrollbar,
+                                &hsb_requisition);
+       gtk_widget_style_get (scrolled_window,
+                             "scrollbar_spacing",
+                             &scrollbar_spacing,
+                             NULL);
+
+       ev_view_set_zoom_for_size (EV_VIEW (window->priv->view),
+                                  MAX (1, width),
+                                  MAX (1, height),
+                                  vsb_requisition.width + scrollbar_spacing,
+                                  hsb_requisition.height + scrollbar_spacing);
+}
+
 static void     
 ev_window_sizing_mode_changed_cb (EvView *view, GParamSpec *pspec,
                                  EvWindow   *ev_window)
 {
-       GtkWidget *scrolled_window;
        EvSizingMode sizing_mode;
 
        g_object_get (ev_window->priv->view,
                      "sizing-mode", &sizing_mode,
                      NULL);
 
-       scrolled_window = ev_window->priv->scrolled_window;
-
-       g_signal_handlers_disconnect_by_func (ev_window->priv->view, ev_view_update_view_size, scrolled_window);
-
-       if (sizing_mode != EV_SIZING_FREE)
-               ev_view_update_view_size (EV_VIEW (ev_window->priv->view),
-                                         GTK_SCROLLED_WINDOW (scrolled_window));
-
-       switch (sizing_mode) {
-               case EV_SIZING_BEST_FIT:
-                       g_object_set (G_OBJECT (scrolled_window),
-                                     "hscrollbar-policy", GTK_POLICY_NEVER,
-                                     "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
-                                     NULL);
-                       g_signal_connect (ev_window->priv->view, "zoom_invalid",
-                                         G_CALLBACK (ev_view_update_view_size),
-                                         scrolled_window);
-                       break;
-               case EV_SIZING_FIT_WIDTH:
-                       g_object_set (G_OBJECT (scrolled_window),
-                                     "hscrollbar-policy", GTK_POLICY_NEVER,
-                                     "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
-                                     NULL);
-                       g_signal_connect (ev_window->priv->view, "zoom_invalid",
-                                         G_CALLBACK (ev_view_update_view_size),
-                                         scrolled_window);
-                       break;
-               case EV_SIZING_FREE:
-                       g_object_set (G_OBJECT (scrolled_window),
-                                     "hscrollbar-policy", GTK_POLICY_AUTOMATIC,
-                                     "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
-                                     NULL);
-                       break;
-       }
+       g_object_set (ev_window->priv->scrolled_window,
+                     "hscrollbar-policy",
+                     sizing_mode == EV_SIZING_FREE ?
+                     GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER,
+                     "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
+                     NULL);
 
        update_sizing_buttons (ev_window);
        save_sizing_mode (ev_window);
@@ -4727,7 +4735,7 @@ zoom_control_changed_cb (EphyZoomAction *action,
        } else {
                mode = EV_SIZING_FREE;
        }
-       
+
        ev_view_set_sizing_mode (EV_VIEW (ev_window->priv->view), mode);
        
        if (mode == EV_SIZING_FREE) {
@@ -6178,7 +6186,9 @@ ev_window_init (EvWindow *ev_window)
        g_signal_connect_object (ev_window->priv->view, "handle-link",
                                 G_CALLBACK (view_handle_link_cb),
                                 ev_window, 0);
-
+       g_signal_connect_swapped (ev_window->priv->view, "zoom_invalid",
+                                G_CALLBACK (ev_window_set_view_size),
+                                ev_window);
        g_signal_connect_object (ev_window->priv->view,
                                 "popup",
                                 G_CALLBACK (view_menu_popup_cb),