diff --git a/app/core/gimpitemstack.c b/app/core/gimpitemstack.c index 0a3cec4d1d..0da89da293 100644 --- a/app/core/gimpitemstack.c +++ b/app/core/gimpitemstack.c @@ -233,6 +233,39 @@ gimp_item_stack_get_item_by_tattoo (GimpItemStack *stack, return NULL; } +GimpItem * +gimp_item_stack_get_item_by_path (GimpItemStack *stack, + GList *path) +{ + GimpContainer *container; + GimpItem *item = NULL; + + g_return_val_if_fail (GIMP_IS_ITEM_STACK (stack), NULL); + g_return_val_if_fail (path != NULL, NULL); + + container = GIMP_CONTAINER (stack); + + while (path) + { + guint32 i = GPOINTER_TO_UINT (path->data); + + item = GIMP_ITEM (gimp_container_get_child_by_index (container, i)); + + g_return_val_if_fail (GIMP_IS_ITEM (item), item); + + if (path->next) + { + container = gimp_viewable_get_children (GIMP_VIEWABLE (item)); + + g_return_val_if_fail (GIMP_IS_ITEM_STACK (container), item); + } + + path = path->next; + } + + return item; +} + GimpItem * gimp_item_stack_get_parent_by_path (GimpItemStack *stack, GList *path, diff --git a/app/core/gimpitemstack.h b/app/core/gimpitemstack.h index f86aa45308..195ec4ebef 100644 --- a/app/core/gimpitemstack.h +++ b/app/core/gimpitemstack.h @@ -53,6 +53,8 @@ GList * gimp_item_stack_get_item_iter (GimpItemStack *stack); GList * gimp_item_stack_get_item_list (GimpItemStack *stack); GimpItem * gimp_item_stack_get_item_by_tattoo (GimpItemStack *stack, GimpTattoo tattoo); +GimpItem * gimp_item_stack_get_item_by_path (GimpItemStack *stack, + GList *path); GimpItem * gimp_item_stack_get_parent_by_path (GimpItemStack *stack, GList *path, gint *index);