[RFC PATCH wayland-protocols] presentation: New protocol for presenting surfaces to the user

Pekka Paalanen ppaalanen at gmail.com
Fri Oct 18 07:56:49 UTC 2019


On Fri, 18 Oct 2019 01:08:36 +0200
Carlos Garnacho <carlosg at gnome.org> wrote:

> Hi Pekka,
> 
> Thank you for your comments!

Hi Carlos,

I pretty much agreed with all your responses, just few things to
elaborate further below.

> 
> On Wed, Oct 16, 2019 at 11:31 AM Pekka Paalanen <ppaalanen at gmail.com> wrote:
> 
> > On Wed, 16 Oct 2019 10:54:08 +0200
> > Olivier Fourdan <ofourdan at redhat.com> wrote:
> >  
> > > Hey Carlos,
> > >
> > > On Wed, Oct 16, 2019 at 10:43 AM Carlos Garnacho <carlosg at gnome.org>  
> > wrote:  
> > > >
> > > > This protocol takes over 3 different, but interrelated aspects of
> > > > DE/client interaction:
> > > > - Startup notification: presenting feedback about applications
> > > >   being launched, either through the compositor or another client
> > > > - Focus stealing prevention: letting the compositor figure out
> > > >   whether immediately switching focus to a surface makes sense.
> > > > - Window raising/activation: allowing existing clients to request
> > > >   focus in a controlled manner.
> > > >
> > > > Signed-off-by: Carlos Garnacho <carlosg at gnome.org>  
> >
> > Hi Carlos,
> >
> > this seems well written and a good idea to me. More comments inline.
> >  
> > > > ---
> > > >  Makefile.am                                   |   1 +
> > > >  unstable/presentation/README                  |   5 +
> > > >  .../presentation/presentation-unstable-v1.xml | 175 ++++++++++++++++++
> > > >  3 files changed, 181 insertions(+)
> > > >  create mode 100644 unstable/presentation/README
> > > >  create mode 100644 unstable/presentation/presentation-unstable-v1.xml

...

> > > > +  <interface name="zwp_presentation_manager" version="1">
> > > > +    <request name="create_presenter" since="1">
> > > > +      <description summary="create a new presenter">
> > > > +       Creates a new presenter.
> > > > +
> > > > +       The surface argument is the toplevel that initiated the  
> > presentation  
> > > > +       request through user input. Compositors may want to place the  
> > presented  
> > > > +       surface relative to the presenter.
> > > > +
> > > > +       Compositors that desire to implement focus stealing prevention
> > > > +       may use this request to find out the request time.  
> >
> > The serial argument should be explained here. It might be hard,
> > because we have been really poor at explaining the serials.
> >  
> 
> Will try :).
> 
> 
> >
> > Do we not also need to specify the wl_seat for which the input serial
> > is associated to?
> >  
> 
> Hm, right.
> 
> 
> >  
> > > > +      </description>
> > > > +      <arg name="id" type="new_id" interface="zwp_presenter"/>
> > > > +      <arg name="surface" type="object" interface="wl_surface"/>  
> >
> > If you use wl_surface as the type here, what about when the role is not
> > a toplevel? Should that result in a protocol error?
> >  
> 
> That sounds like a good idea.
> 
> 
> >
> > What defines a "toplevel"?
> >  
> 
> My guess is that xdg_toplevel / wl_shell_surface are the targets.

Right. We might want a sentence deferring the definition of "toplevel"
to other extensions and mention xdg_toplevel as an example - unless the
interface starts using xdg_toplevel specifically.

I would not care to add support for wl_shell stuff in new extensions.


> >  
> > > > +      <arg name="serial" type="uint" summary="the serial from the  
> > input event"/>  
> > > > +    </request>
> > > > +

...

> > > > +  <interface name="zwp_presenter" version="1">
> > > > +    <description summary="context for presenting a surface">
> > > > +      The wp_presenter object allows clients to get the necessary  
> > context to  
> > > > +      request that another surface or client should be presented to  
> > the user.  
> > > > +    </description>
> > > > +
> > > > +    <request name="set_app_id">
> > > > +      <description summary="sets the app ID of the launched  
> > application">  
> > > > +       Sets the app ID of the application to be launched, the  
> > compositor  
> > > > +       may use this information to look up other miscellaneous  
> > information  
> > > > +       about it (eg. translatable name, icon, …).
> > > > +
> > > > +       Clients do not need to set an app ID for presentation requests
> > > > +       meant to map surfaces owned by the same client.  
> >
> > "Do not need" or "must not"?
> >  
> 
> It's perhaps a good idea to stick to the latter.

Btw. if this mechanism is intended for cross-application activation
only, then the text about own surfaces would need to be dropped. I'm
referring to your PDF opening example.


> >
> > Is it possible to send an app ID that is obviously invalid and should
> > result in a protocol error?
> >  
> 
> That wording has been taken straight from xdg-shell, both should probably
> be kept in sync. Same restrictions apply, too :).

Ok. I was just wondering if it needs a protocol error defined.
Following xdg-shell is good I suppose.


> > > > +    </request>
> > > > +
> > > > +    <request name="destroy" type="destructor">
> > > > +      <description summary="destroy zwp_presenter">
> > > > +       Destroys this zwp_presenter object.
> > > > +      </description>
> > > > +    </request>
> > > > +
> > > > +    <event name="token" since="1">
> > > > +      <description summary="token for the presentation request">
> > > > +       Notifies of an unique presentation token (eg. UUIDs) to be  
> > used for the  
> > > > +       application about to be launched.  
> >
> > When is this event sent?
> >  
> 
> Right after the presenter is created. I've got a bit of a sore point here,
> since obtaining presenter+token requires a roundtrip on the client.

The roundtrip is necessary, since the compositor is creating the token
to ensure it is unique enough.

The spec should say when this event is sent, I didn't find that.


> > > > +
> > > > +       In order to guarantee interoperation with the XDG Startup  
> > Notification  
> > > > +       spec, this launch_id is recommended to be transmitted to the  
> > launched  
> > > > +       application through the DESKTOP_STARTUP_ID environment  
> > variable. The  
> > > > +       launch ID may be passed to a running client through other  
> > means not  
> > > > +       observed in this protocol.
> > > > +      </description>
> > > > +      <arg name="token" type="string"/>
> > > > +    </event>
> > > > +
> > > > +    <event name="cancelled" since="1">
> > > > +      <description summary="the presenter has expired">
> > > > +       Notifies that the compositor is no longer watching this  
> > launched  
> > > > +       application. This may indicate failure (eg. launchee crashed)  
> > or  
> > > > +       may simply be the result of the launchee not replying properly
> > > > +       (eg. does not implement this protocol).  
> >
> > Ok. Should there be also a request to cancel this from the client side
> > in case the client does the launching and sees that e.g. exec() failed?
> > Or does the destructor request imply that?
> >  
> 
> Yup, the idea was making it implicit on destroy.

Cool, make sure to define that in the spec.



Thanks,
pq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20191018/f891c588/attachment.sig>


More information about the wayland-devel mailing list