diff --git a/gdk/x11/gdkdevice-xi2.c b/gdk/x11/gdkdevice-xi2.c index ef7e166f9c..a1f2f81c4c 100644 --- a/gdk/x11/gdkdevice-xi2.c +++ b/gdk/x11/gdkdevice-xi2.c @@ -859,6 +859,14 @@ _gdk_device_xi2_reset_scroll_valuators (GdkX11DeviceXI2 *device) } } +void +_gdk_device_xi2_unset_scroll_valuators (GdkX11DeviceXI2 *device) +{ + if (device->scroll_valuators->len > 0) + g_array_remove_range (device->scroll_valuators, 0, + device->scroll_valuators->len); +} + gint _gdk_x11_device_xi2_get_id (GdkX11DeviceXI2 *device) { diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c index 2683a46365..fa02b65a47 100644 --- a/gdk/x11/gdkdevicemanager-xi2.c +++ b/gdk/x11/gdkdevicemanager-xi2.c @@ -765,6 +765,7 @@ handle_device_changed (GdkX11DeviceManagerXI2 *device_manager, if (device) { _gdk_device_reset_axes (device); + _gdk_device_xi2_unset_scroll_valuators ((GdkX11DeviceXI2 *) device); translate_device_classes (display, device, ev->classes, ev->num_classes); g_signal_emit_by_name (G_OBJECT (device), "changed"); diff --git a/gdk/x11/gdkprivate-x11.h b/gdk/x11/gdkprivate-x11.h index 2bdda3d516..ae22caf279 100644 --- a/gdk/x11/gdkprivate-x11.h +++ b/gdk/x11/gdkprivate-x11.h @@ -230,6 +230,8 @@ guint _gdk_x11_device_xi2_translate_state (XIModifierState *mods_state, XIButtonState *buttons_state, XIGroupState *group_state); gint _gdk_x11_device_xi2_get_id (GdkX11DeviceXI2 *device); +void _gdk_device_xi2_unset_scroll_valuators (GdkX11DeviceXI2 *device); + GdkDevice * _gdk_x11_device_manager_xi2_lookup (GdkX11DeviceManagerXI2 *device_manager_xi2, gint device_id);