udev-seat: Make the udev_input structure an embedded structure
And as a result of this stop iterating through the compositor seat list (of one item) and instead access the udev_input structure directly. This enables a refactoring to pull out the weston_seat into a separate structure permitting multiple seats.
This commit is contained in:
committed by
Kristian Høgsberg
parent
d27b99d950
commit
d355b80172
+6
-12
@@ -107,6 +107,7 @@ struct drm_compositor {
|
|||||||
uint32_t prev_state;
|
uint32_t prev_state;
|
||||||
|
|
||||||
clockid_t clock;
|
clockid_t clock;
|
||||||
|
struct udev_input input;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct drm_mode {
|
struct drm_mode {
|
||||||
@@ -2222,10 +2223,8 @@ static void
|
|||||||
drm_destroy(struct weston_compositor *ec)
|
drm_destroy(struct weston_compositor *ec)
|
||||||
{
|
{
|
||||||
struct drm_compositor *d = (struct drm_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(&d->input);
|
||||||
udev_input_destroy(input);
|
|
||||||
|
|
||||||
wl_event_source_remove(d->udev_drm_source);
|
wl_event_source_remove(d->udev_drm_source);
|
||||||
wl_event_source_remove(d->drm_source);
|
wl_event_source_remove(d->drm_source);
|
||||||
@@ -2282,7 +2281,6 @@ static void
|
|||||||
vt_func(struct weston_compositor *compositor, int event)
|
vt_func(struct weston_compositor *compositor, int event)
|
||||||
{
|
{
|
||||||
struct drm_compositor *ec = (struct drm_compositor *) compositor;
|
struct drm_compositor *ec = (struct drm_compositor *) compositor;
|
||||||
struct udev_input *input;
|
|
||||||
struct drm_sprite *sprite;
|
struct drm_sprite *sprite;
|
||||||
struct drm_output *output;
|
struct drm_output *output;
|
||||||
|
|
||||||
@@ -2297,13 +2295,11 @@ vt_func(struct weston_compositor *compositor, int event)
|
|||||||
compositor->state = ec->prev_state;
|
compositor->state = ec->prev_state;
|
||||||
drm_compositor_set_modes(ec);
|
drm_compositor_set_modes(ec);
|
||||||
weston_compositor_damage_all(compositor);
|
weston_compositor_damage_all(compositor);
|
||||||
wl_list_for_each(input, &compositor->seat_list, base.link)
|
udev_input_enable(&ec->input, ec->udev);
|
||||||
udev_input_enable(input, ec->udev);
|
|
||||||
break;
|
break;
|
||||||
case TTY_LEAVE_VT:
|
case TTY_LEAVE_VT:
|
||||||
weston_log("leaving VT\n");
|
weston_log("leaving VT\n");
|
||||||
wl_list_for_each(input, &compositor->seat_list, base.link)
|
udev_input_disable(&ec->input);
|
||||||
udev_input_disable(input);
|
|
||||||
|
|
||||||
compositor->focus = 0;
|
compositor->focus = 0;
|
||||||
ec->prev_state = compositor->state;
|
ec->prev_state = compositor->state;
|
||||||
@@ -2431,7 +2427,6 @@ drm_compositor_create(struct wl_display *display,
|
|||||||
struct drm_compositor *ec;
|
struct drm_compositor *ec;
|
||||||
struct udev_device *drm_device;
|
struct udev_device *drm_device;
|
||||||
struct wl_event_loop *loop;
|
struct wl_event_loop *loop;
|
||||||
struct udev_input *udev_input, *next;
|
|
||||||
const char *path;
|
const char *path;
|
||||||
uint32_t key;
|
uint32_t key;
|
||||||
|
|
||||||
@@ -2520,7 +2515,7 @@ drm_compositor_create(struct wl_display *display,
|
|||||||
|
|
||||||
path = NULL;
|
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");
|
weston_log("failed to create input devices\n");
|
||||||
goto err_sprite;
|
goto err_sprite;
|
||||||
}
|
}
|
||||||
@@ -2563,8 +2558,7 @@ err_udev_monitor:
|
|||||||
udev_monitor_unref(ec->udev_monitor);
|
udev_monitor_unref(ec->udev_monitor);
|
||||||
err_drm_source:
|
err_drm_source:
|
||||||
wl_event_source_remove(ec->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(&ec->input);
|
||||||
udev_input_destroy(udev_input);
|
|
||||||
err_sprite:
|
err_sprite:
|
||||||
ec->base.renderer->destroy(&ec->base);
|
ec->base.renderer->destroy(&ec->base);
|
||||||
gbm_device_destroy(ec->gbm);
|
gbm_device_destroy(ec->gbm);
|
||||||
|
|||||||
+5
-10
@@ -52,6 +52,7 @@ struct fbdev_compositor {
|
|||||||
|
|
||||||
struct udev *udev;
|
struct udev *udev;
|
||||||
struct tty *tty;
|
struct tty *tty;
|
||||||
|
struct udev_input input;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct fbdev_screeninfo {
|
struct fbdev_screeninfo {
|
||||||
@@ -751,11 +752,8 @@ static void
|
|||||||
fbdev_compositor_destroy(struct weston_compositor *base)
|
fbdev_compositor_destroy(struct weston_compositor *base)
|
||||||
{
|
{
|
||||||
struct fbdev_compositor *compositor = to_fbdev_compositor(base);
|
struct fbdev_compositor *compositor = to_fbdev_compositor(base);
|
||||||
struct udev_input *input, *next;
|
|
||||||
|
|
||||||
/* Destroy all inputs. */
|
udev_input_destroy(&compositor->input);
|
||||||
wl_list_for_each_safe(input, next, &compositor->base.seat_list, base.link)
|
|
||||||
udev_input_destroy(input);
|
|
||||||
|
|
||||||
/* Destroy the output. */
|
/* Destroy the output. */
|
||||||
weston_compositor_shutdown(&compositor->base);
|
weston_compositor_shutdown(&compositor->base);
|
||||||
@@ -771,7 +769,6 @@ static void
|
|||||||
vt_func(struct weston_compositor *base, int event)
|
vt_func(struct weston_compositor *base, int event)
|
||||||
{
|
{
|
||||||
struct fbdev_compositor *compositor = to_fbdev_compositor(base);
|
struct fbdev_compositor *compositor = to_fbdev_compositor(base);
|
||||||
struct udev_input *input;
|
|
||||||
struct weston_output *output;
|
struct weston_output *output;
|
||||||
|
|
||||||
switch (event) {
|
switch (event) {
|
||||||
@@ -786,13 +783,11 @@ vt_func(struct weston_compositor *base, int event)
|
|||||||
|
|
||||||
weston_compositor_damage_all(&compositor->base);
|
weston_compositor_damage_all(&compositor->base);
|
||||||
|
|
||||||
wl_list_for_each(input, &compositor->base.seat_list, base.link)
|
udev_input_enable(&compositor->input, compositor->udev);
|
||||||
udev_input_enable(input, compositor->udev);
|
|
||||||
break;
|
break;
|
||||||
case TTY_LEAVE_VT:
|
case TTY_LEAVE_VT:
|
||||||
weston_log("leaving VT\n");
|
weston_log("leaving VT\n");
|
||||||
wl_list_for_each(input, &compositor->base.seat_list, base.link)
|
udev_input_disable(&compositor->input);
|
||||||
udev_input_disable(input);
|
|
||||||
|
|
||||||
wl_list_for_each(output, &compositor->base.output_list, link) {
|
wl_list_for_each(output, &compositor->base.output_list, link) {
|
||||||
fbdev_output_disable(output);
|
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)
|
if (fbdev_output_create(compositor, param->device) < 0)
|
||||||
goto out_pixman;
|
goto out_pixman;
|
||||||
|
|
||||||
udev_input_create(&compositor->base, compositor->udev, seat);
|
udev_input_init(&compositor->input, &compositor->base, compositor->udev, seat);
|
||||||
|
|
||||||
return &compositor->base;
|
return &compositor->base;
|
||||||
|
|
||||||
|
|||||||
+4
-12
@@ -260,16 +260,10 @@ drm_led_update(struct weston_seat *seat_base, enum weston_led leds)
|
|||||||
evdev_led_update(device, leds);
|
evdev_led_update(device, leds);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct udev_input *
|
int
|
||||||
udev_input_create(struct weston_compositor *c, struct udev *udev,
|
udev_input_init(struct udev_input *input, struct weston_compositor *c, struct udev *udev,
|
||||||
const char *seat_id)
|
const char *seat_id)
|
||||||
{
|
{
|
||||||
struct udev_input *input;
|
|
||||||
|
|
||||||
input = malloc(sizeof *input);
|
|
||||||
if (input == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
memset(input, 0, sizeof *input);
|
memset(input, 0, sizeof *input);
|
||||||
weston_seat_init(&input->base, c, "default");
|
weston_seat_init(&input->base, c, "default");
|
||||||
input->base.led_update = drm_led_update;
|
input->base.led_update = drm_led_update;
|
||||||
@@ -279,12 +273,11 @@ udev_input_create(struct weston_compositor *c, struct udev *udev,
|
|||||||
if (udev_input_enable(input, udev) < 0)
|
if (udev_input_enable(input, udev) < 0)
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
return input;
|
return 0;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
free(input->seat_id);
|
free(input->seat_id);
|
||||||
free(input);
|
return -1;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -294,5 +287,4 @@ udev_input_destroy(struct udev_input *input)
|
|||||||
|
|
||||||
weston_seat_release(&input->base);
|
weston_seat_release(&input->base);
|
||||||
free(input->seat_id);
|
free(input->seat_id);
|
||||||
free(input);
|
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-3
@@ -37,9 +37,10 @@ struct udev_input {
|
|||||||
|
|
||||||
int udev_input_enable(struct udev_input *input, struct udev *udev);
|
int udev_input_enable(struct udev_input *input, struct udev *udev);
|
||||||
void udev_input_disable(struct udev_input *input);
|
void udev_input_disable(struct udev_input *input);
|
||||||
struct udev_input *udev_input_create(struct weston_compositor *c,
|
int udev_input_init(struct udev_input *input,
|
||||||
struct udev *udev,
|
struct weston_compositor *c,
|
||||||
const char *seat_id);
|
struct udev *udev,
|
||||||
|
const char *seat_id);
|
||||||
void udev_input_destroy(struct udev_input *input);
|
void udev_input_destroy(struct udev_input *input);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user