[PATCH 10/14] tablet-shell: add event in tablet-client protocol.
Tang, Ning
ning.tang at intel.com
Tue Aug 21 20:25:08 PDT 2012
Thanks for your patient review, I will change that two places.
> -----Original Message-----
> From: Philipp Brüschweiler [mailto:blei42 at gmail.com]
> Sent: Wednesday, August 22, 2012 12:14 AM
> To: tecton69 at gmail.com
> Cc: wayland-devel at lists.freedesktop.org; juan.j.zhao at linux.intel.com; Tang,
> Ning
> Subject: Re: [PATCH 10/14] tablet-shell: add event in tablet-client protocol.
>
> On Tue, Aug 21, 2012 at 1:49 PM, <tecton69 at gmail.com> wrote:
> > From: Ning Tang <ning.tang at intel.com>
> >
> > When a client is binded, the server side will send an event to let the
> > client set fullscreen.
> > If the client don't response, it will remain centered.
> >
> > Signed-off-by: Ning Tang <tecton69 at gmail.com>
> >
> > ---
> > protocol/tablet-shell.xml | 2 ++
> > src/tablet-shell.c | 90
> ++++++++++++++++++++++++++++++++++++++++++++---
> > 2 files changed, 87 insertions(+), 5 deletions(-)
> >
> > diff --git a/protocol/tablet-shell.xml b/protocol/tablet-shell.xml
> > index 10f1756..f226c01 100644
> > --- a/protocol/tablet-shell.xml
> > +++ b/protocol/tablet-shell.xml
> > @@ -35,6 +35,8 @@
> > <interface name="tablet_client" version="1">
> > <request name="destroy" type="destructor"/>
> > <request name="activate"/>
> > +
> > + <event name="set_fullscreen"/>
> > </interface>
> >
> > </protocol>
> > diff --git a/src/tablet-shell.c b/src/tablet-shell.c index
> > 89f84bf..d7ce01f 100644
> > --- a/src/tablet-shell.c
> > +++ b/src/tablet-shell.c
> > @@ -45,6 +45,7 @@ enum {
> >
> > struct tablet_shell {
> > struct wl_resource resource;
> > + struct wl_resource client_resource;
> >
> > struct wl_listener lock_listener;
> > struct wl_listener unlock_listener; @@ -153,6 +154,11 @@
> > shell_handle_surface_destroy(struct wl_listener *listener, void *data)
> > struct shell_surface *shsurf =
> > container_of(listener, struct shell_surface,
> > surface_destroy_listener);
> > + struct tablet_shell *shell = shsurf->shell;
> > + if (shell->client_resource.client) {
> > + wl_resource_destroy(&shell->client_resource);
> > + shell->client_resource.client = NULL;
> > + }
> > if (shsurf->resource.client) {
> > wl_resource_destroy(&shsurf->resource);
> > } else {
> > @@ -211,6 +217,11 @@ shell_surface_set_transient(struct wl_client
> *client,
> > int x, int y, uint32_t flags) {
> > struct shell_surface *shsurf = resource->data;
> > + struct tablet_shell *shell = shsurf->shell;
> > + if (shell->client_resource.client) {
> > + wl_resource_destroy(&shell->client_resource);
> > + shell->client_resource.client = NULL;
> > + }
> > if (shsurf->resource.client) {
> > wl_resource_destroy(&shsurf->resource);
> > } else {
> > @@ -546,6 +557,24 @@ shell_stack_fullscreen(struct shell_surface
> > *shsurf) }
> >
> > static void
> > +configure(struct tablet_shell *shell, struct weston_surface *surface,
> > + GLfloat x, GLfloat y, int32_t width, int32_t height) {
> > + struct shell_surface *shsurf;
> > +
> > + shsurf = get_shell_surface(surface);
> > + surface->geometry.x = x;
> > + surface->geometry.y = y;
> > + surface->geometry.width = width;
> > + surface->geometry.height = height;
> > + surface->geometry.dirty = 1;
> > +
> > + shell_stack_fullscreen(shsurf);
> > + center_on_output(surface, surface->output);
> > + weston_surface_assign_output(surface);
> > +}
> > +
> > +static void
> > shell_surface_configure(struct weston_surface *surface,
> > int32_t sx, int32_t sy) { @@ -558,12 +587,44
> > @@ shell_surface_configure(struct weston_surface *surface,
> >
> > wl_list_insert(&shell->application_layer.surface_list,
> > &surface->layer_link);
> > - weston_surface_assign_output(surface);
> > - center_on_output(surface, surface->output);
> > - shell_stack_fullscreen(shsurf);
> > - wl_list_for_each(seat, &surface->compositor->seat_list,
> link)
> > + if (shell->client_resource.client) {
> > + weston_surface_assign_output(surface);
> > + center_on_output(surface, surface->output);
> > + shell_stack_fullscreen(shsurf);
> > + wl_list_for_each(seat,
> > +
> &surface->compositor->seat_list,
> > + link)
> > weston_surface_activate(surface, seat);
>
> Please indent this line.
>
> > -
> weston_compositor_schedule_repaint(shell->compositor);
> > +
> weston_compositor_schedule_repaint(surface->compositor);
> > + tablet_client_send_set_fullscreen(
> > + &shell->client_resource);
> > +
> > + return;
> > + } else {
> > + weston_surface_assign_output(surface);
> > + center_on_output(surface, surface->output);
> > + shell_stack_fullscreen(shsurf);
> > + wl_list_for_each(seat,
> &surface->compositor->seat_list,
> > + link)
> > + weston_surface_activate(surface,
> seat);
> > +
> > + weston_compositor_schedule_repaint(shell->compositor);
>
> This else branch is exactly the same as the beginning of the if branch. Why not
> move this code outside of the if?
>
> > + }
> > + }
> > + if (sx != 0 || sy != 0 ||
> > + surface->geometry.width != surface->buffer->width ||
> > + surface->geometry.height != surface->buffer->height) {
> > + GLfloat from_x, from_y;
> > + GLfloat to_x, to_y;
> > +
> > + weston_surface_to_global_float(surface, 0, 0,
> > + &from_x,
> &from_y);
> > + weston_surface_to_global_float(surface, sx, sy,
> > + &to_x, &to_y);
> > + configure(shell, surface,
> > + surface->geometry.x + to_x - from_x,
> > + surface->geometry.y + to_y - from_y,
> > + surface->buffer->width,
> > + surface->buffer->height);
> > }
> > }
> >
> > @@ -890,6 +951,22 @@ bind_tablet_shell(struct wl_client *client, void
> > *data, uint32_t version, }
> >
> > static void
> > +bind_tablet_client(struct wl_client *client, void *data, uint32_t version,
> > + uint32_t id)
> > +{
> > + struct tablet_shell *shell = data;
> > + shell->client_resource.object.id = id;
> > + shell->client_resource.object.interface = &tablet_client_interface;
> > + shell->client_resource.object.implementation =
> > + (void (**)(void)) &tablet_client_implementation;
> > + shell->client_resource.client = client;
> > + shell->client_resource.data = shell;
> > + shell->client_resource.destroy = destroy_tablet_shell;
> > +
> > + wl_client_add_resource(client, &shell->client_resource); }
> > +
> > +static void
> > tablet_shell_destroy(struct wl_listener *listener, void *data) {
> > struct tablet_shell *shell =
> > @@ -928,6 +1005,9 @@ shell_init(struct weston_compositor *compositor)
> > shell->unlock_listener.notify = tablet_shell_unlock;
> > wl_signal_add(&compositor->unlock_signal,
> > &shell->unlock_listener);
> >
> > + wl_display_add_global(compositor->wl_display,
> &tablet_client_interface,
> > + shell, bind_tablet_client);
> > +
> > /* FIXME: This will make the object available to all clients. */
> > wl_display_add_global(compositor->wl_display,
> &tablet_shell_interface,
> > shell, bind_tablet_shell);
> > --
> > 1.7.11.5
> >
> > _______________________________________________
> > 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