[PATCH wayland 1/5] server: add listener API for new clients

Pekka Paalanen ppaalanen at gmail.com
Fri Jun 17 11:01:48 UTC 2016


On Mon,  7 Mar 2016 18:31:31 +0100
Giulio Camuffo <giuliocamuffo at gmail.com> wrote:

> From: Sungjae Park <nicesj at nicesj.com>
> 
> Using display object, Emit a signal if a new client is created.
> 
> In the server-side, we can get the destroy event of a client,
> But there is no way to get the created event of it.
> Of course, we can get the client object from the global registry
> binding callbacks.
> But it can be called several times with same client object.
> And even if A client creates display object,
> (so there is a connection), The server could not know that.
> There could be more use-cases not only for this.
> 
> Signed-off-by: Sung-jae Park <nicesj at nicesj.com>
> ---
> 
> This is the v2 of the patch by Sung-jae, i applied the incremental diff
> on the first version.

Hi Giulio,

you forgot your S-o-b. This patch accounts as Reviewed-by you, right?

>  
>  src/wayland-server-core.h |  4 ++++
>  src/wayland-server.c      | 22 ++++++++++++++++++++++
>  2 files changed, 26 insertions(+)
> 
> diff --git a/src/wayland-server-core.h b/src/wayland-server-core.h
> index e8e1e9c..1bc4d6b 100644
> --- a/src/wayland-server-core.h
> +++ b/src/wayland-server-core.h
> @@ -156,6 +156,10 @@ void
>  wl_display_add_destroy_listener(struct wl_display *display,
>  				struct wl_listener *listener);
>  
> +void
> +wl_display_add_client_created_listener(struct wl_display *display,
> +					struct wl_listener *listener);
> +
>  struct wl_listener *
>  wl_display_get_destroy_listener(struct wl_display *display,
>  				wl_notify_func_t notify);
> diff --git a/src/wayland-server.c b/src/wayland-server.c
> index ae9365f..2857b1d 100644
> --- a/src/wayland-server.c
> +++ b/src/wayland-server.c
> @@ -96,6 +96,7 @@ struct wl_display {
>  	struct wl_list client_list;
>  
>  	struct wl_signal destroy_signal;
> +	struct wl_signal create_client_signal;
>  
>  	struct wl_array additional_shm_formats;
>  };
> @@ -448,6 +449,8 @@ wl_client_create(struct wl_display *display, int fd)
>  
>  	wl_list_insert(display->client_list.prev, &client->link);
>  
> +	wl_signal_emit(&display->create_client_signal, client);

wl_client_create() documentation needs to mention that listeners added
with wl_display_add_client_created_listener() will be called after the
wl_client is fully initialized, before returning from the function.
This may not be obvious otherwise.

> +
>  	return client;
>  
>  err_map:
> @@ -864,6 +867,7 @@ wl_display_create(void)
>  	wl_list_init(&display->registry_resource_list);
>  
>  	wl_signal_init(&display->destroy_signal);
> +	wl_signal_init(&display->create_client_signal);
>  
>  	display->id = 1;
>  	display->serial = 0;
> @@ -1353,6 +1357,24 @@ wl_display_add_destroy_listener(struct wl_display *display,
>  	wl_signal_add(&display->destroy_signal, listener);
>  }
>  
> +/** Registers a listener for the client connection signal.
> + *  When a new client object is created, \a listener will be notified, carring

"carrying"

> + *  a pointer to the new wl_client object.
> + *
> + *  \ref wl_client_create
> + *  \ref wl_display
> + *  \ref wl_listener
> + *
> + * \param display The display object
> + * \param listener Signal handler object
> + */
> +WL_EXPORT void
> +wl_display_add_client_created_listener(struct wl_display *display,
> +					struct wl_listener *listener)
> +{
> +	wl_signal_add(&display->create_client_signal, listener);
> +}
> +
>  WL_EXPORT struct wl_listener *
>  wl_display_get_destroy_listener(struct wl_display *display,
>  				wl_notify_func_t notify)

The new added API should have at least one test in 'make check'. I would
prefer that test to be about a client connecting to a listening socket,
rather than a direct call wl_client_create(). I don't think I'll
consider that a blocker for this patch, though. The same goes for all
the patches adding new API in this series.

With all those fixed I can give my R-b.


Thanks,
pq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 811 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20160617/caa2b4ae/attachment.sig>


More information about the wayland-devel mailing list