From d35ff9d66c8d76d509819dabc7b97972b76d7438 Mon Sep 17 00:00:00 2001
From: Kristian Rietveld <kris@lanedo.com>
Date: Mon, 8 Oct 2012 11:48:38 +0200
Subject: [PATCH 27/68] Refrain from starting fading out while a gesture is in
 progress

---
 gtk/gtkscrolledwindow.c |   20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index 1fba87b..a04436b 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -153,6 +153,7 @@ typedef struct {

   gboolean       overlay_scrollbars;
   gboolean       is_snapping_back;
+  gboolean       gesture_in_progress;
 } GtkScrolledWindowPrivate;

 #define GTK_SCROLLED_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_SCROLLED_WINDOW, GtkScrolledWindowPrivate))
@@ -2151,7 +2152,10 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
        * FIXME: check if overshoot has really ended.
        */
       if (event->phase == GDK_EVENT_SCROLL_PHASE_START)
-        priv->is_snapping_back = FALSE;
+        {
+          priv->is_snapping_back = FALSE;
+          priv->gesture_in_progress = TRUE;
+        }

       if (is_momentum_event && !is_overshot)
         gtk_scrolled_window_calculate_velocity (scrolled_window, (GdkEvent *)event);
@@ -2291,13 +2295,20 @@ gtk_scrolled_window_scroll_event (GtkWidget      *widget,
        /* Reset force if gesture has ended. */
        if (event->phase == GDK_EVENT_SCROLL_PHASE_END)
          {
+           priv->gesture_in_progress = FALSE;
+
            priv->x_force = 0.0;
            priv->y_force = 0.0;
          }

-       /* Stop fade out timeout while we're overshot */
-       if (new_overshoot_x != 0 || new_overshoot_y != 0)
+       /* Stop fade out timeout while we're overshot or while
+        * a gesture is in progress.
+        */
+       if (new_overshoot_x != 0 || new_overshoot_y != 0 ||
+           priv->gesture_in_progress)
          gtk_scrolled_window_stop_fade_out_timeout (scrolled_window);
+       else
+         gtk_scrolled_window_start_fade_out_timeout (scrolled_window);

       /* If we should start a snap back and no current deceleration
        * is active, start the snap back.
@@ -3598,7 +3609,8 @@ gtk_scrolled_window_start_fade_in_animation (GtkScrolledWindow *scrolled_window)
   g_object_add_weak_pointer (G_OBJECT (priv->opacity_anim),
                              (gpointer *) &priv->opacity_anim);

-  gtk_scrolled_window_start_fade_out_timeout (scrolled_window);
+  if (!priv->gesture_in_progress)
+    gtk_scrolled_window_start_fade_out_timeout (scrolled_window);
 }

 static void
--
1.7.10.2 (Apple Git-33)