On Mon, 7 Mar 2016 18:31:31 +0100 Giulio Camuffo <[email protected]> wrote:
> From: Sungjae Park <[email protected]> > > 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 <[email protected]> > --- > > 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
pgp7JbFKI2S0x.pgp
Description: OpenPGP digital signature
_______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
