On Fri, May 31, 2013 at 06:09:55PM +0100, Rob Bradford wrote: > From: Rob Bradford <r...@linux.intel.com> > > And as a result of this stop iterating through the compositor seat list > (of one item) and instead access the udev_input structure directly.
I think we should move udev_input to udev-seat.c eventually and just malloc it. Kristian > This enables a refactoring to pull out the weston_seat into a separate > structure permitting multiple seats. > --- > src/compositor-drm.c | 18 ++++++------------ > src/compositor-fbdev.c | 15 +++++---------- > src/udev-seat.c | 16 ++++------------ > src/udev-seat.h | 7 ++++--- > 4 files changed, 19 insertions(+), 37 deletions(-) > > diff --git a/src/compositor-drm.c b/src/compositor-drm.c > index 1845978..79b6ce8 100644 > --- a/src/compositor-drm.c > +++ b/src/compositor-drm.c > @@ -107,6 +107,7 @@ struct drm_compositor { > uint32_t prev_state; > > clockid_t clock; > + struct udev_input input; > }; > > struct drm_mode { > @@ -2228,10 +2229,8 @@ static void > drm_destroy(struct weston_compositor *ec) > { > struct drm_compositor *d = (struct drm_compositor *) ec; > - struct udev_input *input, *next; > > - wl_list_for_each_safe(input, next, &ec->seat_list, base.link) > - udev_input_destroy(input); > + udev_input_destroy(&d->input); > > wl_event_source_remove(d->udev_drm_source); > wl_event_source_remove(d->drm_source); > @@ -2288,7 +2287,6 @@ static void > vt_func(struct weston_compositor *compositor, int event) > { > struct drm_compositor *ec = (struct drm_compositor *) compositor; > - struct udev_input *input; > struct drm_sprite *sprite; > struct drm_output *output; > > @@ -2303,13 +2301,11 @@ vt_func(struct weston_compositor *compositor, int > event) > compositor->state = ec->prev_state; > drm_compositor_set_modes(ec); > weston_compositor_damage_all(compositor); > - wl_list_for_each(input, &compositor->seat_list, base.link) > - udev_input_enable(input, ec->udev); > + udev_input_enable(&ec->input, ec->udev); > break; > case TTY_LEAVE_VT: > weston_log("leaving VT\n"); > - wl_list_for_each(input, &compositor->seat_list, base.link) > - udev_input_disable(input); > + udev_input_disable(&ec->input); > > compositor->focus = 0; > ec->prev_state = compositor->state; > @@ -2437,7 +2433,6 @@ drm_compositor_create(struct wl_display *display, > struct drm_compositor *ec; > struct udev_device *drm_device; > struct wl_event_loop *loop; > - struct udev_input *udev_input, *next; > const char *path; > uint32_t key; > > @@ -2526,7 +2521,7 @@ drm_compositor_create(struct wl_display *display, > > path = NULL; > > - if (udev_input_create(&ec->base, ec->udev, seat_id) == NULL) { > + if (udev_input_init(&ec->input, &ec->base, ec->udev, seat_id) < 0) { > weston_log("failed to create input devices\n"); > goto err_sprite; > } > @@ -2569,8 +2564,7 @@ err_udev_monitor: > udev_monitor_unref(ec->udev_monitor); > err_drm_source: > wl_event_source_remove(ec->drm_source); > - wl_list_for_each_safe(udev_input, next, &ec->base.seat_list, base.link) > - udev_input_destroy(udev_input); > + udev_input_destroy(&ec->input); > err_sprite: > ec->base.renderer->destroy(&ec->base); > gbm_device_destroy(ec->gbm); > diff --git a/src/compositor-fbdev.c b/src/compositor-fbdev.c > index 43897da..605dcd8 100644 > --- a/src/compositor-fbdev.c > +++ b/src/compositor-fbdev.c > @@ -52,6 +52,7 @@ struct fbdev_compositor { > > struct udev *udev; > struct tty *tty; > + struct udev_input input; > }; > > struct fbdev_screeninfo { > @@ -751,11 +752,8 @@ static void > fbdev_compositor_destroy(struct weston_compositor *base) > { > struct fbdev_compositor *compositor = to_fbdev_compositor(base); > - struct udev_input *input, *next; > > - /* Destroy all inputs. */ > - wl_list_for_each_safe(input, next, &compositor->base.seat_list, > base.link) > - udev_input_destroy(input); > + udev_input_destroy(&compositor->input); > > /* Destroy the output. */ > weston_compositor_shutdown(&compositor->base); > @@ -771,7 +769,6 @@ static void > vt_func(struct weston_compositor *base, int event) > { > struct fbdev_compositor *compositor = to_fbdev_compositor(base); > - struct udev_input *input; > struct weston_output *output; > > switch (event) { > @@ -786,13 +783,11 @@ vt_func(struct weston_compositor *base, int event) > > weston_compositor_damage_all(&compositor->base); > > - wl_list_for_each(input, &compositor->base.seat_list, base.link) > - udev_input_enable(input, compositor->udev); > + udev_input_enable(&compositor->input, compositor->udev); > break; > case TTY_LEAVE_VT: > weston_log("leaving VT\n"); > - wl_list_for_each(input, &compositor->base.seat_list, base.link) > - udev_input_disable(input); > + udev_input_disable(&compositor->input); > > wl_list_for_each(output, &compositor->base.output_list, link) { > fbdev_output_disable(output); > @@ -884,7 +879,7 @@ fbdev_compositor_create(struct wl_display *display, int > *argc, char *argv[], > if (fbdev_output_create(compositor, param->device) < 0) > goto out_pixman; > > - udev_input_create(&compositor->base, compositor->udev, seat); > + udev_input_init(&compositor->input, &compositor->base, > compositor->udev, seat); > > return &compositor->base; > > diff --git a/src/udev-seat.c b/src/udev-seat.c > index 8c30643..4091088 100644 > --- a/src/udev-seat.c > +++ b/src/udev-seat.c > @@ -259,16 +259,10 @@ drm_led_update(struct weston_seat *seat_base, enum > weston_led leds) > evdev_led_update(device, leds); > } > > -struct udev_input * > -udev_input_create(struct weston_compositor *c, struct udev *udev, > +int > +udev_input_init(struct udev_input *input, struct weston_compositor *c, > struct udev *udev, > const char *seat_id) > { > - struct udev_input *input; > - > - input = malloc(sizeof *input); > - if (input == NULL) > - return NULL; > - > memset(input, 0, sizeof *input); > weston_seat_init(&input->base, c, "default"); > input->base.led_update = drm_led_update; > @@ -278,12 +272,11 @@ udev_input_create(struct weston_compositor *c, struct > udev *udev, > if (udev_input_enable(input, udev) < 0) > goto err; > > - return input; > + return 0; > > err: > free(input->seat_id); > - free(input); > - return NULL; > + return -1; > } > > void > @@ -293,5 +286,4 @@ udev_input_destroy(struct udev_input *input) > > weston_seat_release(&input->base); > free(input->seat_id); > - free(input); > } > diff --git a/src/udev-seat.h b/src/udev-seat.h > index dbc6269..e19a93d 100644 > --- a/src/udev-seat.h > +++ b/src/udev-seat.h > @@ -37,9 +37,10 @@ struct udev_input { > > int udev_input_enable(struct udev_input *input, struct udev *udev); > void udev_input_disable(struct udev_input *input); > -struct udev_input *udev_input_create(struct weston_compositor *c, > - struct udev *udev, > - const char *seat_id); > +int udev_input_init(struct udev_input *input, > + struct weston_compositor *c, > + struct udev *udev, > + const char *seat_id); > void udev_input_destroy(struct udev_input *input); > > #endif > -- > 1.8.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