[gimp] Let gimp_item_tree_get_insert_pos() return a boolean indicating success
- From: Michael Natterer <mitch src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] Let gimp_item_tree_get_insert_pos() return a boolean indicating success
- Date: Tue, 9 Feb 2010 21:42:06 +0000 (UTC)
commit 8afdbd805303045d82e4965eb8a758a223dc140a
Author: Michael Natterer <mitch gimp org>
Date: Tue Feb 9 17:47:08 2010 +0100
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.
app/core/gimpimage.c | 106 ++++++++++++----------------------------------
app/core/gimpitemtree.c | 61 +++++++++++++++------------
app/core/gimpitemtree.h | 71 ++++++++++++++++---------------
3 files changed, 98 insertions(+), 140 deletions(-)
---
diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c
index 9696035..1f5668d 100644
--- a/app/core/gimpimage.c
+++ b/app/core/gimpimage.c
@@ -3259,30 +3259,16 @@ gimp_image_add_layer (GimpImage *image,
gboolean old_has_alpha;
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);
- parent = GIMP_LAYER (gimp_item_tree_get_insert_pos (private->layers,
- (GimpItem *) parent,
- &position));
+ /* item and parent are type-checked in GimpItemTree
+ */
+ 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!),
* 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 (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);
- parent = GIMP_LAYER (gimp_item_tree_get_insert_pos (private->layers,
- (GimpItem *) parent,
- &position));
+ /* item and parent are type-checked in GimpItemTree
+ */
+ 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))
{
@@ -3622,30 +3600,16 @@ gimp_image_add_channel (GimpImage *image,
GimpImagePrivate *private;
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);
- parent = GIMP_CHANNEL (gimp_item_tree_get_insert_pos (private->channels,
- (GimpItem *) parent,
- &position));
+ /* item and parent are type-checked in GimpItemTree
+ */
+ if (! gimp_item_tree_get_insert_pos (private->channels,
+ (GimpItem *) channel,
+ (GimpItem **) &parent,
+ &position))
+ return FALSE;
if (push_undo)
gimp_image_undo_push_channel_add (image, _("Add Channel"),
@@ -3837,30 +3801,16 @@ gimp_image_add_vectors (GimpImage *image,
GimpImagePrivate *private;
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);
- parent = GIMP_VECTORS (gimp_item_tree_get_insert_pos (private->vectors,
- (GimpItem *) parent,
- &position));
+ /* item and parent are type-checked in GimpItemTree
+ */
+ if (! gimp_item_tree_get_insert_pos (private->vectors,
+ (GimpItem *) vectors,
+ (GimpItem **) &parent,
+ &position))
+ return FALSE;
if (push_undo)
gimp_image_undo_push_vectors_add (image, _("Add Path"),
diff --git a/app/core/gimpitemtree.c b/app/core/gimpitemtree.c
index 9623516..6a1667c 100644
--- a/app/core/gimpitemtree.c
+++ b/app/core/gimpitemtree.c
@@ -325,37 +325,43 @@ gimp_item_tree_get_item_by_name (GimpItemTree *tree,
name);
}
-GimpItem *
-gimp_item_tree_get_insert_pos (GimpItemTree *tree,
- GimpItem *parent,
- gint *position)
+gboolean
+gimp_item_tree_get_insert_pos (GimpItemTree *tree,
+ GimpItem *item,
+ GimpItem **parent,
+ gint *position)
{
GimpItemTreePrivate *private;
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);
- g_return_val_if_fail (parent == NULL ||
- parent == GIMP_IMAGE_ACTIVE_PARENT ||
- G_TYPE_CHECK_INSTANCE_TYPE (parent, private->item_type),
+ g_return_val_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (item, private->item_type),
FALSE);
- g_return_val_if_fail (parent == NULL ||
- parent == GIMP_IMAGE_ACTIVE_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,
+ g_return_val_if_fail (! gimp_item_is_attached (item), FALSE);
+ g_return_val_if_fail (gimp_item_get_image (item) == private->image, FALSE);
+ g_return_val_if_fail (*parent == NULL ||
+ *parent == GIMP_IMAGE_ACTIVE_PARENT ||
+ G_TYPE_CHECK_INSTANCE_TYPE (*parent, private->item_type),
+ FALSE);
+ g_return_val_if_fail (*parent == NULL ||
+ *parent == GIMP_IMAGE_ACTIVE_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);
- g_return_val_if_fail (parent == NULL ||
- parent == GIMP_IMAGE_ACTIVE_PARENT ||
- gimp_viewable_get_children (GIMP_VIEWABLE (parent)),
+ 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, NULL);
+ g_return_val_if_fail (position != NULL, FALSE);
/* 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)
{
@@ -365,23 +371,23 @@ gimp_item_tree_get_insert_pos (GimpItemTree *tree,
*/
if (gimp_viewable_get_children (GIMP_VIEWABLE (private->active_item)))
{
- parent = private->active_item;
+ *parent = private->active_item;
*position = 0;
}
else
{
- parent = gimp_item_get_parent (private->active_item);
+ *parent = gimp_item_get_parent (private->active_item);
}
}
else
{
/* use the toplevel container if there is no active item */
- parent = NULL;
+ *parent = NULL;
}
}
- if (parent)
- container = gimp_viewable_get_children (GIMP_VIEWABLE (parent));
+ if (*parent)
+ container = gimp_viewable_get_children (GIMP_VIEWABLE (*parent));
else
container = tree->container;
@@ -389,8 +395,9 @@ gimp_item_tree_get_insert_pos (GimpItemTree *tree,
if (*position == -1)
{
if (private->active_item)
- *position = gimp_container_get_child_index (container,
- GIMP_OBJECT (private->active_item));
+ *position =
+ gimp_container_get_child_index (container,
+ GIMP_OBJECT (private->active_item));
/* if the active item is not in the specified parent container,
* fall back to index 0
@@ -402,7 +409,7 @@ gimp_item_tree_get_insert_pos (GimpItemTree *tree,
/* don't add at a non-existing index */
*position = CLAMP (*position, 0, gimp_container_get_n_children (container));
- return parent;
+ return TRUE;
}
void
diff --git a/app/core/gimpitemtree.h b/app/core/gimpitemtree.h
index 0eecfbe..6ff5467 100644
--- a/app/core/gimpitemtree.h
+++ b/app/core/gimpitemtree.h
@@ -48,41 +48,42 @@ struct _GimpItemTreeClass
GType gimp_item_tree_get_type (void) G_GNUC_CONST;
-GimpItemTree * gimp_item_tree_new (GimpImage *image,
- GType container_type,
- GType item_type);
-
-GimpItem * gimp_item_tree_get_active_item (GimpItemTree *tree);
-void gimp_item_tree_set_active_item (GimpItemTree *tree,
- GimpItem *item);
-
-GimpItem * gimp_item_tree_get_item_by_name (GimpItemTree *tree,
- const gchar *name);
-
-GimpItem * gimp_item_tree_get_insert_pos (GimpItemTree *tree,
- GimpItem *parent,
- gint *position);
-
-void gimp_item_tree_add_item (GimpItemTree *tree,
- GimpItem *item,
- GimpItem *parent,
- gint position);
-GimpItem * gimp_item_tree_remove_item (GimpItemTree *tree,
- GimpItem *item,
- GimpItem *new_active);
-
-gboolean gimp_item_tree_reorder_item (GimpItemTree *tree,
- GimpItem *item,
- GimpItem *new_parent,
- gint new_index,
- gboolean push_undo,
- const gchar *undo_desc);
-
-void gimp_item_tree_rename_item (GimpItemTree *tree,
- GimpItem *item,
- const gchar *new_name,
- gboolean push_undo,
- const gchar *undo_desc);
+GimpItemTree * gimp_item_tree_new (GimpImage *image,
+ GType container_type,
+ GType item_type);
+
+GimpItem * gimp_item_tree_get_active_item (GimpItemTree *tree);
+void gimp_item_tree_set_active_item (GimpItemTree *tree,
+ GimpItem *item);
+
+GimpItem * gimp_item_tree_get_item_by_name (GimpItemTree *tree,
+ const gchar *name);
+
+gboolean gimp_item_tree_get_insert_pos (GimpItemTree *tree,
+ GimpItem *item,
+ GimpItem **parent,
+ gint *position);
+
+void gimp_item_tree_add_item (GimpItemTree *tree,
+ GimpItem *item,
+ GimpItem *parent,
+ gint position);
+GimpItem * gimp_item_tree_remove_item (GimpItemTree *tree,
+ GimpItem *item,
+ GimpItem *new_active);
+
+gboolean gimp_item_tree_reorder_item (GimpItemTree *tree,
+ GimpItem *item,
+ GimpItem *new_parent,
+ gint new_index,
+ gboolean push_undo,
+ const gchar *undo_desc);
+
+void gimp_item_tree_rename_item (GimpItemTree *tree,
+ GimpItem *item,
+ const gchar *new_name,
+ gboolean push_undo,
+ const gchar *undo_desc);
#endif /* __GIMP_ITEM_TREE_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]