[gtk+] [broadway] Track future pointer events locations during parsing



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]