[broadway] Track future pointer events locations during parsing

We want this info so that we can avoid roundtrips and still get
a somewhat better querying for pointer locations.
This commit is contained in:
Alexander Larsson 2011-04-05 10:43:52 +02:00
parent 1fa952fb04
commit fdc2059edb
2 changed files with 17 additions and 0 deletions

View File

@ -185,6 +185,14 @@ parse_pointer_data (char *p, BroadwayInputPointerMsg *data)
return p;
}
static void
update_future_pointer_info (GdkBroadwayDisplay *broadway_display, BroadwayInputPointerMsg *data)
{
broadway_display->future_root_x = data->root_x;
broadway_display->future_root_y = data->root_y;
broadway_display->future_mouse_in_toplevel = data->mouse_window_id;
}
static void
parse_input_message (BroadwayInput *input, const char *message)
{
@ -205,23 +213,27 @@ parse_input_message (BroadwayInput *input, const char *message)
case 'e': /* Enter */
case 'l': /* Leave */
p = parse_pointer_data (p, &msg.pointer);
update_future_pointer_info (broadway_display, &msg.pointer);
p++; /* Skip , */
msg.crossing.mode = strtol(p, &p, 10);
break;
case 'm': /* Mouse move */
p = parse_pointer_data (p, &msg.pointer);
update_future_pointer_info (broadway_display, &msg.pointer);
break;
case 'b':
case 'B':
p = parse_pointer_data (p, &msg.pointer);
update_future_pointer_info (broadway_display, &msg.pointer);
p++; /* Skip , */
msg.button.button = strtol(p, &p, 10);
break;
case 's':
p = parse_pointer_data (p, &msg.pointer);
update_future_pointer_info (broadway_display, &msg.pointer);
p++; /* Skip , */
msg.scroll.dir = strtol(p, &p, 10);
break;

View File

@ -155,6 +155,11 @@ struct _GdkBroadwayDisplay
GdkWindow *pointer_grab_window;
guint32 pointer_grab_time;
gboolean pointer_grab_owner_events;
/* Future data, from the currently queued events */
int future_root_x;
int future_root_y;
int future_mouse_in_toplevel;
};
struct _GdkBroadwayDisplayClass