[gtk+/multitouch: 69/123] gtk, range: Have slider jump to the pointer coordinates on touch devices
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/multitouch: 69/123] gtk, range: Have slider jump to the pointer coordinates on touch devices
- Date: Mon, 16 Jan 2012 18:48:02 +0000 (UTC)
commit 7f4ee9c1b9c705d23f1993579cee03e9b7f0cc20
Author: Carlos Garnacho <carlosg gnome org>
Date: Thu Jan 5 00:21:36 2012 +0100
gtk,range: Have slider jump to the pointer coordinates on touch devices
This widget is too narrow to make touch interaction tricky enough, so
don't add the penalty of having the slider run farther from the touch
coordinates if it happens to miss the slider.
gtk/gtkrange.c | 17 +++++++++++------
1 files changed, 11 insertions(+), 6 deletions(-)
---
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
index b40d1a2..627d3f3 100644
--- a/gtk/gtkrange.c
+++ b/gtk/gtkrange.c
@@ -2525,7 +2525,8 @@ gtk_range_button_press (GtkWidget *widget,
{
GtkRange *range = GTK_RANGE (widget);
GtkRangePrivate *priv = range->priv;
- GdkDevice *device;
+ GdkDevice *device, *source_device;
+ GdkInputSource source;
if (!gtk_widget_has_focus (widget))
gtk_widget_grab_focus (widget);
@@ -2535,13 +2536,17 @@ gtk_range_button_press (GtkWidget *widget,
return FALSE;
device = gdk_event_get_device ((GdkEvent *) event);
+ source_device = gdk_event_get_source_device ((GdkEvent *) event);
+ source = gdk_device_get_source (source_device);
+
priv->mouse_x = event->x;
priv->mouse_y = event->y;
if (gtk_range_update_mouse_location (range))
gtk_widget_queue_draw (widget);
- if (priv->mouse_location == MOUSE_TROUGH &&
+ if (source != GDK_SOURCE_TOUCH &&
+ priv->mouse_location == MOUSE_TROUGH &&
event->button == 1)
{
/* button 1 steps by page increment, as with button 2 on a stepper
@@ -2590,17 +2595,17 @@ gtk_range_button_press (GtkWidget *widget,
return TRUE;
}
else if ((priv->mouse_location == MOUSE_TROUGH &&
- event->button == 2) ||
+ (source == GDK_SOURCE_TOUCH || event->button == 2)) ||
priv->mouse_location == MOUSE_SLIDER)
{
gboolean need_value_update = FALSE;
/* Any button can be used to drag the slider, but you can start
* dragging the slider with a trough click using button 2;
- * On button 2 press, we warp the slider to mouse position,
- * then begin the slider drag.
+ * On button 2 press and touch devices, we warp the slider to
+ * mouse position, then begin the slider drag.
*/
- if (event->button == 2)
+ if (event->button == 2 || source == GDK_SOURCE_TOUCH)
{
gdouble slider_low_value, slider_high_value, new_value;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]