[gimp] Add actions and callbacks to toggle "lock-content" on drawables and vectors



commit 35a7052b8d2f888a6b54ca36500de80e707763fe
Author: Michael Natterer <mitch gimp org>
Date:   Thu Aug 20 21:19:43 2009 +0200

    Add actions and callbacks to toggle "lock-content" on drawables and vectors

 app/actions/drawable-actions.c  |   32 ++++++++++++++++++++++----------
 app/actions/drawable-commands.c |   35 +++++++++++++++++++++++++++++++++++
 app/actions/drawable-commands.h |    2 ++
 app/actions/vectors-actions.c   |   22 ++++++++++++++++------
 app/actions/vectors-commands.c  |   31 +++++++++++++++++++++++++++++++
 app/actions/vectors-commands.h  |    2 ++
 6 files changed, 108 insertions(+), 16 deletions(-)
---
diff --git a/app/actions/drawable-actions.c b/app/actions/drawable-actions.c
index 88a636b..9da91d4 100644
--- a/app/actions/drawable-actions.c
+++ b/app/actions/drawable-actions.c
@@ -69,6 +69,13 @@ static const GimpActionEntry drawable_actions[] =
 
 static const GimpToggleActionEntry drawable_toggle_actions[] =
 {
+  { "drawable-visible", GIMP_STOCK_VISIBLE,
+    NC_("drawable-action", "_Visible"), NULL,
+    NC_("drawable-action", "Toggle visibility"),
+    G_CALLBACK (drawable_visible_cmd_callback),
+    FALSE,
+    GIMP_HELP_LAYER_VISIBLE },
+
   { "drawable-linked", GIMP_STOCK_LINKED,
     NC_("drawable-action", "_Linked"), NULL,
     NC_("drawable-action", "Toggle the linked state"),
@@ -76,12 +83,13 @@ static const GimpToggleActionEntry drawable_toggle_actions[] =
     FALSE,
     GIMP_HELP_LAYER_LINKED },
 
-  { "drawable-visible", GIMP_STOCK_VISIBLE,
-    NC_("drawable-action", "_Visible"), NULL,
-    NC_("drawable-action", "Toggle visibility"),
-    G_CALLBACK (drawable_visible_cmd_callback),
+  { "drawable-lock-content", NULL /* GIMP_STOCK_LOCK */,
+    NC_("drawable-action", "L_ock pixels"), NULL,
+    NC_("drawable-action",
+        "Keep the pixels on this drawable from being modified"),
+    G_CALLBACK (drawable_lock_content_cmd_callback),
     FALSE,
-    GIMP_HELP_LAYER_VISIBLE }
+    NULL, /* GIMP_HELP_LAYER_LOCK_PIXELS */ }
 };
 
 static const GimpEnumActionEntry drawable_flip_actions[] =
@@ -154,6 +162,7 @@ drawable_actions_update (GimpActionGroup *group,
   gboolean      is_indexed = FALSE;
   gboolean      visible    = FALSE;
   gboolean      linked     = FALSE;
+  gboolean      locked     = FALSE;
   gboolean      writable   = FALSE;
 
   image = action_data_get_image (data);
@@ -178,7 +187,8 @@ drawable_actions_update (GimpActionGroup *group,
 
           visible  = gimp_item_get_visible (item);
           linked   = gimp_item_get_linked (item);
-          writable = ! gimp_item_get_lock_content (item);
+          locked   = gimp_item_get_lock_content (item);
+          writable = ! locked;
         }
     }
 
@@ -192,11 +202,13 @@ drawable_actions_update (GimpActionGroup *group,
   SET_SENSITIVE ("drawable-levels-stretch", writable &&   is_rgb);
   SET_SENSITIVE ("drawable-offset",         writable);
 
-  SET_SENSITIVE ("drawable-visible", drawable);
-  SET_SENSITIVE ("drawable-linked",  drawable);
+  SET_SENSITIVE ("drawable-visible",      drawable);
+  SET_SENSITIVE ("drawable-linked",       drawable);
+  SET_SENSITIVE ("drawable-lock-content", drawable);
 
-  SET_ACTIVE ("drawable-visible", visible);
-  SET_ACTIVE ("drawable-linked",  linked);
+  SET_ACTIVE ("drawable-visible",      visible);
+  SET_ACTIVE ("drawable-linked",       linked);
+  SET_ACTIVE ("drawable-lock-content", locked);
 
   SET_SENSITIVE ("drawable-flip-horizontal", writable);
   SET_SENSITIVE ("drawable-flip-vertical",   writable);
diff --git a/app/actions/drawable-commands.c b/app/actions/drawable-commands.c
index 44960a5..4847cc4 100644
--- a/app/actions/drawable-commands.c
+++ b/app/actions/drawable-commands.c
@@ -195,6 +195,41 @@ drawable_visible_cmd_callback (GtkAction *action,
     }
 }
 
+void
+drawable_lock_content_cmd_callback (GtkAction *action,
+                                    gpointer   data)
+{
+  GimpImage    *image;
+  GimpDrawable *drawable;
+  gboolean      locked;
+  return_if_no_drawable (image, drawable, data);
+
+  locked = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+
+  if (GIMP_IS_LAYER_MASK (drawable))
+    drawable =
+      GIMP_DRAWABLE (gimp_layer_mask_get_layer (GIMP_LAYER_MASK (drawable)));
+
+  if (locked != gimp_item_get_lock_content (GIMP_ITEM (drawable)))
+    {
+#if 0
+      GimpUndo *undo;
+#endif
+      gboolean  push_undo = TRUE;
+
+#if 0
+      undo = gimp_image_undo_can_compress (image, GIMP_TYPE_ITEM_UNDO,
+                                           GIMP_UNDO_ITEM_VISIBILITY);
+
+      if (undo && GIMP_ITEM_UNDO (undo)->item == GIMP_ITEM (drawable))
+        push_undo = FALSE;
+#endif
+
+      gimp_item_set_lock_content (GIMP_ITEM (drawable), locked, push_undo);
+      gimp_image_flush (image);
+    }
+}
+
 
 void
 drawable_flip_cmd_callback (GtkAction *action,
diff --git a/app/actions/drawable-commands.h b/app/actions/drawable-commands.h
index f369200..a184384 100644
--- a/app/actions/drawable-commands.h
+++ b/app/actions/drawable-commands.h
@@ -32,6 +32,8 @@ void   drawable_linked_cmd_callback         (GtkAction *action,
                                              gpointer   data);
 void   drawable_visible_cmd_callback        (GtkAction *action,
                                              gpointer   data);
+void   drawable_lock_content_cmd_callback   (GtkAction *action,
+                                             gpointer   data);
 
 void   drawable_flip_cmd_callback           (GtkAction *action,
                                              gint       value,
diff --git a/app/actions/vectors-actions.c b/app/actions/vectors-actions.c
index d67e2ed..1be0a0f 100644
--- a/app/actions/vectors-actions.c
+++ b/app/actions/vectors-actions.c
@@ -153,7 +153,13 @@ static const GimpToggleActionEntry vectors_toggle_actions[] =
     NC_("vectors-action", "_Linked"), NULL, NULL,
     G_CALLBACK (vectors_linked_cmd_callback),
     FALSE,
-    GIMP_HELP_PATH_LINKED }
+    GIMP_HELP_PATH_LINKED },
+
+  { "vectors-lock-content", NULL /* GIMP_STOCK_LOCK */,
+    NC_("vectors-action", "L_ock strokes"), NULL, NULL,
+    G_CALLBACK (vectors_lock_content_cmd_callback),
+    FALSE,
+    NULL /* GIMP_HELP_PATH_LOCK_STROKES */ }
 };
 
 static const GimpEnumActionEntry vectors_to_selection_actions[] =
@@ -244,6 +250,7 @@ vectors_actions_update (GimpActionGroup *group,
   gboolean     global_buf = FALSE;
   gboolean     visible    = FALSE;
   gboolean     linked     = FALSE;
+  gboolean     locked     = FALSE;
   gboolean     writable   = FALSE;
   GList       *next       = NULL;
   GList       *prev       = NULL;
@@ -264,7 +271,8 @@ vectors_actions_update (GimpActionGroup *group,
 
           visible  = gimp_item_get_visible (item);
           linked   = gimp_item_get_linked (item);
-          writable = ! gimp_item_get_lock_content (item);
+          locked   = gimp_item_get_lock_content (item);
+          writable = ! locked;
 
           vectors_list = gimp_item_get_container_iter (item);
 
@@ -302,11 +310,13 @@ vectors_actions_update (GimpActionGroup *group,
   SET_SENSITIVE ("vectors-export", vectors);
   SET_SENSITIVE ("vectors-import", image);
 
-  SET_SENSITIVE ("vectors-visible", vectors);
-  SET_SENSITIVE ("vectors-linked",  vectors);
+  SET_SENSITIVE ("vectors-visible",      vectors);
+  SET_SENSITIVE ("vectors-linked",       vectors);
+  SET_SENSITIVE ("vectors-lock-content", vectors);
 
-  SET_ACTIVE ("vectors-visible", visible);
-  SET_ACTIVE ("vectors-linked",  linked);
+  SET_ACTIVE ("vectors-visible",      visible);
+  SET_ACTIVE ("vectors-linked",       linked);
+  SET_ACTIVE ("vectors-lock-content", locked);
 
   SET_SENSITIVE ("vectors-selection-to-vectors",          image && !mask_empty);
   SET_SENSITIVE ("vectors-selection-to-vectors-short",    image && !mask_empty);
diff --git a/app/actions/vectors-commands.c b/app/actions/vectors-commands.c
index 14a2db9..917a8a7 100644
--- a/app/actions/vectors-commands.c
+++ b/app/actions/vectors-commands.c
@@ -614,6 +614,37 @@ vectors_linked_cmd_callback (GtkAction *action,
     }
 }
 
+void
+vectors_lock_content_cmd_callback (GtkAction *action,
+                                   gpointer   data)
+{
+  GimpImage   *image;
+  GimpVectors *vectors;
+  gboolean     locked;
+  return_if_no_vectors (image, vectors, data);
+
+  locked = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+
+  if (locked != gimp_item_get_lock_content (GIMP_ITEM (vectors)))
+    {
+#if 0
+      GimpUndo *undo;
+#endif
+      gboolean  push_undo = TRUE;
+
+#if 0
+      undo = gimp_image_undo_can_compress (image, GIMP_TYPE_ITEM_UNDO,
+                                           GIMP_UNDO_ITEM_LINKED);
+
+      if (undo && GIMP_ITEM_UNDO (undo)->item == GIMP_ITEM (vectors))
+        push_undo = FALSE;
+#endif
+
+      gimp_item_set_lock_content (GIMP_ITEM (vectors), locked, push_undo);
+      gimp_image_flush (image);
+    }
+}
+
 
 /*  private functions  */
 
diff --git a/app/actions/vectors-commands.h b/app/actions/vectors-commands.h
index 25e7b29..40118c0 100644
--- a/app/actions/vectors-commands.h
+++ b/app/actions/vectors-commands.h
@@ -67,6 +67,8 @@ void   vectors_visible_cmd_callback              (GtkAction   *action,
                                                   gpointer     data);
 void   vectors_linked_cmd_callback               (GtkAction   *action,
                                                   gpointer     data);
+void   vectors_lock_content_cmd_callback         (GtkAction   *action,
+                                                  gpointer     data);
 
 
 #endif /* __VECTORS_COMMANDS_H__ */



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