]> Pileus Git - ~andy/gtk/commitdiff
[broadway] Track future pointer events locations during parsing
authorAlexander Larsson <alexl@redhat.com>
Tue, 5 Apr 2011 08:43:52 +0000 (10:43 +0200)
committerAlexander Larsson <alexl@redhat.com>
Thu, 7 Apr 2011 08:03:16 +0000 (10:03 +0200)
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
gdk/broadway/gdkdisplay-broadway.h

index a63b755bc1b498d354cd78b70514c4a848dd8983..9bc4ff99bce93e58d36cef2f494e6abe812b3d0b 100644 (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;
index 0440b08f0c602653b44940a0f6c21fd20766d5f1..25b0397a93c66dc766555580a619b693146ec3a0 100644 (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