[PATCH weston 3/8] compositor-x11: Update axis notifications to follow protocol

Jonas Ådahl jadahl at gmail.com
Thu Sep 27 09:40:41 PDT 2012


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 <jadahl at gmail.com>
---
 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



More information about the wayland-devel mailing list