compositor: Hide surfaces by setting surface->output to NULL
This way we can still use surface->link when a surface is not in
the main compositor surface list and don't need the hidden_surface
wrapper object. Also, setting surface->output to NULL will block
the surface frame callback until we put the surface back into the
main list. This has the effect of blocking animations while a surface
isn't visible.
diff --git a/compositor/compositor.c b/compositor/compositor.c
index 758a9f1..ae348eb 100644
--- a/compositor/compositor.c
+++ b/compositor/compositor.c
@@ -313,7 +313,7 @@
{
struct wlsc_surface *below;
- if (wl_list_empty(&surface->link))
+ if (surface->output == NULL)
return;
if (surface->link.next == &surface->compositor->surface_list)
@@ -369,6 +369,9 @@
int32_t sx, sy;
uint32_t time;
+ if (!compositor->focus)
+ return;
+
time = wlsc_compositor_get_time();
wl_list_for_each(device, &compositor->input_device_list, link) {
if (device->input_device.grab)