[PATCH weston v2 03/10] compositor: Track surface activity

Bryce Harrington bryce at osg.samsung.com
Tue Mar 29 01:17:43 UTC 2016


On Mon, Mar 28, 2016 at 10:25:24AM +0300, Giulio Camuffo wrote:
> 2016-03-24 20:27 GMT+02:00 Bryce Harrington <bryce at osg.samsung.com>:
> > Surfaces flagged as 'active' are considered of primary urgency to the
> > user.  It might be the surface with the keyboard focus or displaying
> > something important; the exact specification of what 'active' means is
> > left as shell-specific.
> >
> > An 'active' surface may be granted special treatment by the compositor.
> > For instance, it may only honor inhibition requests by active surfaces.
> >
> > Signed-off-by: Bryce Harrington <bryce at osg.samsung.com>
> > ---
> >  src/compositor.c | 41 +++++++++++++++++++++++++++++++++++++++++
> >  src/compositor.h | 20 +++++++++++++++++---
> >  src/input.c      | 15 ---------------
> >  3 files changed, 58 insertions(+), 18 deletions(-)
> >
> > diff --git a/src/compositor.c b/src/compositor.c
> > index 4b091b0..574a0b8 100644
> > --- a/src/compositor.c
> > +++ b/src/compositor.c
> > @@ -612,6 +612,7 @@ weston_surface_create(struct weston_compositor *compositor)
> >         weston_matrix_init(&surface->buffer_to_surface_matrix);
> >         weston_matrix_init(&surface->surface_to_buffer_matrix);
> >
> > +       surface->active = false;
> >         surface->inhibit_screensaving = false;
> >
> >         return surface;
> > @@ -3424,6 +3425,46 @@ weston_surface_copy_content(struct weston_surface *surface,
> >                                          src_x, src_y, width, height);
> >  }
> >
> > +/** Set surface as active.
> > + *
> > + *  Marks a surface as considered 'active' by the shell
> > + *  and gives the surface keyboard focus.
> > + */
> > +WL_EXPORT void
> > +weston_surface_activate(struct weston_surface *surface,
> > +                        struct weston_seat *seat)
> 
> weston_surface_activate was previously only setting the keyboard
> focus, even though the name of the function was maybe ill chosen. Now
> you're giving it another meaning, that is it sets the 'active' state
> of the surface (as the name of the function suggests) but you're
> keeping the old meaning too.

Yeah, I know, it seems a bit awkward to me too.

> I would split them apart, a shell may
> want to e.g. set also the pointer focus surface as active, while
> keeping the keyboard focus where it is.

I was tempted to do this too, but wasn't sure if that might be too
invasive of a change?

Thanks for the review,
Bryce

> Cheers,
> Giulio
> 
> > +{
> > +        struct weston_compositor *compositor = seat->compositor;
> > +        struct weston_keyboard *keyboard = weston_seat_get_keyboard(seat);
> > +
> > +       surface->active = true;
> > +
> > +        if (keyboard) {
> > +                weston_keyboard_set_focus(keyboard, surface);
> > +                wl_data_device_set_keyboard_focus(seat);
> > +        }
> > +
> > +        wl_signal_emit(&compositor->activate_signal, surface);
> > +}
> > +
> > +/** Set surface as inactive.
> > + *
> > + *  Marks a surface as no longer considered 'active' by the shell.
> > + *  Note that this does not change keyboard focus.
> > + */
> > +WL_EXPORT void
> > +weston_surface_deactivate(struct weston_surface *surface,
> > +                          struct weston_seat *seat)
> > +{
> > +       surface->active = false;
> > +}
> > +
> > +WL_EXPORT bool
> > +weston_surface_is_active(struct weston_surface *surface)
> > +{
> > +       return surface->active;
> > +}
> > +
> >  static void
> >  subsurface_set_position(struct wl_client *client,
> >                         struct wl_resource *resource, int32_t x, int32_t y)
> > diff --git a/src/compositor.h b/src/compositor.h
> > index d982feb..9a9ab1a 100644
> > --- a/src/compositor.h
> > +++ b/src/compositor.h
> > @@ -1039,11 +1039,19 @@ struct weston_surface {
> >         struct weston_timeline_object timeline;
> >
> >         /*
> > +        * A shell-specific indicator that the surface is in immediate
> > +        * use by the user.  For example, the surface might have keyboard
> > +        * focus.
> > +        */
> > +       bool active;
> > +
> > +       /*
> >          * Indicates the surface prefers no screenblanking, screensaving,
> >          * or other automatic obscurement to kick in while the surface is
> >          * considered "active" by the shell.
> >          */
> >         bool inhibit_screensaving;
> > +
> >  };
> >
> >  struct weston_subsurface {
> > @@ -1129,9 +1137,6 @@ int
> >  weston_spring_done(struct weston_spring *spring);
> >
> >  void
> > -weston_surface_activate(struct weston_surface *surface,
> > -                       struct weston_seat *seat);
> > -void
> >  notify_motion(struct weston_seat *seat, uint32_t time,
> >               struct weston_pointer_motion_event *event);
> >  void
> > @@ -1409,6 +1414,15 @@ weston_surface_copy_content(struct weston_surface *surface,
> >                             int src_x, int src_y,
> >                             int width, int height);
> >
> > +void
> > +weston_surface_activate(struct weston_surface *surface,
> > +                       struct weston_seat *seat);
> > +void
> > +weston_surface_deactivate(struct weston_surface *surface,
> > +                         struct weston_seat *seat);
> > +bool
> > +weston_surface_is_active(struct weston_surface *surface);
> > +
> >  struct weston_buffer *
> >  weston_buffer_from_resource(struct wl_resource *resource);
> >
> > diff --git a/src/input.c b/src/input.c
> > index a3d982e..6e35105 100644
> > --- a/src/input.c
> > +++ b/src/input.c
> > @@ -1206,21 +1206,6 @@ notify_motion_absolute(struct weston_seat *seat,
> >  }
> >
> >  WL_EXPORT void
> > -weston_surface_activate(struct weston_surface *surface,
> > -                       struct weston_seat *seat)
> > -{
> > -       struct weston_compositor *compositor = seat->compositor;
> > -       struct weston_keyboard *keyboard = weston_seat_get_keyboard(seat);
> > -
> > -       if (keyboard) {
> > -               weston_keyboard_set_focus(keyboard, surface);
> > -               wl_data_device_set_keyboard_focus(seat);
> > -       }
> > -
> > -       wl_signal_emit(&compositor->activate_signal, surface);
> > -}
> > -
> > -WL_EXPORT void
> >  notify_button(struct weston_seat *seat, uint32_t time, int32_t button,
> >               enum wl_pointer_button_state state)
> >  {
> > --
> > 1.9.1
> >
> > _______________________________________________
> > wayland-devel mailing list
> > wayland-devel at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list