[gimp] Don't PDB-modify locked vectors



commit cb8a611e9388cf2060808a2f3eea3339429e9947
Author: Michael Natterer <mitch gimp org>
Date:   Fri Aug 21 18:06:58 2009 +0200

    Don't PDB-modify locked vectors

 app/pdb/gimppdb-utils.c      |   16 +++++----
 app/pdb/gimppdb-utils.h      |    1 +
 app/pdb/vectors-cmds.c       |   82 +++++++++++++++++++++++------------------
 tools/pdbgen/pdb/vectors.pdb |   82 +++++++++++++++++++++++------------------
 4 files changed, 102 insertions(+), 79 deletions(-)
---
diff --git a/app/pdb/gimppdb-utils.c b/app/pdb/gimppdb-utils.c
index 2368949..d3f9fb1 100644
--- a/app/pdb/gimppdb-utils.c
+++ b/app/pdb/gimppdb-utils.c
@@ -461,20 +461,22 @@ gimp_pdb_image_is_not_base_type (GimpImage          *image,
 GimpStroke *
 gimp_pdb_get_vectors_stroke (GimpVectors  *vectors,
                              gint          stroke_ID,
+                             gboolean      writable,
                              GError      **error)
 {
-  GimpStroke *stroke;
+  GimpStroke *stroke = NULL;
 
   g_return_val_if_fail (GIMP_IS_VECTORS (vectors), NULL);
   g_return_val_if_fail (error == NULL || *error == NULL, NULL);
 
-  stroke = gimp_vectors_stroke_get_by_ID (vectors, stroke_ID);
-
-  if (! stroke)
+  if (! writable || gimp_pdb_item_is_writable (GIMP_ITEM (vectors), error))
     {
-      g_set_error (error, GIMP_PDB_ERROR, GIMP_PDB_INVALID_ARGUMENT,
-                   _("Vectors object %d does not contain stroke with ID %d"),
-                   gimp_item_get_ID (GIMP_ITEM (vectors)), stroke_ID);
+      stroke = gimp_vectors_stroke_get_by_ID (vectors, stroke_ID);
+
+      if (! stroke)
+        g_set_error (error, GIMP_PDB_ERROR, GIMP_PDB_INVALID_ARGUMENT,
+                     _("Vectors object %d does not contain stroke with ID %d"),
+                     gimp_item_get_ID (GIMP_ITEM (vectors)), stroke_ID);
     }
 
   return stroke;
diff --git a/app/pdb/gimppdb-utils.h b/app/pdb/gimppdb-utils.h
index ee6ef9f..cf97b22 100644
--- a/app/pdb/gimppdb-utils.h
+++ b/app/pdb/gimppdb-utils.h
@@ -70,6 +70,7 @@ gboolean        gimp_pdb_image_is_not_base_type (GimpImage          *image,
 
 GimpStroke    * gimp_pdb_get_vectors_stroke     (GimpVectors        *vectors,
                                                  gint                stroke_ID,
+                                                 gboolean            writable,
                                                  GError            **error);
 
 
diff --git a/app/pdb/vectors-cmds.c b/app/pdb/vectors-cmds.c
index 9d24976..33e51a4 100644
--- a/app/pdb/vectors-cmds.c
+++ b/app/pdb/vectors-cmds.c
@@ -543,7 +543,7 @@ vectors_stroke_get_length_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, FALSE, error);
 
       if (stroke)
         length = gimp_stroke_get_length (stroke, precision);
@@ -586,7 +586,7 @@ vectors_stroke_get_point_at_dist_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, FALSE, error);
 
       if (stroke)
         {
@@ -632,7 +632,7 @@ vectors_remove_stroke_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
 
       if (stroke)
         {
@@ -668,7 +668,7 @@ vectors_stroke_close_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
 
       if (stroke)
         {
@@ -708,7 +708,7 @@ vectors_stroke_translate_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
 
       if (stroke)
         {
@@ -748,7 +748,7 @@ vectors_stroke_scale_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
 
       if (stroke)
         {
@@ -790,7 +790,7 @@ vectors_stroke_rotate_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
 
       if (stroke)
         {
@@ -830,7 +830,7 @@ vectors_stroke_flip_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
 
       if (stroke)
         {
@@ -874,7 +874,7 @@ vectors_stroke_flip_free_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
 
       if (stroke)
         {
@@ -915,7 +915,7 @@ vectors_stroke_get_points_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, FALSE, error);
 
       if (GIMP_IS_BEZIER_STROKE (stroke))
         {
@@ -1055,7 +1055,7 @@ vectors_stroke_interpolate_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, FALSE, error);
 
       if (stroke)
         {
@@ -1118,22 +1118,27 @@ vectors_bezier_stroke_new_moveto_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke;
-      GimpCoords  coord0 = GIMP_COORDS_DEFAULT_VALUES;
+      if (gimp_pdb_item_is_writable (GIMP_ITEM (vectors), error))
+        {
+          GimpStroke *stroke;
+          GimpCoords  coord0 = GIMP_COORDS_DEFAULT_VALUES;
 
-      coord0.x = x0;
-      coord0.y = y0;
+          coord0.x = x0;
+          coord0.y = y0;
 
-      stroke = gimp_bezier_stroke_new_moveto (&coord0);
+          stroke = gimp_bezier_stroke_new_moveto (&coord0);
 
-      if (gimp_item_is_attached (GIMP_ITEM (vectors)))
-        gimp_image_undo_push_vectors_mod (gimp_item_get_image (GIMP_ITEM (vectors)),
-                                          _("Add path stroke"),
-                                          vectors);
+          if (gimp_item_is_attached (GIMP_ITEM (vectors)))
+            gimp_image_undo_push_vectors_mod (gimp_item_get_image (GIMP_ITEM (vectors)),
+                                              _("Add path stroke"),
+                                              vectors);
 
-      gimp_vectors_stroke_add (vectors, stroke);
+          gimp_vectors_stroke_add (vectors, stroke);
 
-      stroke_id = gimp_stroke_get_ID (stroke);
+          stroke_id = gimp_stroke_get_ID (stroke);
+        }
+      else
+        success = FALSE;
     }
 
   return_vals = gimp_procedure_get_return_values (procedure, success,
@@ -1166,7 +1171,7 @@ vectors_bezier_stroke_lineto_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
 
       if (stroke)
         {
@@ -1215,7 +1220,7 @@ vectors_bezier_stroke_conicto_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
 
       if (stroke)
         {
@@ -1272,7 +1277,7 @@ vectors_bezier_stroke_cubicto_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+      GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
 
       if (stroke)
         {
@@ -1331,22 +1336,27 @@ vectors_bezier_stroke_new_ellipse_invoker (GimpProcedure      *procedure,
 
   if (success)
     {
-      GimpStroke *stroke;
-      GimpCoords  coord0 = GIMP_COORDS_DEFAULT_VALUES;
+      if (gimp_pdb_item_is_writable (GIMP_ITEM (vectors), error))
+        {
+          GimpStroke *stroke;
+          GimpCoords  coord0 = GIMP_COORDS_DEFAULT_VALUES;
 
-      coord0.x = x0;
-      coord0.y = y0;
+          coord0.x = x0;
+          coord0.y = y0;
 
-      stroke = gimp_bezier_stroke_new_ellipse (&coord0, radius_x, radius_y, angle);
+          stroke = gimp_bezier_stroke_new_ellipse (&coord0, radius_x, radius_y, angle);
 
-      if (gimp_item_is_attached (GIMP_ITEM (vectors)))
-        gimp_image_undo_push_vectors_mod (gimp_item_get_image (GIMP_ITEM (vectors)),
-                                          _("Add path stroke"),
-                                          vectors);
+          if (gimp_item_is_attached (GIMP_ITEM (vectors)))
+            gimp_image_undo_push_vectors_mod (gimp_item_get_image (GIMP_ITEM (vectors)),
+                                              _("Add path stroke"),
+                                              vectors);
 
-      gimp_vectors_stroke_add (vectors, stroke);
+          gimp_vectors_stroke_add (vectors, stroke);
 
-      stroke_id = gimp_stroke_get_ID (stroke);
+          stroke_id = gimp_stroke_get_ID (stroke);
+        }
+      else
+        success = FALSE;
     }
 
   return_vals = gimp_procedure_get_return_values (procedure, success,
diff --git a/tools/pdbgen/pdb/vectors.pdb b/tools/pdbgen/pdb/vectors.pdb
index 9572b1e..2d868f8 100644
--- a/tools/pdbgen/pdb/vectors.pdb
+++ b/tools/pdbgen/pdb/vectors.pdb
@@ -485,7 +485,7 @@ sub vectors_stroke_get_length {
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, FALSE, error);
   
   if (stroke)
     length = gimp_stroke_get_length (stroke, precision);
@@ -534,7 +534,7 @@ HELP
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, FALSE, error);
   
   if (stroke)
     {
@@ -571,7 +571,7 @@ HELP
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
   
   if (stroke)
     {
@@ -608,7 +608,7 @@ HELP
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
   
   if (stroke)
     {
@@ -650,7 +650,7 @@ HELP
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
   
   if (stroke)
     {
@@ -691,7 +691,7 @@ HELP
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
   
   if (stroke)
     {
@@ -733,7 +733,7 @@ HELP
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
   
   if (stroke)
     {
@@ -774,7 +774,7 @@ HELP
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
   
   if (stroke)
     {
@@ -820,7 +820,7 @@ HELP
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
   
   if (stroke)
     {
@@ -870,7 +870,7 @@ HELP
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, FALSE, error);
   
   if (GIMP_IS_BEZIER_STROKE (stroke))
     {
@@ -936,7 +936,7 @@ HELP
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, FALSE, error);
   
   if (stroke)
     {
@@ -1074,22 +1074,27 @@ HELP
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke;
-  GimpCoords  coord0 = GIMP_COORDS_DEFAULT_VALUES;
+  if (gimp_pdb_item_is_writable (GIMP_ITEM (vectors), error))
+    {
+      GimpStroke *stroke;
+      GimpCoords  coord0 = GIMP_COORDS_DEFAULT_VALUES;
 
-  coord0.x = x0;
-  coord0.y = y0;
+      coord0.x = x0;
+      coord0.y = y0;
 
-  stroke = gimp_bezier_stroke_new_moveto (&coord0);
+      stroke = gimp_bezier_stroke_new_moveto (&coord0);
 
-  if (gimp_item_is_attached (GIMP_ITEM (vectors)))
-    gimp_image_undo_push_vectors_mod (gimp_item_get_image (GIMP_ITEM (vectors)),
-                                      _("Add path stroke"),
-                                      vectors);
+      if (gimp_item_is_attached (GIMP_ITEM (vectors)))
+        gimp_image_undo_push_vectors_mod (gimp_item_get_image (GIMP_ITEM (vectors)),
+                                          _("Add path stroke"),
+                                          vectors);
 
-  gimp_vectors_stroke_add (vectors, stroke);
+      gimp_vectors_stroke_add (vectors, stroke);
 
-  stroke_id = gimp_stroke_get_ID (stroke);
+      stroke_id = gimp_stroke_get_ID (stroke);
+    }
+  else
+    success = FALSE;
 }
 CODE
     );
@@ -1118,7 +1123,7 @@ HELP
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
 
   if (stroke)
     {
@@ -1170,7 +1175,7 @@ HELP
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
 
   if (stroke)
     {
@@ -1228,7 +1233,7 @@ HELP
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, error);
+  GimpStroke *stroke = gimp_pdb_get_vectors_stroke (vectors, stroke_id, TRUE, error);
 
   if (stroke)
     {
@@ -1292,22 +1297,27 @@ HELP
     %invoke = (
         code => <<"CODE"
 {
-  GimpStroke *stroke;
-  GimpCoords  coord0 = GIMP_COORDS_DEFAULT_VALUES;
+  if (gimp_pdb_item_is_writable (GIMP_ITEM (vectors), error))
+    {
+      GimpStroke *stroke;
+      GimpCoords  coord0 = GIMP_COORDS_DEFAULT_VALUES;
 
-  coord0.x = x0;
-  coord0.y = y0;
+      coord0.x = x0;
+      coord0.y = y0;
 
-  stroke = gimp_bezier_stroke_new_ellipse (&coord0, radius_x, radius_y, angle);
+      stroke = gimp_bezier_stroke_new_ellipse (&coord0, radius_x, radius_y, angle);
 
-  if (gimp_item_is_attached (GIMP_ITEM (vectors)))
-    gimp_image_undo_push_vectors_mod (gimp_item_get_image (GIMP_ITEM (vectors)),
-                                      _("Add path stroke"),
-                                      vectors);
+      if (gimp_item_is_attached (GIMP_ITEM (vectors)))
+        gimp_image_undo_push_vectors_mod (gimp_item_get_image (GIMP_ITEM (vectors)),
+                                          _("Add path stroke"),
+                                          vectors);
 
-  gimp_vectors_stroke_add (vectors, stroke);
+      gimp_vectors_stroke_add (vectors, stroke);
 
-  stroke_id = gimp_stroke_get_ID (stroke);
+      stroke_id = gimp_stroke_get_ID (stroke);
+    }
+  else
+    success = FALSE;
 }
 CODE
     );



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