示例#1
0
void
meta_surface_actor_set_frozen (MetaSurfaceActor *self,
                               gboolean          frozen)
{
  MetaSurfaceActorPrivate *priv = self->priv;

  priv->frozen = frozen;

  if (!frozen && priv->pending_damage)
    {
      int i, n_rects = cairo_region_num_rectangles (priv->pending_damage);
      cairo_rectangle_int_t rect;

      /* Since we ignore damage events while a window is frozen for certain effects
       * we need to apply the tracked damage now. */

      for (i = 0; i < n_rects; i++)
        {
          cairo_region_get_rectangle (priv->pending_damage, i, &rect);
          meta_surface_actor_process_damage (self, rect.x, rect.y,
                                             rect.width, rect.height);
        }
      g_clear_pointer (&priv->pending_damage, cairo_region_destroy);
    }
}
示例#2
0
void
meta_surface_actor_set_frozen (MetaSurfaceActor *self,
                               gboolean          frozen)
{
  MetaSurfaceActorPrivate *priv = self->priv;

  priv->frozen = frozen;

  if (!frozen && priv->needs_damage_all)
    {
      /* Since we ignore damage events while a window is frozen for certain effects
       * we may need to issue an update_area() covering the whole pixmap if we
       * don't know what real damage has happened. */

      meta_surface_actor_process_damage (self, 0, 0,
                                         clutter_actor_get_width (CLUTTER_ACTOR (priv->texture)),
                                         clutter_actor_get_height (CLUTTER_ACTOR (priv->texture)));
      priv->needs_damage_all = FALSE;
    }
}