X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;ds=sidebyside;f=shell%2Fev-view.c;h=27a2149a2b63b16a65cb2b5f42abb622aa7ce29d;hb=6c259988fe555ccb2df458db5025e5cf80e881b1;hp=7275fb643b37bdf323ebaf26065b00cd8312aba9;hpb=1740f9ca0bb04fbc0afc9ddb9d23a6aa2090baa1;p=evince.git diff --git a/shell/ev-view.c b/shell/ev-view.c index 7275fb64..27a2149a 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -1348,14 +1348,14 @@ ev_view_handle_link (EvView *view, EvLink *link) if (!action) return; - g_signal_emit (view, signals[SIGNAL_HANDLE_LINK], 0, link); - type = ev_link_action_get_action_type (action); switch (type) { case EV_LINK_ACTION_TYPE_GOTO_DEST: { EvLinkDest *dest; + g_signal_emit (view, signals[SIGNAL_HANDLE_LINK], 0, link); + dest = ev_link_action_get_dest (action); ev_view_goto_dest (view, dest); } @@ -1369,8 +1369,8 @@ ev_view_handle_link (EvView *view, EvLink *link) } } -static gchar * -page_label_from_dest (EvView *view, EvLinkDest *dest) +gchar * +ev_view_page_label_from_dest (EvView *view, EvLinkDest *dest) { EvLinkDestType type; gchar *msg = NULL; @@ -1393,6 +1393,10 @@ page_label_from_dest (EvView *view, EvLinkDest *dest) } break; + case EV_LINK_DEST_TYPE_PAGE_LABEL: { + msg = g_strdup (ev_link_dest_get_page_label (dest)); + } + break; default: msg = ev_page_cache_get_page_label (view->page_cache, ev_link_dest_get_page (dest)); @@ -1442,8 +1446,8 @@ tip_from_link (EvView *view, EvLink *link) switch (type) { case EV_LINK_ACTION_TYPE_GOTO_DEST: - page_label = page_label_from_dest (view, - ev_link_action_get_dest (action)); + 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); break; @@ -1978,6 +1982,9 @@ ev_view_button_press_event (GtkWidget *widget, GdkEventButton *event) { EvView *view = EV_VIEW (widget); + + if (!view->document) + return FALSE; if (!GTK_WIDGET_HAS_FOCUS (widget)) { gtk_widget_grab_focus (widget); @@ -2000,7 +2007,8 @@ ev_view_button_press_event (GtkWidget *widget, } gtk_widget_queue_draw (widget); - } else if ((image = ev_view_get_image_at_location (view, event->x, event->y))) { + } else if (!location_in_text (view, event->x + view->scroll_x, event->y + view->scroll_y) && + (image = ev_view_get_image_at_location (view, event->x, event->y))) { if (view->image_dnd_info.image) g_object_unref (view->image_dnd_info.image); view->image_dnd_info.image = g_object_ref (image); @@ -2314,7 +2322,7 @@ ev_view_button_release_event (GtkWidget *widget, ev_view_set_cursor (view, EV_VIEW_CURSOR_NORMAL); } - if (view->document && view->pressed_button == 1) { + if (view->document && view->pressed_button != 3) { link = ev_view_get_link_at_location (view, event->x, event->y); } else { link = NULL; @@ -2343,7 +2351,23 @@ ev_view_button_release_event (GtkWidget *widget, view->selection_info.in_drag = FALSE; } else if (link) { - ev_view_handle_link (view, link); + if (event->button == 2) { + EvLinkAction *action; + EvLinkActionType type; + + action = ev_link_get_action (link); + if (!action) + return FALSE; + + type = ev_link_action_get_action_type (action); + if (type == EV_LINK_ACTION_TYPE_GOTO_DEST) { + g_signal_emit (view, + signals[SIGNAL_EXTERNAL_LINK], + 0, action); + } + } else { + ev_view_handle_link (view, link); + } } else if (view->presentation) { switch (event->button) { case 1: @@ -2563,6 +2587,9 @@ ev_view_key_press_event (GtkWidget *widget, EvView *view = EV_VIEW (widget); EvPresentationState current; + if (!view->document) + return FALSE; + if (!view->presentation || view->presentation_state == EV_PRESENTATION_END) return gtk_bindings_activate_event (GTK_OBJECT (widget), event); @@ -3761,6 +3788,9 @@ ev_view_zoom_in (EvView *view) { g_return_if_fail (view->sizing_mode == EV_SIZING_FREE); + if (view->presentation) + return; + view->pending_scroll = SCROLL_TO_CENTER; ev_view_set_zoom (view, ZOOM_IN_FACTOR, TRUE); } @@ -3770,6 +3800,9 @@ ev_view_zoom_out (EvView *view) { g_return_if_fail (view->sizing_mode == EV_SIZING_FREE); + if (view->presentation) + return; + view->pending_scroll = SCROLL_TO_CENTER; ev_view_set_zoom (view, ZOOM_OUT_FACTOR, TRUE); }