Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog13
-rw-r--r--libview/ev-view.c40
-rw-r--r--libview/ev-view.h3
-rw-r--r--shell/ev-window.c84
4 files changed, 62 insertions, 78 deletions
diff --git a/ChangeLog b/ChangeLog
index 4b0cd3b..389388a 100644
--- 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:
diff --git a/libview/ev-view.c b/libview/ev-view.c
index 7626f86..8e7fc4a 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -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);
- }
-}
diff --git a/libview/ev-view.h b/libview/ev-view.h
index 0c9db0a..2ff3aef 100644
--- a/libview/ev-view.h
+++ b/libview/ev-view.h
@@ -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);
diff --git a/shell/ev-window.c b/shell/ev-window.c
index ca41ba7..71741e0 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -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),