[PATCH] Add wl_display_remove_global.
Laszlo Agocs
laszlo.p.agocs at nokia.com
Tue Jun 14 02:03:38 PDT 2011
Hi Kristian,
True, I forgot about the client-side global list. Attached is a revised
patch.
Regards,
Laszlo
On 06/10/2011 05:55 PM, ext Kristian Høgsberg wrote:
> Hi Laszlo,
>
> Thanks, this is definitely needed. However, we'll also need to send
> an event to all clients to indicate that the object is no longer
> available, so they can take it out of their global list. That is, the
> opposite of display_handle_global:
>
> http://cgit.freedesktop.org/wayland/wayland/tree/wayland/wayland-client.c#n234
>
> Kristian
>
> On Fri, Jun 10, 2011 at 6:43 AM, Laszlo Agocs<laszlo.p.agocs at nokia.com> wrote:
>>
>> From 9306be3637fd36aca936cfd797298a8e22c88c56 Mon Sep 17 00:00:00 2001
>> From: Laszlo Agocs<laszlo.p.agocs at nokia.com>
>> Date: Fri, 10 Jun 2011 11:17:51 +0200
>> Subject: [PATCH] Add wl_display_remove_global.
>>
>> Change 4453ba084aae5a00318b9dfdeda95e8eaa17494c disallows using
>> post_global with objects not on the global list. Therefore selection
>> and drag offers have to be added to the global list from now on.
>> However these may often get replaced by a newer object and thus need a
>> way to remove a global from the global list.
>> ---
>> wayland/wayland-server.c | 18 ++++++++++++++++++
>> wayland/wayland-server.h | 3 +++
>> 2 files changed, 21 insertions(+), 0 deletions(-)
>>
>> diff --git a/wayland/wayland-server.c b/wayland/wayland-server.c
>> index 886ec69..043343a 100644
>> --- a/wayland/wayland-server.c
>> +++ b/wayland/wayland-server.c
>> @@ -656,6 +656,24 @@ wl_display_add_global(struct wl_display *display,
>> return 0;
>> }
>>
>> +WL_EXPORT int
>> +wl_display_remove_global(struct wl_display *display,
>> + struct wl_object *object)
>> +{
>> + struct wl_global *global = NULL, *p;
>> + wl_list_for_each(p,&display->global_list, link)
>> + if (p->object == object) {
>> + global = p;
>> + break;
>> + }
>> + if (global) {
>> + wl_list_remove(&global->link);
>> + free(global);
>> + return 0;
>> + }
>> + return -1;
>> +}
>> +
>> WL_EXPORT void
>> wl_display_post_frame(struct wl_display *display, struct wl_surface
>> *surface,
>> uint32_t time)
>> diff --git a/wayland/wayland-server.h b/wayland/wayland-server.h
>> index 6a042cd..d1c655a 100644
>> --- a/wayland/wayland-server.h
>> +++ b/wayland/wayland-server.h
>> @@ -93,6 +93,9 @@ int wl_display_add_global(struct wl_display *display,
>> struct wl_object *object,
>> wl_global_bind_func_t func);
>>
>> +int wl_display_remove_global(struct wl_display *display,
>> + struct wl_object *object);
>> +
>> struct wl_client *wl_client_create(struct wl_display *display, int fd);
>> void wl_client_destroy(struct wl_client *client);
>> void wl_client_post_error(struct wl_client *client, struct wl_object
>> *object,
>> --
>> 1.7.1
>>
>>
>> _______________________________________________
>> wayland-devel mailing list
>> wayland-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>>
More information about the wayland-devel
mailing list