summaryrefslogtreecommitdiff
path: root/gdk/gdkwindow.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdk/gdkwindow.c')
-rw-r--r--gdk/gdkwindow.c45
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);
}
}