/* Invalidate all stylable children recursively beginning at given actor */ static void _xfdashboard_actor_invalidate_recursive(ClutterActor *inActor) { ClutterActor *child; ClutterActorIter actorIter; g_return_if_fail(CLUTTER_IS_ACTOR(inActor)); /* If actor is stylable invalidate it to get its style recomputed */ if(XFDASHBOARD_IS_STYLABLE(inActor)) { xfdashboard_stylable_invalidate(XFDASHBOARD_STYLABLE(inActor)); } /* Recompute styles for all children recursively */ clutter_actor_iter_init(&actorIter, inActor); while(clutter_actor_iter_next(&actorIter, &child)) { /* Call ourselve recursive with child as top-level actor. * We return immediately if it has no children but invalidate child * before. If it has children it will first invalidated and will be * iterated over its children then. In both cases the child will * be invalidated. */ _xfdashboard_actor_invalidate_recursive(child); } }
static void _xfdashboard_actor_stylable_set_pseudo_classes(XfdashboardStylable *inStylable, const gchar *inStylePseudoClasses) { XfdashboardActor *self; XfdashboardActorPrivate *priv; g_return_if_fail(XFDASHBOARD_IS_ACTOR(inStylable)); self=XFDASHBOARD_ACTOR(inStylable); priv=self->priv; /* Set value if changed */ if(g_strcmp0(priv->stylePseudoClasses, inStylePseudoClasses)) { /* Set value */ if(priv->stylePseudoClasses) { g_free(priv->stylePseudoClasses); priv->stylePseudoClasses=NULL; } if(inStylePseudoClasses) priv->stylePseudoClasses=g_strdup(inStylePseudoClasses); /* Invalidate style to get it restyled and redrawn. Also invalidate * children as they might reference the old, invalid pseudo-classes * or the new, valid ones. */ _xfdashboard_actor_invalidate_recursive(CLUTTER_ACTOR(self)); /* Notify about property change */ g_object_notify(G_OBJECT(self), "style-pseudo-classes"); } }
/* Actor's reactive state changed */ static void _xfdashboard_actor_on_reactive_changed(GObject *inObject, GParamSpec *inSpec, gpointer inUserData) { XfdashboardActor *self; g_return_if_fail(XFDASHBOARD_IS_ACTOR(inObject)); self=XFDASHBOARD_ACTOR(inObject); /* Add pseudo-class ':insensitive' if actor is now not reactive * and remove this pseudo-class if actor is now reactive. */ if(clutter_actor_get_reactive(CLUTTER_ACTOR(self))) { xfdashboard_stylable_remove_pseudo_class(XFDASHBOARD_STYLABLE(self), "insensitive"); } else { xfdashboard_stylable_add_pseudo_class(XFDASHBOARD_STYLABLE(self), "insensitive"); } /* Invalide styling to get it recomputed */ _xfdashboard_actor_invalidate_recursive(CLUTTER_ACTOR(self)); }
/* Actor was (re)named */ static void _xfdashboard_actor_on_name_changed(GObject *inObject, GParamSpec *inSpec, gpointer inUserData) { XfdashboardActor *self; g_return_if_fail(XFDASHBOARD_IS_ACTOR(inObject)); self=XFDASHBOARD_ACTOR(inObject); /* Invalide styling to get it recomputed because its ID (from point * of view of css) has changed. Also invalidate children as they * might reference the old, invalid ID or the new, valid one. */ _xfdashboard_actor_invalidate_recursive(CLUTTER_ACTOR(self)); }
/* Actor was (re)parented */ static void _xfdashboard_actor_parent_set(ClutterActor *inActor, ClutterActor *inOldParent) { XfdashboardActor *self; XfdashboardActorPrivate *priv; ClutterActorClass *parentClass; g_return_if_fail(XFDASHBOARD_IS_ACTOR(inActor)); self=XFDASHBOARD_ACTOR(inActor); priv=self->priv; /* Call parent's virtual function */ parentClass=CLUTTER_ACTOR_CLASS(xfdashboard_actor_parent_class); if(parentClass->parent_set) { parentClass->parent_set(inActor, inOldParent); } /* Check if it is a newly created actor which is parented for the first time. * Then emit 'actor-created' signal on stage. */ if(priv->isFirstParent && !inOldParent && clutter_actor_get_parent(inActor)) { ClutterActor *stage; /* Get stage where this actor belongs to and emit signal at stage */ stage=clutter_actor_get_stage(inActor); if(XFDASHBOARD_IS_STAGE(stage)) { g_signal_emit_by_name(stage, "actor-created", inActor, NULL); } /* Set flag that a parent set and signal was emitted */ priv->isFirstParent=FALSE; } /* Invalide styling to get it recomputed because its ID (from point * of view of css) has changed. Also invalidate children as they might * reference the old, invalid parent or the new, valid one. */ _xfdashboard_actor_invalidate_recursive(CLUTTER_ACTOR(self)); }
/* Actor was (re)parented */ static void _xfdashboard_actor_parent_set(ClutterActor *inActor, ClutterActor *inOldParent) { XfdashboardActor *self; ClutterActorClass *parentClass; g_return_if_fail(XFDASHBOARD_IS_ACTOR(inActor)); self=XFDASHBOARD_ACTOR(inActor); /* Call parent's virtual function */ parentClass=CLUTTER_ACTOR_CLASS(xfdashboard_actor_parent_class); if(parentClass->parent_set) { parentClass->parent_set(inActor, inOldParent); } /* Invalide styling to get it recomputed because its ID (from point * of view of css) has changed. Also invalidate children as they might * reference the old, invalid parent or the new, valid one. */ _xfdashboard_actor_invalidate_recursive(CLUTTER_ACTOR(self)); }