evince r3234 - in trunk: . shell



Author: nshmyrev
Date: Thu Oct 23 22:56:08 2008
New Revision: 3234
URL: http://svn.gnome.org/viewvc/evince?rev=3234&view=rev

Log:
2008-10-24  Nickolay V. Shmyrev  <nshmyrev yandex ru>

	* shell/ev-view.c (ev_view_change_page),
	(ev_view_transition_animation_finish),
	(ev_view_transition_animation_cancel), (page_changed_cb),
	(ev_view_set_presentation), (ev_view_next_page),
	(ev_view_previous_page):
	
	Cancel the animation without scheduling transition start
	and proceed to the next page to fix bug #516749.



Modified:
   trunk/ChangeLog
   trunk/shell/ev-view.c

Modified: trunk/shell/ev-view.c
==============================================================================
--- trunk/shell/ev-view.c	(original)
+++ trunk/shell/ev-view.c	Thu Oct 23 22:56:08 2008
@@ -4211,14 +4211,15 @@
 
 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);
@@ -4233,7 +4234,24 @@
 {
 	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
@@ -4296,7 +4314,7 @@
 		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));
 	}
@@ -4666,7 +4684,7 @@
 
 		if (view->animation) {
 			/* stop any running animation */
-			ev_view_transition_animation_finish (view->animation, view);
+			ev_view_transition_animation_cancel (view->animation, view);
 		}
 	}
 
@@ -5824,8 +5842,7 @@
 	}
 
 	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);
@@ -5878,8 +5895,7 @@
 	}	
 
         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);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]