};
struct wayland_input {
+ struct weston_seat base;
struct wayland_compositor *compositor;
struct wl_seat *seat;
struct wl_pointer *pointer;
{
struct wayland_input *input = data;
struct wayland_output *output;
- struct wayland_compositor *c = input->compositor;
/* XXX: If we get a modifier event immediately before the focus,
* we should try to keep the same serial. */
output = wl_surface_get_user_data(surface);
- notify_pointer_focus(&c->base.seat->seat, &output->base, x, y);
+ notify_pointer_focus(&input->base.seat, &output->base, x, y);
wl_pointer_set_cursor(input->pointer, serial, NULL, 0, 0);
}
uint32_t serial, struct wl_surface *surface)
{
struct wayland_input *input = data;
- struct wayland_compositor *c = input->compositor;
- notify_pointer_focus(&c->base.seat->seat, NULL, 0, 0);
+ notify_pointer_focus(&input->base.seat, NULL, 0, 0);
}
static void
struct wayland_input *input = data;
struct wayland_compositor *c = input->compositor;
- notify_motion(&c->base.seat->seat, time,
+ notify_motion(&input->base.seat, time,
x - wl_fixed_from_int(c->border.left),
y - wl_fixed_from_int(c->border.top));
}
uint32_t state_w)
{
struct wayland_input *input = data;
- struct wayland_compositor *c = input->compositor;
enum wl_pointer_button_state state = state_w;
- notify_button(&c->base.seat->seat, time, button, state);
+ notify_button(&input->base.seat, time, button, state);
}
static void
uint32_t time, uint32_t axis, wl_fixed_t value)
{
struct wayland_input *input = data;
- struct wayland_compositor *c = input->compositor;
- notify_axis(&c->base.seat->seat, time, axis, value);
+ notify_axis(&input->base.seat, time, axis, value);
}
static const struct wl_pointer_listener pointer_listener = {
return;
}
- weston_seat_init_keyboard(input->compositor->base.seat, keymap);
+ weston_seat_init_keyboard(&input->base, keymap);
xkb_map_unref(keymap);
}
struct wl_array *keys)
{
struct wayland_input *input = data;
- struct wayland_compositor *c = input->compositor;
/* XXX: If we get a modifier event immediately before the focus,
* we should try to keep the same serial. */
- notify_keyboard_focus_in(&c->base.seat->seat, keys,
+ notify_keyboard_focus_in(&input->base.seat, keys,
STATE_UPDATE_AUTOMATIC);
}
struct wl_surface *surface)
{
struct wayland_input *input = data;
- struct wayland_compositor *c = input->compositor;
- notify_keyboard_focus_out(&c->base.seat->seat);
+ notify_keyboard_focus_out(&input->base.seat);
}
static void
uint32_t serial, uint32_t time, uint32_t key, uint32_t state)
{
struct wayland_input *input = data;
- struct wayland_compositor *c = input->compositor;
input->key_serial = serial;
- notify_key(&c->base.seat->seat, time, key,
+ notify_key(&input->base.seat, time, key,
state ? WL_KEYBOARD_KEY_STATE_PRESSED :
WL_KEYBOARD_KEY_STATE_RELEASED,
STATE_UPDATE_NONE);
else
serial_out = wl_display_next_serial(c->base.wl_display);
- xkb_state_update_mask(c->base.seat->xkb_state.state,
+ xkb_state_update_mask(input->base.xkb_state.state,
mods_depressed, mods_latched,
mods_locked, 0, 0, group);
- notify_modifiers(&c->base.seat->seat, serial_out);
+ notify_modifiers(&input->base.seat, serial_out);
}
static const struct wl_keyboard_listener keyboard_listener = {
wl_pointer_set_user_data(input->pointer, input);
wl_pointer_add_listener(input->pointer, &pointer_listener,
input);
- weston_seat_init_pointer(input->compositor->base.seat);
+ weston_seat_init_pointer(&input->base);
} else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && input->pointer) {
wl_pointer_destroy(input->pointer);
input->pointer = NULL;
memset(input, 0, sizeof *input);
+ weston_seat_init(&input->base, &c->base);
input->compositor = c;
input->seat = wl_display_bind(c->parent.wl_display, id,
&wl_seat_interface);
return 1;
}
-static int
-wayland_input_create(struct wayland_compositor *c)
-{
- struct weston_seat *seat;
-
- seat = malloc(sizeof *seat);
- if (seat == NULL)
- return -1;
-
- memset(seat, 0, sizeof *seat);
- weston_seat_init(seat, &c->base);
-
- c->base.seat = seat;
-
- return 0;
-}
-
static void
wayland_restore(struct weston_compositor *ec)
{
config_file) < 0)
goto err_free;
- if (wayland_input_create(c) < 0)
- goto err_compositor;
-
c->parent.wl_display = wl_display_connect(display_name);
if (c->parent.wl_display == NULL) {