X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-view.c;h=bbfeecfa64d2b4acb153f331b32813a44120a07a;hb=bc1469dfae8b36ed73052b1cbcdaed3c2fcaf9a2;hp=60f82e3d8433d3c176897540dcdd73a7d3e945d3;hpb=c12e2f7c2d59af4e4f5fddec97f24970e6d9d5c4;p=evince.git diff --git a/shell/ev-view.c b/shell/ev-view.c index 60f82e3d..bbfeecfa 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -489,7 +489,7 @@ view_update_range_and_current_page (EvView *view) } view->end_page = i; - } else if (found) { + } else if (found && view->current_page <= view->end_page) { break; } } @@ -1154,21 +1154,26 @@ static void goto_fitr_dest (EvView *view, EvLinkDest *dest) { EvPoint doc_point; - double zoom; + gdouble zoom, left, top; + gboolean change_left, change_top; + + left = ev_link_dest_get_left (dest, &change_left); + top = ev_link_dest_get_top (dest, &change_top); - zoom = zoom_for_size_best_fit (ev_link_dest_get_right (dest) - ev_link_dest_get_left (dest), - ev_link_dest_get_bottom (dest) - ev_link_dest_get_top (dest), + zoom = zoom_for_size_best_fit (ev_link_dest_get_right (dest) - left, + ev_link_dest_get_bottom (dest) - top, ev_view_get_width (view), ev_view_get_height (view), 0, 0); ev_view_set_sizing_mode (view, EV_SIZING_FREE); ev_view_set_zoom (view, zoom, FALSE); - doc_point.x = ev_link_dest_get_left (dest); - doc_point.y = ev_link_dest_get_top (dest); + doc_point.x = change_left ? left : 0; + doc_point.y = change_top ? top : 0; view->current_page = ev_link_dest_get_page (dest); - view->pending_point = doc_point; + if (change_left || change_top) + view->pending_point = doc_point; view->pending_scroll = SCROLL_TO_PAGE_POSITION; gtk_widget_queue_resize (GTK_WIDGET (view)); @@ -1179,12 +1184,14 @@ goto_fitv_dest (EvView *view, EvLinkDest *dest) { EvPoint doc_point; int doc_width, doc_height, page; - double zoom; + double zoom, left; + gboolean change_left; page = ev_link_dest_get_page (dest); ev_page_cache_get_size (view->page_cache, page, 0, 1.0, &doc_width, &doc_height); - doc_point.x = ev_link_dest_get_left (dest); + left = ev_link_dest_get_left (dest, &change_left); + doc_point.x = change_left ? left : 0; doc_point.y = 0; zoom = zoom_for_size_fit_height (doc_width - doc_point.x , doc_height, @@ -1195,7 +1202,8 @@ goto_fitv_dest (EvView *view, EvLinkDest *dest) ev_view_set_zoom (view, zoom, FALSE); view->current_page = page; - view->pending_point = doc_point; + if (change_left) + view->pending_point = doc_point; view->pending_scroll = SCROLL_TO_PAGE_POSITION; gtk_widget_queue_resize (GTK_WIDGET (view)); @@ -1206,15 +1214,18 @@ goto_fith_dest (EvView *view, EvLinkDest *dest) { EvPoint doc_point; int doc_width, doc_height, page; - double zoom; + gdouble zoom, top; + gboolean change_top; page = ev_link_dest_get_page (dest); ev_page_cache_get_size (view->page_cache, page, 0, 1.0, &doc_width, &doc_height); + top = ev_link_dest_get_top (dest, &change_top); + doc_point.x = 0; - doc_point.y = ev_link_dest_get_top (dest); + doc_point.y = change_top ? top : 0; - zoom = zoom_for_size_fit_width (doc_width, ev_link_dest_get_top (dest), + zoom = zoom_for_size_fit_width (doc_width, top, ev_view_get_width (view), ev_view_get_height (view), 0); @@ -1222,7 +1233,8 @@ goto_fith_dest (EvView *view, EvLinkDest *dest) ev_view_set_zoom (view, zoom, FALSE); view->current_page = page; - view->pending_point = doc_point; + if (change_top) + view->pending_point = doc_point; view->pending_scroll = SCROLL_TO_PAGE_POSITION; gtk_widget_queue_resize (GTK_WIDGET (view)); @@ -1255,21 +1267,26 @@ goto_xyz_dest (EvView *view, EvLinkDest *dest) { EvPoint doc_point; gint page; - double zoom; + gdouble zoom, left, top; + gboolean change_zoom, change_left, change_top; - zoom = ev_link_dest_get_zoom (dest); + zoom = ev_link_dest_get_zoom (dest, &change_zoom); page = ev_link_dest_get_page (dest); - if (zoom > 1) { + if (change_zoom && zoom > 1) { ev_view_set_sizing_mode (view, EV_SIZING_FREE); ev_view_set_zoom (view, zoom, FALSE); } - doc_point.x = ev_link_dest_get_left (dest); - doc_point.y = ev_link_dest_get_top (dest); + left = ev_link_dest_get_left (dest, &change_left); + top = ev_link_dest_get_top (dest, &change_top); + + doc_point.x = change_left ? left : 0; + doc_point.y = change_top ? top : 0; view->current_page = page; - view->pending_point = doc_point; + if (change_left || change_top) + view->pending_point = doc_point; view->pending_scroll = SCROLL_TO_PAGE_POSITION; gtk_widget_queue_resize (GTK_WIDGET (view)); @@ -1537,7 +1554,8 @@ ev_view_handle_cursor_over_xy (EvView *view, gint x, gint y) } 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 || - view->cursor == EV_VIEW_CURSOR_IBEAM) + view->cursor == EV_VIEW_CURSOR_IBEAM || + view->cursor == EV_VIEW_CURSOR_DRAG) ev_view_set_cursor (view, EV_VIEW_CURSOR_NORMAL); } else if (EV_IS_FORM_FIELD_TEXT (field)) { ev_view_set_cursor (view, EV_VIEW_CURSOR_IBEAM); @@ -1548,7 +1566,8 @@ ev_view_handle_cursor_over_xy (EvView *view, gint x, gint y) ev_view_set_cursor (view, EV_VIEW_CURSOR_IBEAM); } else { if (view->cursor == EV_VIEW_CURSOR_LINK || - view->cursor == EV_VIEW_CURSOR_IBEAM) + view->cursor == EV_VIEW_CURSOR_IBEAM || + view->cursor == EV_VIEW_CURSOR_DRAG) ev_view_set_cursor (view, EV_VIEW_CURSOR_NORMAL); } } @@ -2659,6 +2678,9 @@ ev_view_button_press_event (GtkWidget *widget, } gtk_widget_queue_draw (widget); + } else if ((field = ev_view_get_form_field_at_location (view, event->x, event->y))) { + ev_view_remove_all (view); + ev_view_handle_form_field (view, field, 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) @@ -2668,9 +2690,6 @@ ev_view_button_press_event (GtkWidget *widget, view->image_dnd_info.start.x = event->x + view->scroll_x; view->image_dnd_info.start.y = event->y + view->scroll_y; - } else if ((field = ev_view_get_form_field_at_location (view, event->x, event->y))) { - ev_view_remove_all (view); - ev_view_handle_form_field (view, field, event->x, event->y); } else { ev_view_remove_all (view); @@ -4257,7 +4276,9 @@ ev_view_set_zoom (EvView *view, else scale = factor; - scale = CLAMP (scale, view->min_scale, view->max_scale); + scale = CLAMP (scale, + view->sizing_mode == EV_SIZING_FREE ? view->min_scale : 0, + view->max_scale); if (ABS (view->scale - scale) < EPSILON) return;