Don't only send motions and buttons but also axis events through the
pointer grab interface.

Signed-off-by: Jonas Ådahl <[email protected]>
---
 desktop-shell/exposay.c    |  7 +++++++
 desktop-shell/shell.c      | 24 ++++++++++++++++++++++++
 ivi-shell/hmi-controller.c |  9 +++++++++
 src/compositor.h           |  5 +++++
 src/data-device.c          |  7 +++++++
 src/input.c                | 27 +++++++++++++++++++++------
 6 files changed, 73 insertions(+), 6 deletions(-)

diff --git a/desktop-shell/exposay.c b/desktop-shell/exposay.c
index 4b65cbd..dc3fee0 100644
--- a/desktop-shell/exposay.c
+++ b/desktop-shell/exposay.c
@@ -378,6 +378,12 @@ exposay_button(struct weston_pointer_grab *grab, uint32_t 
time, uint32_t button,
 }
 
 static void
+exposay_axis(struct weston_pointer_grab *grab,
+            uint32_t time, uint32_t axis, wl_fixed_t value)
+{
+}
+
+static void
 exposay_pointer_grab_cancel(struct weston_pointer_grab *grab)
 {
        struct desktop_shell *shell =
@@ -390,6 +396,7 @@ static const struct weston_pointer_grab_interface 
exposay_ptr_grab = {
        exposay_focus,
        exposay_motion,
        exposay_button,
+       exposay_axis,
        exposay_pointer_grab_cancel,
 };
 
diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index c05a5c7..aa26b58 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -1658,6 +1658,12 @@ noop_grab_focus(struct weston_pointer_grab *grab)
 }
 
 static void
+noop_grab_axis(struct weston_pointer_grab *grab,
+              uint32_t time, uint32_t axis, wl_fixed_t value)
+{
+}
+
+static void
 constrain_position(struct weston_move_grab *move, int *cx, int *cy)
 {
        struct shell_surface *shsurf = move->base.shsurf;
@@ -1736,6 +1742,7 @@ static const struct weston_pointer_grab_interface 
move_grab_interface = {
        noop_grab_focus,
        move_grab_motion,
        move_grab_button,
+       noop_grab_axis,
        move_grab_cancel,
 };
 
@@ -1895,6 +1902,7 @@ static const struct weston_pointer_grab_interface 
resize_grab_interface = {
        noop_grab_focus,
        resize_grab_motion,
        resize_grab_button,
+       noop_grab_axis,
        resize_grab_cancel,
 };
 
@@ -2057,6 +2065,7 @@ static const struct weston_pointer_grab_interface 
busy_cursor_grab_interface = {
        busy_cursor_grab_focus,
        busy_cursor_grab_motion,
        busy_cursor_grab_button,
+       noop_grab_axis,
        busy_cursor_grab_cancel,
 };
 
@@ -3224,6 +3233,19 @@ popup_grab_button(struct weston_pointer_grab *grab,
 }
 
 static void
+popup_grab_axis(struct weston_pointer_grab *grab,
+               uint32_t time, uint32_t axis, wl_fixed_t value)
+{
+       struct weston_pointer *pointer = grab->pointer;
+       struct wl_resource *resource;
+       struct wl_list *resource_list;
+
+       resource_list = &pointer->focus_resource_list;
+       wl_resource_for_each(resource, resource_list)
+               wl_pointer_send_axis(resource, time, axis, value);
+}
+
+static void
 popup_grab_cancel(struct weston_pointer_grab *grab)
 {
        popup_grab_end(grab->pointer);
@@ -3233,6 +3255,7 @@ static const struct weston_pointer_grab_interface 
popup_grab_interface = {
        popup_grab_focus,
        popup_grab_motion,
        popup_grab_button,
+       popup_grab_axis,
        popup_grab_cancel,
 };
 
@@ -4960,6 +4983,7 @@ static const struct weston_pointer_grab_interface 
rotate_grab_interface = {
        noop_grab_focus,
        rotate_grab_motion,
        rotate_grab_button,
+       noop_grab_axis,
        rotate_grab_cancel,
 };
 
diff --git a/ivi-shell/hmi-controller.c b/ivi-shell/hmi-controller.c
index cd79c38..bad2418 100644
--- a/ivi-shell/hmi-controller.c
+++ b/ivi-shell/hmi-controller.c
@@ -1302,6 +1302,14 @@ pointer_noop_grab_focus(struct weston_pointer_grab *grab)
 }
 
 static void
+pointer_default_grab_axis(struct weston_pointer_grab *grab,
+                         uint32_t time, uint32_t axis, wl_fixed_t value)
+{
+       weston_pointer_send_axis(grab->pointer, time, axis, value);
+}
+
+
+static void
 move_grab_update(struct move_grab *move, wl_fixed_t pointer[2])
 {
        struct timespec timestamp = {0};
@@ -1445,6 +1453,7 @@ static const struct weston_pointer_grab_interface 
pointer_move_grab_workspace_in
        pointer_noop_grab_focus,
        pointer_move_grab_motion,
        pointer_move_workspace_grab_button,
+       pointer_default_grab_axis,
        pointer_move_workspace_grab_cancel
 };
 
diff --git a/src/compositor.h b/src/compositor.h
index 867f8c4..fc80eb0 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -253,6 +253,8 @@ struct weston_pointer_grab_interface {
                       wl_fixed_t x, wl_fixed_t y);
        void (*button)(struct weston_pointer_grab *grab,
                       uint32_t time, uint32_t button, uint32_t state);
+       void (*axis)(struct weston_pointer_grab *grab,
+                    uint32_t time, uint32_t axis, wl_fixed_t value);
        void (*cancel)(struct weston_pointer_grab *grab);
 };
 
@@ -375,6 +377,9 @@ weston_pointer_create(struct weston_seat *seat);
 void
 weston_pointer_destroy(struct weston_pointer *pointer);
 void
+weston_pointer_send_axis(struct weston_pointer *pointer,
+                        uint32_t time, uint32_t axis, wl_fixed_t value);
+void
 weston_pointer_set_focus(struct weston_pointer *pointer,
                         struct weston_view *view,
                         wl_fixed_t sx, wl_fixed_t sy);
diff --git a/src/data-device.c b/src/data-device.c
index 3e7baf9..fc93435 100644
--- a/src/data-device.c
+++ b/src/data-device.c
@@ -407,6 +407,12 @@ drag_grab_button(struct weston_pointer_grab *grab,
 }
 
 static void
+drag_grab_axis(struct weston_pointer_grab *grab,
+              uint32_t time, uint32_t axis, wl_fixed_t value)
+{
+}
+
+static void
 drag_grab_cancel(struct weston_pointer_grab *grab)
 {
        struct weston_pointer_drag *drag =
@@ -422,6 +428,7 @@ static const struct weston_pointer_grab_interface 
pointer_drag_grab_interface =
        drag_grab_focus,
        drag_grab_motion,
        drag_grab_button,
+       drag_grab_axis,
        drag_grab_cancel,
 };
 
diff --git a/src/input.c b/src/input.c
index 6604c5d..fe1851a 100644
--- a/src/input.c
+++ b/src/input.c
@@ -217,6 +217,25 @@ default_grab_pointer_button(struct weston_pointer_grab 
*grab,
        }
 }
 
+void
+weston_pointer_send_axis(struct weston_pointer *pointer,
+                        uint32_t time, uint32_t axis, wl_fixed_t value)
+{
+       struct wl_resource *resource;
+       struct wl_list *resource_list;
+
+       resource_list = &pointer->focus_resource_list;
+       wl_resource_for_each(resource, resource_list)
+               wl_pointer_send_axis(resource, time, axis, value);
+}
+
+static void
+default_grab_pointer_axis(struct weston_pointer_grab *grab,
+                         uint32_t time, uint32_t axis, wl_fixed_t value)
+{
+       weston_pointer_send_axis(grab->pointer, time, axis, value);
+}
+
 static void
 default_grab_pointer_cancel(struct weston_pointer_grab *grab)
 {
@@ -227,6 +246,7 @@ static const struct weston_pointer_grab_interface
        default_grab_pointer_focus,
        default_grab_pointer_motion,
        default_grab_pointer_button,
+       default_grab_pointer_axis,
        default_grab_pointer_cancel,
 };
 
@@ -1046,8 +1066,6 @@ notify_axis(struct weston_seat *seat, uint32_t time, 
uint32_t axis,
 {
        struct weston_compositor *compositor = seat->compositor;
        struct weston_pointer *pointer = seat->pointer;
-       struct wl_resource *resource;
-       struct wl_list *resource_list;
 
        weston_compositor_wake(compositor);
 
@@ -1058,10 +1076,7 @@ notify_axis(struct weston_seat *seat, uint32_t time, 
uint32_t axis,
                                                   time, axis, value))
                return;
 
-       resource_list = &pointer->focus_resource_list;
-       wl_resource_for_each(resource, resource_list)
-               wl_pointer_send_axis(resource, time, axis,
-                                    value);
+       pointer->grab->interface->axis(pointer->grab, time, axis, value);
 }
 
 WL_EXPORT int
-- 
2.1.4

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to