From 14b2fe702016d117538ce08eb4177d88154e9bc5 Mon Sep 17 00:00:00 2001 From: "Rune K. Svendsen" Date: Thu, 7 Mar 2013 21:50:00 +0100 Subject: [PATCH] Eat scroll event if a key binding function is executed because of it. When an axis (scroll) event results in a key binding function being executed, eat the scroll event so the underlying window doesn't receive it. Thanks to Scott Moreau for helping me solve this. --- src/bindings.c | 5 ++++- src/compositor.c | 9 +++++---- src/compositor.h | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/bindings.c b/src/bindings.c index 6456f79b..322736d8 100644 --- a/src/bindings.c +++ b/src/bindings.c @@ -250,7 +250,7 @@ weston_compositor_run_button_binding(struct weston_compositor *compositor, } } -WL_EXPORT void +WL_EXPORT int weston_compositor_run_axis_binding(struct weston_compositor *compositor, struct weston_seat *seat, uint32_t time, uint32_t axis, @@ -262,8 +262,11 @@ weston_compositor_run_axis_binding(struct weston_compositor *compositor, if (b->axis == axis && b->modifier == seat->modifier_state) { weston_axis_binding_handler_t handler = b->handler; handler(&seat->seat, time, axis, value, b->data); + return 1; } } + + return 0; } WL_EXPORT int diff --git a/src/compositor.c b/src/compositor.c index eeb57f92..6ea8af5a 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -1859,10 +1859,11 @@ notify_axis(struct weston_seat *seat, uint32_t time, uint32_t axis, weston_compositor_wake(compositor); - if (value) - weston_compositor_run_axis_binding(compositor, seat, - time, axis, value); - else + if (!value) + return; + + if (weston_compositor_run_axis_binding(compositor, seat, + time, axis, value)) return; if (pointer->focus_resource) diff --git a/src/compositor.h b/src/compositor.h index ef52d88d..3fe5b16e 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -656,7 +656,7 @@ weston_compositor_run_button_binding(struct weston_compositor *compositor, struct weston_seat *seat, uint32_t time, uint32_t button, enum wl_pointer_button_state value); -void +int weston_compositor_run_axis_binding(struct weston_compositor *compositor, struct weston_seat *seat, uint32_t time, uint32_t axis, int32_t value);