summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Hua <william.hua@canonical.com>2015-10-15 18:07:33 +0100
committerWilliam Hua <william.hua@canonical.com>2015-10-16 10:51:36 +0100
commit027b02a371775ef298a973cf32d2dc65d87f6593 (patch)
treec88e8508f0248c4b10dbfb86794ffc901a8bbe7c
parentc888a927e7269f119b58c2d1bb19fd44c81a7a67 (diff)
downloadgtk+-wip/mir-armhf.tar.gz
mir: send touch eventswip/mir-armhf
-rw-r--r--gdk/mir/gdkmireventsource.c39
1 files changed, 38 insertions, 1 deletions
diff --git a/gdk/mir/gdkmireventsource.c b/gdk/mir/gdkmireventsource.c
index 5732f2bc06..5812481756 100644
--- a/gdk/mir/gdkmireventsource.c
+++ b/gdk/mir/gdkmireventsource.c
@@ -298,6 +298,43 @@ handle_key_event (GdkWindow *window, const MirInputEvent *event)
}
}
+static void
+handle_touch_event (GdkWindow *window,
+ const MirTouchEvent *mir_touch_event)
+{
+ const MirInputEvent *mir_input_event = mir_touch_event_input_event (mir_touch_event);
+ guint n = mir_touch_event_point_count (mir_touch_event);
+ GdkEvent *gdk_event;
+ guint i;
+
+ for (i = 0; i < n; i++)
+ {
+ switch (mir_touch_event_action (mir_touch_event, i))
+ {
+ case mir_touch_action_up:
+ gdk_event = gdk_event_new (GDK_TOUCH_END);
+ break;
+ case mir_touch_action_down:
+ gdk_event = gdk_event_new (GDK_TOUCH_BEGIN);
+ break;
+ case mir_touch_action_change:
+ gdk_event = gdk_event_new (GDK_TOUCH_UPDATE);
+ break;
+ }
+
+ gdk_event->touch.window = window;
+ gdk_event->touch.sequence = GINT_TO_POINTER (mir_touch_event_id (mir_touch_event, i));
+ gdk_event->touch.time = mir_input_event_get_event_time (mir_input_event);
+ gdk_event->touch.state = get_modifier_state (mir_touch_event_modifiers (mir_touch_event), 0);
+ gdk_event->touch.x = mir_touch_event_axis_value (mir_touch_event, i, mir_touch_axis_x);
+ gdk_event->touch.y = mir_touch_event_axis_value (mir_touch_event, i, mir_touch_axis_y);
+ gdk_event->touch.x_root = mir_touch_event_axis_value (mir_touch_event, i, mir_touch_axis_x);
+ gdk_event->touch.y_root = mir_touch_event_axis_value (mir_touch_event, i, mir_touch_axis_y);
+
+ send_event (window, get_pointer (window), gdk_event);
+ }
+}
+
static guint
get_button_state (const MirPointerEvent *event)
{
@@ -515,7 +552,7 @@ gdk_mir_event_source_queue_event (GdkDisplay *display,
handle_key_event (window, input_event);
break;
case mir_input_event_type_touch:
- handle_motion_event (window, input_event);
+ handle_touch_event (window, mir_input_event_get_touch_event (input_event));
break;
case mir_input_event_type_pointer:
handle_motion_event (window, input_event);