[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