seat: Move the keyboard resource creation over to MetaWaylandKeyboard

This commit is contained in:
Jasper St. Pierre
2014-04-17 18:22:26 -04:00
parent 5d43e33032
commit 7c6c4d63c5
3 changed files with 46 additions and 25 deletions

View File

@ -60,6 +60,12 @@
#include "meta-wayland-private.h"
static void
unbind_resource (struct wl_resource *resource)
{
wl_list_remove (wl_resource_get_link (resource));
}
static int
create_anonymous_file (off_t size,
GError **error)
@ -551,3 +557,36 @@ meta_wayland_keyboard_get_focus_client (MetaWaylandKeyboard *keyboard)
else
return NULL;
}
static void
keyboard_release (struct wl_client *client,
struct wl_resource *resource)
{
wl_resource_destroy (resource);
}
static const struct wl_keyboard_interface keyboard_interface = {
keyboard_release,
};
void
meta_wayland_keyboard_create_new_resource (MetaWaylandKeyboard *keyboard,
struct wl_client *client,
struct wl_resource *seat_resource,
uint32_t id)
{
struct wl_resource *cr;
cr = wl_resource_create (client, &wl_keyboard_interface,
MIN (META_WL_KEYBOARD_VERSION, wl_resource_get_version (seat_resource)), id);
wl_resource_set_implementation (cr, NULL, keyboard, unbind_resource);
wl_list_insert (&keyboard->resource_list, wl_resource_get_link (cr));
wl_keyboard_send_keymap (cr,
WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
keyboard->xkb_info.keymap_fd,
keyboard->xkb_info.keymap_size);
if (keyboard->focus_surface && wl_resource_get_client (keyboard->focus_surface->resource) == client)
meta_wayland_keyboard_set_focus (keyboard, keyboard->focus_surface);
}