paned: Deal with new touch events

This commit is contained in:
Matthias Clasen
2012-02-24 10:21:06 -05:00
parent 953f383d62
commit 6ddf197e97

View File

@@ -1902,6 +1902,7 @@ gtk_paned_captured_event (GtkWidget *widget,
GdkWindow *pane_window;
TouchInfo new = { 0 }, *info;
guint touch_id, index;
gdouble event_x, event_y;
gint x, y;
device = gdk_event_get_device (event);
@@ -1914,6 +1915,8 @@ gtk_paned_captured_event (GtkWidget *widget,
if (!gdk_event_get_touch_id (event, &touch_id))
touch_id = 0;
gdk_event_get_coords (event, &event_x, &event_y);
if (!source_device ||
gdk_device_get_source (source_device) != GDK_SOURCE_TOUCH)
return FALSE;
@@ -1921,14 +1924,14 @@ gtk_paned_captured_event (GtkWidget *widget,
switch (event->type)
{
case GDK_BUTTON_PRESS:
case GDK_TOUCH_PRESS:
case GDK_TOUCH_BEGIN:
if (priv->touches->len == 2)
return FALSE;
pane_window = _gtk_paned_find_pane_window (widget, event);
gtk_widget_translate_coordinates (gtk_get_event_widget (event),
widget,
event->button.x, event->button.y,
(gint)event_x, (gint)event_y,
&x, &y);
for (index = 0; index < priv->touches->len; index++)
@@ -1960,7 +1963,6 @@ gtk_paned_captured_event (GtkWidget *widget,
else if (priv->touches->len == 2)
{
GtkWidget *event_widget;
gint x, y;
/* It's the second touch, release (don't emit) the
* held button/touch presses.
@@ -1976,20 +1978,17 @@ gtk_paned_captured_event (GtkWidget *widget,
if (event_widget == widget)
{
x = event->button.x;
y = event->button.y;
if (pane_window == priv->child2_window)
{
if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
x += priv->handle_pos.x + priv->handle_pos.width;
event_x += priv->handle_pos.x + priv->handle_pos.width;
else
y += priv->handle_pos.y + priv->handle_pos.height;
event_y += priv->handle_pos.y + priv->handle_pos.height;
}
}
else
gtk_widget_translate_coordinates (event_widget, widget,
event->button.x, event->button.y,
(gint)event_x, (gint)event_y,
&x, &y);
start_drag (paned, device, x, y,
@@ -2005,7 +2004,7 @@ gtk_paned_captured_event (GtkWidget *widget,
break;
case GDK_BUTTON_RELEASE:
case GDK_TOUCH_RELEASE:
case GDK_TOUCH_END:
info = _gtk_paned_find_touch (GTK_PANED (widget), device, touch_id, &index);
if (info)
@@ -2026,16 +2025,14 @@ gtk_paned_captured_event (GtkWidget *widget,
}
break;
case GDK_MOTION_NOTIFY:
case GDK_TOUCH_MOTION:
case GDK_TOUCH_UPDATE:
info = _gtk_paned_find_touch (GTK_PANED (widget), device, touch_id, &index);
if (info)
{
gint x, y;
gtk_widget_translate_coordinates (gtk_get_event_widget (event),
widget,
event->motion.x, event->motion.y,
event_x, event_y,
&x, &y);
/* If there is a single touch and this isn't a continuation
@@ -2055,7 +2052,7 @@ gtk_paned_captured_event (GtkWidget *widget,
* so the event coordinates are already relative to
* that window.
*/
update_drag (paned, event->motion.x, event->motion.y);
update_drag (paned, event_x, event_y);
}
return TRUE;