compositor: Send frame event after redraw
authorBenjamin Franzke <benjaminfranzke@googlemail.com>
Tue, 21 Jun 2011 14:33:27 +0000 (16:33 +0200)
committerBenjamin Franzke <benjaminfranzke@googlemail.com>
Tue, 21 Jun 2011 14:41:20 +0000 (16:41 +0200)
compositor/compositor.c

index bb4d56d..0dcfc7c 100644 (file)
@@ -578,16 +578,8 @@ WL_EXPORT void
 wlsc_output_finish_frame(struct wlsc_output *output, int msecs)
 {
        struct wlsc_compositor *compositor = output->compositor;
-       struct wlsc_surface *es;
        struct wlsc_animation *animation, *next;
 
-       wl_list_for_each(es, &compositor->surface_list, link) {
-               if (es->output == output) {
-                       wl_display_post_frame(compositor->wl_display,
-                                             &es->surface, msecs);
-               }
-       }
-
        output->finished = 1;
 
        wl_event_source_timer_update(compositor->timer_source, 5);
@@ -598,6 +590,20 @@ wlsc_output_finish_frame(struct wlsc_output *output, int msecs)
                animation->frame(animation, output, msecs);
 }
 
+static void
+wlsc_output_finish_redraw(struct wlsc_output *output, int msecs)
+{
+       struct wlsc_compositor *compositor = output->compositor;
+       struct wlsc_surface *es;
+
+       wl_list_for_each(es, &compositor->surface_list, link) {
+               if (es->output == output) {
+                       wl_display_post_frame(compositor->wl_display,
+                                             &es->surface, msecs);
+               }
+       }
+}
+
 WL_EXPORT void
 wlsc_output_damage(struct wlsc_output *output)
 {
@@ -709,6 +715,9 @@ wlsc_output_repaint(struct wlsc_output *output)
                        pixman_region32_union(&ec->damage_region,
                                              &ec->damage_region,
                                              &total_damage);
+
+                       wlsc_output_finish_redraw(output,
+                                                 wlsc_compositor_get_time());
                        return;
                }
        }
@@ -747,6 +756,8 @@ wlsc_output_repaint(struct wlsc_output *output)
 
        if (ec->fade.spring.current > 0.001)
                fade_output(output, ec->fade.spring.current, &total_damage);
+
+       wlsc_output_finish_redraw(output, wlsc_compositor_get_time());
 }
 
 static int