[gtk+/multitouch-for-3.4: 82/89] scrolledwindow: store whether the last button press was valid independently
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/multitouch-for-3.4: 82/89] scrolledwindow: store whether the last button press was valid independently
- Date: Thu, 23 Feb 2012 12:32:48 +0000 (UTC)
commit fae5306cdcdc4bb9da2fbac61981a2aa6d5463b7
Author: Carlos Garnacho <carlosg gnome org>
Date: Mon Feb 6 20:11:46 2012 +0100
scrolledwindow: store whether the last button press was valid independently
Use a separate boolean instead of coding it up in the last button press
coordinates. This incidentally fixes 0-threshold on kinetic scrolling,
allowing the child widget to get button releases before it prematurely
gets ::grab-broken.
gtk/gtkscrolledwindow.c | 27 ++++++++++++---------------
1 files changed, 12 insertions(+), 15 deletions(-)
---
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index 5956316..3fe9946 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -157,6 +157,7 @@ struct _GtkScrolledWindowPrivate
GdkDevice *drag_device;
guint kinetic_scrolling_flags : 2;
guint in_drag : 1;
+ guint last_button_event_valid : 1;
guint captured_event_id;
guint release_timeout_id;
@@ -595,8 +596,6 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
gtk_scrolled_window_update_real_placement (scrolled_window);
priv->min_content_width = -1;
priv->min_content_height = -1;
- priv->last_button_event_x_root = -TOUCH_BYPASS_CAPTURED_THRESHOLD;
- priv->last_button_event_y_root = -TOUCH_BYPASS_CAPTURED_THRESHOLD;
gtk_scrolled_window_set_kinetic_scrolling (scrolled_window,
GTK_KINETIC_SCROLLING_ENABLED |
@@ -2533,13 +2532,13 @@ gtk_scrolled_window_captured_button_release (GtkWidget *widget,
{
gtk_scrolled_window_start_deceleration (scrolled_window);
priv->x_velocity = priv->y_velocity = 0;
- priv->last_button_event_x_root = -TOUCH_BYPASS_CAPTURED_THRESHOLD;
- priv->last_button_event_y_root = -TOUCH_BYPASS_CAPTURED_THRESHOLD;
+ priv->last_button_event_valid = FALSE;
}
else
{
priv->last_button_event_x_root = event->x_root;
priv->last_button_event_y_root = event->y_root;
+ priv->last_button_event_valid = TRUE;
}
if (priv->kinetic_scrolling_flags & GTK_KINETIC_SCROLLING_CAPTURE_BUTTON_PRESS)
@@ -2584,6 +2583,8 @@ gtk_scrolled_window_captured_motion_notify (GtkWidget *widget,
g_source_remove (priv->release_timeout_id);
priv->release_timeout_id = 0;
}
+
+ priv->last_button_event_valid = FALSE;
priv->in_drag = TRUE;
}
else
@@ -2598,8 +2599,7 @@ gtk_scrolled_window_captured_motion_notify (GtkWidget *widget,
NULL,
event->time);
- priv->last_button_event_x_root = -TOUCH_BYPASS_CAPTURED_THRESHOLD;
- priv->last_button_event_y_root = -TOUCH_BYPASS_CAPTURED_THRESHOLD;
+ priv->last_button_event_valid = FALSE;
if (priv->button_press_event)
{
@@ -2687,17 +2687,18 @@ gtk_scrolled_window_captured_button_press (GtkWidget *widget,
/* Check whether the button press is close to the previous one,
* take that as a shortcut to get the child widget handle events
*/
- if (ABS (event->x_root - priv->last_button_event_x_root) < TOUCH_BYPASS_CAPTURED_THRESHOLD &&
+ if (priv->last_button_event_valid &&
+ ABS (event->x_root - priv->last_button_event_x_root) < TOUCH_BYPASS_CAPTURED_THRESHOLD &&
ABS (event->y_root - priv->last_button_event_y_root) < TOUCH_BYPASS_CAPTURED_THRESHOLD)
{
- priv->last_button_event_x_root = -TOUCH_BYPASS_CAPTURED_THRESHOLD;
- priv->last_button_event_y_root = -TOUCH_BYPASS_CAPTURED_THRESHOLD;
+ priv->last_button_event_valid = FALSE;
return FALSE;
}
priv->last_button_event_x_root = priv->last_motion_event_x_root = event->x_root;
priv->last_button_event_y_root = priv->last_motion_event_y_root = event->y_root;
priv->last_motion_event_time = event->time;
+ priv->last_button_event_valid = TRUE;
if (event->button != 1)
return FALSE;
@@ -2752,10 +2753,7 @@ gtk_scrolled_window_captured_event (GtkWidget *widget,
if (priv->drag_device)
retval = gtk_scrolled_window_captured_button_release (widget, event);
else
- {
- priv->last_button_event_x_root = -TOUCH_BYPASS_CAPTURED_THRESHOLD;
- priv->last_button_event_y_root = -TOUCH_BYPASS_CAPTURED_THRESHOLD;
- }
+ priv->last_button_event_valid = FALSE;
break;
case GDK_MOTION_NOTIFY:
if (priv->drag_device)
@@ -3308,8 +3306,7 @@ gtk_scrolled_window_grab_notify (GtkWidget *widget,
else
gtk_scrolled_window_cancel_deceleration (scrolled_window);
- priv->last_button_event_x_root = -TOUCH_BYPASS_CAPTURED_THRESHOLD;
- priv->last_button_event_y_root = -TOUCH_BYPASS_CAPTURED_THRESHOLD;
+ priv->last_button_event_valid = FALSE;
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]