factor = 1.0;
switch (view->pending_scroll) {
case SCROLL_TO_KEEP_POSITION:
+ case SCROLL_TO_FIND_LOCATION:
factor = (adjustment->value) / adjustment->upper;
break;
case SCROLL_TO_PAGE_POSITION:
*/
switch (view->pending_scroll) {
case SCROLL_TO_KEEP_POSITION:
+ case SCROLL_TO_FIND_LOCATION:
new_value = CLAMP (adjustment->upper * factor + 0.5, 0, adjustment->upper - adjustment->page_size);
gtk_adjustment_set_value (adjustment, (int)new_value);
break;
gint current_page;
gint best_current_page = -1;
- if (view->pending_scroll != SCROLL_TO_KEEP_POSITION)
- return;
-
/* Presentation trumps all other modes */
if (view->presentation) {
view->start_page = view->current_page;
best_current_page = MAX (best_current_page, view->start_page);
current_page = ev_page_cache_get_current_page (view->page_cache);
- if (current_page != best_current_page) {
+ if ((current_page != best_current_page) && (view->pending_scroll == SCROLL_TO_KEEP_POSITION)) {
view->current_page = best_current_page;
ev_page_cache_set_current_page (view->page_cache, best_current_page);
}
view->jump_to_find_result = FALSE;
- if (view->presentation) {
+ if (view->presentation || view->sizing_mode == EV_SIZING_BEST_FIT) {
switch (scroll) {
case EV_SCROLL_PAGE_BACKWARD:
case EV_SCROLL_STEP_BACKWARD:
GtkAdjustment *adjustment;
int value;
- view->pending_scroll = SCROLL_TO_KEEP_POSITION;
+ view->pending_scroll = SCROLL_TO_FIND_LOCATION;
adjustment = view->vadjustment;
widget->allocation.width + MARGIN);
gtk_adjustment_set_value (view->hadjustment, value);
}
+
+ gtk_widget_queue_resize (GTK_WIDGET (view));
}
/*** Geometry computations ***/
goto_fitr_dest (EvView *view, EvLinkDest *dest)
{
EvPoint doc_point;
- int page;
double zoom;
zoom = zoom_for_size_best_fit (ev_link_dest_get_right (dest) - ev_link_dest_get_left (dest),
- ev_link_dest_get_top (dest) - ev_link_dest_get_bottom (dest),
+ ev_link_dest_get_bottom (dest) - ev_link_dest_get_top (dest),
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);
- page = ev_link_dest_get_page (dest);
doc_point.x = ev_link_dest_get_left (dest);
doc_point.y = ev_link_dest_get_top (dest);
- view->current_page = page;
+ view->current_page = ev_link_dest_get_page (dest);
view->pending_point = doc_point;
view->pending_scroll = SCROLL_TO_PAGE_POSITION;
ev_page_cache_get_size (view->page_cache, page, 0, 1.0, &doc_width, &doc_height);
doc_point.x = 0;
- doc_point.y = doc_height - ev_link_dest_get_top (dest);
+ doc_point.y = ev_link_dest_get_top (dest);
zoom = zoom_for_size_fit_width (doc_width, ev_link_dest_get_top (dest),
ev_view_get_width (view),
ev_view_get_height (view), 0);
- ev_view_set_sizing_mode (view, EV_SIZING_FREE);
+ ev_view_set_sizing_mode (view, EV_SIZING_FIT_WIDTH);
ev_view_set_zoom (view, zoom, FALSE);
view->current_page = page;
zoom = zoom_for_size_best_fit (doc_width, doc_height, ev_view_get_width (view),
ev_view_get_height (view), 0, 0);
- ev_view_set_sizing_mode (view, EV_SIZING_FREE);
+ ev_view_set_sizing_mode (view, EV_SIZING_BEST_FIT);
ev_view_set_zoom (view, zoom, FALSE);
view->current_page = page;
goto_xyz_dest (EvView *view, EvLinkDest *dest)
{
EvPoint doc_point;
- int height, page;
+ gint page;
double zoom;
zoom = ev_link_dest_get_zoom (dest);
page = ev_link_dest_get_page (dest);
- ev_page_cache_get_size (view->page_cache, page, 0, 1.0, NULL, &height);
- if (zoom != 0) {
+ if (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 = height - ev_link_dest_get_top (dest);
+ doc_point.y = ev_link_dest_get_top (dest);
view->current_page = page;
view->pending_point = doc_point;
case EV_LINK_DEST_TYPE_XYZ:
goto_xyz_dest (view, dest);
break;
+ case EV_LINK_DEST_TYPE_PAGE_LABEL:
+ ev_page_cache_set_page_label (view->page_cache, ev_link_dest_get_page_label (dest));
+ break;
default:
g_assert_not_reached ();
}
break;
case EV_LINK_ACTION_TYPE_GOTO_REMOTE:
if (title) {
- msg = g_strdup_printf (_("Go to %s on file %s"), title,
+ msg = g_strdup_printf (_("Go to %s on file ā%sā"), title,
ev_link_action_get_filename (action));
} else {
- msg = g_strdup_printf (_("Go to file %s"),
+ msg = g_strdup_printf (_("Go to file ā%sā"),
ev_link_action_get_filename (action));
}
view_set_adjustment_values (view, GTK_ORIENTATION_HORIZONTAL);
view_set_adjustment_values (view, GTK_ORIENTATION_VERTICAL);
- view->pending_scroll = SCROLL_TO_KEEP_POSITION;
- view->pending_resize = FALSE;
-
if (view->document)
view_update_range_and_current_page (view);
+ view->pending_scroll = SCROLL_TO_KEEP_POSITION;
+ view->pending_resize = FALSE;
+
GTK_WIDGET_CLASS (ev_view_parent_class)->size_allocate (widget, allocation);
}
for (i = view->start_page; i <= view->end_page; i++) {
GdkRectangle page_area;
GtkBorder border;
- gboolean page_ready;
+ gboolean page_ready = TRUE;
if (!get_page_extents (view, i, &page_area, &border))
continue;
ev_view_set_cursor (view, EV_VIEW_CURSOR_NORMAL);
}
- if (view->document) {
+ if (view->document && view->pressed_button == 1) {
link = ev_view_get_link_at_location (view, event->x, event->y);
} else {
link = NULL;
double real_scale;
int target_width;
+ /* Don't annoy users with loading messages during presentations.
+ * FIXME: Temporary "workaround" for
+ * http://bugzilla.gnome.org/show_bug.cgi?id=320352 */
+ if (view->presentation)
+ return;
+
const char *loading_text = _("Loading...");
layout = gtk_widget_create_pango_layout (GTK_WIDGET (view), loading_text);
gint current_page;
g_assert (view->document);
-
+
if (! gdk_rectangle_intersect (page_area, expose_area, &overlap))
return;
if (view->link_tooltip) {
gtk_widget_destroy (view->link_tooltip);
+ view->link_tooltip = NULL;
}
if (view->selection_scroll_id) {