summaryrefslogtreecommitdiff
path: root/gdk/broadway
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2013-11-12 16:44:30 +0100
committerAlexander Larsson <alexl@redhat.com>2013-11-12 16:45:14 +0100
commit4e8fa558270adc644d3f1c158e176c5516395848 (patch)
tree2cea2d398a70652bc5f0661db09065b08de6b33a /gdk/broadway
parent9223e3c25a7a4c3aabc904b0e81573bd61d62d1a (diff)
downloadgtk+-4e8fa558270adc644d3f1c158e176c5516395848.tar.gz
broadway: Support window resize/drag via touch
Diffstat (limited to 'gdk/broadway')
-rw-r--r--gdk/broadway/gdkeventsource.c4
-rw-r--r--gdk/broadway/gdkwindow-broadway.c28
2 files changed, 32 insertions, 0 deletions
diff --git a/gdk/broadway/gdkeventsource.c b/gdk/broadway/gdkeventsource.c
index a7d3c6e3c5..fe5dad6527 100644
--- a/gdk/broadway/gdkeventsource.c
+++ b/gdk/broadway/gdkeventsource.c
@@ -241,6 +241,10 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
display_broadway->touch_sequence_down == message->touch.sequence_id)
display_broadway->touch_sequence_down = 0;
+ if (event_type != GDK_TOUCH_BEGIN &&
+ is_first_down && _gdk_broadway_moveresize_handle_event (display, message))
+ break;
+
event = gdk_event_new (event_type);
event->touch.window = g_object_ref (window);
event->touch.sequence = GUINT_TO_POINTER(message->touch.sequence_id);
diff --git a/gdk/broadway/gdkwindow-broadway.c b/gdk/broadway/gdkwindow-broadway.c
index 5a67bb15c8..bfcba8a9ea 100644
--- a/gdk/broadway/gdkwindow-broadway.c
+++ b/gdk/broadway/gdkwindow-broadway.c
@@ -1197,6 +1197,34 @@ _gdk_broadway_moveresize_handle_event (GdkDisplay *display,
switch (event->base.type)
{
+ case BROADWAY_EVENT_TOUCH:
+ if (event->touch.touch_type == 2) /* END */
+ {
+ update_pos (mv_resize,
+ event->touch.root_x,
+ event->touch.root_y);
+
+ finish_drag (mv_resize);
+ }
+ else if (event->touch.touch_type == 1) /* UPDATE */
+ {
+ if (mv_resize->moveresize_window->resize_count > 0)
+ {
+ if (mv_resize->moveresize_pending_event)
+ *mv_resize->moveresize_pending_event = *event;
+ else
+ mv_resize->moveresize_pending_event =
+ g_memdup (event, sizeof (BroadwayInputMsg));
+
+ break;
+ }
+ update_pos (mv_resize,
+ event->touch.root_x,
+ event->touch.root_y);
+ }
+
+ break;
+
case BROADWAY_EVENT_POINTER_MOVE:
if (mv_resize->moveresize_window->resize_count > 0)
{