X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-view.c;h=41efa337be8426d89b608865e8631595f01fe2cb;hb=f68e294b10ad9e1e9171e0235446ebbb58b73b65;hp=750ee5e4d3c5c5b26a2a92500914329b1edf1d76;hpb=6b31498bcccf5e228ba1a325206fb1d18e23e502;p=evince.git diff --git a/shell/ev-view.c b/shell/ev-view.c index 750ee5e4..41efa337 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -42,10 +42,6 @@ #include "ev-view.h" #include "ev-view-private.h" -#if !GTK_CHECK_VERSION (2, 11, 7) -#include "ev-tooltip.h" -#endif - #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)) @@ -124,7 +120,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); @@ -574,25 +570,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; @@ -603,12 +599,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: @@ -629,7 +625,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 */ @@ -642,7 +638,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 */ @@ -655,16 +651,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: @@ -1526,33 +1522,8 @@ ev_view_handle_cursor_over_xy (EvView *view, gint x, gint y) } link = ev_view_get_link_at_location (view, x, y); - -#if !GTK_CHECK_VERSION (2, 11, 7) - if (view->link_tooltip == NULL) { - view->link_tooltip = ev_tooltip_new (GTK_WIDGET (view)); - } - - if (view->hovered_link != link) { - view->hovered_link = link; - ev_tooltip_deactivate (EV_TOOLTIP (view->link_tooltip)); - } -#endif - if (link) { -#if GTK_CHECK_VERSION (2, 11, 7) g_object_set (view, "has-tooltip", TRUE, NULL); -#else - char *msg = tip_from_link (view, link); - - if (msg && g_utf8_validate (msg, -1, NULL)) { - EvTooltip *tooltip = EV_TOOLTIP (view->link_tooltip); - - ev_tooltip_set_position (tooltip, x, y); - ev_tooltip_set_text (tooltip, msg); - ev_tooltip_activate (tooltip); - } - g_free (msg); -#endif ev_view_set_cursor (view, EV_VIEW_CURSOR_LINK); } else if ((field = ev_view_get_form_field_at_location (view, x, y))) { if (field->is_read_only) { @@ -2589,7 +2560,6 @@ ev_view_popup_menu (GtkWidget *widget) return ev_view_do_popup_menu (EV_VIEW (widget), x, y); } -#if GTK_CHECK_VERSION (2, 11, 7) static void get_link_area (EvView *view, gint x, @@ -2641,7 +2611,6 @@ ev_view_query_tooltip (GtkWidget *widget, return TRUE; } -#endif /* GTK_CHECK_VERSION (2, 11, 7) */ static void start_selection_for_event (EvView *view, @@ -3038,15 +3007,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); @@ -3063,7 +3037,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; @@ -3113,10 +3087,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; } @@ -3522,13 +3497,6 @@ ev_view_leave_notify_event (GtkWidget *widget, GdkEventCrossing *event) if (view->cursor != EV_VIEW_CURSOR_NORMAL) ev_view_set_cursor (view, EV_VIEW_CURSOR_NORMAL); -#if !GTK_CHECK_VERSION (2, 11, 7) - if (view->link_tooltip) { - view->hovered_link = NULL; - ev_tooltip_deactivate (EV_TOOLTIP (view->link_tooltip)); - } -#endif - return FALSE; } @@ -3840,12 +3808,6 @@ ev_view_destroy (GtkObject *object) view->pixbuf_cache = NULL; } -#if !GTK_CHECK_VERSION (2, 11, 7) - if (view->link_tooltip) { - gtk_widget_destroy (view->link_tooltip); - view->link_tooltip = NULL; - } -#endif if (view->goto_window) { gtk_widget_destroy (view->goto_window); view->goto_window = NULL; @@ -4026,9 +3988,7 @@ ev_view_class_init (EvViewClass *class) widget_class->drag_motion = ev_view_drag_motion; widget_class->drag_data_received = ev_view_drag_data_received; widget_class->popup_menu = ev_view_popup_menu; -#if GTK_CHECK_VERSION (2, 11, 7) widget_class->query_tooltip = ev_view_query_tooltip; -#endif gtk_object_class->destroy = ev_view_destroy; @@ -4146,22 +4106,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); } @@ -4205,14 +4165,15 @@ ev_view_init (EvView *view) static void ev_view_change_page (EvView *view, - gint new_page) + gint new_page, + gboolean start_transition) { gint x, y; view->current_page = new_page; view->pending_scroll = SCROLL_TO_PAGE_POSITION; - if (view->presentation) + if (view->presentation && start_transition) ev_view_presentation_transition_start (view); gtk_widget_get_pointer (GTK_WIDGET (view), &x, &y); @@ -4227,7 +4188,24 @@ ev_view_transition_animation_finish (EvTransitionAnimation *animation, { g_object_unref (view->animation); view->animation = NULL; - ev_view_change_page (view, view->current_page); + ev_view_change_page (view, view->current_page, TRUE); +} + +/** + * ev_view_transition_animation_cancel: + * @animation: Animation to finish + * @view: An EvView + * + * Does almost the same as cancel, but without scheduling the transition. + */ + +static void +ev_view_transition_animation_cancel (EvTransitionAnimation *animation, + EvView *view) +{ + g_object_unref (view->animation); + view->animation = NULL; + ev_view_change_page (view, view->current_page, FALSE); } static void @@ -4290,7 +4268,7 @@ page_changed_cb (EvPageCache *page_cache, if (view->presentation) ev_view_presentation_animation_start (view, new_page); - ev_view_change_page (view, new_page); + ev_view_change_page (view, new_page, TRUE); } else { gtk_widget_queue_draw (GTK_WIDGET (view)); } @@ -4660,7 +4638,7 @@ ev_view_set_presentation (EvView *view, if (view->animation) { /* stop any running animation */ - ev_view_transition_animation_finish (view->animation, view); + ev_view_transition_animation_cancel (view->animation, view); } } @@ -5384,6 +5362,7 @@ merge_selection_region (EvView *view, /* Update the selection */ old_list = ev_pixbuf_cache_get_selection_list (view->pixbuf_cache); g_list_foreach (view->selection_info.selections, (GFunc)selection_free, NULL); + g_list_free (view->selection_info.selections); view->selection_info.selections = new_list; ev_pixbuf_cache_set_selection_list (view->pixbuf_cache, new_list); g_object_notify (G_OBJECT (view), "has-selection"); @@ -5492,6 +5471,7 @@ merge_selection_region (EvView *view, /* Free the old list, now that we're done with it. */ g_list_foreach (old_list, (GFunc) selection_free, NULL); + g_list_free (old_list); } static void @@ -5523,6 +5503,7 @@ static void clear_selection (EvView *view) { g_list_foreach (view->selection_info.selections, (GFunc)selection_free, NULL); + g_list_free (view->selection_info.selections); view->selection_info.selections = NULL; view->selection_info.in_selection = FALSE; if (view->pixbuf_cache) @@ -5815,8 +5796,7 @@ ev_view_next_page (EvView *view) } if (view->animation) { - ev_view_transition_animation_finish (view->animation, view); - return TRUE; + ev_view_transition_animation_cancel (view->animation, view); } ev_view_presentation_transition_stop (view); @@ -5869,8 +5849,7 @@ ev_view_previous_page (EvView *view) } if (view->animation) { - ev_view_transition_animation_finish (view->animation, view); - return TRUE; + ev_view_transition_animation_cancel (view->animation, view); } ev_view_reset_presentation_state (view); @@ -5911,25 +5890,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) {