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.
dev
Rune K. Svendsen 12 years ago committed by Kristian Høgsberg
parent 976a050f8f
commit 14b2fe7020
  1. 5
      src/bindings.c
  2. 9
      src/compositor.c
  3. 2
      src/compositor.h

@ -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

@ -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)

@ -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);

Loading…
Cancel
Save