Eat scroll event if a key binding function is executed because of it.
authorRune K. Svendsen <runesvend@gmail.com>
Thu, 7 Mar 2013 20:50:00 +0000 (21:50 +0100)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 19 Mar 2013 01:43:17 +0000 (21:43 -0400)
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
src/compositor.c
src/compositor.h

index 6456f79..322736d 100644 (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,
                                   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
index eeb57f9..6ea8af5 100644 (file)
@@ -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)
index ef52d88..3fe5b16 100644 (file)
@@ -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);