Thanks for your patient review, I will change that two places.
> -----Original Message----- > From: Philipp Brüschweiler [mailto:ble...@gmail.com] > Sent: Wednesday, August 22, 2012 12:14 AM > To: tecto...@gmail.com > Cc: wayland-devel@lists.freedesktop.org; juan.j.z...@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, <tecto...@gmail.com> wrote: > > From: Ning Tang <ning.t...@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 <tecto...@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@lists.freedesktop.org > > http://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel