[gimp] app: add check that items passed through the PDB belong to the right image



commit 4097d3c300d4027f78a9d66f3090b13fcd7f8e0d
Author: Michael Natterer <mitch gimp org>
Date:   Thu Jul 8 21:00:53 2010 +0200

    app: add check that items passed through the PDB belong to the right image
    
    Add "image" parameter to gimp_pdb_item_is_attached() and if non-NULL,
    make sure the item is attached to that image, and not only attached to
    any image. Change wrappers to pass an image where it makes sense.

 app/pdb/color-cmds.c                    |   32 +++++++++++++-------------
 app/pdb/drawable-cmds.c                 |   10 ++++----
 app/pdb/drawable-transform-cmds.c       |   32 +++++++++++++-------------
 app/pdb/edit-cmds.c                     |   29 +++++++++++++------------
 app/pdb/floating-sel-cmds.c             |    2 +-
 app/pdb/gimppdb-utils.c                 |   14 +++++++++++-
 app/pdb/gimppdb-utils.h                 |    1 +
 app/pdb/image-cmds.c                    |   10 ++++----
 app/pdb/layer-cmds.c                    |   10 ++++----
 app/pdb/paint-tools-cmds.c              |   34 ++++++++++++++--------------
 app/pdb/selection-cmds.c                |    2 +-
 app/pdb/text-tool-cmds.c                |    4 +-
 app/pdb/transform-tools-cmds.c          |   12 +++++-----
 tools/pdbgen/pdb/color.pdb              |   32 +++++++++++++-------------
 tools/pdbgen/pdb/drawable.pdb           |   10 ++++----
 tools/pdbgen/pdb/drawable_transform.pdb |   12 +++++-----
 tools/pdbgen/pdb/edit.pdb               |   29 +++++++++++++------------
 tools/pdbgen/pdb/floating_sel.pdb       |    2 +-
 tools/pdbgen/pdb/image.pdb              |   10 ++++----
 tools/pdbgen/pdb/layer.pdb              |   10 ++++----
 tools/pdbgen/pdb/paint_tools.pdb        |   36 +++++++++++++++---------------
 tools/pdbgen/pdb/selection.pdb          |    2 +-
 tools/pdbgen/pdb/text_tool.pdb          |    4 +-
 tools/pdbgen/pdb/transform_tools.pdb    |   12 +++++-----
 24 files changed, 183 insertions(+), 168 deletions(-)
---
diff --git a/app/pdb/color-cmds.c b/app/pdb/color-cmds.c
index bfa24a4..260848b 100644
--- a/app/pdb/color-cmds.c
+++ b/app/pdb/color-cmds.c
@@ -66,7 +66,7 @@ brightness_contrast_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
           ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
           gimp_drawable_is_indexed (drawable))
         success = FALSE;
@@ -107,7 +107,7 @@ levels_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
           ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
           gimp_drawable_is_indexed (drawable) ||
           (! gimp_drawable_has_alpha (drawable) &&
@@ -143,7 +143,7 @@ levels_auto_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
           ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
           gimp_drawable_is_indexed (drawable))
         success = FALSE;
@@ -171,7 +171,7 @@ levels_stretch_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
           ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
           gimp_drawable_is_indexed (drawable))
         success = FALSE;
@@ -201,7 +201,7 @@ posterize_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
           ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
           gimp_drawable_is_indexed (drawable))
         success = FALSE;
@@ -229,7 +229,7 @@ desaturate_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
           ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
           ! gimp_drawable_is_rgb (drawable))
         success = FALSE;
@@ -259,7 +259,7 @@ desaturate_full_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
           ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
           ! gimp_drawable_is_rgb (drawable))
         success = FALSE;
@@ -289,7 +289,7 @@ equalize_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
           ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
           gimp_drawable_is_indexed (drawable))
         success = FALSE;
@@ -317,7 +317,7 @@ invert_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
           ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
           gimp_drawable_is_indexed (drawable))
         success = FALSE;
@@ -351,7 +351,7 @@ curves_spline_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
           ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
           gimp_drawable_is_indexed (drawable) || (num_points & 1) ||
           (! gimp_drawable_has_alpha (drawable) &&
@@ -390,7 +390,7 @@ curves_explicit_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
           ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
           gimp_drawable_is_indexed (drawable) || (num_bytes != 256) ||
           (! gimp_drawable_has_alpha (drawable) &&
@@ -433,7 +433,7 @@ color_balance_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
           ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
           gimp_drawable_is_indexed (drawable))
         success = FALSE;
@@ -470,7 +470,7 @@ colorize_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
           ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
           ! gimp_drawable_is_rgb (drawable))
         success = FALSE;
@@ -512,7 +512,7 @@ histogram_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), FALSE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, FALSE, error) ||
           gimp_drawable_is_indexed (drawable) ||
           (! gimp_drawable_has_alpha (drawable) &&
            channel == GIMP_HISTOGRAM_ALPHA) ||
@@ -580,7 +580,7 @@ hue_saturation_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
           ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
           gimp_drawable_is_indexed (drawable))
         success = FALSE;
@@ -613,7 +613,7 @@ threshold_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
           ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
           gimp_drawable_is_indexed (drawable) ||
           (low_threshold > high_threshold))
diff --git a/app/pdb/drawable-cmds.c b/app/pdb/drawable-cmds.c
index 5a3b259..164d134 100644
--- a/app/pdb/drawable-cmds.c
+++ b/app/pdb/drawable-cmds.c
@@ -854,7 +854,7 @@ drawable_mask_bounds_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), FALSE, error))
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, FALSE, error))
         non_empty = gimp_drawable_mask_bounds (drawable, &x1, &y1, &x2, &y2);
       else
         success = FALSE;
@@ -896,7 +896,7 @@ drawable_mask_intersect_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), FALSE, error))
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, FALSE, error))
         non_empty = gimp_drawable_mask_intersect (drawable,
                                                   &x, &y, &width, &height);
       else
@@ -935,7 +935,7 @@ drawable_merge_shadow_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           const gchar *undo_desc = _("Plug-In");
@@ -1175,7 +1175,7 @@ drawable_offset_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         gimp_drawable_offset (drawable, context, wrap_around, fill_type,
                               offset_x, offset_y);
@@ -1368,7 +1368,7 @@ drawable_foreground_extract_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), FALSE, error))
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, FALSE, error))
         gimp_drawable_foreground_extract (drawable, mode, mask, progress);
       else
         success = FALSE;
diff --git a/app/pdb/drawable-transform-cmds.c b/app/pdb/drawable-transform-cmds.c
index efc3b97..fbd3048 100644
--- a/app/pdb/drawable-transform-cmds.c
+++ b/app/pdb/drawable-transform-cmds.c
@@ -68,7 +68,7 @@ drawable_transform_flip_simple_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -125,7 +125,7 @@ drawable_transform_flip_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -196,7 +196,7 @@ drawable_transform_flip_default_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -285,7 +285,7 @@ drawable_transform_perspective_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -366,7 +366,7 @@ drawable_transform_perspective_default_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -441,7 +441,7 @@ drawable_transform_rotate_simple_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), FALSE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, FALSE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -498,7 +498,7 @@ drawable_transform_rotate_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -573,7 +573,7 @@ drawable_transform_rotate_default_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -658,7 +658,7 @@ drawable_transform_scale_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) && x0 < x1 && y0 < y1);
+      success = (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) && x0 < x1 && y0 < y1);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -730,7 +730,7 @@ drawable_transform_scale_default_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) && x0 < x1 && y0 < y1);
+      success = (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) && x0 < x1 && y0 < y1);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -808,7 +808,7 @@ drawable_transform_shear_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -876,7 +876,7 @@ drawable_transform_shear_default_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -964,7 +964,7 @@ drawable_transform_2d_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -1043,7 +1043,7 @@ drawable_transform_2d_default_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -1136,7 +1136,7 @@ drawable_transform_matrix_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -1223,7 +1223,7 @@ drawable_transform_matrix_default_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
diff --git a/app/pdb/edit-cmds.c b/app/pdb/edit-cmds.c
index 6a26fe8..95746eb 100644
--- a/app/pdb/edit-cmds.c
+++ b/app/pdb/edit-cmds.c
@@ -64,7 +64,7 @@ edit_cut_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpImage *image    = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -110,7 +110,7 @@ edit_copy_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), FALSE, error))
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, FALSE, error))
         {
           GimpImage *image    = gimp_item_get_image (GIMP_ITEM (drawable));
           GError    *my_error = NULL;
@@ -197,7 +197,7 @@ edit_paste_invoker (GimpProcedure      *procedure,
   if (success)
     {
       if (gimp->global_buffer &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           floating_sel = gimp_edit_paste (gimp_item_get_image (GIMP_ITEM (drawable)),
@@ -272,7 +272,7 @@ edit_named_cut_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpImage *image    = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -325,7 +325,7 @@ edit_named_copy_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), FALSE, error))
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, FALSE, error))
         {
           GimpImage *image    = gimp_item_get_image (GIMP_ITEM (drawable));
           GError    *my_error = NULL;
@@ -428,7 +428,7 @@ edit_named_paste_invoker (GimpProcedure      *procedure,
       GimpBuffer *buffer = gimp_pdb_get_buffer (gimp, buffer_name, error);
 
       if (buffer &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           floating_sel = gimp_edit_paste (gimp_item_get_image (GIMP_ITEM (drawable)),
@@ -504,7 +504,7 @@ edit_clear_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -536,7 +536,7 @@ edit_fill_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -581,7 +581,7 @@ edit_bucket_fill_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -638,7 +638,7 @@ edit_bucket_fill_full_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -707,7 +707,7 @@ edit_blend_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      success = (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      success = (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
                  gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error));
 
       if (success && supersample)
@@ -760,7 +760,7 @@ edit_stroke_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpImage         *image   = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -801,9 +801,10 @@ edit_stroke_vectors_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (vectors), FALSE, error))
+          gimp_pdb_item_is_attached (GIMP_ITEM (vectors),
+                                     gimp_item_get_image (GIMP_ITEM (drawable)), FALSE, error))
         {
           GimpStrokeOptions *options = gimp_stroke_options_new (gimp, context, TRUE);
 
diff --git a/app/pdb/floating-sel-cmds.c b/app/pdb/floating-sel-cmds.c
index 32fe2e2..62e785a 100644
--- a/app/pdb/floating-sel-cmds.c
+++ b/app/pdb/floating-sel-cmds.c
@@ -152,7 +152,7 @@ floating_sel_attach_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         floating_sel_attach (layer, drawable);
       else
diff --git a/app/pdb/gimppdb-utils.c b/app/pdb/gimppdb-utils.c
index 523a000..0a1dac5 100644
--- a/app/pdb/gimppdb-utils.c
+++ b/app/pdb/gimppdb-utils.c
@@ -304,10 +304,12 @@ gimp_pdb_get_paint_info (Gimp         *gimp,
 
 gboolean
 gimp_pdb_item_is_attached (GimpItem  *item,
+                           GimpImage *image,
                            gboolean   writable,
                            GError   **error)
 {
   g_return_val_if_fail (GIMP_IS_ITEM (item), FALSE);
+  g_return_val_if_fail (image == NULL || GIMP_IS_IMAGE (image), FALSE);
   g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
   if (! gimp_item_is_attached (item))
@@ -320,6 +322,16 @@ gimp_pdb_item_is_attached (GimpItem  *item,
       return FALSE;
     }
 
+  if (image && image != gimp_item_get_image (item))
+    {
+      g_set_error (error, GIMP_PDB_ERROR, GIMP_PDB_INVALID_ARGUMENT,
+                   _("Item '%s' (%d) can not be used because it is "
+                     "attached to another image"),
+                   gimp_object_get_name (item),
+                   gimp_item_get_ID (item));
+      return FALSE;
+    }
+
   if (writable)
     return gimp_pdb_item_is_writable (item, error);
 
@@ -414,7 +426,7 @@ gimp_pdb_layer_is_text_layer (GimpLayer  *layer,
       return FALSE;
     }
 
-  return gimp_pdb_item_is_attached (GIMP_ITEM (layer), writable, error);
+  return gimp_pdb_item_is_attached (GIMP_ITEM (layer), NULL, writable, error);
 }
 
 static const gchar *
diff --git a/app/pdb/gimppdb-utils.h b/app/pdb/gimppdb-utils.h
index 6e9a6ca..9036306 100644
--- a/app/pdb/gimppdb-utils.h
+++ b/app/pdb/gimppdb-utils.h
@@ -49,6 +49,7 @@ GimpPaintInfo * gimp_pdb_get_paint_info         (Gimp               *gimp,
                                                  GError            **error);
 
 gboolean        gimp_pdb_item_is_attached       (GimpItem           *item,
+                                                 GimpImage          *image,
                                                  gboolean            writable,
                                                  GError            **error);
 gboolean        gimp_pdb_item_is_floating       (GimpItem           *item,
diff --git a/app/pdb/image-cmds.c b/app/pdb/image-cmds.c
index 74816e6..c52e260 100644
--- a/app/pdb/image-cmds.c
+++ b/app/pdb/image-cmds.c
@@ -946,7 +946,7 @@ image_remove_layer_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), FALSE, error))
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), image, FALSE, error))
         gimp_image_remove_layer (image, layer, TRUE, NULL);
       else
         success = FALSE;
@@ -1140,7 +1140,7 @@ image_remove_channel_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (channel), FALSE, error))
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (channel), image, FALSE, error))
         gimp_image_remove_channel (image, channel, TRUE, NULL);
       else
         success = FALSE;
@@ -1286,7 +1286,7 @@ image_remove_vectors_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (vectors), FALSE, error))
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (vectors), image, FALSE, error))
         gimp_image_remove_vectors (image, vectors, TRUE, NULL);
       else
         success = FALSE;
@@ -1515,7 +1515,7 @@ image_merge_down_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (merge_layer), FALSE, error))
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (merge_layer), image, FALSE, error))
         {
           layer = gimp_image_merge_down (image, merge_layer, context, merge_type,
                                          error);
@@ -1585,7 +1585,7 @@ image_remove_layer_mask_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), mode == GIMP_MASK_APPLY, error) &&
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), image, mode == GIMP_MASK_APPLY, error) &&
           gimp_layer_get_mask (layer))
         gimp_layer_apply_mask (layer, mode, TRUE);
       else
diff --git a/app/pdb/layer-cmds.c b/app/pdb/layer-cmds.c
index 3d692f2..8e21821 100644
--- a/app/pdb/layer-cmds.c
+++ b/app/pdb/layer-cmds.c
@@ -292,7 +292,7 @@ layer_scale_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), TRUE, error))
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), NULL, TRUE, error))
         {
           if (progress)
             gimp_progress_start (progress, _("Scaling"), FALSE);
@@ -337,7 +337,7 @@ layer_scale_full_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), TRUE, error))
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), NULL, TRUE, error))
         {
           if (progress)
             gimp_progress_start (progress, _("Scaling"), FALSE);
@@ -382,7 +382,7 @@ layer_resize_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), TRUE, error))
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), NULL, TRUE, error))
         gimp_item_resize (GIMP_ITEM (layer), context,
                           new_width, new_height, offx, offy);
       else
@@ -408,7 +408,7 @@ layer_resize_to_image_size_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), TRUE, error))
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), NULL, TRUE, error))
         gimp_layer_resize_to_image (layer, context);
       else
         success = FALSE;
@@ -648,7 +648,7 @@ layer_remove_mask_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), mode == GIMP_MASK_APPLY, error) &&
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), NULL, mode == GIMP_MASK_APPLY, error) &&
           gimp_layer_get_mask (layer))
         gimp_layer_apply_mask (layer, mode, TRUE);
       else
diff --git a/app/pdb/paint-tools-cmds.c b/app/pdb/paint-tools-cmds.c
index 5e740e4..ba594a4 100644
--- a/app/pdb/paint-tools-cmds.c
+++ b/app/pdb/paint-tools-cmds.c
@@ -117,7 +117,7 @@ airbrush_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-airbrush", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -161,7 +161,7 @@ airbrush_default_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-airbrush", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -209,7 +209,7 @@ clone_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-clone", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -256,7 +256,7 @@ clone_default_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-clone", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -300,7 +300,7 @@ convolve_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-convolve", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -345,7 +345,7 @@ convolve_default_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-convolve", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -391,7 +391,7 @@ dodgeburn_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-dodge-burn", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -437,7 +437,7 @@ dodgeburn_default_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-dodge-burn", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -481,7 +481,7 @@ eraser_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-eraser", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -526,7 +526,7 @@ eraser_default_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-eraser", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -572,7 +572,7 @@ heal_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-heal", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -615,7 +615,7 @@ heal_default_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-heal", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -661,7 +661,7 @@ paintbrush_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-paintbrush", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -709,7 +709,7 @@ paintbrush_default_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-paintbrush", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -749,7 +749,7 @@ pencil_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-pencil", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -791,7 +791,7 @@ smudge_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-smudge", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -835,7 +835,7 @@ smudge_default_invoker (GimpProcedure      *procedure,
       GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-smudge", error);
 
       if (info &&
-          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+          gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpPaintOptions *options = gimp_paint_options_new (info);
diff --git a/app/pdb/selection-cmds.c b/app/pdb/selection-cmds.c
index 3ecb43f..1ae44b8 100644
--- a/app/pdb/selection-cmds.c
+++ b/app/pdb/selection-cmds.c
@@ -190,7 +190,7 @@ selection_float_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
           gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
         {
           GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
diff --git a/app/pdb/text-tool-cmds.c b/app/pdb/text-tool-cmds.c
index 2437192..9807280 100644
--- a/app/pdb/text-tool-cmds.c
+++ b/app/pdb/text-tool-cmds.c
@@ -73,7 +73,7 @@ text_fontname_invoker (GimpProcedure      *procedure,
   if (success)
     {
       if (drawable &&
-          (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+          (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), image, TRUE, error) ||
            ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error)))
         success = FALSE;
 
@@ -197,7 +197,7 @@ text_invoker (GimpProcedure      *procedure,
   if (success)
     {
       if (drawable &&
-          (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+          (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), image, TRUE, error) ||
            ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error)))
         success = FALSE;
 
diff --git a/app/pdb/transform-tools-cmds.c b/app/pdb/transform-tools-cmds.c
index ee503b3..2af77e6 100644
--- a/app/pdb/transform-tools-cmds.c
+++ b/app/pdb/transform-tools-cmds.c
@@ -62,7 +62,7 @@ flip_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -117,7 +117,7 @@ perspective_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -187,7 +187,7 @@ rotate_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -262,7 +262,7 @@ scale_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      success = (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
                  x0 < x1 && y0 < y1);
 
       if (success &&
@@ -334,7 +334,7 @@ shear_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -415,7 +415,7 @@ transform_2d_invoker (GimpProcedure      *procedure,
     {
       gint x, y, width, height;
 
-      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+      success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
       if (success &&
           gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
diff --git a/tools/pdbgen/pdb/color.pdb b/tools/pdbgen/pdb/color.pdb
index aa06683..788ec25 100644
--- a/tools/pdbgen/pdb/color.pdb
+++ b/tools/pdbgen/pdb/color.pdb
@@ -41,7 +41,7 @@ HELP
         headers => [ qw("core/gimpdrawable-brightness-contrast.h") ],
 	code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
       ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
       gimp_drawable_is_indexed (drawable))
     success = FALSE;
@@ -94,7 +94,7 @@ HELP
 	headers => [ qw("core/gimpdrawable-levels.h") ],
 	code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
       ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
       gimp_drawable_is_indexed (drawable) ||
       (! gimp_drawable_has_alpha (drawable) &&
@@ -137,7 +137,7 @@ HELP
         headers => [ qw("core/gimpdrawable-levels.h") ],
         code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
       ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
       gimp_drawable_is_indexed (drawable))
     success = FALSE;
@@ -161,7 +161,7 @@ sub levels_auto {
         headers => [ qw("core/gimpdrawable-levels.h") ],
         code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
       ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
       gimp_drawable_is_indexed (drawable))
     success = FALSE;
@@ -195,7 +195,7 @@ HELP
         headers => [ qw("core/gimpdrawable-posterize.h") ],
 	code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
       ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
       gimp_drawable_is_indexed (drawable))
     success = FALSE;
@@ -226,7 +226,7 @@ HELP
 	headers => [ qw("core/gimpdrawable-desaturate.h") ],
 	code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
       ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
       ! gimp_drawable_is_rgb (drawable))
     success = FALSE;
@@ -264,7 +264,7 @@ HELP
 	headers => [ qw("core/gimpdrawable-desaturate.h") ],
 	code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
       ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
       ! gimp_drawable_is_rgb (drawable))
     success = FALSE;
@@ -302,7 +302,7 @@ HELP
 	headers => [ qw("core/gimpdrawable-equalize.h") ],
 	code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
       ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
       gimp_drawable_is_indexed (drawable))
     success = FALSE;
@@ -334,7 +334,7 @@ HELP
 	headers => [ qw("core/gimpdrawable-invert.h") ],
 	code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
       ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
       gimp_drawable_is_indexed (drawable))
     success = FALSE;
@@ -377,7 +377,7 @@ HELP
 	headers => [ qw("core/gimpdrawable-curves.h") ],
 	code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
       ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
       gimp_drawable_is_indexed (drawable) || (num_points & 1) ||
       (! gimp_drawable_has_alpha (drawable) &&
@@ -424,7 +424,7 @@ HELP
 	headers => [ qw("core/gimpdrawable-curves.h") ],
 	code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
       ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
       gimp_drawable_is_indexed (drawable) || (num_bytes != 256) ||
       (! gimp_drawable_has_alpha (drawable) &&
@@ -476,7 +476,7 @@ HELP
 	headers => [ qw("core/gimpdrawable-color-balance.h") ],
 	code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
       ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
       gimp_drawable_is_indexed (drawable))
     success = FALSE;
@@ -517,7 +517,7 @@ HELP
 	headers => [ qw("core/gimpdrawable-colorize.h") ],
 	code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
       ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
       ! gimp_drawable_is_rgb (drawable))
     success = FALSE;
@@ -582,7 +582,7 @@ HELP
                         "core/gimpdrawable-histogram.h") ],
 	code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), FALSE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, FALSE, error) ||
       gimp_drawable_is_indexed (drawable) ||
       (! gimp_drawable_has_alpha (drawable) &&
        channel == GIMP_HISTOGRAM_ALPHA) ||
@@ -645,7 +645,7 @@ HELP
 	headers => [ qw("core/gimpdrawable-hue-saturation.h") ],
 	code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
       ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
       gimp_drawable_is_indexed (drawable))
     success = FALSE;
@@ -683,7 +683,7 @@ HELP
 	headers => [ qw("core/gimpdrawable-threshold.h") ],
 	code => <<'CODE'
 {
-  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+  if (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) ||
       ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) ||
       gimp_drawable_is_indexed (drawable) ||
       (low_threshold > high_threshold))
diff --git a/tools/pdbgen/pdb/drawable.pdb b/tools/pdbgen/pdb/drawable.pdb
index 3432cba..38f5d7c 100644
--- a/tools/pdbgen/pdb/drawable.pdb
+++ b/tools/pdbgen/pdb/drawable.pdb
@@ -71,7 +71,7 @@ HELP
                         "plug-in/gimppluginmanager.h") ],
 	code    => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       const gchar *undo_desc = _("Plug-In");
@@ -236,7 +236,7 @@ HELP
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), FALSE, error))
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, FALSE, error))
     non_empty = gimp_drawable_mask_bounds (drawable, &x1, &y1, &x2, &y2);
   else
     success = FALSE;
@@ -283,7 +283,7 @@ HELP
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), FALSE, error))
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, FALSE, error))
     non_empty = gimp_drawable_mask_intersect (drawable,
                                               &x, &y, &width, &height);
   else
@@ -1312,7 +1312,7 @@ HELP
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     gimp_drawable_offset (drawable, context, wrap_around, fill_type,
                           offset_x, offset_y);
@@ -1381,7 +1381,7 @@ HELP
 	headers => [ qw("core/gimpdrawable-foreground-extract.h") ],
         code    => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), FALSE, error))
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, FALSE, error))
     gimp_drawable_foreground_extract (drawable, mode, mask, progress);
   else
     success = FALSE;
diff --git a/tools/pdbgen/pdb/drawable_transform.pdb b/tools/pdbgen/pdb/drawable_transform.pdb
index 655d60d..e1d905e 100644
--- a/tools/pdbgen/pdb/drawable_transform.pdb
+++ b/tools/pdbgen/pdb/drawable_transform.pdb
@@ -24,10 +24,10 @@
 
 sub transform_invoke {
     my ($progress_text, $assemble_matrix, $check) = @_;
-    my $success_check = 'gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);';
+    my $success_check = 'gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);';
 
     if ($check) {
-        $success_check = "(gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) && " . $check . ");";
+        $success_check = "(gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) && " . $check . ");";
     }
 
     %invoke = (
@@ -70,10 +70,10 @@ CODE
 
 sub transform_default_invoke {
     my ($progress_text, $assemble_matrix, $check) = @_;
-    my $success_check = 'gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);';
+    my $success_check = 'gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);';
 
     if ($check) {
-        $success_check = "(gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) && " . $check . ");";
+        $success_check = "(gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) && " . $check . ");";
     }
 
     %invoke = (
@@ -165,7 +165,7 @@ HELP
 {
   gint x, y, width, height;
 
-  success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+  success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
   if (success &&
       gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -462,7 +462,7 @@ HELP
 {
   gint x, y, width, height;
 
-  success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), FALSE, error);
+  success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, FALSE, error);
 
   if (success &&
       gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
diff --git a/tools/pdbgen/pdb/edit.pdb b/tools/pdbgen/pdb/edit.pdb
index 421f74c..1bfd0f3 100644
--- a/tools/pdbgen/pdb/edit.pdb
+++ b/tools/pdbgen/pdb/edit.pdb
@@ -46,7 +46,7 @@ HELP
     %invoke = (
 	code => <<CODE
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpImage *image    = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -99,7 +99,7 @@ HELP
     %invoke = (
 	code => <<CODE
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), FALSE, error))
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, FALSE, error))
     {
       GimpImage *image    = gimp_item_get_image (GIMP_ITEM (drawable));
       GError    *my_error = NULL;
@@ -201,7 +201,7 @@ HELP
 	code => <<CODE
 {
   if (gimp->global_buffer &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       floating_sel = gimp_edit_paste (gimp_item_get_image (GIMP_ITEM (drawable)),
@@ -279,7 +279,7 @@ HELP
     %invoke = (
 	code => <<CODE
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpImage *image    = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -333,7 +333,7 @@ HELP
     %invoke = (
 	code => <<CODE
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), FALSE, error))
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, FALSE, error))
     {
       GimpImage *image    = gimp_item_get_image (GIMP_ITEM (drawable));
       GError    *my_error = NULL;
@@ -439,7 +439,7 @@ HELP
   GimpBuffer *buffer = gimp_pdb_get_buffer (gimp, buffer_name, error);
 
   if (buffer &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       floating_sel = gimp_edit_paste (gimp_item_get_image (GIMP_ITEM (drawable)),
@@ -515,7 +515,7 @@ HELP
     %invoke = (
 	code => <<CODE
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -556,7 +556,7 @@ HELP
     %invoke = (
 	code => <<CODE
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -625,7 +625,7 @@ HELP
 	                 "core/gimpchannel.h") ],
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -710,7 +710,7 @@ HELP
 	                 "core/gimpchannel.h") ],
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -788,7 +788,7 @@ HELP
         headers => [ qw("core/gimpdrawable-blend.h") ],
 	code => <<'CODE'
 {
-  success = (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+  success = (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
              gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error));
 
   if (success && supersample)
@@ -845,7 +845,7 @@ HELP
 	headers => [ qw("core/gimpstrokeoptions.h") ],
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpImage         *image   = gimp_item_get_image (GIMP_ITEM (drawable));
@@ -889,9 +889,10 @@ HELP
 	headers => [ qw("core/gimpstrokeoptions.h") ],
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error) &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (vectors), FALSE, error))
+      gimp_pdb_item_is_attached (GIMP_ITEM (vectors),
+                                 gimp_item_get_image (GIMP_ITEM (drawable)), FALSE, error))
     {
       GimpStrokeOptions *options = gimp_stroke_options_new (gimp, context, TRUE);
 
diff --git a/tools/pdbgen/pdb/floating_sel.pdb b/tools/pdbgen/pdb/floating_sel.pdb
index f2030d2..30af403 100644
--- a/tools/pdbgen/pdb/floating_sel.pdb
+++ b/tools/pdbgen/pdb/floating_sel.pdb
@@ -150,7 +150,7 @@ HELP
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     floating_sel_attach (layer, drawable);
   else
diff --git a/tools/pdbgen/pdb/image.pdb b/tools/pdbgen/pdb/image.pdb
index ca562a9..a57fdb0 100644
--- a/tools/pdbgen/pdb/image.pdb
+++ b/tools/pdbgen/pdb/image.pdb
@@ -944,7 +944,7 @@ HELP
 	headers => [ qw("core/gimpimage-merge.h") ],
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (merge_layer), FALSE, error))
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (merge_layer), image, FALSE, error))
     {
       layer = gimp_image_merge_down (image, merge_layer, context, merge_type,
                                      error);
@@ -1056,7 +1056,7 @@ HELP
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), FALSE, error))
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), image, FALSE, error))
     gimp_image_remove_layer (image, layer, TRUE, NULL);
   else
     success = FALSE;
@@ -1105,7 +1105,7 @@ sub image_remove_layer_mask {
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), mode == GIMP_MASK_APPLY, error) &&
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), image, mode == GIMP_MASK_APPLY, error) &&
       gimp_layer_get_mask (layer))
     gimp_layer_apply_mask (layer, mode, TRUE);
   else
@@ -1265,7 +1265,7 @@ HELP
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (channel), FALSE, error))
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (channel), image, FALSE, error))
     gimp_image_remove_channel (image, channel, TRUE, NULL);
   else
     success = FALSE;
@@ -1330,7 +1330,7 @@ HELP
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (vectors), FALSE, error))
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (vectors), image, FALSE, error))
     gimp_image_remove_vectors (image, vectors, TRUE, NULL);
   else
     success = FALSE;
diff --git a/tools/pdbgen/pdb/layer.pdb b/tools/pdbgen/pdb/layer.pdb
index 4de7817..6d9b172 100644
--- a/tools/pdbgen/pdb/layer.pdb
+++ b/tools/pdbgen/pdb/layer.pdb
@@ -309,7 +309,7 @@ HELP
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), mode == GIMP_MASK_APPLY, error) &&
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), NULL, mode == GIMP_MASK_APPLY, error) &&
       gimp_layer_get_mask (layer))
     gimp_layer_apply_mask (layer, mode, TRUE);
   else
@@ -346,7 +346,7 @@ HELP
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), TRUE, error))
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), NULL, TRUE, error))
     {
       if (progress)
         gimp_progress_start (progress, _("Scaling"), FALSE);
@@ -397,7 +397,7 @@ HELP
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), TRUE, error))
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), NULL, TRUE, error))
     {
       if (progress)
         gimp_progress_start (progress, _("Scaling"), FALSE);
@@ -448,7 +448,7 @@ HELP
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), TRUE, error))
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), NULL, TRUE, error))
     gimp_item_resize (GIMP_ITEM (layer), context,
                       new_width, new_height, offx, offy);
   else
@@ -476,7 +476,7 @@ HELP
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), TRUE, error))
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), NULL, TRUE, error))
     gimp_layer_resize_to_image (layer, context);
   else
     success = FALSE;
diff --git a/tools/pdbgen/pdb/paint_tools.pdb b/tools/pdbgen/pdb/paint_tools.pdb
index e5300ee..486ad17 100644
--- a/tools/pdbgen/pdb/paint_tools.pdb
+++ b/tools/pdbgen/pdb/paint_tools.pdb
@@ -55,7 +55,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-airbrush", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -102,7 +102,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-airbrush", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -160,7 +160,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-clone", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -211,7 +211,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-clone", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -254,7 +254,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-convolve", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -299,7 +299,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-convolve", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -345,7 +345,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-eraser", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -391,7 +391,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-eraser", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -442,7 +442,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-eraser", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -498,7 +498,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-heal", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -545,7 +545,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-heal", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -599,7 +599,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-paintbrush", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -658,7 +658,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-paintbrush", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -700,7 +700,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-pencil", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -741,7 +741,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-smudge", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -788,7 +788,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-smudge", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -834,7 +834,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-dodge-burn", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
@@ -883,7 +883,7 @@ HELP
   GimpPaintInfo *info = gimp_pdb_get_paint_info (gimp, "gimp-dodge-burn", error);
 
   if (info &&
-      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+      gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpPaintOptions *options = gimp_paint_options_new (info);
diff --git a/tools/pdbgen/pdb/selection.pdb b/tools/pdbgen/pdb/selection.pdb
index 565943e..c08e014 100644
--- a/tools/pdbgen/pdb/selection.pdb
+++ b/tools/pdbgen/pdb/selection.pdb
@@ -183,7 +183,7 @@ HELP
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
       gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error))
     {
       GimpImage *image = gimp_item_get_image (GIMP_ITEM (drawable));
diff --git a/tools/pdbgen/pdb/text_tool.pdb b/tools/pdbgen/pdb/text_tool.pdb
index 9ce194d..d4f6be5 100644
--- a/tools/pdbgen/pdb/text_tool.pdb
+++ b/tools/pdbgen/pdb/text_tool.pdb
@@ -73,7 +73,7 @@ HELP
         code => <<'CODE'
 {
   if (drawable &&
-      (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), image, TRUE, error) ||
        ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error)))
     success = FALSE;
 
@@ -195,7 +195,7 @@ sub text {
         code => <<'CODE'
 {
   if (drawable &&
-      (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) ||
+      (! gimp_pdb_item_is_attached (GIMP_ITEM (drawable), image, TRUE, error) ||
        ! gimp_pdb_item_is_not_group (GIMP_ITEM (drawable), error)))
     success = FALSE;
 
diff --git a/tools/pdbgen/pdb/transform_tools.pdb b/tools/pdbgen/pdb/transform_tools.pdb
index c3f827d..d010229 100644
--- a/tools/pdbgen/pdb/transform_tools.pdb
+++ b/tools/pdbgen/pdb/transform_tools.pdb
@@ -37,7 +37,7 @@ sub flip {
 {
   gint x, y, width, height;
 
-  success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+  success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
   if (success &&
       gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -94,7 +94,7 @@ sub perspective {
 {
   gint x, y, width, height;
 
-  success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+  success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
   if (success &&
       gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -158,7 +158,7 @@ sub rotate {
 {
   gint x, y, width, height;
 
-  success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+  success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
   if (success &&
       gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -231,7 +231,7 @@ sub scale {
 {
   gint x, y, width, height;
 
-  success = (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error) &&
+  success = (gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error) &&
              x0 < x1 && y0 < y1);
 
   if (success &&
@@ -298,7 +298,7 @@ sub shear {
 {
   gint x, y, width, height;
 
-  success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+  success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
   if (success &&
       gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))
@@ -373,7 +373,7 @@ sub transform_2d {
 {
   gint x, y, width, height;
 
-  success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), TRUE, error);
+  success = gimp_pdb_item_is_attached (GIMP_ITEM (drawable), NULL, TRUE, error);
 
   if (success &&
       gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height))



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]