gdk: strengthen touch crossing event synthesizing on programmatical crossings
There are cases where crossing events aren't generated by input devices themselves but rather through programmatical means (windows being moved/hidden/destroyed while the pointer is on top). Those events come from X as sourceid=deviceid, and GDK does its deal at lessening this by setting a meaningful source device on such events, although this caused some confusion on the mechanism to block/synthesize touch crossing events that could possibly cause bogus enter events on the new window below the pointer. Fixes https://bugzilla.gnome.org/show_bug.cgi?id=691572
This commit is contained in:
@ -985,7 +985,8 @@ switch_to_pointer_grab (GdkDisplay *display,
|
|||||||
NULL, NULL);
|
NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pointer_window != last_grab->window)
|
if (!info->need_touch_press_enter &&
|
||||||
|
pointer_window != last_grab->window)
|
||||||
synthesize_crossing_events (display, device, source_device,
|
synthesize_crossing_events (display, device, source_device,
|
||||||
last_grab->window, pointer_window,
|
last_grab->window, pointer_window,
|
||||||
GDK_CROSSING_UNGRAB, time, serial);
|
GDK_CROSSING_UNGRAB, time, serial);
|
||||||
|
@ -8373,10 +8373,12 @@ send_crossing_event (GdkDisplay *display,
|
|||||||
window_event_mask = window->event_mask;
|
window_event_mask = window->event_mask;
|
||||||
|
|
||||||
if (type == GDK_ENTER_NOTIFY &&
|
if (type == GDK_ENTER_NOTIFY &&
|
||||||
pointer_info->need_touch_press_enter &&
|
(pointer_info->need_touch_press_enter ||
|
||||||
|
gdk_device_get_source (source_device) == GDK_SOURCE_TOUCHSCREEN) &&
|
||||||
mode != GDK_CROSSING_TOUCH_BEGIN &&
|
mode != GDK_CROSSING_TOUCH_BEGIN &&
|
||||||
mode != GDK_CROSSING_TOUCH_END)
|
mode != GDK_CROSSING_TOUCH_END)
|
||||||
{
|
{
|
||||||
|
pointer_info->need_touch_press_enter = TRUE;
|
||||||
block_event = TRUE;
|
block_event = TRUE;
|
||||||
}
|
}
|
||||||
else if (type == GDK_LEAVE_NOTIFY)
|
else if (type == GDK_LEAVE_NOTIFY)
|
||||||
|
Reference in New Issue
Block a user