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); } }
void KeyboardInterface::Private::sendLeave(SurfaceInterface *surface, quint32 serial) { if (surface && resource && surface->resource()) { wl_keyboard_send_leave(resource, serial, surface->resource()); } }