[RFC 1/5] Add a fullscreen shell protocol

Jason Ekstrand jason at jlekstrand.net
Thu Oct 24 01:08:29 CEST 2013


Jonas,
Thanks for the review!

On Wed, Oct 23, 2013 at 3:56 PM, Jonas Ådahl <jadahl at gmail.com> wrote:

> Hi,
>
> Using this protocol, how would the fullscreen shell client turn on and
> off outputs? I can see how clone, next-to and modeset by controlling
> what surface is presented and what fullscreen method is used, but that
> is not enough for turning an output off, isn't it?
>

I think that would be done by simply calling present_surface with a null
surface to remove the surface from the output.  I'm not 100% sure how this
will interact with KMS surface detection, but hopefully we should be able
to make it that simple.


> Another question is synchronising. Would a client ever want to change
> anything atomically? Do we need something like wl_surface.commit?
>

I'm not sure what would get changed atomically.  There's only one operation
and different outputs will probably have different refresh rates so changes
won't be atomic anyway.  Or are you thinking about trying to future-proof
stuff?


>
> Also, one wording comment below.
>
> Thanks
>
> Jonas
>
>
> On Tue, Oct 22, 2013 at 08:48:25PM -0500, Jason Ekstrand wrote:
> > ---
> >  protocol/fullscreen-shell.xml | 44
> +++++++++++++++++++++++++++++++++++++++++++
> >  1 file changed, 44 insertions(+)
> >  create mode 100644 protocol/fullscreen-shell.xml
> >
> > diff --git a/protocol/fullscreen-shell.xml
> b/protocol/fullscreen-shell.xml
> > new file mode 100644
> > index 0000000..b696828
> > --- /dev/null
> > +++ b/protocol/fullscreen-shell.xml
> > @@ -0,0 +1,44 @@
> > +<protocol name="fullscreen_shell">
> > +  <interface name="wl_fullscreen_shell" version="1">
> > +    <description summary="Displays a single surface per output">
> > +      Displays a single surface per output.
> > +
> > +      This interface can only be bound to by one client at a time.
> > +    </description>
> > +
> > +    <enum name="fullscreen_method">
> > +      <description summary="different method to set the surface
> fullscreen">
> > +     Hints to indicate to the compositor how to deal with a conflict
> > +     between the dimensions of the surface and the dimensions of the
> > +     output. The compositor is free to ignore this parameter.
> > +      </description>
> > +      <entry name="default" value="0" summary="no preference, apply
> default policy"/>
> > +      <entry name="scale" value="1" summary="scale, preserve the
> surface's aspect ratio and center on output"/>
> > +      <entry name="driver" value="2" summary="switch output mode to the
> smallest mode that can fit the surface, add black borders to compensate
> size mismatch"/>
> > +      <entry name="fill" value="3" summary="no upscaling, center on
> output and add black borders to compensate size mismatch"/>
> > +    </enum>
> > +
> > +    <request name="present_surface">
> > +      <description summary="present surface for display">
> > +     This requests the system compositor to display surface on output.
> > +     Each client of the system compositor can have at most one surface
>
> You still use the term 'system compositor' here. Also, it should be
> "display a surface" instead of "display surface".
>

Thanks.  Good catch.  I've fixed it locally.


>
> > +     per output at any one time. Subsequent requests with the same
> > +     output replace the surface bound to that output.  The same surface
> > +     may be presented on multiple outputs.
> > +
> > +     If the output is null, the compositor will present the surface on
> > +     whatever display (or displays) it thinks best.  In particular, this
> > +     may replace any or all surfaces currently presented so it should
> > +     not be used in combination with placing surfaces on specific
> > +     outputs.
> > +
> > +     The method specifies how the surface is to be persented.  These
> > +     methods are identical to those in wl_shell_surface.set_fullscreen.
> > +      </description>
> > +      <arg name="surface" type="object" interface="wl_surface"/>
> > +      <arg name="method" type="uint"/>
> > +      <arg name="framerate" type="uint"/>
> > +      <arg name="output" type="object" interface="wl_output"
> allow-null="true"/>
> > +    </request>
> > +  </interface>
> > +</protocol>
> > --
> > 1.8.3.1
> >
> > _______________________________________________
> > wayland-devel mailing list
> > wayland-devel at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20131023/b323e040/attachment.html>


More information about the wayland-devel mailing list