Skip to content
  • Havoc Pennington's avatar
    Enforce invariants on mapped, realized, visibility states · 125bded8
    Havoc Pennington authored
    
    
    Bug 1138 - No trackable "mapped" state
    
    * Add a VISIBLE flag tracking application programmer's
      expected showing-state for the actor, allowing us to
      always ensure we keep what the app wants while tracking
      internal implementation state separately.
    
    * Make MAPPED reflect whether the actor will be painted;
      add notification on a ClutterActor::mapped property.
      Keep MAPPED state updated as the actor is shown,
      ancestors are shown, actor is reparented, etc.
    
    * Require a stage and realized parents to realize; this means
      at realization time the correct window system and GL resources
      are known. But unparented actors can no longer be realized.
    
    * Allow children to be unrealized even if parent is realized.
      Otherwise in effect either all actors or no actors are realized,
      i.e. it becomes a stage-global flag.
    
    * Allow clutter_actor_realize() to "fail" if not inside a toplevel
    
    * Rework clutter_actor_unrealize() so internally we have
      a flavor that does not mess with visibility flag
    
    * Add _clutter_actor_rerealize() to encapsulate a somewhat
      tricky operation we were doing in a couple of places
    
    * Do not realize/unrealize children in ClutterGroup,
      ClutterActor already does it
    
    * Do not realize impl by hand in clutter_stage_show(),
      since showing impl already does that
    
    * Do not unrealize in various dispose() methods, since
      ClutterActor dispose implementation already does it
      and chaining up is mandatory
    
    * ClutterTexture uses COGL while unrealizable (before it's
      added to a stage). Previously this breakage was affecting
      ClutterActor because we had to allow realize outside
      a stage. Move the breakage to ClutterTexture, by making
      ClutterTexture just use COGL while not realized.
    
    * Unrealize before we set parent to NULL in clutter_actor_unparent().
      This means unrealize() implementations can get to the stage.
      Because actors need the stage in order to detach from stage.
    
    * Update clutter-actor-invariants.txt to reflect latest changes
    
    * Remove explicit hide/unrealize from ClutterActor::dispose since
      unparent already forces those
      Instead just assert that unparent() occurred and did the right thing.
    
    * Check whether parent implements unrealize before chaining up
      Needed because ClutterGroup no longer has to implement unrealize.
    
    * Perform unrealize in the default handler for the signal.
      This allows non-containers that have children to work properly,
      and allows containers to override how it's done.
    
    * Add map/unmap virtual methods and set MAPPED flag on self and
      children in there. This allows subclasses to hook map/unmap.
      These are not signals, because notify::mapped is better for
      anything it's legitimate for a non-subclass to do.
    
    Signed-off-by: default avatarEmmanuele Bassi <ebassi@linux.intel.com>
    125bded8