From 95a965541278f4d067d41dbcd6800171f43636c5 Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Tue, 10 Sep 2013 13:03:37 +0200 Subject: [PATCH] wayland: fix deprecation warnings Replace the deprecated APIs with the modern variants (which also give us full control on the versioning). Also, note that we only support version 2 of wl_seat. Version 3 is for multiple pointer/keyboards for a client, but we don't implement that yet. If a client requests version 3 of wl_seat or make a version 3 request, it will get a protocol error. https://bugzilla.gnome.org/show_bug.cgi?id=707851 --- src/wayland/meta-wayland-data-device.c | 40 ++++++++++++-------------- src/wayland/meta-wayland-seat.c | 24 ++++++++-------- 2 files changed, 31 insertions(+), 33 deletions(-) diff --git a/src/wayland/meta-wayland-data-device.c b/src/wayland/meta-wayland-data-device.c index f578f00f6..c6cea0365 100644 --- a/src/wayland/meta-wayland-data-device.c +++ b/src/wayland/meta-wayland-data-device.c @@ -109,12 +109,11 @@ meta_wayland_data_source_send_offer (MetaWaylandDataSource *source, offer->source = source; offer->source_destroy_listener.notify = destroy_offer_data_source; - offer->resource = wl_client_add_object (wl_resource_get_client (target), - &wl_data_offer_interface, - &data_offer_interface, - 0, - offer); - wl_resource_set_destructor (offer->resource, destroy_data_offer); + offer->resource = wl_resource_create (wl_resource_get_client (target), + &wl_data_offer_interface, + MIN (1, wl_resource_get_version (target)), 0); + wl_resource_set_implementation (offer->resource, &data_offer_interface, + offer, destroy_data_offer); wl_resource_add_destroy_listener (source->resource, &offer->source_destroy_listener); @@ -466,12 +465,10 @@ create_data_source (struct wl_client *client, return; } - 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, + MIN (1, wl_resource_get_version (resource)), id); + wl_resource_set_implementation (source->resource, &data_source_interface, + source, destroy_data_source); source->accept = client_source_accept; source->send = client_source_send; @@ -494,11 +491,10 @@ get_data_device (struct wl_client *client, MetaWaylandSeat *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, + MIN (1, wl_resource_get_version (manager_resource)), id); + wl_resource_set_implementation (resource, &data_device_interface, seat, unbind_data_device); wl_list_insert (&seat->drag_resource_list, wl_resource_get_link (resource)); - wl_resource_set_destructor (resource, unbind_data_device); } static const struct wl_data_device_manager_interface manager_interface = { @@ -510,8 +506,10 @@ static void bind_manager (struct wl_client *client, void *data, guint32 version, guint32 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, MIN (version, 1), id); + wl_resource_set_implementation (resource, &manager_interface, NULL, NULL); } void @@ -540,9 +538,9 @@ meta_wayland_data_device_set_keyboard_focus (MetaWaylandSeat *seat) int meta_wayland_data_device_manager_init (struct wl_display *display) { - if (wl_display_add_global (display, - &wl_data_device_manager_interface, - NULL, bind_manager) == NULL) + if (wl_global_create (display, + &wl_data_device_manager_interface, 1, + NULL, bind_manager) == NULL) return -1; return 0; diff --git a/src/wayland/meta-wayland-seat.c b/src/wayland/meta-wayland-seat.c index adf68fa5a..76e75223f 100644 --- a/src/wayland/meta-wayland-seat.c +++ b/src/wayland/meta-wayland-seat.c @@ -175,10 +175,10 @@ seat_get_pointer (struct wl_client *client, MetaWaylandSeat *seat = wl_resource_get_user_data (resource); struct wl_resource *cr; - cr = wl_client_add_object (client, &wl_pointer_interface, - &pointer_interface, id, seat); + cr = wl_resource_create (client, &wl_pointer_interface, + MIN (wl_resource_get_version (resource), 2), id); + wl_resource_set_implementation (cr, &pointer_interface, seat, unbind_resource); wl_list_insert (&seat->pointer.resource_list, wl_resource_get_link (cr)); - wl_resource_set_destructor (cr, unbind_resource); if (seat->pointer.focus && wl_resource_get_client (seat->pointer.focus->resource) == client) @@ -205,9 +205,10 @@ seat_get_keyboard (struct wl_client *client, MetaWaylandSeat *seat = wl_resource_get_user_data (resource); struct wl_resource *cr; - cr = wl_client_add_object (client, &wl_keyboard_interface, NULL, id, seat); + cr = wl_resource_create (client, &wl_keyboard_interface, + MIN (wl_resource_get_version (resource), 2), id); + wl_resource_set_implementation (cr, NULL, seat, unbind_resource); 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, @@ -248,17 +249,16 @@ bind_seat (struct wl_client *client, MetaWaylandSeat *seat = data; struct wl_resource *resource; - 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_resource_set_implementation (resource, &seat_interface, seat, unbind_resource); wl_list_insert (&seat->base_resource_list, wl_resource_get_link (resource)); - wl_resource_set_destructor (resource, unbind_resource); wl_seat_send_capabilities (resource, WL_SEAT_CAPABILITY_POINTER | WL_SEAT_CAPABILITY_KEYBOARD); + + if (version >= 2) + wl_seat_send_name (resource, "seat0"); } static void @@ -297,7 +297,7 @@ meta_wayland_seat_new (struct wl_display *display, seat->hotspot_x = 16; seat->hotspot_y = 16; - wl_display_add_global (display, &wl_seat_interface, seat, bind_seat); + wl_global_create (display, &wl_seat_interface, 2, seat, bind_seat); return seat; }