meego-tablet-shell: Handle animation surface going away
authorKristian Høgsberg <krh@bitplanet.net>
Tue, 3 May 2011 16:41:03 +0000 (12:41 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 3 May 2011 16:41:03 +0000 (12:41 -0400)
compositor/meego-tablet-shell.c

index e01cc67..44e60ed 100644 (file)
@@ -79,6 +79,7 @@ struct meego_tablet_zoom {
        struct wlsc_animation animation;
        struct wlsc_spring spring;
        struct wlsc_transform transform;
+       struct wl_listener listener;
 };
 
 static int
@@ -96,6 +97,18 @@ sigchld_handler(int signal_number, void *data)
 }
 
 static void
+handle_zoom_surface_destroy(struct wl_listener *listener,
+                           struct wl_surface *surface, uint32_t time)
+{
+       struct meego_tablet_zoom *zoom =
+               container_of(listener, struct meego_tablet_zoom, listener);
+
+       wl_list_remove(&zoom->animation.link);
+       fprintf(stderr, "animation surface gone\n");
+       free(zoom);
+}
+
+static void
 meego_tablet_zoom_frame(struct wlsc_animation *animation,
                        struct wlsc_output *output, uint32_t msecs)
 {
@@ -150,6 +163,10 @@ meego_tablet_zoom_run(struct meego_tablet_shell *shell,
        meego_tablet_zoom_frame(&zoom->animation, NULL,
                                zoom->spring.timestamp);
 
+       zoom->listener.func = handle_zoom_surface_destroy;
+       wl_list_insert(surface->surface.destroy_listener_list.prev,
+                      &zoom->listener.link);
+
        wl_list_insert(shell->compositor->animation_list.prev,
                       &zoom->animation.link);
 }