Let gimp_item_tree_get_insert_pos() return a boolean indicating success
and move more precondition checks there. Remove lots and lots of checks from all its callers and simply bail out if it returns FALSE.
This commit is contained in:
@ -3259,30 +3259,16 @@ gimp_image_add_layer (GimpImage *image,
|
|||||||
gboolean old_has_alpha;
|
gboolean old_has_alpha;
|
||||||
|
|
||||||
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
||||||
g_return_val_if_fail (GIMP_IS_LAYER (layer), FALSE);
|
|
||||||
g_return_val_if_fail (! gimp_item_is_attached (GIMP_ITEM (layer)), FALSE);
|
|
||||||
g_return_val_if_fail (gimp_item_get_image (GIMP_ITEM (layer)) == image,
|
|
||||||
FALSE);
|
|
||||||
g_return_val_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
GIMP_IS_LAYER (parent), FALSE);
|
|
||||||
g_return_val_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
gimp_item_is_attached (GIMP_ITEM (parent)), FALSE);
|
|
||||||
g_return_val_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
gimp_item_get_image (GIMP_ITEM (parent)) == image,
|
|
||||||
FALSE);
|
|
||||||
g_return_val_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
gimp_viewable_get_children (GIMP_VIEWABLE (parent)),
|
|
||||||
FALSE);
|
|
||||||
|
|
||||||
private = GIMP_IMAGE_GET_PRIVATE (image);
|
private = GIMP_IMAGE_GET_PRIVATE (image);
|
||||||
|
|
||||||
parent = GIMP_LAYER (gimp_item_tree_get_insert_pos (private->layers,
|
/* item and parent are type-checked in GimpItemTree
|
||||||
(GimpItem *) parent,
|
*/
|
||||||
&position));
|
if (! gimp_item_tree_get_insert_pos (private->layers,
|
||||||
|
(GimpItem *) layer,
|
||||||
|
(GimpItem **) &parent,
|
||||||
|
&position))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
/* If there is a floating selection (and this isn't it!),
|
/* If there is a floating selection (and this isn't it!),
|
||||||
* make sure the insert position is greater than 0
|
* make sure the insert position is greater than 0
|
||||||
@ -3449,24 +3435,16 @@ gimp_image_add_layers (GimpImage *image,
|
|||||||
|
|
||||||
g_return_if_fail (GIMP_IS_IMAGE (image));
|
g_return_if_fail (GIMP_IS_IMAGE (image));
|
||||||
g_return_if_fail (layers != NULL);
|
g_return_if_fail (layers != NULL);
|
||||||
g_return_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
GIMP_IS_LAYER (parent));
|
|
||||||
g_return_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
gimp_item_is_attached (GIMP_ITEM (parent)));
|
|
||||||
g_return_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
gimp_item_get_image (GIMP_ITEM (parent)) == image);
|
|
||||||
g_return_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
gimp_viewable_get_children (GIMP_VIEWABLE (parent)));
|
|
||||||
|
|
||||||
private = GIMP_IMAGE_GET_PRIVATE (image);
|
private = GIMP_IMAGE_GET_PRIVATE (image);
|
||||||
|
|
||||||
parent = GIMP_LAYER (gimp_item_tree_get_insert_pos (private->layers,
|
/* item and parent are type-checked in GimpItemTree
|
||||||
(GimpItem *) parent,
|
*/
|
||||||
&position));
|
if (! gimp_item_tree_get_insert_pos (private->layers,
|
||||||
|
(GimpItem *) layers->data,
|
||||||
|
(GimpItem **) &parent,
|
||||||
|
&position))
|
||||||
|
return;
|
||||||
|
|
||||||
for (list = layers; list; list = g_list_next (list))
|
for (list = layers; list; list = g_list_next (list))
|
||||||
{
|
{
|
||||||
@ -3622,30 +3600,16 @@ gimp_image_add_channel (GimpImage *image,
|
|||||||
GimpImagePrivate *private;
|
GimpImagePrivate *private;
|
||||||
|
|
||||||
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
||||||
g_return_val_if_fail (GIMP_IS_CHANNEL (channel), FALSE);
|
|
||||||
g_return_val_if_fail (! gimp_item_is_attached (GIMP_ITEM (channel)), FALSE);
|
|
||||||
g_return_val_if_fail (gimp_item_get_image (GIMP_ITEM (channel)) == image,
|
|
||||||
FALSE);
|
|
||||||
g_return_val_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
GIMP_IS_CHANNEL (parent), FALSE);
|
|
||||||
g_return_val_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
gimp_item_is_attached (GIMP_ITEM (parent)), FALSE);
|
|
||||||
g_return_val_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
gimp_item_get_image (GIMP_ITEM (parent)) == image,
|
|
||||||
FALSE);
|
|
||||||
g_return_val_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
gimp_viewable_get_children (GIMP_VIEWABLE (parent)),
|
|
||||||
FALSE);
|
|
||||||
|
|
||||||
private = GIMP_IMAGE_GET_PRIVATE (image);
|
private = GIMP_IMAGE_GET_PRIVATE (image);
|
||||||
|
|
||||||
parent = GIMP_CHANNEL (gimp_item_tree_get_insert_pos (private->channels,
|
/* item and parent are type-checked in GimpItemTree
|
||||||
(GimpItem *) parent,
|
*/
|
||||||
&position));
|
if (! gimp_item_tree_get_insert_pos (private->channels,
|
||||||
|
(GimpItem *) channel,
|
||||||
|
(GimpItem **) &parent,
|
||||||
|
&position))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
if (push_undo)
|
if (push_undo)
|
||||||
gimp_image_undo_push_channel_add (image, _("Add Channel"),
|
gimp_image_undo_push_channel_add (image, _("Add Channel"),
|
||||||
@ -3837,30 +3801,16 @@ gimp_image_add_vectors (GimpImage *image,
|
|||||||
GimpImagePrivate *private;
|
GimpImagePrivate *private;
|
||||||
|
|
||||||
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
||||||
g_return_val_if_fail (GIMP_IS_VECTORS (vectors), FALSE);
|
|
||||||
g_return_val_if_fail (! gimp_item_is_attached (GIMP_ITEM (vectors)), FALSE);
|
|
||||||
g_return_val_if_fail (gimp_item_get_image (GIMP_ITEM (vectors)) == image,
|
|
||||||
FALSE);
|
|
||||||
g_return_val_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
GIMP_IS_VECTORS (parent), FALSE);
|
|
||||||
g_return_val_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
gimp_item_is_attached (GIMP_ITEM (parent)), FALSE);
|
|
||||||
g_return_val_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
gimp_item_get_image (GIMP_ITEM (parent)) == image,
|
|
||||||
FALSE);
|
|
||||||
g_return_val_if_fail (parent == NULL ||
|
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
gimp_viewable_get_children (GIMP_VIEWABLE (parent)),
|
|
||||||
FALSE);
|
|
||||||
|
|
||||||
private = GIMP_IMAGE_GET_PRIVATE (image);
|
private = GIMP_IMAGE_GET_PRIVATE (image);
|
||||||
|
|
||||||
parent = GIMP_VECTORS (gimp_item_tree_get_insert_pos (private->vectors,
|
/* item and parent are type-checked in GimpItemTree
|
||||||
(GimpItem *) parent,
|
*/
|
||||||
&position));
|
if (! gimp_item_tree_get_insert_pos (private->vectors,
|
||||||
|
(GimpItem *) vectors,
|
||||||
|
(GimpItem **) &parent,
|
||||||
|
&position))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
if (push_undo)
|
if (push_undo)
|
||||||
gimp_image_undo_push_vectors_add (image, _("Add Path"),
|
gimp_image_undo_push_vectors_add (image, _("Add Path"),
|
||||||
|
@ -325,37 +325,43 @@ gimp_item_tree_get_item_by_name (GimpItemTree *tree,
|
|||||||
name);
|
name);
|
||||||
}
|
}
|
||||||
|
|
||||||
GimpItem *
|
gboolean
|
||||||
gimp_item_tree_get_insert_pos (GimpItemTree *tree,
|
gimp_item_tree_get_insert_pos (GimpItemTree *tree,
|
||||||
GimpItem *parent,
|
GimpItem *item,
|
||||||
|
GimpItem **parent,
|
||||||
gint *position)
|
gint *position)
|
||||||
{
|
{
|
||||||
GimpItemTreePrivate *private;
|
GimpItemTreePrivate *private;
|
||||||
GimpContainer *container;
|
GimpContainer *container;
|
||||||
|
|
||||||
g_return_val_if_fail (GIMP_IS_ITEM_TREE (tree), NULL);
|
g_return_val_if_fail (GIMP_IS_ITEM_TREE (tree), FALSE);
|
||||||
|
g_return_val_if_fail (parent != NULL, FALSE);
|
||||||
|
|
||||||
private = GIMP_ITEM_TREE_GET_PRIVATE (tree);
|
private = GIMP_ITEM_TREE_GET_PRIVATE (tree);
|
||||||
|
|
||||||
g_return_val_if_fail (parent == NULL ||
|
g_return_val_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (item, private->item_type),
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
|
||||||
G_TYPE_CHECK_INSTANCE_TYPE (parent, private->item_type),
|
|
||||||
FALSE);
|
FALSE);
|
||||||
g_return_val_if_fail (parent == NULL ||
|
g_return_val_if_fail (! gimp_item_is_attached (item), FALSE);
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
g_return_val_if_fail (gimp_item_get_image (item) == private->image, FALSE);
|
||||||
gimp_item_is_attached (parent), FALSE);
|
g_return_val_if_fail (*parent == NULL ||
|
||||||
g_return_val_if_fail (parent == NULL ||
|
*parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
G_TYPE_CHECK_INSTANCE_TYPE (*parent, private->item_type),
|
||||||
gimp_item_get_image (parent) == private->image,
|
|
||||||
FALSE);
|
FALSE);
|
||||||
g_return_val_if_fail (parent == NULL ||
|
g_return_val_if_fail (*parent == NULL ||
|
||||||
parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
*parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
||||||
gimp_viewable_get_children (GIMP_VIEWABLE (parent)),
|
gimp_item_is_attached (*parent), FALSE);
|
||||||
|
g_return_val_if_fail (*parent == NULL ||
|
||||||
|
*parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
||||||
|
gimp_item_get_image (*parent) == private->image,
|
||||||
FALSE);
|
FALSE);
|
||||||
g_return_val_if_fail (position != NULL, NULL);
|
g_return_val_if_fail (*parent == NULL ||
|
||||||
|
*parent == GIMP_IMAGE_ACTIVE_PARENT ||
|
||||||
|
gimp_viewable_get_children (GIMP_VIEWABLE (*parent)),
|
||||||
|
FALSE);
|
||||||
|
g_return_val_if_fail (position != NULL, FALSE);
|
||||||
|
|
||||||
/* if we want to insert in the active item's parent container */
|
/* if we want to insert in the active item's parent container */
|
||||||
if (parent == GIMP_IMAGE_ACTIVE_PARENT)
|
if (*parent == GIMP_IMAGE_ACTIVE_PARENT)
|
||||||
{
|
{
|
||||||
if (private->active_item)
|
if (private->active_item)
|
||||||
{
|
{
|
||||||
@ -365,23 +371,23 @@ gimp_item_tree_get_insert_pos (GimpItemTree *tree,
|
|||||||
*/
|
*/
|
||||||
if (gimp_viewable_get_children (GIMP_VIEWABLE (private->active_item)))
|
if (gimp_viewable_get_children (GIMP_VIEWABLE (private->active_item)))
|
||||||
{
|
{
|
||||||
parent = private->active_item;
|
*parent = private->active_item;
|
||||||
*position = 0;
|
*position = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
parent = gimp_item_get_parent (private->active_item);
|
*parent = gimp_item_get_parent (private->active_item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* use the toplevel container if there is no active item */
|
/* use the toplevel container if there is no active item */
|
||||||
parent = NULL;
|
*parent = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parent)
|
if (*parent)
|
||||||
container = gimp_viewable_get_children (GIMP_VIEWABLE (parent));
|
container = gimp_viewable_get_children (GIMP_VIEWABLE (*parent));
|
||||||
else
|
else
|
||||||
container = tree->container;
|
container = tree->container;
|
||||||
|
|
||||||
@ -389,7 +395,8 @@ gimp_item_tree_get_insert_pos (GimpItemTree *tree,
|
|||||||
if (*position == -1)
|
if (*position == -1)
|
||||||
{
|
{
|
||||||
if (private->active_item)
|
if (private->active_item)
|
||||||
*position = gimp_container_get_child_index (container,
|
*position =
|
||||||
|
gimp_container_get_child_index (container,
|
||||||
GIMP_OBJECT (private->active_item));
|
GIMP_OBJECT (private->active_item));
|
||||||
|
|
||||||
/* if the active item is not in the specified parent container,
|
/* if the active item is not in the specified parent container,
|
||||||
@ -402,7 +409,7 @@ gimp_item_tree_get_insert_pos (GimpItemTree *tree,
|
|||||||
/* don't add at a non-existing index */
|
/* don't add at a non-existing index */
|
||||||
*position = CLAMP (*position, 0, gimp_container_get_n_children (container));
|
*position = CLAMP (*position, 0, gimp_container_get_n_children (container));
|
||||||
|
|
||||||
return parent;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -59,8 +59,9 @@ void gimp_item_tree_set_active_item (GimpItemTree *tree,
|
|||||||
GimpItem * gimp_item_tree_get_item_by_name (GimpItemTree *tree,
|
GimpItem * gimp_item_tree_get_item_by_name (GimpItemTree *tree,
|
||||||
const gchar *name);
|
const gchar *name);
|
||||||
|
|
||||||
GimpItem * gimp_item_tree_get_insert_pos (GimpItemTree *tree,
|
gboolean gimp_item_tree_get_insert_pos (GimpItemTree *tree,
|
||||||
GimpItem *parent,
|
GimpItem *item,
|
||||||
|
GimpItem **parent,
|
||||||
gint *position);
|
gint *position);
|
||||||
|
|
||||||
void gimp_item_tree_add_item (GimpItemTree *tree,
|
void gimp_item_tree_add_item (GimpItemTree *tree,
|
||||||
|
Reference in New Issue
Block a user