示例#1
0
void
wlb_keyboard_set_focus(struct wlb_keyboard *keyboard,
		       struct wlb_surface *focus)
{
	struct wl_resource *resource;
	uint32_t serial;

	if (keyboard->focus == focus)
		return;

	serial = wl_display_next_serial(keyboard->seat->compositor->display);
	
	if (keyboard->focus) {
		wl_resource_for_each(resource, &keyboard->resource_list)
			wl_keyboard_send_leave(resource, serial,
					       keyboard->focus->resource);

		wl_list_remove(&keyboard->surface_destroy_listener.link);
	}

	keyboard->focus = focus;
	
	if (keyboard->focus) {
		wl_resource_add_destroy_listener(focus->resource,
						 &keyboard->surface_destroy_listener);

		wl_resource_for_each(resource, &keyboard->resource_list)
			wl_keyboard_send_enter(resource, serial,
					       keyboard->focus->resource,
					       &keyboard->keys);
	}
}
示例#2
0
void KeyboardInterface::Private::sendEnter(SurfaceInterface *surface, quint32 serial)
{
    wl_array keys;
    wl_array_init(&keys);
    const auto states = seat->pressedKeys();
    for (auto it = states.begin(); it != states.end(); ++it) {
        uint32_t *k = reinterpret_cast<uint32_t*>(wl_array_add(&keys, sizeof(uint32_t)));
        *k = *it;
    }
    wl_keyboard_send_enter(resource, serial, surface->resource(), &keys);
    wl_array_release(&keys);

    sendModifiers();
}