compositor: implement screen locking

When the compositor is locked, all surfaces are moved from the
compositor's list to a private list in the shell plugin. This prevents
any of those surfaces from being visible or receiving input. All new
surfaces will be moved to the private list, too.

The background surface is an exception, it is left to the compositor's
list, so the background will be painted. It is assumed that the
background surface does not allow any actions while being locked.

When desktop-shell announces a lock surface (an unlock dialog), it is
added to the compositor's list, so the user can interact with it.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
diff --git a/compositor/compositor.c b/compositor/compositor.c
index b718dc5..758a9f1 100644
--- a/compositor/compositor.c
+++ b/compositor/compositor.c
@@ -361,7 +361,7 @@
 	return tv.tv_sec * 1000 + tv.tv_usec / 1000;
 }
 
-static void
+WL_EXPORT void
 wlsc_compositor_repick(struct wlsc_compositor *compositor)
 {
 	struct wlsc_input_device *device;