EvSizingMode sizing_mode;
PendingScroll pending_scroll;
+ gboolean pending_resize;
};
struct _EvViewClass {
} else {
view->scroll_y = 0;
}
-
- // gtk_widget_queue_draw (GTK_WIDGET (view));
- gdk_window_scroll (GTK_WIDGET (view)->window, dx, dy);
+
+
+ if (view->pending_resize)
+ gtk_widget_queue_draw (GTK_WIDGET (view));
+ else
+ gdk_window_scroll (GTK_WIDGET (view)->window, dx, dy);
if (view->document)
{
EvView *view = EV_VIEW (widget);
- if (!GTK_WIDGET_REALIZED (widget))
- return;
-
if (view->document == NULL) {
requisition->width = 1;
requisition->height = 1;
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);
gdk_window_set_background (widget->window, &widget->style->black);
else
gdk_window_set_background (widget->window, &widget->style->mid [GTK_STATE_NORMAL]);
-
- if (view->document) {
- /* We can't get page size without a target, so we have to
- * queue a size request at realization. Could be fixed
- * with EvDocument changes to allow setting a GdkScreen
- * without setting a target.
- */
- gtk_widget_queue_resize (widget);
- }
}
static void
{
if (view->current_page != new_page) {
- view_scroll_to_page (view, new_page);
+ if (view->pending_scroll != SCROLL_TO_CURRENT_PAGE) {
+ /* Should scroll right now */
+ view_scroll_to_page (view, new_page);
+ } else {
+ /* We'll scroll to new page on allocate */
+ view->current_page = new_page;
+ }
if (EV_IS_DOCUMENT_FIND (view->document)) {
view->find_page = new_page;
if (ABS (view->scale - scale) < EPSILON)
return;
view->scale = scale;
+ view->pending_resize = TRUE;
gtk_widget_queue_resize (GTK_WIDGET (view));
}