From 8e56a8097230c006832cbc195fd56c87884ac7ab Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Thu, 28 Mar 2013 14:57:00 +0100 Subject: [PATCH] xi2: Reset scroll valuators on synthesized crossing events On crossing events resulting from moving windows (eg. workspace switch), deviceid equals sourceid, so make those reset scroll valuators on all slave devices to avoid misleading jumps in scroll events Fixes https://bugzilla.gnome.org/show_bug.cgi?id=690275 --- gdk/x11/gdkdevicemanager-xi2.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c index 660d0f031d..db2ba2833c 100644 --- a/gdk/x11/gdkdevicemanager-xi2.c +++ b/gdk/x11/gdkdevicemanager-xi2.c @@ -1555,7 +1555,20 @@ gdk_x11_device_manager_xi2_translate_event (GdkEventTranslator *translator, source_device = g_hash_table_lookup (device_manager->id_table, GUINT_TO_POINTER (xev->sourceid)); gdk_event_set_source_device (event, source_device); - _gdk_device_xi2_reset_scroll_valuators (GDK_X11_DEVICE_XI2 (source_device)); + + if (gdk_device_get_device_type (source_device) != GDK_DEVICE_TYPE_MASTER) + _gdk_device_xi2_reset_scroll_valuators (GDK_X11_DEVICE_XI2 (source_device)); + else + { + GList *slaves, *l; + + slaves = gdk_device_list_slave_devices (source_device); + + for (l = slaves; l; l = l->next) + _gdk_device_xi2_reset_scroll_valuators (GDK_X11_DEVICE_XI2 (l->data)); + + g_list_free (slaves); + } event->crossing.mode = translate_crossing_mode (xev->mode); event->crossing.detail = translate_notify_type (xev->detail);