broadway: Add initial touch event support

This seems to get something going on an ipad, but some events seem
to get swallowed. For instance, window dragging doesn't work.
This commit is contained in:
Alexander Larsson
2013-11-12 16:11:15 +01:00
parent d21ac217d3
commit 82acc05cba
9 changed files with 165 additions and 6 deletions

View File

@ -236,6 +236,9 @@ update_event_state (BroadwayServer *server,
server->last_state = message->pointer.state;
server->real_mouse_in_toplevel_id = message->pointer.mouse_window_id;
break;
case BROADWAY_EVENT_TOUCH:
server->last_state = message->touch.state;
break;
case BROADWAY_EVENT_KEY_PRESS:
case BROADWAY_EVENT_KEY_RELEASE:
server->last_state = message->key.state;
@ -368,6 +371,21 @@ parse_pointer_data (guint32 *p, BroadwayInputPointerMsg *data)
return p;
}
static guint32 *
parse_touch_data (guint32 *p, BroadwayInputTouchMsg *data)
{
data->touch_type = ntohl (*p++);
data->event_window_id = ntohl (*p++);
data->sequence_id = ntohl (*p++);
data->root_x = ntohl (*p++);
data->root_y = ntohl (*p++);
data->win_x = ntohl (*p++);
data->win_y = ntohl (*p++);
data->state = ntohl (*p++);
return p;
}
static void
update_future_pointer_info (BroadwayServer *server, BroadwayInputPointerMsg *data)
{
@ -436,6 +454,10 @@ parse_input_message (BroadwayInput *input, const unsigned char *message)
msg.scroll.dir = ntohl (*p++);
break;
case BROADWAY_EVENT_TOUCH:
p = parse_touch_data (p, &msg.touch);
break;
case BROADWAY_EVENT_KEY_PRESS:
case BROADWAY_EVENT_KEY_RELEASE:
msg.key.mouse_window_id = ntohl (*p++);