gdk: Ensure that GdkPointerWindowInfo is only generated for pointers

This commit is contained in:
Carlos Garnacho 2011-12-06 20:29:22 +01:00 committed by Matthias Clasen
parent 18e4a3a4a1
commit c15d23ab5b
2 changed files with 18 additions and 11 deletions

View File

@ -1120,6 +1120,9 @@ _gdk_display_get_pointer_info (GdkDisplay *display,
{
GdkPointerWindowInfo *info;
if (device && gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD)
device = gdk_device_get_associated_device (device);
if (G_UNLIKELY (!device))
return NULL;

View File

@ -9571,10 +9571,10 @@ _gdk_windowing_got_event (GdkDisplay *display,
{
GdkInputMode mode;
pointer_info = _gdk_display_get_pointer_info (display, device);
if (pointer_info)
if (gdk_device_get_source (device) != GDK_SOURCE_KEYBOARD)
{
pointer_info = _gdk_display_get_pointer_info (display, device);
if (source_device != pointer_info->last_slave &&
gdk_device_get_device_type (source_device) == GDK_DEVICE_TYPE_SLAVE)
pointer_info->last_slave = source_device;
@ -9684,15 +9684,19 @@ _gdk_windowing_got_event (GdkDisplay *display,
}
}
/* Store last pointer window and position/state */
old_state = pointer_info->state;
old_button = pointer_info->button;
if (pointer_info)
{
/* Store last pointer window and position/state */
old_state = pointer_info->state;
old_button = pointer_info->button;
gdk_event_get_coords (event, &x, &y);
convert_native_coords_to_toplevel (event_window, x, y, &x, &y);
pointer_info->toplevel_x = x;
pointer_info->toplevel_y = y;
gdk_event_get_state (event, &pointer_info->state);
}
gdk_event_get_coords (event, &x, &y);
convert_native_coords_to_toplevel (event_window, x, y, &x, &y);
pointer_info->toplevel_x = x;
pointer_info->toplevel_y = y;
gdk_event_get_state (event, &pointer_info->state);
if (event->type == GDK_BUTTON_PRESS ||
event->type == GDK_BUTTON_RELEASE)
pointer_info->button = event->button.button;