summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2011-04-07 14:29:26 +0200
committerAlexander Larsson <alexl@redhat.com>2011-04-07 14:29:26 +0200
commit1a7b76d49d81b9497bfd480de1f7e2681bcb8906 (patch)
tree287a3df187aabf5cbf4f37bd38693171d880d7c6 /gdk
parent43aac66458d45d4aea59ddb652b3a7e60f5487a0 (diff)
downloadgtk+-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.c24
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;
}
}