return;
}
- cb->resource = wl_client_add_object(client, &wl_callback_interface,
- NULL, callback, cb);
- wl_resource_set_destructor(cb->resource, destroy_frame_callback);
+ cb->resource = wl_resource_create(client,
+ &wl_callback_interface,
+ 1, callback);
+ wl_resource_set_implementation(cb->resource, NULL, cb,
+ destroy_frame_callback);
wl_list_insert(surface->pending.frame_callback_list.prev, &cb->link);
}
return;
}
- surface->resource = wl_client_add_object(client, &wl_surface_interface,
- &surface_interface,
- id, surface);
- wl_resource_set_destructor(surface->resource, destroy_surface);
+ surface->resource =
+ wl_resource_create(client, &wl_surface_interface,
+ wl_resource_get_version(resource), id);
+ wl_resource_set_implementation(surface->resource, &surface_interface,
+ surface, destroy_surface);
}
static void
pixman_region32_init(®ion->region);
- region->resource = wl_client_add_object(client, &wl_region_interface,
- ®ion_interface, id, region);
- wl_resource_set_destructor(region->resource, destroy_region);
+ region->resource =
+ wl_resource_create(client, &wl_region_interface, 1, id);
+ wl_resource_set_implementation(region->resource, ®ion_interface,
+ region, destroy_region);
}
static const struct wl_compositor_interface compositor_interface = {
if (!sub)
return NULL;
- sub->resource = wl_client_add_object(client,
- &wl_subsurface_interface,
- &subsurface_implementation,
- id, sub);
+ sub->resource =
+ wl_resource_create(client, &wl_subsurface_interface, 1, id);
if (!sub->resource) {
free(sub);
return NULL;
}
- wl_resource_set_destructor(sub->resource, subsurface_resource_destroy);
+ wl_resource_set_implementation(sub->resource,
+ &subsurface_implementation,
+ sub, subsurface_resource_destroy);
weston_subsurface_link_surface(sub, surface);
weston_subsurface_link_parent(sub, parent);
weston_subsurface_cache_init(sub);
void *data, uint32_t version, uint32_t id)
{
struct weston_compositor *compositor = data;
+ struct wl_resource *resource;
- wl_client_add_object(client, &wl_subcompositor_interface,
- &subcompositor_interface, id, compositor);
+ resource =
+ wl_resource_create(client, &wl_subcompositor_interface, 1, id);
+ if (resource)
+ wl_resource_set_implementation(resource,
+ &subcompositor_interface,
+ compositor, NULL);
}
static void
struct weston_mode *mode;
struct wl_resource *resource;
- resource = wl_client_add_object(client,
- &wl_output_interface, NULL, id, data);
+ resource = wl_resource_create(client, &wl_output_interface,
+ MIN(version, 2), id);
wl_list_insert(&output->resource_list, wl_resource_get_link(resource));
- wl_resource_set_destructor(resource, unbind_resource);
+ wl_resource_set_implementation(resource, NULL, data, unbind_resource);
wl_output_send_geometry(resource,
output->x,
void *data, uint32_t version, uint32_t id)
{
struct weston_compositor *compositor = data;
+ struct wl_resource *resource;
- wl_client_add_object(client, &wl_compositor_interface,
- &compositor_interface, id, compositor);
+ resource = wl_resource_create(client, &wl_compositor_interface,
+ MIN(version, 3), id);
+ if (resource)
+ wl_resource_set_implementation(resource, &compositor_interface,
+ compositor, NULL);
}
static void
union {
struct wl_shm_buffer *shm_buffer;
- struct wl_buffer *legacy_buffer;
+ void *legacy_buffer;
};
int32_t width, height;
uint32_t busy_count;
if (offer == NULL)
return NULL;
- offer->resource = wl_client_new_object(wl_resource_get_client(target),
- &wl_data_offer_interface,
- &data_offer_interface, offer);
- wl_resource_set_destructor(offer->resource, destroy_data_offer);
+ offer->resource =
+ wl_resource_create(wl_resource_get_client(target),
+ &wl_data_offer_interface, 1, 0);
+ wl_resource_set_implementation(offer->resource, &data_offer_interface,
+ offer, destroy_data_offer);
offer->source = source;
offer->source_destroy_listener.notify = destroy_offer_data_source;
wl_array_init(&source->mime_types);
- source->resource = wl_client_add_object(client,
- &wl_data_source_interface,
- &data_source_interface,
- id, source);
- wl_resource_set_destructor(source->resource, destroy_data_source);
+ source->resource =
+ wl_resource_create(client, &wl_data_source_interface, 1, id);
+ wl_resource_set_implementation(source->resource, &data_source_interface,
+ source, destroy_data_source);
}
static void unbind_data_device(struct wl_resource *resource)
struct weston_seat *seat = wl_resource_get_user_data(seat_resource);
struct wl_resource *resource;
- resource = wl_client_add_object(client, &wl_data_device_interface,
- &data_device_interface, id,
- seat);
+ resource = wl_resource_create(client,
+ &wl_data_device_interface, 1, id);
wl_list_insert(&seat->drag_resource_list, wl_resource_get_link(resource));
- wl_resource_set_destructor(resource, unbind_data_device);
+ wl_resource_set_implementation(resource, &data_device_interface,
+ seat, unbind_data_device);
}
static const struct wl_data_device_manager_interface manager_interface = {
bind_manager(struct wl_client *client,
void *data, uint32_t version, uint32_t id)
{
- wl_client_add_object(client, &wl_data_device_manager_interface,
- &manager_interface, id, NULL);
+ struct wl_resource *resource;
+
+ resource =
+ wl_resource_create(client,
+ &wl_data_device_manager_interface, 1, id);
+ if (resource)
+ wl_resource_set_implementation(resource, &manager_interface,
+ NULL, NULL);
}
WL_EXPORT void
if (!seat->pointer)
return;
- cr = wl_client_add_object(client, &wl_pointer_interface,
- &pointer_interface, id, seat->pointer);
+ cr = wl_resource_create(client, &wl_pointer_interface,
+ wl_resource_get_version(resource), id);
wl_list_insert(&seat->pointer->resource_list, wl_resource_get_link(cr));
- wl_resource_set_destructor(cr, unbind_resource);
+ wl_resource_set_implementation(cr, &pointer_interface, seat->pointer,
+ unbind_resource);
if (seat->pointer->focus &&
wl_resource_get_client(seat->pointer->focus->resource) == client) {
if (!seat->keyboard)
return;
- cr = wl_client_add_object(client, &wl_keyboard_interface, NULL, id,
- seat);
+ cr = wl_resource_create(client, &wl_keyboard_interface,
+ wl_resource_get_version(resource), id);
wl_list_insert(&seat->keyboard->resource_list, wl_resource_get_link(cr));
- wl_resource_set_destructor(cr, unbind_resource);
+ wl_resource_set_implementation(cr, NULL, seat, unbind_resource);
if (seat->compositor->use_xkbcommon) {
wl_keyboard_send_keymap(cr, WL_KEYBOARD_KEYMAP_FORMAT_XKB_V1,
if (!seat->touch)
return;
- cr = wl_client_add_object(client, &wl_touch_interface, NULL, id, seat);
+ cr = wl_resource_create(client, &wl_touch_interface,
+ wl_resource_get_version(resource), id);
wl_list_insert(&seat->touch->resource_list, wl_resource_get_link(cr));
- wl_resource_set_destructor(cr, unbind_resource);
+ wl_resource_set_implementation(cr, NULL, seat, unbind_resource);
}
static const struct wl_seat_interface seat_interface = {
struct wl_resource *resource;
enum wl_seat_capability caps = 0;
- resource = wl_client_add_object(client, &wl_seat_interface,
- &seat_interface, id, data);
+ resource = wl_resource_create(client,
+ &wl_seat_interface, MIN(version, 2), id);
wl_list_insert(&seat->base_resource_list, wl_resource_get_link(resource));
- wl_resource_set_destructor(resource, unbind_resource);
+ wl_resource_set_implementation(resource, &seat_interface, data,
+ unbind_resource);
if (seat->pointer)
caps |= WL_SEAT_CAPABILITY_POINTER;
struct screenshooter *shooter = data;
struct wl_resource *resource;
- resource = wl_client_add_object(client, &screenshooter_interface,
- &screenshooter_implementation, id, data);
+ resource = wl_resource_create(client,
+ &screenshooter_interface, 1, id);
if (client != shooter->client) {
wl_resource_post_error(resource, WL_DISPLAY_ERROR_INVALID_OBJECT,
"screenshooter failed: permission denied");
wl_resource_destroy(resource);
}
+
+ wl_resource_set_implementation(resource, &screenshooter_implementation,
+ data, NULL);
}
static void
struct desktop_shell *shell = data;
struct wl_resource *resource;
- resource = wl_client_add_object(client, &workspace_manager_interface,
- &workspace_manager_implementation,
- id, shell);
+ resource = wl_resource_create(client,
+ &workspace_manager_interface, 1, id);
if (resource == NULL) {
weston_log("couldn't add workspace manager object");
return;
}
- wl_resource_set_destructor(resource, unbind_resource);
+ wl_resource_set_implementation(resource,
+ &workspace_manager_implementation,
+ shell, unbind_resource);
wl_list_insert(&shell->workspaces.client_list,
wl_resource_get_link(resource));
return;
}
- shsurf->resource = wl_client_add_object(client,
- &wl_shell_surface_interface,
- &shell_surface_implementation,
- id, shsurf);
- wl_resource_set_destructor(shsurf->resource,
- shell_destroy_shell_surface);
+ shsurf->resource =
+ wl_resource_create(client,
+ &wl_shell_surface_interface, 1, id);
+ wl_resource_set_implementation(shsurf->resource,
+ &shell_surface_implementation,
+ shsurf, shell_destroy_shell_surface);
}
static const struct wl_shell_interface shell_implementation = {
bind_shell(struct wl_client *client, void *data, uint32_t version, uint32_t id)
{
struct desktop_shell *shell = data;
+ struct wl_resource *resource;
- wl_client_add_object(client, &wl_shell_interface,
- &shell_implementation, id, shell);
+ resource = wl_resource_create(client, &wl_shell_interface, 1, id);
+ if (resource)
+ wl_resource_set_implementation(resource, &shell_implementation,
+ shell, NULL);
}
static void
struct desktop_shell *shell = data;
struct wl_resource *resource;
- resource = wl_client_add_object(client, &desktop_shell_interface,
- &desktop_shell_implementation,
- id, shell);
+ resource = wl_resource_create(client, &desktop_shell_interface,
+ MIN(version, 2), id);
if (client == shell->child.client) {
- wl_resource_set_destructor(resource, unbind_desktop_shell);
+ wl_resource_set_implementation(resource,
+ &desktop_shell_implementation,
+ shell, unbind_desktop_shell);
shell->child.desktop_shell = resource;
if (version < 2)
struct desktop_shell *shell = data;
struct wl_resource *resource;
- resource = wl_client_add_object(client, &screensaver_interface,
- &screensaver_implementation,
- id, shell);
+ resource = wl_resource_create(client, &screensaver_interface, 1, id);
if (shell->screensaver.binding == NULL) {
- wl_resource_set_destructor(resource, unbind_screensaver);
+ wl_resource_set_implementation(resource,
+ &screensaver_implementation,
+ shell, unbind_screensaver);
shell->screensaver.binding = resource;
return;
}
return;
}
- ipsurf->resource = wl_client_add_object(client,
- &wl_input_panel_surface_interface,
- &input_panel_surface_implementation,
- id, ipsurf);
-
- wl_resource_set_destructor(ipsurf->resource,
- destroy_input_panel_surface_resource);
+ ipsurf->resource =
+ wl_resource_create(client,
+ &wl_input_panel_surface_interface, 1, id);
+ wl_resource_set_implementation(ipsurf->resource,
+ &input_panel_surface_implementation,
+ ipsurf,
+ destroy_input_panel_surface_resource);
}
static const struct wl_input_panel_interface input_panel_implementation = {
struct desktop_shell *shell = data;
struct wl_resource *resource;
- resource = wl_client_add_object(client, &wl_input_panel_interface,
- &input_panel_implementation,
- id, shell);
+ resource = wl_resource_create(client,
+ &wl_input_panel_interface, 1, id);
if (shell->input_panel.binding == NULL) {
- wl_resource_set_destructor(resource, unbind_input_panel);
+ wl_resource_set_implementation(resource,
+ &input_panel_implementation,
+ shell, unbind_input_panel);
shell->input_panel.binding = resource;
return;
}
tablet_client->shell = shell;
tablet_client->name = strdup(name);
- tablet_client->resource = wl_client_add_object(client,
- &tablet_client_interface,
- &tablet_client_implementation,
- id, tablet_client);
- wl_resource_set_destructor(tablet_client->resource,
- destroy_tablet_client);
+ tablet_client->resource =
+ wl_resource_create(client, &tablet_client_interface, 1, id);
+ wl_resource_set_implementation(tablet_client->resource,
+ &tablet_client_implementation,
+ tablet_client, destroy_tablet_client);
tablet_client->surface = NULL;
shell->current_client = tablet_client;
* tries to access the object?. */
return;
- shell->resource = wl_client_add_object(client,
- &tablet_shell_interface,
- &tablet_shell_implementation,
- id, shell);
- wl_resource_set_destructor(shell->resource, destroy_tablet_shell);
+ shell->resource =
+ wl_resource_create(client, &tablet_shell_interface, 1, id);
+ wl_resource_set_implementation(shell->resource,
+ &tablet_shell_implementation,
+ shell, destroy_tablet_shell);
}
static void
text_input = calloc(1, sizeof *text_input);
- text_input->resource = wl_client_add_object(client,
- &wl_text_input_interface,
- &text_input_implementation,
- id, text_input);
- wl_resource_set_destructor(text_input->resource, destroy_text_input);
+ text_input->resource =
+ wl_resource_create(client, &wl_text_input_interface, 1, id);
+ wl_resource_set_implementation(text_input->resource,
+ &text_input_implementation,
+ text_input, destroy_text_input);
text_input->ec = text_input_manager->ec;
uint32_t id)
{
struct text_input_manager *text_input_manager = data;
+ struct wl_resource *resource;
- /* No checking for duplicate binding necessary.
- * No events have to be sent, so we don't need the return value. */
- wl_client_add_object(client, &wl_text_input_manager_interface,
- &text_input_manager_implementation,
- id, text_input_manager);
+ /* No checking for duplicate binding necessary. */
+ resource =
+ wl_resource_create(client,
+ &wl_text_input_manager_interface, 1, id);
+ if (resource)
+ wl_resource_set_implementation(resource,
+ &text_input_manager_implementation,
+ text_input_manager, NULL);
}
static void
struct weston_seat *seat = context->input_method->seat;
struct weston_keyboard *keyboard = seat->keyboard;
- cr = wl_client_add_object(client, &wl_keyboard_interface,
- NULL, id, context);
- wl_resource_set_destructor(cr, unbind_keyboard);
+ cr = wl_resource_create(client, &wl_keyboard_interface, 1, id);
+ wl_resource_set_implementation(cr, NULL, context, unbind_keyboard);
context->keyboard = cr;
return;
binding = input_method->input_method_binding;
- context->resource = wl_client_new_object(wl_resource_get_client(binding),
- &wl_input_method_context_interface,
- &input_method_context_implementation,
- context);
- wl_resource_set_destructor(context->resource,
- destroy_input_method_context);
+ context->resource =
+ wl_resource_create(wl_resource_get_client(binding),
+ &wl_input_method_context_interface, 1, 0);
+ wl_resource_set_implementation(context->resource,
+ &input_method_context_implementation,
+ context, destroy_input_method_context);
context->model = model;
context->input_method = input_method;
struct text_backend *text_backend = input_method->text_backend;
struct wl_resource *resource;
- resource = wl_client_add_object(client, &wl_input_method_interface,
- NULL,
- id, input_method);
+ resource =
+ wl_resource_create(client, &wl_input_method_interface, 1, id);
if (input_method->input_method_binding != NULL) {
wl_resource_post_error(resource, WL_DISPLAY_ERROR_INVALID_OBJECT,
return;
}
- wl_resource_set_destructor(resource, unbind_input_method);
+ wl_resource_set_implementation(resource, NULL, input_method,
+ unbind_input_method);
input_method->input_method_binding = resource;
text_backend->input_method.binding = resource;
return;
wxs->resource =
- wl_client_add_object(client, &xserver_interface,
- &xserver_implementation, id, wxs);
+ wl_resource_create(client, &xserver_interface,
+ 1, id);
+ wl_resource_set_implementation(wxs->resource, &xserver_implementation,
+ wxs, NULL);
wxs->wm = weston_wm_create(wxs);
if (wxs->wm == NULL) {
bind_text_cursor_position(struct wl_client *client,
void *data, uint32_t version, uint32_t id)
{
- wl_client_add_object(client, &text_cursor_position_interface,
- &text_cursor_position_implementation, id, data);
+ struct wl_resource *resource;
+
+ resource = wl_resource_create(client,
+ &text_cursor_position_interface, 1, id);
+ if (resource)
+ wl_resource_set_implementation(resource,
+ &text_cursor_position_implementation,
+ data, NULL);
}
static void
struct weston_test *test = data;
struct wl_resource *resource;
- resource = wl_client_add_object(client, &wl_test_interface,
- &test_implementation, id, test);
+ resource = wl_client_add_versioned_object(client, &wl_test_interface,
+ 1, id);
+ wl_resource_set_implementation(resource, &test_implementation,
+ test, NULL);
notify_pointer_position(test, resource);
}