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.
This commit is contained in:
Rune K. Svendsen
2013-03-07 21:50:00 +01:00
committed by Kristian Høgsberg
parent 976a050f8f
commit 14b2fe7020
3 changed files with 10 additions and 6 deletions
+4 -1
View File
@@ -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, weston_compositor_run_axis_binding(struct weston_compositor *compositor,
struct weston_seat *seat, struct weston_seat *seat,
uint32_t time, uint32_t axis, 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) { if (b->axis == axis && b->modifier == seat->modifier_state) {
weston_axis_binding_handler_t handler = b->handler; weston_axis_binding_handler_t handler = b->handler;
handler(&seat->seat, time, axis, value, b->data); handler(&seat->seat, time, axis, value, b->data);
return 1;
} }
} }
return 0;
} }
WL_EXPORT int WL_EXPORT int
+5 -4
View File
@@ -1859,10 +1859,11 @@ notify_axis(struct weston_seat *seat, uint32_t time, uint32_t axis,
weston_compositor_wake(compositor); weston_compositor_wake(compositor);
if (value) if (!value)
weston_compositor_run_axis_binding(compositor, seat, return;
time, axis, value);
else if (weston_compositor_run_axis_binding(compositor, seat,
time, axis, value))
return; return;
if (pointer->focus_resource) if (pointer->focus_resource)
+1 -1
View File
@@ -656,7 +656,7 @@ weston_compositor_run_button_binding(struct weston_compositor *compositor,
struct weston_seat *seat, uint32_t time, struct weston_seat *seat, uint32_t time,
uint32_t button, uint32_t button,
enum wl_pointer_button_state value); enum wl_pointer_button_state value);
void int
weston_compositor_run_axis_binding(struct weston_compositor *compositor, weston_compositor_run_axis_binding(struct weston_compositor *compositor,
struct weston_seat *seat, uint32_t time, struct weston_seat *seat, uint32_t time,
uint32_t axis, int32_t value); uint32_t axis, int32_t value);