diff options
author | Alexander Larsson <alexl@redhat.com> | 2011-04-07 14:29:26 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2011-04-07 14:29:26 +0200 |
commit | 1a7b76d49d81b9497bfd480de1f7e2681bcb8906 (patch) | |
tree | 287a3df187aabf5cbf4f37bd38693171d880d7c6 /gdk | |
parent | 43aac66458d45d4aea59ddb652b3a7e60f5487a0 (diff) | |
download | gtk+-1a7b76d49d81b9497bfd480de1f7e2681bcb8906.tar.gz |
[broadway] Report mouse pointer coordinates right
The windows argument to device_query_state can be a client side
window, but we must only handle the "native" part of it (i.e.
window->impl->wrapper).
Diffstat (limited to 'gdk')
-rw-r--r-- | gdk/broadway/gdkdevice-broadway.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/gdk/broadway/gdkdevice-broadway.c b/gdk/broadway/gdkdevice-broadway.c index 617be7ba4d..41fa169eb9 100644 --- a/gdk/broadway/gdkdevice-broadway.c +++ b/gdk/broadway/gdkdevice-broadway.c @@ -153,6 +153,8 @@ gdk_broadway_device_query_state (GdkDevice *device, gint *win_y, GdkModifierType *mask) { + GdkWindow *toplevel; + GdkWindowImplBroadway *impl; GdkDisplay *display; GdkBroadwayDisplay *broadway_display; GdkScreen *screen; @@ -164,6 +166,9 @@ gdk_broadway_device_query_state (GdkDevice *device, display = gdk_device_get_display (device); broadway_display = GDK_BROADWAY_DISPLAY (display); + impl = GDK_WINDOW_IMPL_BROADWAY (window->impl); + toplevel = impl->wrapper; + if (root_window) { screen = gdk_window_get_screen (window); @@ -176,24 +181,23 @@ gdk_broadway_device_query_state (GdkDevice *device, if (broadway_display->output) { _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; + *win_x = broadway_display->future_root_x - toplevel->x; if (win_y) - *win_y = broadway_display->future_root_y - window->y; + *win_y = broadway_display->future_root_y - toplevel->y; if (child_window) { - if (gdk_window_get_window_type (window) == GDK_WINDOW_ROOT) + if (gdk_window_get_window_type (toplevel) == 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 */ + *child_window = toplevel; /* No native children */ } return TRUE; } @@ -208,21 +212,21 @@ gdk_broadway_device_query_state (GdkDevice *device, if (root_y) *root_y = device_root_y; if (win_x) - *win_x = device_root_y - window->x; + *win_x = device_root_y - toplevel->x; if (win_y) - *win_y = device_root_y - window->y; + *win_y = device_root_y - toplevel->y; if (child_window) { - if (gdk_window_get_window_type (window) == GDK_WINDOW_ROOT) + if (gdk_window_get_window_type (toplevel) == GDK_WINDOW_ROOT) { *child_window = broadway_display->mouse_in_toplevel; if (*child_window == NULL) - *child_window = window; + *child_window = toplevel; } else { /* No native children */ - *child_window = window; + *child_window = toplevel; } } |