[gtk+/wip/baedert/gtkimageview: 107/113] Revert "range: Tweak button bindings"



commit ce2f57fbefd469cceed89556d4f2d48d3516157d
Author: Timm Bäder <mail baedert org>
Date:   Mon Aug 3 15:00:50 2015 +0200

    Revert "range: Tweak button bindings"
    
    This reverts commit 0f479deb5eb90fe131a91b7e6d0a8df7f93fec2a.

 gtk/gtkrange.c |  157 ++++++++++++++++++++++++++++----------------------------
 1 files changed, 79 insertions(+), 78 deletions(-)
---
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
index b006382..7d91bda 100644
--- a/gtk/gtkrange.c
+++ b/gtk/gtkrange.c
@@ -2479,7 +2479,7 @@ gtk_range_multipress_gesture_pressed (GtkGestureMultiPress *gesture,
   const GdkEvent *event;
   GdkInputSource source;
   gboolean primary_warps;
-  gboolean shift_pressed;
+  gint page_increment_button, warp_button;
   guint button;
   GdkModifierType state_mask;
 
@@ -2490,7 +2490,6 @@ gtk_range_multipress_gesture_pressed (GtkGestureMultiPress *gesture,
   button = gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture));
   event = gtk_gesture_get_last_event (GTK_GESTURE (gesture), sequence);
   gdk_event_get_state (event, &state_mask);
-  shift_pressed = (state_mask & GDK_SHIFT_MASK) != 0;
 
   source_device = gdk_event_get_source_device ((GdkEvent *) event);
   source = gdk_device_get_source (source_device);
@@ -2503,6 +2502,16 @@ gtk_range_multipress_gesture_pressed (GtkGestureMultiPress *gesture,
   g_object_get (gtk_widget_get_settings (widget),
                 "gtk-primary-button-warps-slider", &primary_warps,
                 NULL);
+  if (primary_warps)
+    {
+      warp_button = GDK_BUTTON_PRIMARY;
+      page_increment_button = GDK_BUTTON_SECONDARY;
+    }
+  else
+    {
+      warp_button = GDK_BUTTON_MIDDLE;
+      page_increment_button = GDK_BUTTON_PRIMARY;
+    }
 
   if (priv->mouse_location == MOUSE_SLIDER &&
       gdk_event_triggers_context_menu ((GdkEvent *)event))
@@ -2514,35 +2523,42 @@ gtk_range_multipress_gesture_pressed (GtkGestureMultiPress *gesture,
       return;
     }
 
-  if (priv->mouse_location == MOUSE_SLIDER)
+  if (source != GDK_SOURCE_TOUCHSCREEN &&
+      priv->mouse_location == MOUSE_TROUGH &&
+      button == page_increment_button)
     {
-      GdkRectangle slider;
+      /* button 2 steps by page increment, as with button 2 on a stepper
+       */
+      GtkScrollType scroll;
+      gdouble click_value;
 
-      /* Shift-click in the slider = fine adjustment */
-      if (shift_pressed)
-        update_zoom_state (range, TRUE);
+      click_value = coord_to_value (range,
+                                    priv->orientation == GTK_ORIENTATION_VERTICAL ?
+                                    y : x);
 
-      slider = priv->slider;
+      priv->trough_click_forward = click_value > gtk_adjustment_get_value (priv->adjustment);
+      range_grab_add (range, MOUSE_TROUGH);
 
-      if (priv->orientation == GTK_ORIENTATION_VERTICAL)
+      scroll = range_get_scroll_for_grab (range);
+
+      if (state_mask & GDK_SHIFT_MASK)
         {
-          priv->slide_initial_slider_position = slider.y;
-          priv->slide_initial_coordinate_delta = y - slider.y;
+          remove_autoscroll (range);
+          range->priv->autoscroll_mode = priv->trough_click_forward ? GTK_SCROLL_END : GTK_SCROLL_START;
+          add_autoscroll (range);
         }
       else
         {
-          priv->slide_initial_slider_position = slider.x;
-          priv->slide_initial_coordinate_delta = x - slider.x;
+          gtk_range_add_step_timer (range, scroll);
         }
-
-      range_grab_add (range, MOUSE_SLIDER);
-
-      gtk_widget_queue_draw (widget);
     }
-  else if (priv->mouse_location == MOUSE_STEPPER_A ||
-           priv->mouse_location == MOUSE_STEPPER_B ||
-           priv->mouse_location == MOUSE_STEPPER_C ||
-           priv->mouse_location == MOUSE_STEPPER_D)
+  else if ((priv->mouse_location == MOUSE_STEPPER_A ||
+            priv->mouse_location == MOUSE_STEPPER_B ||
+            priv->mouse_location == MOUSE_STEPPER_C ||
+            priv->mouse_location == MOUSE_STEPPER_D) &&
+           (button == GDK_BUTTON_PRIMARY ||
+            button == GDK_BUTTON_MIDDLE ||
+            button == GDK_BUTTON_SECONDARY))
     {
       GtkScrollType scroll;
 
@@ -2560,30 +2576,50 @@ gtk_range_multipress_gesture_pressed (GtkGestureMultiPress *gesture,
           add_autoscroll (range);
         }
     }
-  else if (priv->mouse_location == MOUSE_TROUGH &&
-           (source == GDK_SOURCE_TOUCHSCREEN ||
-            (button == GDK_BUTTON_PRIMARY &&
-             ((primary_warps && !shift_pressed) ||
-              (!primary_warps && shift_pressed)))))
+  else if ((priv->mouse_location == MOUSE_TROUGH &&
+            (source == GDK_SOURCE_TOUCHSCREEN ||
+             button == warp_button)) ||
+           priv->mouse_location == MOUSE_SLIDER)
     {
-      /* warp to location */
+      gboolean need_value_update = FALSE;
       GdkRectangle slider;
-      gdouble slider_low_value, slider_high_value, new_value;
 
-      slider_high_value =
-        coord_to_value (range,
-                        priv->orientation == GTK_ORIENTATION_VERTICAL ?
-                        y : x);
-      slider_low_value =
-        coord_to_value (range,
-                        priv->orientation == GTK_ORIENTATION_VERTICAL ?
-                        y - priv->slider.height :
-                        x - priv->slider.width);
-
-      /* compute new value for warped slider */
-      new_value = slider_low_value + (slider_high_value - slider_low_value) / 2;
+      /* Any button can be used to drag the slider, but you can start
+       * dragging the slider with a trough click using button 1;
+       * we warp the slider to mouse position, then begin the slider drag.
+       */
+      if (priv->mouse_location != MOUSE_SLIDER)
+        {
+          gdouble slider_low_value, slider_high_value, new_value;
+
+          slider_high_value =
+            coord_to_value (range,
+                            priv->orientation == GTK_ORIENTATION_VERTICAL ?
+                            y : x);
+          slider_low_value =
+            coord_to_value (range,
+                            priv->orientation == GTK_ORIENTATION_VERTICAL ?
+                            y - priv->slider.height :
+                            x - priv->slider.width);
+
+          /* compute new value for warped slider */
+          new_value = slider_low_value + (slider_high_value - slider_low_value) / 2;
+
+          gtk_range_compute_slider_position (range, new_value, &slider);
+
+         /* defer adjustment updates to update_slider_position() in order
+          * to keep pixel quantisation
+          */
+         need_value_update = TRUE;
+        }
+      else
+        {
+          /* Shift-click in the slider = fine adjustment */
+          if (state_mask & GDK_SHIFT_MASK)
+            update_zoom_state (range, TRUE);
 
-      gtk_range_compute_slider_position (range, new_value, &slider);
+          slider = priv->slider;
+        }
 
       if (priv->orientation == GTK_ORIENTATION_VERTICAL)
         {
@@ -2600,43 +2636,8 @@ gtk_range_multipress_gesture_pressed (GtkGestureMultiPress *gesture,
 
       gtk_widget_queue_draw (widget);
 
-      update_slider_position (range, x, y);
-    }
-  else if (priv->mouse_location == MOUSE_TROUGH &&
-           button == GDK_BUTTON_PRIMARY &&
-           ((primary_warps && shift_pressed) ||
-            (!primary_warps && !shift_pressed)))
-    {
-      /* jump by pages */
-      GtkScrollType scroll;
-      gdouble click_value;
-
-      click_value = coord_to_value (range,
-                                    priv->orientation == GTK_ORIENTATION_VERTICAL ?
-                                    y : x);
-
-      priv->trough_click_forward = click_value > gtk_adjustment_get_value (priv->adjustment);
-      range_grab_add (range, MOUSE_TROUGH);
-
-      scroll = range_get_scroll_for_grab (range);
-      gtk_range_add_step_timer (range, scroll);
-    }
-  else if (priv->mouse_location == MOUSE_TROUGH &&
-           button == GDK_BUTTON_SECONDARY)
-    {
-      /* autoscroll */
-      gdouble click_value;
-
-      click_value = coord_to_value (range,
-                                    priv->orientation == GTK_ORIENTATION_VERTICAL ?
-                                    y : x);
-
-      priv->trough_click_forward = click_value > gtk_adjustment_get_value (priv->adjustment);
-      range_grab_add (range, MOUSE_TROUGH);
-
-      remove_autoscroll (range);
-      range->priv->autoscroll_mode = priv->trough_click_forward ? GTK_SCROLL_END : GTK_SCROLL_START;
-      add_autoscroll (range);
+      if (need_value_update)
+        update_slider_position (range, x, y);
     }
 
   if (priv->grab_location == MOUSE_SLIDER);


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