Axis events are in the same coordinate space as motion events, thus
measured in pixels. To emulate axis events for discrete events move the
axis by a number of pixels every step.

Signed-off-by: Jonas Ådahl <[email protected]>
---
 src/compositor-x11.c |   28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/src/compositor-x11.c b/src/compositor-x11.c
index d5fa0c6..660a749 100644
--- a/src/compositor-x11.c
+++ b/src/compositor-x11.c
@@ -50,6 +50,8 @@
 #include "compositor.h"
 #include "../shared/config-parser.h"
 
+#define DEFAULT_AXIS_STEP_DISTANCE wl_fixed_from_int(10)
+
 static char *output_name;
 static char *output_mode;
 static char *output_transform;
@@ -718,32 +720,34 @@ x11_compositor_deliver_button_event(struct x11_compositor 
*c,
                button = BTN_RIGHT;
                break;
        case 4:
+               /* Axis are measured in pixels, but the xcb events are discrete
+                * steps. Therefore move the axis by some pixels every step. */
                if (state)
                        notify_axis(&c->core_seat,
-                                     weston_compositor_get_time(),
-                                     WL_POINTER_AXIS_VERTICAL_SCROLL,
-                                     wl_fixed_from_int(1));
+                                   weston_compositor_get_time(),
+                                   WL_POINTER_AXIS_VERTICAL_SCROLL,
+                                   -DEFAULT_AXIS_STEP_DISTANCE);
                return;
        case 5:
                if (state)
                        notify_axis(&c->core_seat,
-                                     weston_compositor_get_time(),
-                                     WL_POINTER_AXIS_VERTICAL_SCROLL,
-                                     wl_fixed_from_int(-1));
+                                   weston_compositor_get_time(),
+                                   WL_POINTER_AXIS_VERTICAL_SCROLL,
+                                   DEFAULT_AXIS_STEP_DISTANCE);
                return;
        case 6:
                if (state)
                        notify_axis(&c->core_seat,
-                                     weston_compositor_get_time(),
-                                     WL_POINTER_AXIS_HORIZONTAL_SCROLL,
-                                     wl_fixed_from_int(1));
+                                   weston_compositor_get_time(),
+                                   WL_POINTER_AXIS_HORIZONTAL_SCROLL,
+                                   -DEFAULT_AXIS_STEP_DISTANCE);
                return;
        case 7:
                if (state)
                        notify_axis(&c->core_seat,
-                                     weston_compositor_get_time(),
-                                     WL_POINTER_AXIS_HORIZONTAL_SCROLL,
-                                     wl_fixed_from_int(-1));
+                                   weston_compositor_get_time(),
+                                   WL_POINTER_AXIS_HORIZONTAL_SCROLL,
+                                   DEFAULT_AXIS_STEP_DISTANCE);
                return;
        }
 
-- 
1.7.9.5

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to