protocol: add screensaver interface

Add the screensaver interface to the desktop-shell protocol file. Also
add stubs for it in the compositor, and make wscreensaver to bind to the
screensaver interface. Wscreensaver gets a new option --demo to retain
the current behaviour as a regular wayland client.

When a screensaver application starts, it should bind to the screensaver
interface, enumerate all outputs, create a surface per output, and
register those surfaces via screensaver::set_surface request. Then it
continues with the usual animation loop, waiting for frame events. The
compositor will decide, when the given screensaver surfaces are
displayed. A screensaver application should respond to outputs coming
and going away by creating and destroying surfaces.

The compositor is supposed to activate a screensaver by exec'ing it, and
stop the screensaver by killing the client process. Only one client may
be bound to the screensaver interface at a time. If there already is a
client, the compositor could either kill it first, or not exec a new
one.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
This commit is contained in:
Pekka Paalanen
2011-11-24 11:34:05 +02:00
parent 12c05b74ad
commit 6e16811e5e
4 changed files with 112 additions and 5 deletions
+13
View File
@@ -35,4 +35,17 @@
<event name="prepare_lock_surface"/>
</interface>
<!-- Only one client can bind this interface at a time. -->
<interface name="screensaver" version="1">
<!-- Set the surface type as a screensaver for a particular output.
A screensaver surface is normally hidden, and only visible after
an idle timeout. -->
<request name="set_surface">
<arg name="surface" type="object" interface="wl_shell_surface"/>
<arg name="output" type="object" interface="wl_output"/>
</request>
</interface>
</protocol>