Пример #1
0
void
wlb_keyboard_create_resource(struct wlb_keyboard *keyboard,
			     struct wl_client *client, uint32_t id)
{
	struct wl_resource *resource;
	int null_fd;

	resource = wl_resource_create(client, &wl_keyboard_interface, 1, id);
	if (!resource) {
		wl_client_post_no_memory(client);
		return;
	}

	wl_resource_set_implementation(resource, &keyboard_interface,
				       NULL, unlink_resource);

	wl_list_insert(&keyboard->resource_list, wl_resource_get_link(resource));

	if (keyboard->keymap.data) {
		wl_keyboard_send_keymap(resource, keyboard->keymap.format,
					keyboard->keymap.fd,
					keyboard->keymap.size);
	} else {
		null_fd = open("/dev/null", O_RDONLY);
		wl_keyboard_send_keymap(resource,
					WL_KEYBOARD_KEYMAP_FORMAT_NO_KEYMAP,
					null_fd, 0);
		close(null_fd);
	}
}
Пример #2
0
void KeyboardInterface::Private::sendKeymap(int fd, quint32 size)
{
    if (!resource) {
        return;
    }
    wl_keyboard_send_keymap(resource, WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1, fd, size);
}
Пример #3
0
static void
seat_get_keyboard (struct wl_client *client,
                   struct wl_resource *resource,
                   uint32_t id)
{
  ClaylandSeat *seat = wl_resource_get_user_data (resource);
  struct wl_resource *cr;

  cr = wl_client_add_object (client, &wl_keyboard_interface, NULL, id, seat);
  wl_list_insert (&seat->keyboard.resource_list, wl_resource_get_link (cr));
  wl_resource_set_destructor (cr, unbind_resource);

  wl_keyboard_send_keymap (cr,
                           WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
                           seat->keyboard.xkb_info.keymap_fd,
                           seat->keyboard.xkb_info.keymap_size);

  if (seat->keyboard.focus &&
      wl_resource_get_client (seat->keyboard.focus->resource) == client)
    {
      clayland_keyboard_set_focus (&seat->keyboard,
                                   seat->keyboard.focus);
      clayland_data_device_set_keyboard_focus (seat);
    }
}