diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index bb6011fab..8b6499656 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -854,8 +854,7 @@ noop_grab_focus(struct weston_pointer_grab *grab) static void noop_grab_axis(struct weston_pointer_grab *grab, - const struct timespec *time, - struct weston_pointer_axis_event *event) + const struct weston_pointer_axis_event *event) { } @@ -3182,7 +3181,7 @@ resize_binding(struct weston_pointer *pointer, const struct timespec *time, static void surface_opacity_binding(struct weston_pointer *pointer, const struct timespec *time, - struct weston_pointer_axis_event *event, + const struct weston_pointer_axis_event *event, void *data) { float step = 0.005; diff --git a/include/libweston/libweston.h b/include/libweston/libweston.h index e8b16cf33..9415fb793 100644 --- a/include/libweston/libweston.h +++ b/include/libweston/libweston.h @@ -626,6 +626,7 @@ struct weston_pointer_button_event { }; struct weston_pointer_axis_event { + struct weston_input_event base_event; uint32_t axis; double value; bool has_discrete; @@ -648,8 +649,7 @@ struct weston_pointer_grab_interface { void (*button)(struct weston_pointer_grab *grab, const struct weston_pointer_button_event *button_event); void (*axis)(struct weston_pointer_grab *grab, - const struct timespec *time, - struct weston_pointer_axis_event *event); + const struct weston_pointer_axis_event *event); void (*axis_source)(struct weston_pointer_grab *grab, uint32_t source); void (*frame)(struct weston_pointer_grab *grab); void (*cancel)(struct weston_pointer_grab *grab); @@ -983,8 +983,7 @@ weston_pointer_send_button(struct weston_pointer *pointer, const struct weston_pointer_button_event *button_event); void weston_pointer_send_axis(struct weston_pointer *pointer, - const struct timespec *time, - struct weston_pointer_axis_event *event); + const struct weston_pointer_axis_event *event); void weston_pointer_send_axis_source(struct weston_pointer *pointer, enum wl_pointer_axis_source source); @@ -1044,6 +1043,11 @@ void weston_pointer_button_event_init(struct weston_pointer_button_event *event, uint32_t button, enum wl_pointer_button_state button_state); +void +weston_pointer_axis_event_init(struct weston_pointer_axis_event *event, + uint32_t axis, double value, bool has_value, + int32_t discrete); + void weston_keyboard_send_modifiers(struct weston_keyboard *keyboard, uint32_t serial, uint32_t mods_depressed, @@ -2328,7 +2332,7 @@ weston_compositor_add_tablet_tool_binding(struct weston_compositor *compositor, typedef void (*weston_axis_binding_handler_t)(struct weston_pointer *pointer, const struct timespec *time, - struct weston_pointer_axis_event *event, + const struct weston_pointer_axis_event *event, void *data); struct weston_binding * weston_compositor_add_axis_binding(struct weston_compositor *compositor, diff --git a/ivi-shell/hmi-controller.c b/ivi-shell/hmi-controller.c index 9d585812d..7939c603b 100644 --- a/ivi-shell/hmi-controller.c +++ b/ivi-shell/hmi-controller.c @@ -1639,10 +1639,9 @@ pointer_noop_grab_focus(struct weston_pointer_grab *grab) static void pointer_default_grab_axis(struct weston_pointer_grab *grab, - const struct timespec *time, - struct weston_pointer_axis_event *event) + const struct weston_pointer_axis_event *event) { - weston_pointer_send_axis(grab->pointer, time, event); + weston_pointer_send_axis(grab->pointer, event); } static void diff --git a/kiosk-shell/kiosk-shell-grab.c b/kiosk-shell/kiosk-shell-grab.c index df3aebb29..2508f8ee8 100644 --- a/kiosk-shell/kiosk-shell-grab.c +++ b/kiosk-shell/kiosk-shell-grab.c @@ -50,8 +50,7 @@ pointer_move_grab_focus(struct weston_pointer_grab *grab) static void pointer_move_grab_axis(struct weston_pointer_grab *grab, - const struct timespec *time, - struct weston_pointer_axis_event *event) + const struct weston_pointer_axis_event *event) { } diff --git a/libweston/backend-rdp/rdp.c b/libweston/backend-rdp/rdp.c index 85f8e1184..e79709062 100644 --- a/libweston/backend-rdp/rdp.c +++ b/libweston/backend-rdp/rdp.c @@ -1363,7 +1363,6 @@ rdp_notify_wheel_scroll(RdpPeerContext *peerContext, UINT16 flags, uint32_t axis struct weston_pointer_axis_event weston_event; struct rdp_backend *b = peerContext->rdpBackend; int ivalue; - double value; struct timespec time; int *accumWheelRotationPrecise; int *accumWheelRotationDiscrete; @@ -1407,19 +1406,18 @@ rdp_notify_wheel_scroll(RdpPeerContext *peerContext, UINT16 flags, uint32_t axis ivalue, *accumWheelRotationPrecise, *accumWheelRotationDiscrete); if (abs(*accumWheelRotationPrecise) >= 12) { - value = (double)(*accumWheelRotationPrecise / 12); + weston_compositor_get_time(&time); - weston_event.axis = axis; - weston_event.value = value; - weston_event.discrete = *accumWheelRotationDiscrete / 120; - weston_event.has_discrete = true; + weston_input_event_init(&weston_event.base_event, + &time, peerContext->item.seat); + weston_pointer_axis_event_init(&weston_event, axis, + (double) *accumWheelRotationPrecise / 12, + true, *accumWheelRotationDiscrete / 120); rdp_debug_verbose(b, "wheel: value:%f discrete:%d\n", weston_event.value, weston_event.discrete); - weston_compositor_get_time(&time); - - notify_axis(peerContext->item.seat, &time, &weston_event); + notify_axis(peerContext->item.seat, &weston_event); *accumWheelRotationPrecise %= 12; *accumWheelRotationDiscrete %= 120; diff --git a/libweston/backend-vnc/vnc.c b/libweston/backend-vnc/vnc.c index 76b819ec7..4f5b69b1e 100644 --- a/libweston/backend-vnc/vnc.c +++ b/libweston/backend-vnc/vnc.c @@ -489,17 +489,19 @@ vnc_pointer_event(struct nvnc_client *client, uint16_t x, uint16_t y, if ((button_mask & NVNC_SCROLL_UP) || (button_mask & NVNC_SCROLL_DOWN)) { struct weston_pointer_axis_event weston_event; - - weston_event.axis = WL_POINTER_AXIS_VERTICAL_SCROLL; + double value = 0; /* DEFAULT_AXIS_STEP_DISTANCE is stolen from compositor-x11.c */ if (button_mask & NVNC_SCROLL_UP) - weston_event.value = -DEFAULT_AXIS_STEP_DISTANCE; + value = -DEFAULT_AXIS_STEP_DISTANCE; if (button_mask & NVNC_SCROLL_DOWN) - weston_event.value = DEFAULT_AXIS_STEP_DISTANCE; - weston_event.has_discrete = false; + value = DEFAULT_AXIS_STEP_DISTANCE; - notify_axis(peer->seat, &time, &weston_event); + weston_input_event_init(&weston_event.base_event, + &time, peer->seat); + weston_pointer_axis_event_init(&weston_event, WL_POINTER_AXIS_VERTICAL_SCROLL, + value, false, 0); + notify_axis(peer->seat, &weston_event); } peer->last_button_mask = button_mask; diff --git a/libweston/backend-wayland/wayland.c b/libweston/backend-wayland/wayland.c index c72d898c6..eb680f841 100644 --- a/libweston/backend-wayland/wayland.c +++ b/libweston/backend-wayland/wayland.c @@ -1799,26 +1799,27 @@ input_handle_axis(void *data, struct wl_pointer *pointer, struct wayland_input *input = data; struct weston_pointer_axis_event weston_event; struct timespec ts; - - weston_event.axis = axis; - weston_event.value = wl_fixed_to_double(value); - weston_event.has_discrete = false; + bool has_discrete = false; + int32_t discrete = 0; if (axis == WL_POINTER_AXIS_VERTICAL_SCROLL && input->vert.has_discrete) { - weston_event.has_discrete = true; - weston_event.discrete = input->vert.discrete; + has_discrete = true; + discrete = input->vert.discrete; input->vert.has_discrete = false; } else if (axis == WL_POINTER_AXIS_HORIZONTAL_SCROLL && input->horiz.has_discrete) { - weston_event.has_discrete = true; - weston_event.discrete = input->horiz.discrete; + has_discrete = true; + discrete = input->horiz.discrete; input->horiz.has_discrete = false; } timespec_from_msec(&ts, time); - notify_axis(&input->base, &ts, &weston_event); + weston_input_event_init(&weston_event.base_event, &ts, &input->base); + weston_pointer_axis_event_init(&weston_event, axis, wl_fixed_to_double(value), + has_discrete, discrete); + notify_axis(&input->base, &weston_event); if (input->seat_version < WL_POINTER_FRAME_SINCE_VERSION) notify_pointer_frame(&input->base); @@ -1849,12 +1850,11 @@ input_handle_axis_stop(void *data, struct wl_pointer *pointer, struct weston_pointer_axis_event weston_event; struct timespec ts; - weston_event.axis = axis; - weston_event.value = 0; - timespec_from_msec(&ts, time); - notify_axis(&input->base, &ts, &weston_event); + weston_input_event_init(&weston_event.base_event, &ts, &input->base); + weston_pointer_axis_event_init(&weston_event, axis, 0, false, 0); + notify_axis(&input->base, &weston_event); } static void diff --git a/libweston/backend-x11/x11.c b/libweston/backend-x11/x11.c index 6d8ab502b..dc26cdc95 100644 --- a/libweston/backend-x11/x11.c +++ b/libweston/backend-x11/x11.c @@ -1456,49 +1456,53 @@ x11_backend_deliver_button_event(struct x11_backend *b, /* Axis are measured in pixels, but the xcb events are discrete * steps. Therefore move the axis by some pixels every step. */ if (is_button_pressed) { - weston_event.value = -DEFAULT_AXIS_STEP_DISTANCE; - weston_event.discrete = -1; - weston_event.has_discrete = true; - weston_event.axis = - WL_POINTER_AXIS_VERTICAL_SCROLL; weston_compositor_get_time(&time); - notify_axis(&b->core_seat, &time, &weston_event); + + weston_input_event_init(&weston_event.base_event, + &time, &b->core_seat); + weston_pointer_axis_event_init(&weston_event, + WL_POINTER_AXIS_VERTICAL_SCROLL, + -DEFAULT_AXIS_STEP_DISTANCE, true, -1); + notify_axis(&b->core_seat, &weston_event); notify_pointer_frame(&b->core_seat); } return; case 5: if (is_button_pressed) { - weston_event.value = DEFAULT_AXIS_STEP_DISTANCE; - weston_event.discrete = 1; - weston_event.has_discrete = true; - weston_event.axis = - WL_POINTER_AXIS_VERTICAL_SCROLL; weston_compositor_get_time(&time); - notify_axis(&b->core_seat, &time, &weston_event); + + weston_input_event_init(&weston_event.base_event, + &time, &b->core_seat); + weston_pointer_axis_event_init(&weston_event, + WL_POINTER_AXIS_VERTICAL_SCROLL, + DEFAULT_AXIS_STEP_DISTANCE, true, 1); + notify_axis(&b->core_seat, &weston_event); notify_pointer_frame(&b->core_seat); } return; case 6: if (is_button_pressed) { - weston_event.value = -DEFAULT_AXIS_STEP_DISTANCE; - weston_event.discrete = -1; - weston_event.has_discrete = true; - weston_event.axis = - WL_POINTER_AXIS_HORIZONTAL_SCROLL; weston_compositor_get_time(&time); - notify_axis(&b->core_seat, &time, &weston_event); + + weston_input_event_init(&weston_event.base_event, + &time, &b->core_seat); + weston_pointer_axis_event_init(&weston_event, + WL_POINTER_AXIS_HORIZONTAL_SCROLL, + -DEFAULT_AXIS_STEP_DISTANCE, true, -1); + notify_axis(&b->core_seat, &weston_event); notify_pointer_frame(&b->core_seat); } return; case 7: if (is_button_pressed) { - weston_event.value = DEFAULT_AXIS_STEP_DISTANCE; - weston_event.discrete = 1; - weston_event.has_discrete = true; - weston_event.axis = - WL_POINTER_AXIS_HORIZONTAL_SCROLL; weston_compositor_get_time(&time); - notify_axis(&b->core_seat, &time, &weston_event); + + weston_input_event_init(&weston_event.base_event, + &time, &b->core_seat); + weston_pointer_axis_event_init(&weston_event, + WL_POINTER_AXIS_HORIZONTAL_SCROLL, + DEFAULT_AXIS_STEP_DISTANCE, true, 1); + notify_axis(&b->core_seat, &weston_event); notify_pointer_frame(&b->core_seat); } return; diff --git a/libweston/backend.h b/libweston/backend.h index f8ac5ff93..2b87e4375 100644 --- a/libweston/backend.h +++ b/libweston/backend.h @@ -232,8 +232,7 @@ weston_output_finish_frame_from_timer(struct weston_output *output); /* weston_seat */ void -notify_axis(struct weston_seat *seat, const struct timespec *time, - struct weston_pointer_axis_event *event); +notify_axis(struct weston_seat *seat, const struct weston_pointer_axis_event *event); void notify_axis_source(struct weston_seat *seat, uint32_t source); diff --git a/libweston/bindings.c b/libweston/bindings.c index 7b0f6877f..dd0e201f8 100644 --- a/libweston/bindings.c +++ b/libweston/bindings.c @@ -442,7 +442,7 @@ int weston_compositor_run_axis_binding(struct weston_compositor *compositor, struct weston_pointer *pointer, const struct timespec *time, - struct weston_pointer_axis_event *event) + const struct weston_pointer_axis_event *event) { struct weston_binding *b, *tmp; diff --git a/libweston/data-device.c b/libweston/data-device.c index d582a452a..9da912b31 100644 --- a/libweston/data-device.c +++ b/libweston/data-device.c @@ -693,8 +693,7 @@ drag_grab_button(struct weston_pointer_grab *grab, static void drag_grab_axis(struct weston_pointer_grab *grab, - const struct timespec *time, - struct weston_pointer_axis_event *event) + const struct weston_pointer_axis_event *event) { } diff --git a/libweston/desktop/seat.c b/libweston/desktop/seat.c index b4535b122..3c0ac225e 100644 --- a/libweston/desktop/seat.c +++ b/libweston/desktop/seat.c @@ -146,10 +146,9 @@ weston_desktop_seat_popup_grab_pointer_button(struct weston_pointer_grab *grab, static void weston_desktop_seat_popup_grab_pointer_axis(struct weston_pointer_grab *grab, - const struct timespec *time, - struct weston_pointer_axis_event *event) + const struct weston_pointer_axis_event *event) { - weston_pointer_send_axis(grab->pointer, time, event); + weston_pointer_send_axis(grab->pointer, event); } static void diff --git a/libweston/input.c b/libweston/input.c index 315b3f2a6..1d5d184fc 100644 --- a/libweston/input.c +++ b/libweston/input.c @@ -729,7 +729,6 @@ default_grab_pointer_button(struct weston_pointer_grab *grab, /** Send wl_pointer.axis events to focused resources. * * \param pointer The pointer where the axis events originates from. - * \param time The timestamp of the event * \param event The axis value of the event * * For every resource that is currently in focus, send a wl_pointer.axis event @@ -738,8 +737,7 @@ default_grab_pointer_button(struct weston_pointer_grab *grab, */ WL_EXPORT void weston_pointer_send_axis(struct weston_pointer *pointer, - const struct timespec *time, - struct weston_pointer_axis_event *event) + const struct weston_pointer_axis_event *event) { struct wl_resource *resource; struct wl_list *resource_list; @@ -749,7 +747,7 @@ weston_pointer_send_axis(struct weston_pointer *pointer, return; resource_list = &pointer->focus_client->pointer_resources; - msecs = timespec_to_msec(time); + msecs = timespec_to_msec(event->base_event.ts); wl_resource_for_each(resource, resource_list) { if (event->has_discrete && wl_resource_get_version(resource) >= @@ -760,7 +758,7 @@ weston_pointer_send_axis(struct weston_pointer *pointer, if (event->value) { send_timestamps_for_input_resource(resource, &pointer->timestamps_list, - time); + event->base_event.ts); wl_pointer_send_axis(resource, msecs, event->axis, wl_fixed_from_double(event->value)); @@ -768,7 +766,7 @@ weston_pointer_send_axis(struct weston_pointer *pointer, WL_POINTER_AXIS_STOP_SINCE_VERSION) { send_timestamps_for_input_resource(resource, &pointer->timestamps_list, - time); + event->base_event.ts); wl_pointer_send_axis_stop(resource, msecs, event->axis); } @@ -836,10 +834,9 @@ weston_pointer_send_frame(struct weston_pointer *pointer) static void default_grab_pointer_axis(struct weston_pointer_grab *grab, - const struct timespec *time, - struct weston_pointer_axis_event *event) + const struct weston_pointer_axis_event *event) { - weston_pointer_send_axis(grab->pointer, time, event); + weston_pointer_send_axis(grab->pointer, event); } static void @@ -2354,19 +2351,17 @@ notify_button(struct weston_seat *seat, struct weston_pointer_button_event *even } WL_EXPORT void -notify_axis(struct weston_seat *seat, const struct timespec *time, - struct weston_pointer_axis_event *event) +notify_axis(struct weston_seat *seat, const struct weston_pointer_axis_event *event) { struct weston_compositor *compositor = seat->compositor; struct weston_pointer *pointer = weston_seat_get_pointer(seat); weston_compositor_wake(compositor); - if (weston_compositor_run_axis_binding(compositor, pointer, - time, event)) + if (weston_compositor_run_axis_binding(compositor, pointer, event->base_event.ts, event)) return; - pointer->grab->interface->axis(pointer->grab, time, event); + pointer->grab->interface->axis(pointer->grab, event); } WL_EXPORT void @@ -4725,10 +4720,9 @@ locked_pointer_grab_pointer_button(struct weston_pointer_grab *grab, static void locked_pointer_grab_pointer_axis(struct weston_pointer_grab *grab, - const struct timespec *time, - struct weston_pointer_axis_event *event) + const struct weston_pointer_axis_event *event) { - weston_pointer_send_axis(grab->pointer, time, event); + weston_pointer_send_axis(grab->pointer, event); } static void @@ -5725,10 +5719,9 @@ confined_pointer_grab_pointer_button(struct weston_pointer_grab *grab, static void confined_pointer_grab_pointer_axis(struct weston_pointer_grab *grab, - const struct timespec *time, - struct weston_pointer_axis_event *event) + const struct weston_pointer_axis_event *event) { - weston_pointer_send_axis(grab->pointer, time, event); + weston_pointer_send_axis(grab->pointer, event); } static void @@ -6046,3 +6039,15 @@ weston_pointer_button_event_init(struct weston_pointer_button_event *event, event->button = button; event->button_state = button_state; } + +WL_EXPORT void +weston_pointer_axis_event_init(struct weston_pointer_axis_event *event, + uint32_t axis, double value, bool has_discrete, + int32_t discrete) +{ + + event->axis = axis; + event->value = value; + event->has_discrete = has_discrete; + event->discrete = discrete; +} diff --git a/libweston/libinput-device.c b/libweston/libinput-device.c index 131e79bca..f89c7eb0d 100644 --- a/libweston/libinput-device.c +++ b/libweston/libinput-device.c @@ -315,12 +315,10 @@ handle_pointer_axis(struct libinput_device *libinput_device, vert_discrete = get_axis_discrete(pointer_event, axis); vert = normalize_scroll(pointer_event, axis); - weston_event.axis = WL_POINTER_AXIS_VERTICAL_SCROLL; - weston_event.value = vert; - weston_event.discrete = vert_discrete; - weston_event.has_discrete = (vert_discrete != 0); - - notify_axis(device->seat, &time, &weston_event); + weston_input_event_init(&weston_event.base_event, &time, device->seat); + weston_pointer_axis_event_init(&weston_event, WL_POINTER_AXIS_VERTICAL_SCROLL, + vert, (vert_discrete != 0), vert_discrete); + notify_axis(device->seat, &weston_event); } if (has_horiz) { @@ -328,12 +326,10 @@ handle_pointer_axis(struct libinput_device *libinput_device, horiz_discrete = get_axis_discrete(pointer_event, axis); horiz = normalize_scroll(pointer_event, axis); - weston_event.axis = WL_POINTER_AXIS_HORIZONTAL_SCROLL; - weston_event.value = horiz; - weston_event.discrete = horiz_discrete; - weston_event.has_discrete = (horiz_discrete != 0); - - notify_axis(device->seat, &time, &weston_event); + weston_input_event_init(&weston_event.base_event, &time, device->seat); + weston_pointer_axis_event_init(&weston_event, WL_POINTER_AXIS_HORIZONTAL_SCROLL, + horiz, (horiz_discrete != 0), horiz_discrete); + notify_axis(device->seat, &weston_event); } return true; diff --git a/libweston/libweston-internal.h b/libweston/libweston-internal.h index 65f754c25..8bc498ff6 100644 --- a/libweston/libweston-internal.h +++ b/libweston/libweston-internal.h @@ -341,7 +341,7 @@ int weston_compositor_run_axis_binding(struct weston_compositor *compositor, struct weston_pointer *pointer, const struct timespec *time, - struct weston_pointer_axis_event *event); + const struct weston_pointer_axis_event *event); void weston_compositor_run_button_binding(struct weston_compositor *compositor, struct weston_pointer *pointer, diff --git a/tests/harness/weston-test.c b/tests/harness/weston-test.c index d9f8908c1..581b4323f 100644 --- a/tests/harness/weston-test.c +++ b/tests/harness/weston-test.c @@ -458,12 +458,11 @@ send_axis(struct wl_client *client, struct wl_resource *resource, struct weston_pointer_axis_event axis_event; timespec_from_proto(&time, tv_sec_hi, tv_sec_lo, tv_nsec); - axis_event.axis = axis; - axis_event.value = wl_fixed_to_double(value); - axis_event.has_discrete = false; - axis_event.discrete = 0; - notify_axis(seat, &time, &axis_event); + weston_input_event_init(&axis_event.base_event, &time, seat); + weston_pointer_axis_event_init(&axis_event, axis, + wl_fixed_to_double(value), false, 0); + notify_axis(seat, &axis_event); } static void