On Wed, Jun 03, 2015 at 03:53:37PM -0500, Derek Foreman wrote: > Going from seat to input device requires that we test the device > before relying on the pointer. In all of these binding functions > we can trust exactly one input device type directly. If we pass > that in instead of a seat it's more obvious that we can trust > the one pointer we have. > > When a seat is required, we can access through the device we have > and use that to get to other device types for the seat, provided > we validate them appropriately. > > Signed-off-by: Derek Foreman <der...@osg.samsung.com>
Reviewed-by: Jonas Ådahl <jad...@gmail.com> > --- > src/bindings.c | 49 ++++++++++++++++++++++++++----------------------- > src/compositor.h | 13 +++++++------ > src/input.c | 16 ++++++++-------- > 3 files changed, 41 insertions(+), 37 deletions(-) > > diff --git a/src/bindings.c b/src/bindings.c > index 4f2f203..f94119e 100644 > --- a/src/bindings.c > +++ b/src/bindings.c > @@ -276,12 +276,13 @@ install_binding_grab(struct weston_keyboard *keyboard, > uint32_t time, > > void > weston_compositor_run_key_binding(struct weston_compositor *compositor, > - struct weston_seat *seat, > + struct weston_keyboard *keyboard, > uint32_t time, uint32_t key, > enum wl_keyboard_key_state state) > { > struct weston_binding *b, *tmp; > struct weston_surface *focus; > + struct weston_seat *seat = keyboard->seat; > > if (state == WL_KEYBOARD_KEY_STATE_RELEASED) > return; > @@ -293,15 +294,15 @@ weston_compositor_run_key_binding(struct > weston_compositor *compositor, > wl_list_for_each_safe(b, tmp, &compositor->key_binding_list, link) { > if (b->key == key && b->modifier == seat->modifier_state) { > weston_key_binding_handler_t handler = b->handler; > - focus = seat->keyboard->focus; > - handler(seat->keyboard, time, key, b->data); > + focus = keyboard->focus; > + handler(keyboard, time, key, b->data); > > /* If this was a key binding and it didn't > * install a keyboard grab, install one now to > * swallow the key press. */ > - if (seat->keyboard->grab == > - &seat->keyboard->default_grab) > - install_binding_grab(seat->keyboard, > + if (keyboard->grab == > + &keyboard->default_grab) > + install_binding_grab(keyboard, > time, > key, > focus); > @@ -311,13 +312,13 @@ weston_compositor_run_key_binding(struct > weston_compositor *compositor, > > void > weston_compositor_run_modifier_binding(struct weston_compositor *compositor, > - struct weston_seat *seat, > + struct weston_keyboard *keyboard, > enum weston_keyboard_modifier modifier, > enum wl_keyboard_key_state state) > { > struct weston_binding *b, *tmp; > > - if (seat->keyboard->grab != &seat->keyboard->default_grab) > + if (keyboard->grab != &keyboard->default_grab) > return; > > wl_list_for_each_safe(b, tmp, &compositor->modifier_binding_list, link) > { > @@ -336,13 +337,13 @@ weston_compositor_run_modifier_binding(struct > weston_compositor *compositor, > return; > } > > - handler(seat->keyboard, modifier, b->data); > + handler(keyboard, modifier, b->data); > } > } > > void > weston_compositor_run_button_binding(struct weston_compositor *compositor, > - struct weston_seat *seat, > + struct weston_pointer *pointer, > uint32_t time, uint32_t button, > enum wl_pointer_button_state state) > { > @@ -356,34 +357,35 @@ weston_compositor_run_button_binding(struct > weston_compositor *compositor, > b->key = button; > > wl_list_for_each_safe(b, tmp, &compositor->button_binding_list, link) { > - if (b->button == button && b->modifier == seat->modifier_state) > { > + if (b->button == button && > + b->modifier == pointer->seat->modifier_state) { > weston_button_binding_handler_t handler = b->handler; > - handler(seat->pointer, time, button, b->data); > + handler(pointer, time, button, b->data); > } > } > } > > void > weston_compositor_run_touch_binding(struct weston_compositor *compositor, > - struct weston_seat *seat, uint32_t time, > + struct weston_touch *touch, uint32_t time, > int touch_type) > { > struct weston_binding *b, *tmp; > > - if (seat->touch->num_tp != 1 || touch_type != WL_TOUCH_DOWN) > + if (touch->num_tp != 1 || touch_type != WL_TOUCH_DOWN) > return; > > wl_list_for_each_safe(b, tmp, &compositor->touch_binding_list, link) { > - if (b->modifier == seat->modifier_state) { > + if (b->modifier == touch->seat->modifier_state) { > weston_touch_binding_handler_t handler = b->handler; > - handler(seat->touch, time, b->data); > + handler(touch, time, b->data); > } > } > } > > int > weston_compositor_run_axis_binding(struct weston_compositor *compositor, > - struct weston_seat *seat, > + struct weston_pointer *pointer, > uint32_t time, uint32_t axis, > wl_fixed_t value) > { > @@ -394,9 +396,10 @@ weston_compositor_run_axis_binding(struct > weston_compositor *compositor, > b->key = axis; > > wl_list_for_each_safe(b, tmp, &compositor->axis_binding_list, link) { > - if (b->axis == axis && b->modifier == seat->modifier_state) { > + if (b->axis == axis && > + b->modifier == pointer->seat->modifier_state) { > weston_axis_binding_handler_t handler = b->handler; > - handler(seat->pointer, time, axis, value, b->data); > + handler(pointer, time, axis, value, b->data); > return 1; > } > } > @@ -406,7 +409,7 @@ weston_compositor_run_axis_binding(struct > weston_compositor *compositor, > > int > weston_compositor_run_debug_binding(struct weston_compositor *compositor, > - struct weston_seat *seat, > + struct weston_keyboard *keyboard, > uint32_t time, uint32_t key, > enum wl_keyboard_key_state state) > { > @@ -420,7 +423,7 @@ weston_compositor_run_debug_binding(struct > weston_compositor *compositor, > > count++; > handler = binding->handler; > - handler(seat->keyboard, time, key, binding->data); > + handler(keyboard, time, key, binding->data); > } > > return count; > @@ -476,8 +479,8 @@ debug_binding_key(struct weston_keyboard_grab *grab, > uint32_t time, > } > > if (check_binding) { > - if (weston_compositor_run_debug_binding(ec, db->seat, time, > - key, state)) { > + if (weston_compositor_run_debug_binding(ec, grab->keyboard, > + time, key, state)) { > /* We ran a binding so swallow the press and keep the > * grab to swallow the released too. */ > send = 0; > diff --git a/src/compositor.h b/src/compositor.h > index 4d9e1a0..36fe3c7 100644 > --- a/src/compositor.h > +++ b/src/compositor.h > @@ -1214,31 +1214,32 @@ weston_binding_list_destroy_all(struct wl_list *list); > > void > weston_compositor_run_key_binding(struct weston_compositor *compositor, > - struct weston_seat *seat, uint32_t time, > + struct weston_keyboard *keyboard, > + uint32_t time, > uint32_t key, > enum wl_keyboard_key_state state); > > void > weston_compositor_run_modifier_binding(struct weston_compositor *compositor, > - struct weston_seat *seat, > + struct weston_keyboard *keyboard, > enum weston_keyboard_modifier modifier, > enum wl_keyboard_key_state state); > void > weston_compositor_run_button_binding(struct weston_compositor *compositor, > - struct weston_seat *seat, uint32_t time, > + struct weston_pointer *pointer, uint32_t > time, > uint32_t button, > enum wl_pointer_button_state value); > void > weston_compositor_run_touch_binding(struct weston_compositor *compositor, > - struct weston_seat *seat, uint32_t time, > + struct weston_touch *touch, uint32_t time, > int touch_type); > int > weston_compositor_run_axis_binding(struct weston_compositor *compositor, > - struct weston_seat *seat, uint32_t time, > + struct weston_pointer *pointer, uint32_t > time, > uint32_t axis, int32_t value); > int > weston_compositor_run_debug_binding(struct weston_compositor *compositor, > - struct weston_seat *seat, uint32_t time, > + struct weston_keyboard *keyboard, uint32_t > time, > uint32_t key, > enum wl_keyboard_key_state state); > > diff --git a/src/input.c b/src/input.c > index dee3ca9..b6944d7 100644 > --- a/src/input.c > +++ b/src/input.c > @@ -969,7 +969,7 @@ run_modifier_bindings(struct weston_seat *seat, uint32_t > old, uint32_t new) > for (i = 0; i < ARRAY_LENGTH(mods); i++) { > if (diff & (1 << mods[i].xkb)) > weston_compositor_run_modifier_binding(compositor, > - seat, > + keyboard, > mods[i].weston, > > WL_KEYBOARD_KEY_STATE_PRESSED); > } > @@ -978,7 +978,7 @@ run_modifier_bindings(struct weston_seat *seat, uint32_t > old, uint32_t new) > for (i = 0; i < ARRAY_LENGTH(mods); i++) { > if (diff & (1 << mods[i].xkb)) > weston_compositor_run_modifier_binding(compositor, > - seat, > + keyboard, > mods[i].weston, > > WL_KEYBOARD_KEY_STATE_RELEASED); > } > @@ -1030,7 +1030,7 @@ notify_button(struct weston_seat *seat, uint32_t time, > int32_t button, > pointer->button_count--; > } > > - weston_compositor_run_button_binding(compositor, seat, time, button, > + weston_compositor_run_button_binding(compositor, pointer, time, button, > state); > > pointer->grab->interface->button(pointer->grab, time, button, state); > @@ -1054,8 +1054,8 @@ notify_axis(struct weston_seat *seat, uint32_t time, > uint32_t axis, > if (!value) > return; > > - if (weston_compositor_run_axis_binding(compositor, seat, > - time, axis, value)) > + if (weston_compositor_run_axis_binding(compositor, pointer, > + time, axis, value)) > return; > > resource_list = &pointer->focus_resource_list; > @@ -1342,8 +1342,8 @@ notify_key(struct weston_seat *seat, uint32_t time, > uint32_t key, > > if (grab == &keyboard->default_grab || > grab == &keyboard->input_method_grab) { > - weston_compositor_run_key_binding(compositor, seat, time, key, > - state); > + weston_compositor_run_key_binding(compositor, keyboard, time, > + key, state); > grab = keyboard->grab; > } > > @@ -1538,7 +1538,7 @@ notify_touch(struct weston_seat *seat, uint32_t time, > int touch_id, > return; > } > > - weston_compositor_run_touch_binding(ec, seat, > + weston_compositor_run_touch_binding(ec, touch, > time, touch_type); > > grab->interface->down(grab, time, touch_id, sx, sy); > -- > 2.1.4 > > _______________________________________________ > wayland-devel mailing list > wayland-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel