diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c index 3662689ff..1bd88bcd3 100644 --- a/clutter/clutter/clutter-actor.c +++ b/clutter/clutter/clutter-actor.c @@ -16258,6 +16258,40 @@ clutter_actor_peek_stage_views (ClutterActor *self) return self->priv->stage_views; } +gboolean +clutter_actor_is_effectively_on_stage_view (ClutterActor *self, + ClutterStageView *view) +{ + ClutterActor *actor; + + g_return_val_if_fail (CLUTTER_IS_ACTOR (self), FALSE); + + if (g_list_find (self->priv->stage_views, view)) + return TRUE; + + for (actor = self; actor; actor = actor->priv->parent) + { + if (actor->priv->clones) + { + GHashTableIter iter; + gpointer key; + + g_hash_table_iter_init (&iter, actor->priv->clones); + while (g_hash_table_iter_next (&iter, &key, NULL)) + { + ClutterActor *clone = key; + GList *clone_views; + + clone_views = clutter_actor_peek_stage_views (clone); + if (g_list_find (clone_views, view)) + return TRUE; + } + } + } + + return FALSE; +} + /** * clutter_actor_pick_frame_clock: * @self: a #ClutterActor diff --git a/clutter/clutter/clutter-mutter.h b/clutter/clutter/clutter-mutter.h index 5aa9a7e14..6ca7904b2 100644 --- a/clutter/clutter/clutter-mutter.h +++ b/clutter/clutter/clutter-mutter.h @@ -39,6 +39,10 @@ CLUTTER_EXPORT GList * clutter_stage_peek_stage_views (ClutterStage *stage); +CLUTTER_EXPORT +gboolean clutter_actor_is_effectively_on_stage_view (ClutterActor *self, + ClutterStageView *view); + CLUTTER_EXPORT void clutter_set_custom_backend_func (ClutterBackend *(* func) (void));