[gtk+/wip/baedert/gtkimageview: 107/113] Revert "range: Tweak button bindings"
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/baedert/gtkimageview: 107/113] Revert "range: Tweak button bindings"
- Date: Wed, 5 Aug 2015 13:07:58 +0000 (UTC)
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]