[gtk+] xi2: Normalize scroll deltas
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] xi2: Normalize scroll deltas
- Date: Mon, 5 Mar 2012 00:20:31 +0000 (UTC)
commit 3dd5e88c07f659d66ee0f7305a96b51b7fe1072d
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Mar 4 19:12:27 2012 -0500
xi2: Normalize scroll deltas
XI2 provides us with an increment for each scroll valuator,
and by dividing the delta by the increment, we obtain normalized
values in some abstract 'scroll unit'.
For mouse wheels, the evdev driver reports an increment of -1,
so doing this division fixes the inverted scrolling with wheels
that we've seen recently.
gdk/x11/gdkdevice-xi2.c | 7 +++++--
gdk/x11/gdkdevicemanager-xi2.c | 8 +++++---
gdk/x11/gdkprivate-x11.h | 3 ++-
3 files changed, 12 insertions(+), 6 deletions(-)
---
diff --git a/gdk/x11/gdkdevice-xi2.c b/gdk/x11/gdkdevice-xi2.c
index 6e49626..263b3f3 100644
--- a/gdk/x11/gdkdevice-xi2.c
+++ b/gdk/x11/gdkdevice-xi2.c
@@ -38,6 +38,7 @@ struct _ScrollValuator
guint direction : 4;
guint last_value_valid : 1;
gdouble last_value;
+ gdouble increment;
};
struct _GdkX11DeviceXI2
@@ -791,7 +792,8 @@ _gdk_x11_device_xi2_translate_state (XIModifierState *mods_state,
void
_gdk_x11_device_xi2_add_scroll_valuator (GdkX11DeviceXI2 *device,
guint n_valuator,
- GdkScrollDirection direction)
+ GdkScrollDirection direction,
+ gdouble increment)
{
ScrollValuator scroll;
@@ -801,6 +803,7 @@ _gdk_x11_device_xi2_add_scroll_valuator (GdkX11DeviceXI2 *device,
scroll.n_valuator = n_valuator;
scroll.direction = direction;
scroll.last_value_valid = FALSE;
+ scroll.increment = increment;
g_array_append_val (device->scroll_valuators, scroll);
}
@@ -834,7 +837,7 @@ _gdk_x11_device_xi2_get_scroll_delta (GdkX11DeviceXI2 *device,
if (scroll->last_value_valid)
{
if (delta_ret)
- *delta_ret = valuator_value - scroll->last_value;
+ *delta_ret = (valuator_value - scroll->last_value) / scroll->increment;
scroll->last_value = valuator_value;
}
diff --git a/gdk/x11/gdkdevicemanager-xi2.c b/gdk/x11/gdkdevicemanager-xi2.c
index b4a0256..6f93fd2 100644
--- a/gdk/x11/gdkdevicemanager-xi2.c
+++ b/gdk/x11/gdkdevicemanager-xi2.c
@@ -247,15 +247,17 @@ translate_device_classes (GdkDisplay *display,
direction = GDK_SCROLL_RIGHT;
GDK_NOTE (INPUT,
- g_message ("\n\tscroll valuator %d: %s",
+ g_message ("\n\tscroll valuator %d: %s, increment %f",
scroll_info->number,
scroll_info->scroll_type == XIScrollTypeVertical
? "vertical"
- : "horizontal"));
+ : "horizontal",
+ scroll_info->increment));
_gdk_x11_device_xi2_add_scroll_valuator (GDK_X11_DEVICE_XI2 (device),
scroll_info->number,
- direction);
+ direction,
+ scroll_info->increment);
}
#endif /* XINPUT_2_2 */
default:
diff --git a/gdk/x11/gdkprivate-x11.h b/gdk/x11/gdkprivate-x11.h
index 14ab2fd..d17d4fd 100644
--- a/gdk/x11/gdkprivate-x11.h
+++ b/gdk/x11/gdkprivate-x11.h
@@ -239,7 +239,8 @@ GdkDevice * _gdk_x11_device_manager_xi2_lookup (GdkX11DeviceManagerXI2 *devic
gint device_id);
void _gdk_x11_device_xi2_add_scroll_valuator (GdkX11DeviceXI2 *device,
guint n_valuator,
- GdkScrollDirection direction);
+ GdkScrollDirection direction,
+ gdouble increment);
gboolean _gdk_x11_device_xi2_get_scroll_delta (GdkX11DeviceXI2 *device,
guint n_valuator,
gdouble valuator_value,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]