[gimp/wip/Jehan/classy-GIMP: 20/45] libgimp: nicer API for functions returning a list.
- From: Jehan <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/wip/Jehan/classy-GIMP: 20/45] libgimp: nicer API for functions returning a list.
- Date: Sat, 17 Aug 2019 10:15:49 +0000 (UTC)
commit 9f18f03ccfacf581981df1411a80a3b2c958d43b
Author: Jehan <jehan girinstud io>
Date: Wed Aug 14 11:08:42 2019 +0200
libgimp: nicer API for functions returning a list.
I.e.: gimp_image_get_(layers|channels|vectors)(), gimp_image_list() and
gimp_item_get_children().
Instead of returning an array of IDs, these will now return a GList with
the right objects ready to use.
libgimp/gimpexport.c | 133 +++++++++-------------
libgimp/gimpimage.c | 262 ++++++++++++++++++++++++++++++++++++++++++++
libgimp/gimpimage.h | 17 +++
libgimp/gimpimage_pdb.c | 174 ++---------------------------
libgimp/gimpimage_pdb.h | 17 +--
libgimp/gimpimagecombobox.c | 31 +++---
libgimp/gimpitem.c | 65 +++++++++++
libgimp/gimpitem.h | 14 +++
libgimp/gimpitem_pdb.c | 56 +---------
libgimp/gimpitem_pdb.h | 95 ++++++++--------
libgimp/gimpitemcombobox.c | 71 +++++-------
libgimp/gimpitemcombobox.h | 2 +-
pdb/groups/image.pdb | 4 +
pdb/groups/item.pdb | 1 +
14 files changed, 522 insertions(+), 420 deletions(-)
---
diff --git a/libgimp/gimpexport.c b/libgimp/gimpexport.c
index c9de679e76..02ae7b4483 100644
--- a/libgimp/gimpexport.c
+++ b/libgimp/gimpexport.c
@@ -72,20 +72,15 @@ static void
export_merge (GimpImage *image,
GimpDrawable **drawable)
{
- gint32 nlayers;
+ GList *layers;
+ GList *iter;
gint32 nvisible = 0;
- gint32 i;
- gint32 *layers;
- layers = gimp_image_get_layers (image, &nlayers);
- for (i = 0; i < nlayers; i++)
+ layers = gimp_image_get_layers (image);
+ for (iter = layers; iter; iter = iter->next)
{
- GimpLayer *layer = GIMP_LAYER (gimp_item_new_by_id (layers[i]));
-
- if (gimp_item_get_visible (GIMP_ITEM (layer)))
+ if (gimp_item_get_visible (GIMP_ITEM (iter->data)))
nvisible++;
-
- g_object_unref (layer);
}
if (nvisible <= 1)
@@ -114,7 +109,6 @@ export_merge (GimpImage *image,
{
GimpLayer *merged;
- g_free (layers);
merged = gimp_image_merge_visible_layers (image, GIMP_CLIP_TO_IMAGE);
if (merged != NULL)
@@ -127,7 +121,8 @@ export_merge (GimpImage *image,
return; /* shouldn't happen */
}
- layers = gimp_image_get_layers (image, &nlayers);
+ g_list_free_full (layers, g_object_unref);
+ layers = gimp_image_get_layers (image);
/* make sure that the merged drawable matches the image size */
if (gimp_drawable_width (GIMP_DRAWABLE (merged)) != gimp_image_width (image) ||
@@ -144,18 +139,12 @@ export_merge (GimpImage *image,
}
/* remove any remaining (invisible) layers */
- for (i = 0; i < nlayers; i++)
+ for (iter = layers; iter; iter = iter->next)
{
- if (layers[i] != gimp_item_get_id (GIMP_ITEM (*drawable)))
- {
- GimpLayer *layer = GIMP_LAYER (gimp_item_new_by_id (layers[i]));
-
- gimp_image_remove_layer (image, layer);
-
- g_object_unref (layer);
- }
+ if (gimp_item_get_id (iter->data) != gimp_item_get_id (GIMP_ITEM (*drawable)))
+ gimp_image_remove_layer (image, iter->data);
}
- g_free (layers);
+ g_list_free_full (layers, g_object_unref);
}
static void
@@ -174,51 +163,41 @@ static void
export_remove_alpha (GimpImage *image,
GimpDrawable **drawable)
{
- gint32 n_layers;
- gint32 *layers;
- gint i;
+ GList *layers;
+ GList *iter;
- layers = gimp_image_get_layers (image, &n_layers);
+ layers = gimp_image_get_layers (image);
- for (i = 0; i < n_layers; i++)
+ for (iter = layers; iter; iter = iter->next)
{
- GimpLayer *layer;
-
- layer = GIMP_LAYER (gimp_item_new_by_id (layers[i]));
- if (gimp_drawable_has_alpha (GIMP_DRAWABLE (layer)))
- gimp_layer_flatten (layer);
-
- g_object_unref (layer);
+ if (gimp_drawable_has_alpha (GIMP_DRAWABLE (iter->data)))
+ gimp_layer_flatten (iter->data);
}
- g_free (layers);
+ g_list_free_full (layers, g_object_unref);
}
static void
export_apply_masks (GimpImage *image,
GimpDrawable **drawable)
{
- gint32 n_layers;
- gint32 *layers;
- gint i;
+ GList *layers;
+ GList *iter;
- layers = gimp_image_get_layers (image, &n_layers);
+ layers = gimp_image_get_layers (image);
- for (i = 0; i < n_layers; i++)
+ for (iter = layers; iter; iter = iter->next)
{
- GimpLayer *layer;
GimpLayerMask *mask;
- layer = GIMP_LAYER (gimp_item_new_by_id (layers[i]));
- mask = gimp_layer_get_mask (layer);
+ mask = gimp_layer_get_mask (iter->data);
if (mask)
- gimp_layer_remove_mask (layer, GIMP_MASK_APPLY);
+ gimp_layer_remove_mask (iter->data, GIMP_MASK_APPLY);
- g_object_unref (layer);
g_clear_object (&mask);
}
- g_free (layers);
+ g_list_free_full (layers, g_object_unref);
}
static void
@@ -239,11 +218,11 @@ static void
export_convert_indexed (GimpImage *image,
GimpDrawable **drawable)
{
- gint32 nlayers;
+ GList *layers;
/* check alpha */
- g_free (gimp_image_get_layers (image, &nlayers));
- if (nlayers > 1 || gimp_drawable_has_alpha (*drawable))
+ layers = gimp_image_get_layers (image);
+ if (layers || gimp_drawable_has_alpha (*drawable))
gimp_image_convert_indexed (image,
GIMP_CONVERT_DITHER_NONE,
GIMP_CONVERT_PALETTE_GENERATE,
@@ -253,6 +232,7 @@ export_convert_indexed (GimpImage *image,
GIMP_CONVERT_DITHER_NONE,
GIMP_CONVERT_PALETTE_GENERATE,
256, FALSE, FALSE, "");
+ g_list_free_full (layers, g_object_unref);
}
static void
@@ -272,22 +252,16 @@ static void
export_add_alpha (GimpImage *image,
GimpDrawable **drawable)
{
- gint32 nlayers;
- gint32 i;
- gint32 *layers;
+ GList *layers;
+ GList *iter;
- layers = gimp_image_get_layers (image, &nlayers);
- for (i = 0; i < nlayers; i++)
+ layers = gimp_image_get_layers (image);
+ for (iter = layers; iter; iter = iter->next)
{
- GimpLayer *layer;
-
- layer = GIMP_LAYER (gimp_item_new_by_id (layers[i]));
- if (!gimp_drawable_has_alpha (GIMP_DRAWABLE (layer)))
- gimp_layer_add_alpha (GIMP_LAYER (layer));
-
- g_object_unref (layer);
+ if (! gimp_drawable_has_alpha (GIMP_DRAWABLE (iter->data)))
+ gimp_layer_add_alpha (GIMP_LAYER (iter->data));
}
- g_free (layers);
+ g_list_free_full (layers, g_object_unref);
}
static void
@@ -768,9 +742,8 @@ gimp_export_image (GimpImage **image,
{
GSList *actions = NULL;
GimpImageBaseType type;
- gint32 i;
- gint32 n_layers;
- gint32 *layers;
+ GList *layers;
+ GList *iter;
gboolean interactive = FALSE;
gboolean added_flatten = FALSE;
gboolean has_layer_masks = FALSE;
@@ -823,11 +796,11 @@ gimp_export_image (GimpImage **image,
/* check alpha and layer masks */
- layers = gimp_image_get_layers (*image, &n_layers);
+ layers = gimp_image_get_layers (*image);
- for (i = 0; i < n_layers; i++)
+ for (iter = layers; iter; iter = iter->next)
{
- GimpLayer *layer = GIMP_LAYER (gimp_item_new_by_id (layers[i]));
+ GimpLayer *layer = GIMP_LAYER (iter->data);
if (gimp_drawable_has_alpha (GIMP_DRAWABLE (layer)))
{
@@ -851,7 +824,7 @@ gimp_export_image (GimpImage **image,
/* If this is the last layer, it's visible and has no alpha
* channel, then the image has a "flat" background
*/
- if (i == n_layers - 1 && gimp_item_get_visible (GIMP_ITEM (layer)))
+ if (iter->next == NULL && gimp_item_get_visible (GIMP_ITEM (layer)))
background_has_alpha = FALSE;
if (capabilities & GIMP_EXPORT_NEEDS_ALPHA)
@@ -860,36 +833,32 @@ gimp_export_image (GimpImage **image,
break;
}
}
- g_object_unref (layer);
}
if (! added_flatten)
{
- for (i = 0; i < n_layers; i++)
+ for (iter = layers; iter; iter = iter->next)
{
- GimpLayer *layer = GIMP_LAYER (gimp_item_new_by_id (layers[i]));
+ GimpLayer *layer = GIMP_LAYER (iter->data);
GimpLayerMask *mask;
mask = gimp_layer_get_mask (layer);
if (mask)
has_layer_masks = TRUE;
- g_object_unref (layer);
g_clear_object (&mask);
}
}
if (! added_flatten)
{
- GimpLayer *layer = GIMP_LAYER (gimp_item_new_by_id (layers[0]));
- gint32 *children;
- gint32 n_children;
+ GimpLayer *layer = GIMP_LAYER (layers->data);
+ GList *children;
- children = gimp_item_get_children (GIMP_ITEM (layer), &n_children);
- g_object_unref (layer);
+ children = gimp_item_get_children (GIMP_ITEM (layer));
/* check if layer size != canvas size, opacity != 100%, or offsets != 0 */
- if (n_layers == 1 &&
+ if (g_list_length (layers) == 1 &&
! children &&
gimp_item_is_layer (GIMP_ITEM (*drawable)) &&
! (capabilities & GIMP_EXPORT_CAN_HANDLE_LAYERS))
@@ -919,7 +888,7 @@ gimp_export_image (GimpImage **image,
}
}
/* check multiple layers */
- else if (n_layers > 1)
+ else if (layers && layers->next != NULL)
{
if (capabilities & GIMP_EXPORT_CAN_HANDLE_LAYERS_AS_ANIMATION)
{
@@ -955,7 +924,7 @@ gimp_export_image (GimpImage **image,
}
}
- g_free (children);
+ g_list_free_full (children, g_object_unref);
/* check layer masks */
if (has_layer_masks &&
@@ -963,7 +932,7 @@ gimp_export_image (GimpImage **image,
actions = g_slist_prepend (actions, &export_action_apply_masks);
}
- g_free (layers);
+ g_list_free_full (layers, g_object_unref);
/* check the image type */
type = gimp_image_base_type (*image);
diff --git a/libgimp/gimpimage.c b/libgimp/gimpimage.c
index bfa6785dd1..fc658a4d9f 100644
--- a/libgimp/gimpimage.c
+++ b/libgimp/gimpimage.c
@@ -158,6 +158,161 @@ gimp_image_new_by_id (gint32 image_id)
return image;
}
+/**
+ * gimp_image_list:
+ *
+ * Returns the list of images currently open.
+ *
+ * This procedure returns the list of images currently open in GIMP.
+ *
+ * Returns: (element-type GimpImage) (transfer full):
+ * The list of images currently open.
+ * The returned value must be freed with:
+ * g_list_free_full(list, g_object_unref);
+ **/
+GList *
+gimp_image_list (void)
+{
+ GList *images = NULL;
+ gint *ids;
+ gint num_images;
+ gint i;
+
+ ids = _gimp_image_list (&num_images);
+ for (i = 0; i < num_images; i++)
+ {
+ GimpImage *image;
+
+ image = gimp_image_new_by_id (ids[i]);
+
+ images = g_list_prepend (images, image);
+ }
+ images = g_list_reverse (images);
+ g_free (ids);
+
+ return images;
+}
+
+/**
+ * gimp_image_get_layers:
+ * @image: The image.
+ *
+ * Returns the list of layers contained in the specified image.
+ *
+ * This procedure returns the list of layers contained in the specified
+ * image. The order of layers is from topmost to bottommost.
+ *
+ * Returns: (element-type GimpImage) (transfer full):
+ * The list of layers contained in the image.
+ * The returned value must be freed with:
+ * g_list_free_full(list, g_object_unref);
+ *
+ * Since: 3.0
+ **/
+GList *
+gimp_image_get_layers (GimpImage *image)
+{
+ GList *layers = NULL;
+ gint *ids;
+ gint num_layers;
+ gint i;
+
+ ids = _gimp_image_get_layers (image, &num_layers);
+ for (i = 0; i < num_layers; i++)
+ {
+ GimpLayer *layer;
+
+ layer = GIMP_LAYER (gimp_item_new_by_id (ids[i]));
+
+ layers = g_list_prepend (layers, layer);
+ }
+ layers = g_list_reverse (layers);
+ g_free (ids);
+
+ return layers;
+}
+
+/**
+ * gimp_image_get_channels:
+ * @image: The image.
+ *
+ * Returns the list of channels contained in the specified image.
+ *
+ * This procedure returns the list of channels contained in the
+ * specified image. This does not include the selection mask, or layer
+ * masks. The order is from topmost to bottommost. Note that
+ * \"channels\" are custom channels and do not include the image's
+ * color components.
+ *
+ * Returns: (element-type GimpChannel) (transfer full):
+ * The list of channels contained in the image.
+ * The returned value must be freed with:
+ * g_list_free_full(list, g_object_unref);
+ *
+ * Since: 3.0
+ **/
+GList *
+gimp_image_get_channels (GimpImage *image)
+{
+ GList *channels = NULL;
+ gint *ids;
+ gint num_channels;
+ gint i;
+
+ ids = _gimp_image_get_channels (image, &num_channels);
+ for (i = 0; i < num_channels; i++)
+ {
+ GimpChannel *channel;
+
+ channel = GIMP_CHANNEL (gimp_item_new_by_id (ids[i]));
+
+ channels = g_list_prepend (channels, channel);
+ }
+ channels = g_list_reverse (channels);
+ g_free (ids);
+
+ return channels;
+}
+
+/**
+ * gimp_image_get_vectors:
+ * @image: The image.
+ *
+ * Returns the list of vectors contained in the specified image.
+ *
+ * This procedure returns the list of vectors contained in the
+ * specified image.
+ *
+ * Returns: (element-type GimpVectors) (transfer full):
+ * The list of vectors contained in the image.
+ * The returned value must be freed with:
+ * g_list_free_full(list, g_object_unref);
+ *
+ * Since: 3.0
+ **/
+GList *
+gimp_image_get_vectors (GimpImage *image)
+{
+ GList *vectors = NULL;
+ gint *ids;
+ gint num_vectors;
+ gint i;
+
+ ids = _gimp_image_get_vectors (image, &num_vectors);
+ for (i = 0; i < num_vectors; i++)
+ {
+ GimpVectors *path;
+
+ path = GIMP_VECTORS (gimp_item_new_by_id (ids[i]));
+
+ vectors = g_list_prepend (vectors, path);
+ }
+ vectors = g_list_reverse (vectors);
+ g_free (ids);
+
+ return vectors;
+}
+
/**
* gimp_image_get_colormap:
* @image: The image.
@@ -356,6 +511,113 @@ gimp_image_set_metadata (GimpImage *image,
/* Deprecated API. */
+/**
+ * gimp_image_list_deprecated: (skip)
+ * @num_images: (out): The number of images currently open.
+ *
+ * Returns the list of images currently open.
+ *
+ * This procedure returns the list of images currently open in GIMP.
+ *
+ * Returns: (array length=num_images) (element-type gint32) (transfer full):
+ * The list of images currently open.
+ * The returned value must be freed with g_free().
+ **/
+gint *
+gimp_image_list_deprecated (gint *num_images)
+{
+ return _gimp_image_list (num_images);
+}
+
+/**
+ * gimp_image_get_layers_deprecated: (skip)
+ * @image_id: The image id.
+ * @num_layers: (out): The number of layers contained in the image.
+ *
+ * Returns the list of layers contained in the specified image.
+ *
+ * This procedure returns the list of layers contained in the specified
+ * image. The order of layers is from topmost to bottommost.
+ *
+ * Returns: (array length=num_layers) (element-type gint32) (transfer full):
+ * The list of layers contained in the image.
+ * The returned value must be freed with g_free().
+ **/
+gint *
+gimp_image_get_layers_deprecated (gint32 image_id,
+ gint *num_layers)
+{
+ GimpImage *image;
+ gint *layers;
+
+ image = gimp_image_new_by_id (image_id);
+ layers = _gimp_image_get_layers (image, num_layers);
+ g_object_unref (image);
+
+ return layers;
+}
+
+/**
+ * gimp_image_get_channels_deprecated: (skip)
+ * @image_id: The image.
+ * @num_channels: (out): The number of channels contained in the image.
+ *
+ * Returns the list of channels contained in the specified image.
+ *
+ * This procedure returns the list of channels contained in the
+ * specified image. This does not include the selection mask, or layer
+ * masks. The order is from topmost to bottommost. Note that
+ * \"channels\" are custom channels and do not include the image's
+ * color components.
+ *
+ * Returns: (array length=num_channels):
+ * The list of channels contained in the image.
+ * The returned value must be freed with g_free().
+ **/
+gint *
+gimp_image_get_channels_deprecated (gint32 image_id,
+ gint *num_channels)
+{
+ GimpImage *image;
+ gint *channels;
+
+ image = gimp_image_new_by_id (image_id);
+ channels = _gimp_image_get_layers (image, num_channels);
+ g_object_unref (image);
+
+ return channels;
+}
+
+/**
+ * gimp_image_get_vectors_deprecated: (skip)
+ * @image_id: The image.
+ * @num_vectors: (out): The number of vectors contained in the image.
+ *
+ * Returns the list of vectors contained in the specified image.
+ *
+ * This procedure returns the list of vectors contained in the
+ * specified image.
+ *
+ * Returns: (array length=num_vectors) (element-type gint32) (transfer full):
+ * The list of vectors contained in the image.
+ * The returned value must be freed with g_free().
+ *
+ * Since: 2.4
+ **/
+gint *
+gimp_image_get_vectors_deprecated (gint32 image_id,
+ gint *num_vectors)
+{
+ GimpImage *image;
+ gint *vectors;
+
+ image = gimp_image_new_by_id (image_id);
+ vectors = _gimp_image_get_vectors (image, num_vectors);
+ g_object_unref (image);
+
+ return vectors;
+}
+
/**
* gimp_image_get_colormap_deprecated: (skip)
* @image_id: The image.
diff --git a/libgimp/gimpimage.h b/libgimp/gimpimage.h
index 2334ea89a9..beef38c043 100644
--- a/libgimp/gimpimage.h
+++ b/libgimp/gimpimage.h
@@ -68,9 +68,14 @@ GType gimp_image_get_type (void) G_GNUC_CONST;
gint32 gimp_image_get_id (GimpImage *image);
GimpImage * gimp_image_new_by_id (gint32 image_id);
+GList * gimp_image_list (void);
#ifndef GIMP_DEPRECATED_REPLACE_NEW_API
+GList * gimp_image_get_layers (GimpImage *image);
+GList * gimp_image_get_channels (GimpImage *image);
+GList * gimp_image_get_vectors (GimpImage *image);
+
guchar * gimp_image_get_colormap (GimpImage *image,
gint *num_colors);
gboolean gimp_image_set_colormap (GimpImage *image,
@@ -92,6 +97,10 @@ gboolean gimp_image_set_metadata (GimpImage *image,
#else /* GIMP_DEPRECATED_REPLACE_NEW_API */
+#define gimp_image_list gimp_image_list_deprecated
+#define gimp_image_get_layers gimp_image_get_layers_deprecated
+#define gimp_image_get_channel gimp_image_get_channels_deprecated
+#define gimp_image_get_vectors gimp_image_get_vectors_deprecated
#define gimp_image_get_colormap gimp_image_get_colormap_deprecated
#define gimp_image_set_colormap gimp_image_set_colormap_deprecated
#define gimp_image_get_thumbnail_data gimp_image_get_thumbnail_data_deprecated
@@ -102,6 +111,14 @@ gboolean gimp_image_set_metadata (GimpImage *image,
#endif /* GIMP_DEPRECATED_REPLACE_NEW_API */
+gint * gimp_image_list_deprecated (gint *num_images);
+
+gint * gimp_image_get_layers_deprecated (gint32 image_id,
+ gint *num_layers);
+gint * gimp_image_get_channels_deprecated (gint32 image_id,
+ gint *num_channels);
+gint * gimp_image_get_vectors_deprecated (gint32 image_id,
+ gint *num_vectors);
guchar * gimp_image_get_colormap_deprecated (gint32 image_id,
gint *num_colors);
gboolean gimp_image_set_colormap_deprecated (gint32 image_id,
diff --git a/libgimp/gimpimage_pdb.c b/libgimp/gimpimage_pdb.c
index 3f9eb8c5db..8f59ab463c 100644
--- a/libgimp/gimpimage_pdb.c
+++ b/libgimp/gimpimage_pdb.c
@@ -120,7 +120,7 @@ _gimp_image_is_valid (gint32 image_ID)
}
/**
- * gimp_image_list:
+ * _gimp_image_list:
* @num_images: (out): The number of images currently open.
*
* Returns the list of images currently open.
@@ -132,7 +132,7 @@ _gimp_image_is_valid (gint32 image_ID)
* The returned value must be freed with g_free().
**/
gint *
-gimp_image_list (gint *num_images)
+_gimp_image_list (gint *num_images)
{
GimpPDB *pdb = gimp_get_pdb ();
GimpValueArray *args;
@@ -951,7 +951,7 @@ _gimp_image_height (gint32 image_ID)
}
/**
- * gimp_image_get_layers:
+ * _gimp_image_get_layers:
* @image: The image.
* @num_layers: (out): The number of layers contained in the image.
*
@@ -965,8 +965,8 @@ _gimp_image_height (gint32 image_ID)
* The returned value must be freed with g_free().
**/
gint *
-gimp_image_get_layers (GimpImage *image,
- gint *num_layers)
+_gimp_image_get_layers (GimpImage *image,
+ gint *num_layers)
{
GimpPDB *pdb = gimp_get_pdb ();
GimpValueArray *args;
@@ -1000,56 +1000,7 @@ gimp_image_get_layers (GimpImage *image,
}
/**
- * _gimp_image_get_layers: (skip)
- * @image_ID: The image.
- * @num_layers: (out): The number of layers contained in the image.
- *
- * Returns the list of layers contained in the specified image.
- *
- * This procedure returns the list of layers contained in the specified
- * image. The order of layers is from topmost to bottommost.
- *
- * Returns: (array length=num_layers):
- * The list of layers contained in the image.
- * The returned value must be freed with g_free().
- **/
-gint *
-_gimp_image_get_layers (gint32 image_ID,
- gint *num_layers)
-{
- GimpPDB *pdb = gimp_get_pdb ();
- GimpValueArray *args;
- GimpValueArray *return_vals;
- gint *layer_ids = NULL;
-
- args = gimp_value_array_new_from_types (NULL,
- GIMP_TYPE_IMAGE_ID, image_ID,
- G_TYPE_NONE);
-
- if (pdb)
- return_vals = gimp_pdb_run_procedure_array (pdb,
- "gimp-image-get-layers",
- args);
- else
- return_vals = gimp_run_procedure_array ("gimp-image-get-layers",
- args);
- gimp_value_array_unref (args);
-
- *num_layers = 0;
-
- if (g_value_get_enum (gimp_value_array_index (return_vals, 0)) == GIMP_PDB_SUCCESS)
- {
- *num_layers = g_value_get_int (gimp_value_array_index (return_vals, 1));
- layer_ids = gimp_value_dup_int32_array (gimp_value_array_index (return_vals, 2));
- }
-
- gimp_value_array_unref (return_vals);
-
- return layer_ids;
-}
-
-/**
- * gimp_image_get_channels:
+ * _gimp_image_get_channels:
* @image: The image.
* @num_channels: (out): The number of channels contained in the image.
*
@@ -1066,8 +1017,8 @@ _gimp_image_get_layers (gint32 image_ID,
* The returned value must be freed with g_free().
**/
gint *
-gimp_image_get_channels (GimpImage *image,
- gint *num_channels)
+_gimp_image_get_channels (GimpImage *image,
+ gint *num_channels)
{
GimpPDB *pdb = gimp_get_pdb ();
GimpValueArray *args;
@@ -1101,59 +1052,7 @@ gimp_image_get_channels (GimpImage *image,
}
/**
- * _gimp_image_get_channels: (skip)
- * @image_ID: The image.
- * @num_channels: (out): The number of channels contained in the image.
- *
- * Returns the list of channels contained in the specified image.
- *
- * This procedure returns the list of channels contained in the
- * specified image. This does not include the selection mask, or layer
- * masks. The order is from topmost to bottommost. Note that
- * \"channels\" are custom channels and do not include the image's
- * color components.
- *
- * Returns: (array length=num_channels):
- * The list of channels contained in the image.
- * The returned value must be freed with g_free().
- **/
-gint *
-_gimp_image_get_channels (gint32 image_ID,
- gint *num_channels)
-{
- GimpPDB *pdb = gimp_get_pdb ();
- GimpValueArray *args;
- GimpValueArray *return_vals;
- gint *channel_ids = NULL;
-
- args = gimp_value_array_new_from_types (NULL,
- GIMP_TYPE_IMAGE_ID, image_ID,
- G_TYPE_NONE);
-
- if (pdb)
- return_vals = gimp_pdb_run_procedure_array (pdb,
- "gimp-image-get-channels",
- args);
- else
- return_vals = gimp_run_procedure_array ("gimp-image-get-channels",
- args);
- gimp_value_array_unref (args);
-
- *num_channels = 0;
-
- if (g_value_get_enum (gimp_value_array_index (return_vals, 0)) == GIMP_PDB_SUCCESS)
- {
- *num_channels = g_value_get_int (gimp_value_array_index (return_vals, 1));
- channel_ids = gimp_value_dup_int32_array (gimp_value_array_index (return_vals, 2));
- }
-
- gimp_value_array_unref (return_vals);
-
- return channel_ids;
-}
-
-/**
- * gimp_image_get_vectors:
+ * _gimp_image_get_vectors:
* @image: The image.
* @num_vectors: (out): The number of vectors contained in the image.
*
@@ -1169,8 +1068,8 @@ _gimp_image_get_channels (gint32 image_ID,
* Since: 2.4
**/
gint *
-gimp_image_get_vectors (GimpImage *image,
- gint *num_vectors)
+_gimp_image_get_vectors (GimpImage *image,
+ gint *num_vectors)
{
GimpPDB *pdb = gimp_get_pdb ();
GimpValueArray *args;
@@ -1203,57 +1102,6 @@ gimp_image_get_vectors (GimpImage *image,
return vector_ids;
}
-/**
- * _gimp_image_get_vectors: (skip)
- * @image_ID: The image.
- * @num_vectors: (out): The number of vectors contained in the image.
- *
- * Returns the list of vectors contained in the specified image.
- *
- * This procedure returns the list of vectors contained in the
- * specified image.
- *
- * Returns: (array length=num_vectors):
- * The list of vectors contained in the image.
- * The returned value must be freed with g_free().
- *
- * Since: 2.4
- **/
-gint *
-_gimp_image_get_vectors (gint32 image_ID,
- gint *num_vectors)
-{
- GimpPDB *pdb = gimp_get_pdb ();
- GimpValueArray *args;
- GimpValueArray *return_vals;
- gint *vector_ids = NULL;
-
- args = gimp_value_array_new_from_types (NULL,
- GIMP_TYPE_IMAGE_ID, image_ID,
- G_TYPE_NONE);
-
- if (pdb)
- return_vals = gimp_pdb_run_procedure_array (pdb,
- "gimp-image-get-vectors",
- args);
- else
- return_vals = gimp_run_procedure_array ("gimp-image-get-vectors",
- args);
- gimp_value_array_unref (args);
-
- *num_vectors = 0;
-
- if (g_value_get_enum (gimp_value_array_index (return_vals, 0)) == GIMP_PDB_SUCCESS)
- {
- *num_vectors = g_value_get_int (gimp_value_array_index (return_vals, 1));
- vector_ids = gimp_value_dup_int32_array (gimp_value_array_index (return_vals, 2));
- }
-
- gimp_value_array_unref (return_vals);
-
- return vector_ids;
-}
-
/**
* gimp_image_get_active_drawable:
* @image: The image.
diff --git a/libgimp/gimpimage_pdb.h b/libgimp/gimpimage_pdb.h
index 29a450fc04..6c4eef584c 100644
--- a/libgimp/gimpimage_pdb.h
+++ b/libgimp/gimpimage_pdb.h
@@ -32,7 +32,7 @@ G_BEGIN_DECLS
/* For information look into the C source or the html documentation */
-gint* gimp_image_list (gint *num_images);
+G_GNUC_INTERNAL gint* _gimp_image_list (gint *num_images);
#ifndef GIMP_DEPRECATED_REPLACE_NEW_API
@@ -51,11 +51,11 @@ GimpPrecision gimp_image_get_precision (GimpImage
GimpLayerMode gimp_image_get_default_new_layer_mode (GimpImage *image);
gint gimp_image_width (GimpImage *image);
gint gimp_image_height (GimpImage *image);
-gint* gimp_image_get_layers (GimpImage *image,
+G_GNUC_INTERNAL gint* _gimp_image_get_layers (GimpImage *image,
gint *num_layers);
-gint* gimp_image_get_channels (GimpImage *image,
+G_GNUC_INTERNAL gint* _gimp_image_get_channels (GimpImage *image,
gint *num_channels);
-gint* gimp_image_get_vectors (GimpImage *image,
+G_GNUC_INTERNAL gint* _gimp_image_get_vectors (GimpImage *image,
gint *num_vectors);
GimpDrawable* gimp_image_get_active_drawable (GimpImage *image);
gboolean gimp_image_unset_active_channel (GimpImage *image);
@@ -207,9 +207,6 @@ gchar** gimp_image_get_parasite_list (GimpImage
#define gimp_image_get_default_new_layer_mode _gimp_image_get_default_new_layer_mode
#define gimp_image_width _gimp_image_width
#define gimp_image_height _gimp_image_height
-#define gimp_image_get_layers _gimp_image_get_layers
-#define gimp_image_get_channels _gimp_image_get_channels
-#define gimp_image_get_vectors _gimp_image_get_vectors
#define gimp_image_get_active_drawable _gimp_image_get_active_drawable
#define gimp_image_unset_active_channel _gimp_image_unset_active_channel
#define gimp_image_get_floating_sel _gimp_image_get_floating_sel
@@ -296,12 +293,6 @@ GimpPrecision _gimp_image_get_precision (gint32 im
GimpLayerMode _gimp_image_get_default_new_layer_mode (gint32 image_ID);
gint _gimp_image_width (gint32 image_ID);
gint _gimp_image_height (gint32 image_ID);
-gint* _gimp_image_get_layers (gint32 image_ID,
- gint *num_layers);
-gint* _gimp_image_get_channels (gint32 image_ID,
- gint *num_channels);
-gint* _gimp_image_get_vectors (gint32 image_ID,
- gint *num_vectors);
gint32 _gimp_image_get_active_drawable (gint32 image_ID);
gboolean _gimp_image_unset_active_channel (gint32 image_ID);
gint32 _gimp_image_get_floating_sel (gint32 image_ID);
diff --git a/libgimp/gimpimagecombobox.c b/libgimp/gimpimagecombobox.c
index 804f6cb5d7..5beefcc613 100644
--- a/libgimp/gimpimagecombobox.c
+++ b/libgimp/gimpimagecombobox.c
@@ -71,8 +71,7 @@ static void gimp_image_combo_box_finalize (GObject *object);
static void gimp_image_combo_box_populate (GimpImageComboBox *combo_box);
static void gimp_image_combo_box_model_add (GtkListStore *store,
- gint num_images,
- gint32 *images,
+ GList *images,
GimpImageConstraintFunc constraint,
GimpImageConstraintDeprecatedFunc
constraint_d,
@@ -181,20 +180,18 @@ gimp_image_combo_box_populate (GimpImageComboBox *combo_box)
{
GtkTreeModel *model;
GtkTreeIter iter;
- gint32 *images;
- gint num_images;
+ GList *images;
model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo_box));
- images = gimp_image_list (&num_images);
+ images = gimp_image_list ();
- gimp_image_combo_box_model_add (GTK_LIST_STORE (model),
- num_images, images,
+ gimp_image_combo_box_model_add (GTK_LIST_STORE (model), images,
combo_box->constraint,
combo_box->constraint_d,
combo_box->data);
- g_free (images);
+ g_list_free_full (images, g_object_unref);
if (gtk_tree_model_get_iter_first (model, &iter))
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo_box), &iter);
@@ -202,30 +199,29 @@ gimp_image_combo_box_populate (GimpImageComboBox *combo_box)
static void
gimp_image_combo_box_model_add (GtkListStore *store,
- gint num_images,
- gint32 *images,
+ GList *images,
GimpImageConstraintFunc constraint,
GimpImageConstraintDeprecatedFunc
constraint_d,
gpointer data)
{
GtkTreeIter iter;
- gint i;
+ GList *list;
- for (i = 0; i < num_images; i++)
+ for (list = images; list; list = list->next)
{
- GimpImage *image;
+ GimpImage *image = list->data;
+ gint32 image_id = gimp_image_get_id (image);
- image = gimp_image_new_by_id (images[i]);
if ((! constraint && ! constraint_d) ||
(constraint && (* constraint) (image, data)) ||
- (constraint_d && (* constraint_d) (images[i], data)))
+ (constraint_d && (* constraint_d) (image_id, data)))
{
gchar *image_name = gimp_image_get_name (image);
gchar *label;
GdkPixbuf *thumb;
- label = g_strdup_printf ("%s-%d", image_name, images[i]);
+ label = g_strdup_printf ("%s-%d", image_name, image_id);
g_free (image_name);
@@ -235,7 +231,7 @@ gimp_image_combo_box_model_add (GtkListStore *store,
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
- GIMP_INT_STORE_VALUE, images[i],
+ GIMP_INT_STORE_VALUE, image_id,
GIMP_INT_STORE_LABEL, label,
GIMP_INT_STORE_PIXBUF, thumb,
-1);
@@ -245,7 +241,6 @@ gimp_image_combo_box_model_add (GtkListStore *store,
g_free (label);
}
- g_object_unref (image);
}
}
diff --git a/libgimp/gimpitem.c b/libgimp/gimpitem.c
index f629dbbcba..87856d8c7a 100644
--- a/libgimp/gimpitem.c
+++ b/libgimp/gimpitem.c
@@ -163,3 +163,68 @@ gimp_item_new_by_id (gint32 item_id)
return item;
}
+
+/**
+ * gimp_item_get_children:
+ * @item: The item.
+ *
+ * Returns the item's list of children.
+ *
+ * This procedure returns the list of items which are children of the
+ * specified item. The order is topmost to bottommost.
+ *
+ * Returns: (element-type GimpItem) (transfer full):
+ * The item's list of children.
+ * The returned value must be freed with:
+ * g_list_free_full(list, g_object_unref);
+ *
+ * Since: 3.0
+ **/
+GList *
+gimp_item_get_children (GimpItem *item)
+{
+ GList *children = NULL;
+ gint *ids;
+ gint num_items;
+ gint i;
+
+ ids = _gimp_item_get_children (item, &num_items);
+
+ for (i = 0; i < num_items; i++)
+ children = g_list_prepend (children, gimp_item_new_by_id (ids[i]));
+
+ children = g_list_reverse (children);
+ g_free (ids);
+
+ return children;
+}
+
+/**
+ * gimp_item_get_children_deprecated: (skip)
+ * @item_id: The item.
+ * @num_children: (out): The item's number of children.
+ *
+ * Returns the item's list of children.
+ *
+ * This procedure returns the list of items which are children of the
+ * specified item. The order is topmost to bottommost.
+ *
+ * Returns: (array length=num_children) (element-type gint32) (transfer full):
+ * The item's list of children.
+ * The returned value must be freed with g_free().
+ *
+ * Since: 2.8
+ **/
+gint *
+gimp_item_get_children_deprecated (gint32 item_id,
+ gint *num_children)
+{
+ GimpItem *item;
+ gint *children;
+
+ item = gimp_item_new_by_id (item_id);
+ children = _gimp_item_get_children (item, num_children);
+ g_object_unref (item);
+
+ return children;
+}
diff --git a/libgimp/gimpitem.h b/libgimp/gimpitem.h
index 4880e72b09..a8085e31d6 100644
--- a/libgimp/gimpitem.h
+++ b/libgimp/gimpitem.h
@@ -69,6 +69,20 @@ GType gimp_item_get_type (void) G_GNUC_CONST;
gint32 gimp_item_get_id (GimpItem *item);
GimpItem * gimp_item_new_by_id (gint32 item_id);
+#ifndef GIMP_DEPRECATED_REPLACE_NEW_API
+
+GList * gimp_item_get_children (GimpItem *item);
+
+#else /* GIMP_DEPRECATED_REPLACE_NEW_API */
+
+#define gimp_item_get_children gimp_item_get_children_deprecated
+
+#endif /* GIMP_DEPRECATED_REPLACE_NEW_API */
+
+
+gint * gimp_item_get_children_deprecated (gint32 item_id,
+ gint *num_children);
+
G_END_DECLS
diff --git a/libgimp/gimpitem_pdb.c b/libgimp/gimpitem_pdb.c
index dfa4809d4f..c9d698bca2 100644
--- a/libgimp/gimpitem_pdb.c
+++ b/libgimp/gimpitem_pdb.c
@@ -1029,7 +1029,7 @@ _gimp_item_get_parent (gint32 item_ID)
}
/**
- * gimp_item_get_children:
+ * _gimp_item_get_children:
* @item: The item.
* @num_children: (out): The item's number of children.
*
@@ -1045,8 +1045,8 @@ _gimp_item_get_parent (gint32 item_ID)
* Since: 2.8
**/
gint *
-gimp_item_get_children (GimpItem *item,
- gint *num_children)
+_gimp_item_get_children (GimpItem *item,
+ gint *num_children)
{
GimpPDB *pdb = gimp_get_pdb ();
GimpValueArray *args;
@@ -1079,56 +1079,6 @@ gimp_item_get_children (GimpItem *item,
return child_ids;
}
-/**
- * _gimp_item_get_children: (skip)
- * @item_ID: The item.
- * @num_children: (out): The item's number of children.
- *
- * Returns the item's list of children.
- *
- * This procedure returns the list of items which are children of the
- * specified item. The order is topmost to bottommost.
- *
- * Returns: (array length=num_children): The item's list of children.
- * The returned value must be freed with g_free().
- *
- * Since: 2.8
- **/
-gint *
-_gimp_item_get_children (gint32 item_ID,
- gint *num_children)
-{
- GimpPDB *pdb = gimp_get_pdb ();
- GimpValueArray *args;
- GimpValueArray *return_vals;
- gint *child_ids = NULL;
-
- args = gimp_value_array_new_from_types (NULL,
- GIMP_TYPE_ITEM_ID, item_ID,
- G_TYPE_NONE);
-
- if (pdb)
- return_vals = gimp_pdb_run_procedure_array (pdb,
- "gimp-item-get-children",
- args);
- else
- return_vals = gimp_run_procedure_array ("gimp-item-get-children",
- args);
- gimp_value_array_unref (args);
-
- *num_children = 0;
-
- if (g_value_get_enum (gimp_value_array_index (return_vals, 0)) == GIMP_PDB_SUCCESS)
- {
- *num_children = g_value_get_int (gimp_value_array_index (return_vals, 1));
- child_ids = gimp_value_dup_int32_array (gimp_value_array_index (return_vals, 2));
- }
-
- gimp_value_array_unref (return_vals);
-
- return child_ids;
-}
-
/**
* gimp_item_get_expanded:
* @item: The item.
diff --git a/libgimp/gimpitem_pdb.h b/libgimp/gimpitem_pdb.h
index a76f797dda..4ed8a2ea98 100644
--- a/libgimp/gimpitem_pdb.h
+++ b/libgimp/gimpitem_pdb.h
@@ -36,52 +36,52 @@ G_BEGIN_DECLS
#ifndef GIMP_DEPRECATED_REPLACE_NEW_API
-gboolean gimp_item_is_valid (GimpItem *item);
-GimpImage* gimp_item_get_image (GimpItem *item);
-gboolean gimp_item_delete (GimpItem *item);
-gboolean gimp_item_is_drawable (GimpItem *item);
-gboolean gimp_item_is_layer (GimpItem *item);
-gboolean gimp_item_is_text_layer (GimpItem *item);
-gboolean gimp_item_is_channel (GimpItem *item);
-gboolean gimp_item_is_layer_mask (GimpItem *item);
-gboolean gimp_item_is_selection (GimpItem *item);
-gboolean gimp_item_is_vectors (GimpItem *item);
-gboolean gimp_item_is_group (GimpItem *item);
-GimpItem* gimp_item_get_parent (GimpItem *item);
-gint* gimp_item_get_children (GimpItem *item,
- gint *num_children);
-gboolean gimp_item_get_expanded (GimpItem *item);
-gboolean gimp_item_set_expanded (GimpItem *item,
- gboolean expanded);
-gchar* gimp_item_get_name (GimpItem *item);
-gboolean gimp_item_set_name (GimpItem *item,
- const gchar *name);
-gboolean gimp_item_get_visible (GimpItem *item);
-gboolean gimp_item_set_visible (GimpItem *item,
- gboolean visible);
-gboolean gimp_item_get_linked (GimpItem *item);
-gboolean gimp_item_set_linked (GimpItem *item,
- gboolean linked);
-gboolean gimp_item_get_lock_content (GimpItem *item);
-gboolean gimp_item_set_lock_content (GimpItem *item,
- gboolean lock_content);
-gboolean gimp_item_get_lock_position (GimpItem *item);
-gboolean gimp_item_set_lock_position (GimpItem *item,
- gboolean lock_position);
-GimpColorTag gimp_item_get_color_tag (GimpItem *item);
-gboolean gimp_item_set_color_tag (GimpItem *item,
- GimpColorTag color_tag);
-guint gimp_item_get_tattoo (GimpItem *item);
-gboolean gimp_item_set_tattoo (GimpItem *item,
- guint tattoo);
-gboolean gimp_item_attach_parasite (GimpItem *item,
- const GimpParasite *parasite);
-gboolean gimp_item_detach_parasite (GimpItem *item,
- const gchar *name);
-GimpParasite* gimp_item_get_parasite (GimpItem *item,
- const gchar *name);
-gchar** gimp_item_get_parasite_list (GimpItem *item,
- gint *num_parasites);
+gboolean gimp_item_is_valid (GimpItem *item);
+GimpImage* gimp_item_get_image (GimpItem *item);
+gboolean gimp_item_delete (GimpItem *item);
+gboolean gimp_item_is_drawable (GimpItem *item);
+gboolean gimp_item_is_layer (GimpItem *item);
+gboolean gimp_item_is_text_layer (GimpItem *item);
+gboolean gimp_item_is_channel (GimpItem *item);
+gboolean gimp_item_is_layer_mask (GimpItem *item);
+gboolean gimp_item_is_selection (GimpItem *item);
+gboolean gimp_item_is_vectors (GimpItem *item);
+gboolean gimp_item_is_group (GimpItem *item);
+GimpItem* gimp_item_get_parent (GimpItem *item);
+G_GNUC_INTERNAL gint* _gimp_item_get_children (GimpItem *item,
+ gint *num_children);
+gboolean gimp_item_get_expanded (GimpItem *item);
+gboolean gimp_item_set_expanded (GimpItem *item,
+ gboolean expanded);
+gchar* gimp_item_get_name (GimpItem *item);
+gboolean gimp_item_set_name (GimpItem *item,
+ const gchar *name);
+gboolean gimp_item_get_visible (GimpItem *item);
+gboolean gimp_item_set_visible (GimpItem *item,
+ gboolean visible);
+gboolean gimp_item_get_linked (GimpItem *item);
+gboolean gimp_item_set_linked (GimpItem *item,
+ gboolean linked);
+gboolean gimp_item_get_lock_content (GimpItem *item);
+gboolean gimp_item_set_lock_content (GimpItem *item,
+ gboolean lock_content);
+gboolean gimp_item_get_lock_position (GimpItem *item);
+gboolean gimp_item_set_lock_position (GimpItem *item,
+ gboolean lock_position);
+GimpColorTag gimp_item_get_color_tag (GimpItem *item);
+gboolean gimp_item_set_color_tag (GimpItem *item,
+ GimpColorTag color_tag);
+guint gimp_item_get_tattoo (GimpItem *item);
+gboolean gimp_item_set_tattoo (GimpItem *item,
+ guint tattoo);
+gboolean gimp_item_attach_parasite (GimpItem *item,
+ const GimpParasite *parasite);
+gboolean gimp_item_detach_parasite (GimpItem *item,
+ const gchar *name);
+GimpParasite* gimp_item_get_parasite (GimpItem *item,
+ const gchar *name);
+gchar** gimp_item_get_parasite_list (GimpItem *item,
+ gint *num_parasites);
#else /* GIMP_DEPRECATED_REPLACE_NEW_API */
@@ -97,7 +97,6 @@ gchar** gimp_item_get_parasite_list (GimpItem *item,
#define gimp_item_is_vectors _gimp_item_is_vectors
#define gimp_item_is_group _gimp_item_is_group
#define gimp_item_get_parent _gimp_item_get_parent
-#define gimp_item_get_children _gimp_item_get_children
#define gimp_item_get_expanded _gimp_item_get_expanded
#define gimp_item_set_expanded _gimp_item_set_expanded
#define gimp_item_get_name _gimp_item_get_name
@@ -138,8 +137,6 @@ gboolean _gimp_item_is_selection (gint32 item_ID);
gboolean _gimp_item_is_vectors (gint32 item_ID);
gboolean _gimp_item_is_group (gint32 item_ID);
gint32 _gimp_item_get_parent (gint32 item_ID);
-gint* _gimp_item_get_children (gint32 item_ID,
- gint *num_children);
gboolean _gimp_item_get_expanded (gint32 item_ID);
gboolean _gimp_item_set_expanded (gint32 item_ID,
gboolean expanded);
diff --git a/libgimp/gimpitemcombobox.c b/libgimp/gimpitemcombobox.c
index 758afba3ce..397a040d67 100644
--- a/libgimp/gimpitemcombobox.c
+++ b/libgimp/gimpitemcombobox.c
@@ -119,8 +119,7 @@ static void gimp_item_combo_box_populate (GimpIntComboBox *combo_bo
static void gimp_item_combo_box_model_add (GimpIntComboBox *combo_box,
GtkListStore *store,
GimpImage *image,
- gint num_items,
- gint32 *items,
+ GList *items,
gint tree_level);
static void gimp_item_combo_box_drag_data_received (GtkWidget *widget,
@@ -389,52 +388,46 @@ gimp_item_combo_box_populate (GimpIntComboBox *combo_box)
{
GtkTreeModel *model;
GtkTreeIter iter;
- gint32 *images;
- gint num_images;
- gint i;
+ GList *images;
+ GList *list;
model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo_box));
- images = gimp_image_list (&num_images);
+ images = gimp_image_list ();
- for (i = 0; i < num_images; i++)
+ for (list = images; list; list = list->next)
{
- GimpImage *image;
- gint32 *items;
- gint num_items;
-
- image = gimp_image_new_by_id (images[i]);
+ GimpImage *image = list->data;
+ GList *items;
if (GIMP_IS_DRAWABLE_COMBO_BOX (combo_box) ||
GIMP_IS_LAYER_COMBO_BOX (combo_box))
{
- items = gimp_image_get_layers (image, &num_items);
+ items = gimp_image_get_layers (image);
gimp_item_combo_box_model_add (combo_box, GTK_LIST_STORE (model),
- image, num_items, items, 0);
- g_free (items);
+ image, items, 0);
+ g_list_free_full (items, g_object_unref);
}
if (GIMP_IS_DRAWABLE_COMBO_BOX (combo_box) ||
GIMP_IS_CHANNEL_COMBO_BOX (combo_box))
{
- items = gimp_image_get_channels (image, &num_items);
+ items = gimp_image_get_channels (image);
gimp_item_combo_box_model_add (combo_box, GTK_LIST_STORE (model),
- image, num_items, items, 0);
- g_free (items);
+ image, items, 0);
+ g_list_free_full (items, g_object_unref);
}
if (GIMP_IS_VECTORS_COMBO_BOX (combo_box))
{
- items = gimp_image_get_vectors (image, &num_items);
+ items = gimp_image_get_vectors (image);
gimp_item_combo_box_model_add (combo_box, GTK_LIST_STORE (model),
- image, num_items, items, 0);
- g_free (items);
+ image, items, 0);
+ g_list_free_full (items, g_object_unref);
}
-
- g_object_unref (image);
}
- g_free (images);
+ g_list_free_full (images, g_object_unref);
if (gtk_tree_model_get_iter_first (model, &iter))
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo_box), &iter);
@@ -444,13 +437,12 @@ static void
gimp_item_combo_box_model_add (GimpIntComboBox *combo_box,
GtkListStore *store,
GimpImage *image,
- gint num_items,
- gint32 *items,
+ GList *items,
gint tree_level)
{
GimpItemComboBoxPrivate *private = GET_PRIVATE (combo_box);
GtkTreeIter iter;
- gint i;
+ GList *list;
gchar *indent;
if (tree_level > 0)
@@ -465,13 +457,14 @@ gimp_item_combo_box_model_add (GimpIntComboBox *combo_box,
indent = g_strdup ("");
}
- for (i = 0; i < num_items; i++)
+ for (list = items; list; list = list->next)
{
- GimpItem *item = gimp_item_new_by_id (items[i]);
+ GimpItem *item = list->data;
+ gint32 item_id = gimp_item_get_id (item);
if ((! private->constraint && ! private->constraint_d) ||
- (private->constraint && (* private->constraint) (image, items[i], private->data)) ||
- (private->constraint_d && (* private->constraint_d) (gimp_image_get_id (image), items[i],
private->data)))
+ (private->constraint && (* private->constraint) (image, item, private->data)) ||
+ (private->constraint_d && (* private->constraint_d) (gimp_image_get_id (image), item_id,
private->data)))
{
gchar *image_name = gimp_image_get_name (image);
gchar *item_name = gimp_item_get_name (item);
@@ -481,7 +474,7 @@ gimp_item_combo_box_model_add (GimpIntComboBox *combo_box,
label = g_strdup_printf ("%s%s-%d / %s-%d",
indent, image_name,
gimp_image_get_id (image),
- item_name, items[i]);
+ item_name, item_id);
g_free (item_name);
g_free (image_name);
@@ -495,7 +488,7 @@ gimp_item_combo_box_model_add (GimpIntComboBox *combo_box,
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
- GIMP_INT_STORE_VALUE, items[i],
+ GIMP_INT_STORE_VALUE, item_id,
GIMP_INT_STORE_LABEL, label,
GIMP_INT_STORE_PIXBUF, thumb,
-1);
@@ -508,18 +501,14 @@ gimp_item_combo_box_model_add (GimpIntComboBox *combo_box,
if (gimp_item_is_group (item))
{
- gint32 *children;
- gint n_children;
+ GList *children;
- children = gimp_item_get_children (item, &n_children);
+ children = gimp_item_get_children (item);
gimp_item_combo_box_model_add (combo_box, store,
- image,
- n_children, children,
+ image, children,
tree_level + 1);
- g_free (children);
+ g_list_free_full (children, g_object_unref);
}
-
- g_object_unref (item);
}
g_free (indent);
diff --git a/libgimp/gimpitemcombobox.h b/libgimp/gimpitemcombobox.h
index f5b92527b5..907ab5ccfd 100644
--- a/libgimp/gimpitemcombobox.h
+++ b/libgimp/gimpitemcombobox.h
@@ -58,7 +58,7 @@ GType gimp_vectors_combo_box_get_type (void) G_GNUC_CONST;
#ifndef GIMP_DEPRECATED_REPLACE_NEW_API
typedef gboolean (* GimpItemConstraintFunc) (GimpImage *image,
- gint32 item_id,
+ GimpItem *item,
gpointer data);
GtkWidget * gimp_drawable_combo_box_new (GimpItemConstraintFunc constraint,
diff --git a/pdb/groups/image.pdb b/pdb/groups/image.pdb
index 90bdbefe21..da70000175 100644
--- a/pdb/groups/image.pdb
+++ b/pdb/groups/image.pdb
@@ -53,6 +53,7 @@ This procedure returns the list of images currently open in GIMP.
HELP
&std_pdb_misc;
+ $lib_private = 1;
@outargs = (
{ name => 'image_ids', type => 'int32array',
@@ -246,6 +247,7 @@ The order of layers is from topmost to bottommost.
HELP
&std_pdb_misc;
+ $lib_private = 1;
@inargs = (
{ name => 'image', type => 'image',
@@ -291,6 +293,7 @@ include the image's color components.
HELP
&std_pdb_misc;
+ $lib_private = 1;
@inargs = (
{ name => 'image', type => 'image',
@@ -333,6 +336,7 @@ This procedure returns the list of vectors contained in the specified image.
HELP
&simon_pdb_misc('2005', '2.4');
+ $lib_private = 1;
@inargs = (
{ name => 'image', type => 'image',
diff --git a/pdb/groups/item.pdb b/pdb/groups/item.pdb
index 37f2e11e91..a19aa0051c 100644
--- a/pdb/groups/item.pdb
+++ b/pdb/groups/item.pdb
@@ -375,6 +375,7 @@ item. The order is topmost to bottommost.
HELP
&mitch_pdb_misc('2010', '2.8');
+ $lib_private = 1;
@inargs = (
{ name => 'item', type => 'item',
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]