]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-view.c
Require poppler_form_field_text_is_password from CVS
[evince.git] / shell / ev-view.c
index a6d198f311ac02ffb86d8ba6338eceb872251d79..1f9e82443244757d49c79768872be25be0f3875a 100644 (file)
@@ -1454,8 +1454,10 @@ tip_from_link (EvView *view, EvLink *link)
                case EV_LINK_ACTION_TYPE_GOTO_DEST:
                        page_label = ev_view_page_label_from_dest (view,
                                                                   ev_link_action_get_dest (action));
-                       msg = g_strdup_printf (_("Go to page %s"), page_label);
-                       g_free (page_label);
+                       if (page_label) {
+                               msg = g_strdup_printf (_("Go to page %s"), page_label);
+                               g_free (page_label);
+                       }
                        break;
                case EV_LINK_ACTION_TYPE_GOTO_REMOTE:
                        if (title) {
@@ -1465,7 +1467,6 @@ tip_from_link (EvView *view, EvLink *link)
                                msg = g_strdup_printf (_("Go to file ā€œ%sā€"),
                                                       ev_link_action_get_filename (action));
                        }
-                       
                        break;
                case EV_LINK_ACTION_TYPE_EXTERNAL_URI:
                        msg = g_strdup (ev_link_action_get_uri (action));
@@ -1519,8 +1520,6 @@ ev_view_handle_cursor_over_xy (EvView *view, gint x, gint y)
                g_free (msg);
 
                ev_view_set_cursor (view, EV_VIEW_CURSOR_LINK);
-       } else if (location_in_text (view, x + view->scroll_x, y + view->scroll_y)) {
-               ev_view_set_cursor (view, EV_VIEW_CURSOR_IBEAM);
        } else if ((field = ev_view_get_form_field_at_location (view, x, y))) {
                if (field->is_read_only) {
                        if (view->cursor == EV_VIEW_CURSOR_LINK ||
@@ -1531,6 +1530,8 @@ ev_view_handle_cursor_over_xy (EvView *view, gint x, gint y)
                } else {
                        ev_view_set_cursor (view, EV_VIEW_CURSOR_LINK);
                }
+       } else if (location_in_text (view, x + view->scroll_x, y + view->scroll_y)) {
+               ev_view_set_cursor (view, EV_VIEW_CURSOR_IBEAM);
        } else {
                if (view->cursor == EV_VIEW_CURSOR_LINK ||
                    view->cursor == EV_VIEW_CURSOR_IBEAM)
@@ -3900,6 +3901,15 @@ ev_view_class_init (EvViewClass *class)
        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);
+       
 }
 
 static void
@@ -4342,10 +4352,19 @@ ev_view_presentation_transition_start (EvView *view)
 
        duration = ev_document_transition_get_page_duration (EV_DOCUMENT_TRANSITION (view->document),
                                                             view->current_page);
-       if (duration > 0)
-               view->trans_timeout_id = g_timeout_add (duration * 1000,
-                                                       (GSourceFunc) transition_next_page,
-                                                       view);
+       if (duration > 0) {
+#if GLIB_CHECK_VERSION (2, 13, 0)
+               view->trans_timeout_id =
+                       g_timeout_add_seconds (duration,
+                                              (GSourceFunc) transition_next_page,
+                                              view);
+#else
+               view->trans_timeout_id =
+                       g_timeout_add (duration * 1000,
+                                      (GSourceFunc) transition_next_page,
+                                      view);
+#endif
+       }
 }
 
 void
@@ -4685,13 +4704,14 @@ ev_view_zoom_for_size_single_page (EvView *view,
        ev_view_set_zoom (view, scale, FALSE);
 }
 
-void
+static void
 ev_view_set_zoom_for_size (EvView *view,
                           int     width,
                           int     height,
                           int     vsb_width,
                           int     hsb_height)
 {
+       g_return_if_fail (EV_IS_VIEW (view));
        g_return_if_fail (view->sizing_mode == EV_SIZING_FIT_WIDTH ||
                          view->sizing_mode == EV_SIZING_BEST_FIT);
        g_return_if_fail (width >= 0);
@@ -5564,3 +5584,37 @@ ev_scroll_type_get_type (void)
   }
   return etype;
 }
+
+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);
+       }
+}