gdk: Keep track of the last slave device used
This last slave device (stored per master) is used to fill in the missing slave device in synthesized crossing events not directly caused by a device event (ie. due to configure events or grabs)
This commit is contained in:
@@ -75,6 +75,7 @@ typedef struct
|
||||
gdouble toplevel_x, toplevel_y;
|
||||
guint32 state;
|
||||
guint32 button;
|
||||
GdkDevice *last_slave;
|
||||
} GdkPointerWindowInfo;
|
||||
|
||||
typedef struct
|
||||
|
||||
@@ -9065,7 +9065,7 @@ do_synthesize_crossing_event (gpointer data)
|
||||
_gdk_synthesize_crossing_events (display,
|
||||
pointer_info->window_under_pointer,
|
||||
new_window_under_pointer,
|
||||
device, NULL,
|
||||
device, pointer_info->last_slave,
|
||||
GDK_CROSSING_NORMAL,
|
||||
pointer_info->toplevel_x,
|
||||
pointer_info->toplevel_y,
|
||||
@@ -9591,6 +9591,17 @@ _gdk_windowing_got_event (GdkDisplay *display,
|
||||
{
|
||||
GdkInputMode mode;
|
||||
|
||||
pointer_info = _gdk_display_get_pointer_info (display, device);
|
||||
|
||||
if (pointer_info)
|
||||
{
|
||||
if (source_device != pointer_info->last_slave &&
|
||||
gdk_device_get_device_type (source_device) == GDK_DEVICE_TYPE_SLAVE)
|
||||
pointer_info->last_slave = source_device;
|
||||
else
|
||||
source_device = pointer_info->last_slave;
|
||||
}
|
||||
|
||||
g_object_get (device, "input-mode", &mode, NULL);
|
||||
_gdk_display_device_grab_update (display, device, source_device, serial);
|
||||
|
||||
@@ -9609,8 +9620,6 @@ _gdk_windowing_got_event (GdkDisplay *display,
|
||||
if (!event_window)
|
||||
return;
|
||||
|
||||
pointer_info = _gdk_display_get_pointer_info (display, device);
|
||||
|
||||
#ifdef DEBUG_WINDOW_PRINTING
|
||||
if (event->type == GDK_KEY_PRESS &&
|
||||
(event->key.keyval == 0xa7 ||
|
||||
|
||||
@@ -1579,9 +1579,12 @@ device_grab_update_callback (GdkDisplay *display,
|
||||
gpointer data,
|
||||
gulong serial)
|
||||
{
|
||||
GdkPointerWindowInfo *pointer_info;
|
||||
GdkDevice *device = data;
|
||||
|
||||
_gdk_display_device_grab_update (display, device, NULL, serial);
|
||||
pointer_info = _gdk_display_get_pointer_info (display, device);
|
||||
_gdk_display_device_grab_update (display, device,
|
||||
pointer_info->last_slave, serial);
|
||||
}
|
||||
|
||||
#define XSERVER_TIME_IS_LATER(time1, time2) \
|
||||
|
||||
Reference in New Issue
Block a user