[gtk+] [broadway] Track future pointer events locations during parsing
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] [broadway] Track future pointer events locations during parsing
- Date: Thu, 7 Apr 2011 19:19:35 +0000 (UTC)
commit fdc2059edb50cf39338a81d96f03a258cd840b23
Author: Alexander Larsson <alexl redhat com>
Date: Tue Apr 5 10:43:52 2011 +0200
[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.
gdk/broadway/gdkdisplay-broadway.c | 12 ++++++++++++
gdk/broadway/gdkdisplay-broadway.h | 5 +++++
2 files changed, 17 insertions(+), 0 deletions(-)
---
diff --git a/gdk/broadway/gdkdisplay-broadway.c b/gdk/broadway/gdkdisplay-broadway.c
index a63b755..9bc4ff9 100644
--- a/gdk/broadway/gdkdisplay-broadway.c
+++ b/gdk/broadway/gdkdisplay-broadway.c
@@ -186,6 +186,14 @@ parse_pointer_data (char *p, BroadwayInputPointerMsg *data)
}
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)
{
GdkBroadwayDisplay *broadway_display;
@@ -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;
diff --git a/gdk/broadway/gdkdisplay-broadway.h b/gdk/broadway/gdkdisplay-broadway.h
index 0440b08..25b0397 100644
--- a/gdk/broadway/gdkdisplay-broadway.h
+++ b/gdk/broadway/gdkdisplay-broadway.h
@@ -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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]