gimp r26947 - in trunk: . app/pdb tools/pdbgen/pdb



Author: mitch
Date: Mon Sep 15 20:45:42 2008
New Revision: 26947
URL: http://svn.gnome.org/viewvc/gimp?rev=26947&view=rev

Log:
2008-09-15  Michael Natterer  <mitch gimp org>

	Bug 552413 â Script triggers Gimp-Core-CRITICAL

	* tools/pdbgen/pdb/image.pdb
	* tools/pdbgen/pdb/layer.pdb: add some more checks that produce
	proper PDB error messages when adding and removing layer masks
	instead of having the code run into assertions in the called core
	functions. Also add some more checks when removing layers,
	channels or vectors.

	* app/pdb/image-cmds.c
	* app/pdb/layer-cmds.c: regenerated.



Modified:
   trunk/ChangeLog
   trunk/app/pdb/image-cmds.c
   trunk/app/pdb/layer-cmds.c
   trunk/tools/pdbgen/pdb/image.pdb
   trunk/tools/pdbgen/pdb/layer.pdb

Modified: trunk/app/pdb/image-cmds.c
==============================================================================
--- trunk/app/pdb/image-cmds.c	(original)
+++ trunk/app/pdb/image-cmds.c	Mon Sep 15 20:45:42 2008
@@ -897,7 +897,10 @@
 
   if (success)
     {
-      gimp_image_remove_layer (image, layer);
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), error))
+        gimp_image_remove_layer (image, layer);
+      else
+        success = FALSE;
     }
 
   return gimp_procedure_get_return_values (procedure, success,
@@ -1084,7 +1087,10 @@
 
   if (success)
     {
-      gimp_image_remove_channel (image, channel);
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (channel), error))
+        gimp_image_remove_channel (image, channel);
+      else
+        success = FALSE;
     }
 
   return gimp_procedure_get_return_values (procedure, success,
@@ -1223,7 +1229,10 @@
 
   if (success)
     {
-      gimp_image_remove_vectors (image, vectors);
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (vectors), error))
+        gimp_image_remove_vectors (image, vectors);
+      else
+        success = FALSE;
     }
 
   return gimp_procedure_get_return_values (procedure, success,
@@ -1481,7 +1490,10 @@
 
   if (success)
     {
-      if (! gimp_layer_add_mask (layer, mask, TRUE))
+      if (gimp_pdb_item_is_floating (GIMP_ITEM (mask), error) &&
+          ! gimp_layer_get_mask (layer))
+        success = (gimp_layer_add_mask (layer, mask, TRUE) == mask);
+      else
         success = FALSE;
     }
 
@@ -1508,7 +1520,11 @@
 
   if (success)
     {
-      gimp_layer_apply_mask (layer, mode, TRUE);
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), error) &&
+          gimp_layer_get_mask (layer))
+        gimp_layer_apply_mask (layer, mode, TRUE);
+      else
+        success = FALSE;
     }
 
   return gimp_procedure_get_return_values (procedure, success,

Modified: trunk/app/pdb/layer-cmds.c
==============================================================================
--- trunk/app/pdb/layer-cmds.c	(original)
+++ trunk/app/pdb/layer-cmds.c	Mon Sep 15 20:45:42 2008
@@ -550,8 +550,9 @@
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), error))
-        gimp_layer_add_mask (layer, mask, TRUE);
+      if (gimp_pdb_item_is_floating (GIMP_ITEM (mask), error) &&
+          ! gimp_layer_get_mask (layer))
+        success = (gimp_layer_add_mask (layer, mask, TRUE) == mask);
       else
         success = FALSE;
     }
@@ -577,7 +578,8 @@
 
   if (success)
     {
-      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), error))
+      if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), error) &&
+          gimp_layer_get_mask (layer))
         gimp_layer_apply_mask (layer, mode, TRUE);
       else
         success = FALSE;

Modified: trunk/tools/pdbgen/pdb/image.pdb
==============================================================================
--- trunk/tools/pdbgen/pdb/image.pdb	(original)
+++ trunk/tools/pdbgen/pdb/image.pdb	Mon Sep 15 20:45:42 2008
@@ -991,7 +991,10 @@
     %invoke = (
 	code => <<'CODE'
 {
-  gimp_image_remove_layer (image, layer);
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), error))
+    gimp_image_remove_layer (image, layer);
+  else
+    success = FALSE;
 }
 CODE
     );
@@ -1012,7 +1015,10 @@
     %invoke = (
 	code => <<'CODE'
 {
-  if (! gimp_layer_add_mask (layer, mask, TRUE))
+  if (gimp_pdb_item_is_floating (GIMP_ITEM (mask), error) &&
+      ! gimp_layer_get_mask (layer))
+    success = (gimp_layer_add_mask (layer, mask, TRUE) == mask);
+  else
     success = FALSE;
 }
 CODE
@@ -1034,7 +1040,11 @@
     %invoke = (
 	code => <<'CODE'
 {
-  gimp_layer_apply_mask (layer, mode, TRUE);
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), error) &&
+      gimp_layer_get_mask (layer))
+    gimp_layer_apply_mask (layer, mode, TRUE);
+  else
+    success = FALSE;
 }
 CODE
     );
@@ -1185,7 +1195,10 @@
     %invoke = (
 	code => <<'CODE'
 {
-  gimp_image_remove_channel (image, channel);
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (channel), error))
+    gimp_image_remove_channel (image, channel);
+  else
+    success = FALSE;
 }
 CODE
     );
@@ -1245,7 +1258,10 @@
     %invoke = (
 	code => <<'CODE'
 {
-  gimp_image_remove_vectors (image, vectors);
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (vectors), error))
+    gimp_image_remove_vectors (image, vectors);
+  else
+    success = FALSE;
 }
 CODE
     );

Modified: trunk/tools/pdbgen/pdb/layer.pdb
==============================================================================
--- trunk/tools/pdbgen/pdb/layer.pdb	(original)
+++ trunk/tools/pdbgen/pdb/layer.pdb	Mon Sep 15 20:45:42 2008
@@ -276,8 +276,9 @@
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), error))
-    gimp_layer_add_mask (layer, mask, TRUE);
+  if (gimp_pdb_item_is_floating (GIMP_ITEM (mask), error) &&
+      ! gimp_layer_get_mask (layer))
+    success = (gimp_layer_add_mask (layer, mask, TRUE) == mask);
   else
     success = FALSE;
 }
@@ -305,7 +306,8 @@
     %invoke = (
 	code => <<'CODE'
 {
-  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), error))
+  if (gimp_pdb_item_is_attached (GIMP_ITEM (layer), error) &&
+      gimp_layer_get_mask (layer))
     gimp_layer_apply_mask (layer, mode, TRUE);
   else
     success = FALSE;



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