void *data)
{
GdkSurface *surface = GDK_SURFACE (data);
+ cairo_region_t *expose_region;
g_return_if_fail (GDK_IS_SURFACE (surface));
- if (GDK_SURFACE_DESTROYED (surface))
+ if (GDK_SURFACE_DESTROYED (surface) ||
+ !surface->update_area ||
+ surface->update_freeze_count ||
+ gdk_surface_is_toplevel_frozen (surface))
return;
g_object_ref (surface);
- if (surface->update_area &&
- !surface->update_freeze_count &&
- !gdk_surface_is_toplevel_frozen (surface))
- {
- surface->pending_phases &= ~GDK_FRAME_CLOCK_PHASE_PAINT;
+ surface->pending_phases &= ~GDK_FRAME_CLOCK_PHASE_PAINT;
- /* Ensure the surface lives while updating it */
- g_object_ref (surface);
-
- /* If an update got queued during update processing, we can get a
- * surface in the update queue that has an empty update_area.
- * just ignore it.
- */
- if (surface->update_area)
- {
- cairo_region_t *expose_region;
+ /* Ensure the surface lives while updating it */
+ g_object_ref (surface);
- expose_region = surface->update_area;
- surface->update_area = NULL;
+ expose_region = surface->update_area;
+ surface->update_area = NULL;
- if (GDK_SURFACE_IS_MAPPED (surface))
- {
- gboolean handled;
+ if (GDK_SURFACE_IS_MAPPED (surface))
+ {
+ gboolean handled;
- g_signal_emit (surface, signals[RENDER], 0, expose_region, &handled);
- }
+ g_signal_emit (surface, signals[RENDER], 0, expose_region, &handled);
+ }
- cairo_region_destroy (expose_region);
- }
+ cairo_region_destroy (expose_region);
- g_object_unref (surface);
- }
+ g_object_unref (surface);
g_object_unref (surface);
}