diff options
Diffstat (limited to 'gdk/gdkwindow.c')
-rw-r--r-- | gdk/gdkwindow.c | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index fdd5734868..01ea1ca9bf 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -10355,6 +10355,7 @@ send_crossing_event (GdkDisplay *display, GdkNotifyType notify_type, GdkWindow *subwindow, GdkDevice *device, + GdkDevice *source_device, gint toplevel_x, gint toplevel_y, GdkModifierType mask, @@ -10414,6 +10415,10 @@ send_crossing_event (GdkDisplay *display, { event = _gdk_make_event ((GdkWindow *)window, type, event_in_queue, TRUE); gdk_event_set_device (event, device); + + if (source_device) + gdk_event_set_source_device (event, source_device); + event->crossing.time = time_; event->crossing.subwindow = subwindow; if (subwindow) @@ -10441,6 +10446,7 @@ _gdk_synthesize_crossing_events (GdkDisplay *display, GdkWindow *src, GdkWindow *dest, GdkDevice *device, + GdkDevice *source_device, GdkCrossingMode mode, gint toplevel_x, gint toplevel_y, @@ -10496,7 +10502,7 @@ _gdk_synthesize_crossing_events (GdkDisplay *display, a, GDK_LEAVE_NOTIFY, mode, notify_type, - NULL, device, + NULL, device, source_device, toplevel_x, toplevel_y, mask, time_, event_in_queue, @@ -10518,7 +10524,7 @@ _gdk_synthesize_crossing_events (GdkDisplay *display, mode, notify_type, (GdkWindow *)last, - device, + device, source_device, toplevel_x, toplevel_y, mask, time_, event_in_queue, @@ -10565,7 +10571,7 @@ _gdk_synthesize_crossing_events (GdkDisplay *display, mode, notify_type, (GdkWindow *)next, - device, + device, source_device, toplevel_x, toplevel_y, mask, time_, event_in_queue, @@ -10587,7 +10593,7 @@ _gdk_synthesize_crossing_events (GdkDisplay *display, mode, notify_type, NULL, - device, + device, source_device, toplevel_x, toplevel_y, mask, time_, event_in_queue, @@ -11079,7 +11085,7 @@ do_synthesize_crossing_event (gpointer data) _gdk_synthesize_crossing_events (display, pointer_info->window_under_pointer, new_window_under_pointer, - device, + device, NULL, GDK_CROSSING_NORMAL, pointer_info->toplevel_x, pointer_info->toplevel_y, @@ -11199,7 +11205,7 @@ proxy_pointer_event (GdkDisplay *display, GdkWindow *toplevel_window, *event_window; GdkWindow *pointer_window; GdkPointerWindowInfo *pointer_info; - GdkDevice *device; + GdkDevice *device, *source_device; GdkEvent *event; guint state; gdouble toplevel_x, toplevel_y; @@ -11211,6 +11217,7 @@ proxy_pointer_event (GdkDisplay *display, gdk_event_get_state (source_event, &state); time_ = gdk_event_get_time (source_event); device = gdk_event_get_device (source_event); + source_device = gdk_event_get_source_device (source_event); pointer_info = _gdk_display_get_pointer_info (display, device); toplevel_window = convert_native_coords_to_toplevel (event_window, toplevel_x, toplevel_y, @@ -11244,7 +11251,7 @@ proxy_pointer_event (GdkDisplay *display, _gdk_synthesize_crossing_events (display, pointer_info->window_under_pointer, event_window, - device, + device, source_device, source_event->crossing.mode, toplevel_x, toplevel_y, state, time_, @@ -11260,7 +11267,7 @@ proxy_pointer_event (GdkDisplay *display, source_event->crossing.mode, source_event->crossing.detail, NULL, - device, + device, source_device, toplevel_x, toplevel_y, state, time_, source_event, @@ -11290,7 +11297,7 @@ proxy_pointer_event (GdkDisplay *display, source_event->crossing.mode, source_event->crossing.detail, NULL, - device, + device, source_device, toplevel_x, toplevel_y, state, time_, source_event, @@ -11300,7 +11307,7 @@ proxy_pointer_event (GdkDisplay *display, _gdk_synthesize_crossing_events (display, event_window, pointer_window, - device, + device, source_device, source_event->crossing.mode, toplevel_x, toplevel_y, state, time_, @@ -11319,7 +11326,7 @@ proxy_pointer_event (GdkDisplay *display, _gdk_synthesize_crossing_events (display, pointer_info->window_under_pointer, pointer_window, - device, + device, source_device, GDK_CROSSING_NORMAL, toplevel_x, toplevel_y, state, time_, @@ -11409,7 +11416,7 @@ proxy_button_event (GdkEvent *source_event, gdouble toplevel_x, toplevel_y; GdkDisplay *display; GdkWindowObject *w; - GdkDevice *device; + GdkDevice *device, *source_device; type = source_event->any.type; event_window = source_event->any.window; @@ -11417,6 +11424,7 @@ proxy_button_event (GdkEvent *source_event, gdk_event_get_state (source_event, &state); time_ = gdk_event_get_time (source_event); device = gdk_event_get_device (source_event); + source_device = gdk_event_get_source_device (source_event); display = gdk_drawable_get_display (source_event->any.window); toplevel_window = convert_native_coords_to_toplevel (event_window, toplevel_x, toplevel_y, @@ -11453,7 +11461,7 @@ proxy_button_event (GdkEvent *source_event, serial, time_, TRUE); - _gdk_display_device_grab_update (display, device, serial); + _gdk_display_device_grab_update (display, device, source_device, serial); } pointer_window = get_pointer_window (display, toplevel_window, device, @@ -11600,20 +11608,21 @@ _gdk_windowing_got_event (GdkDisplay *display, guint old_state, old_button; GdkDeviceGrabInfo *button_release_grab; GdkPointerWindowInfo *pointer_info; - GdkDevice *device; + GdkDevice *device, *source_device; gboolean is_toplevel; if (gdk_event_get_time (event) != GDK_CURRENT_TIME) display->last_event_time = gdk_event_get_time (event); device = gdk_event_get_device (event); + source_device = gdk_event_get_source_device (event); if (device) { GdkInputMode mode; g_object_get (device, "input-mode", &mode, NULL); - _gdk_display_device_grab_update (display, device, serial); + _gdk_display_device_grab_update (display, device, source_device, serial); if (mode == GDK_MODE_DISABLED || !_gdk_display_check_grab_ownership (display, device, serial)) @@ -11659,7 +11668,7 @@ _gdk_windowing_got_event (GdkDisplay *display, serial, gdk_event_get_time (event), TRUE); - _gdk_display_device_grab_update (display, device, serial); + _gdk_display_device_grab_update (display, device, source_device, serial); } if (event->type == GDK_BUTTON_RELEASE && !event->any.send_event) @@ -11672,7 +11681,7 @@ _gdk_windowing_got_event (GdkDisplay *display, { button_release_grab->serial_end = serial; button_release_grab->implicit_ungrab = FALSE; - _gdk_display_device_grab_update (display, device, serial); + _gdk_display_device_grab_update (display, device, source_device, serial); } } @@ -11794,7 +11803,7 @@ _gdk_windowing_got_event (GdkDisplay *display, { button_release_grab->serial_end = serial; button_release_grab->implicit_ungrab = FALSE; - _gdk_display_device_grab_update (display, device, serial); + _gdk_display_device_grab_update (display, device, source_device, serial); } } |