[gtk+] [broadway] Don't roundtrip for getting current pointer location
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] [broadway] Don't roundtrip for getting current pointer location
- Date: Thu, 7 Apr 2011 19:19:45 +0000 (UTC)
commit 5b645357d6cb50f1a4ff36f39749d5256c9bf87f
Author: Alexander Larsson <alexl redhat com>
Date: Tue Apr 5 10:45:51 2011 +0200
[broadway] Don't roundtrip for getting current pointer location
Roundtrips are bad, and this gets called a lot, so we use all currently
availible future info to "emulate" a full roundtrip, but with much lower
cost.
gdk/broadway/gdkdevice-broadway.c | 46 +++++++++++++++---------------------
1 files changed, 19 insertions(+), 27 deletions(-)
---
diff --git a/gdk/broadway/gdkdevice-broadway.c b/gdk/broadway/gdkdevice-broadway.c
index da01406..617be7b 100644
--- a/gdk/broadway/gdkdevice-broadway.c
+++ b/gdk/broadway/gdkdevice-broadway.c
@@ -155,10 +155,7 @@ gdk_broadway_device_query_state (GdkDevice *device,
{
GdkDisplay *display;
GdkBroadwayDisplay *broadway_display;
- GdkWindowImplBroadway *impl;
- guint32 serial;
GdkScreen *screen;
- BroadwayInputMsg *reply;
gint device_root_x, device_root_y;
if (gdk_device_get_source (device) != GDK_SOURCE_MOUSE)
@@ -178,32 +175,27 @@ gdk_broadway_device_query_state (GdkDevice *device,
if (broadway_display->output)
{
- impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
-
- serial = broadway_output_query_pointer (broadway_display->output, impl->id);
-
- reply = _gdk_broadway_display_block_for_input (display, 'q', serial, TRUE);
-
- if (reply != NULL)
+ _gdk_broadway_display_consume_all_input (display);
+
+ if (root_x)
+ *root_x = broadway_display->future_root_x;
+ if (root_y)
+ *root_y = broadway_display->future_root_y;
+ /* TODO: Should really use future_x/y when we get configure events */
+ if (win_x)
+ *win_x = broadway_display->future_root_x - window->x;
+ if (win_y)
+ *win_y = broadway_display->future_root_y - window->y;
+ if (child_window)
{
- if (root_x)
- *root_x = reply->query_reply.root_x;
- if (root_y)
- *root_y = reply->query_reply.root_y;
- if (win_x)
- *win_x = reply->query_reply.win_x;
- if (win_y)
- *win_y = reply->query_reply.win_y;
- if (child_window)
- {
- if (gdk_window_get_window_type (window) == GDK_WINDOW_ROOT)
- *child_window = g_hash_table_lookup (broadway_display->id_ht, GINT_TO_POINTER (reply->query_reply.window_with_mouse));
- else
- *child_window = window; /* No native children */
- }
- g_free (reply);
- return TRUE;
+ if (gdk_window_get_window_type (window) == GDK_WINDOW_ROOT)
+ *child_window =
+ g_hash_table_lookup (broadway_display->id_ht,
+ GINT_TO_POINTER (broadway_display->future_mouse_in_toplevel));
+ else
+ *child_window = window; /* No native children */
}
+ return TRUE;
}
/* Fallback when unconnected */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]