[gimp] Bug 598523 - Protect hidden layers from editing



commit ac5428787e238282fdbf1359ebfd4445cb0fcec8
Author: darkraid1 <darkraid1 gmail com>
Date:   Wed Apr 24 16:27:12 2013 +0200

    Bug 598523 - Protect hidden layers from editing
    
    Don't allow tool operations on invisible items, just like we do for
    group layers or locked items.
    
    Cleaned up and enhanced the patch a bit --Mitch

 app/tools/gimpblendtool.c      |   10 +++++++++-
 app/tools/gimpbucketfilltool.c |   10 +++++++++-
 app/tools/gimpimagemaptool.c   |    7 +++++++
 app/tools/gimppainttool.c      |   10 +++++++++-
 app/tools/gimptransformtool.c  |   12 ++++++++++--
 5 files changed, 44 insertions(+), 5 deletions(-)
---
diff --git a/app/tools/gimpblendtool.c b/app/tools/gimpblendtool.c
index 5a64a43..0232147 100644
--- a/app/tools/gimpblendtool.c
+++ b/app/tools/gimpblendtool.c
@@ -174,6 +174,13 @@ gimp_blend_tool_initialize (GimpTool     *tool,
       return FALSE;
     }
 
+  if (! gimp_item_is_visible (GIMP_ITEM (drawable)))
+    {
+      g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED,
+                           _("The active layer is not visible."));
+      return FALSE;
+    }
+
   if (! gimp_context_get_gradient (GIMP_CONTEXT (options)))
     {
       g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED,
@@ -363,7 +370,8 @@ gimp_blend_tool_cursor_update (GimpTool         *tool,
   GimpCursorModifier  modifier = GIMP_CURSOR_MODIFIER_NONE;
 
   if (gimp_viewable_get_children (GIMP_VIEWABLE (drawable)) ||
-      gimp_item_is_content_locked (GIMP_ITEM (drawable)))
+      gimp_item_is_content_locked (GIMP_ITEM (drawable))    ||
+      ! gimp_item_is_visible (GIMP_ITEM (drawable)))
     {
       modifier = GIMP_CURSOR_MODIFIER_BAD;
     }
diff --git a/app/tools/gimpbucketfilltool.c b/app/tools/gimpbucketfilltool.c
index 894f132..e077f22 100644
--- a/app/tools/gimpbucketfilltool.c
+++ b/app/tools/gimpbucketfilltool.c
@@ -145,6 +145,13 @@ gimp_bucket_fill_tool_initialize (GimpTool     *tool,
       return FALSE;
     }
 
+  if (! gimp_item_is_visible (GIMP_ITEM (drawable)))
+    {
+      g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED,
+                           _("The active layer is not visible."));
+      return FALSE;
+    }
+
   return TRUE;
 }
 
@@ -284,7 +291,8 @@ gimp_bucket_fill_tool_cursor_update (GimpTool         *tool,
       GimpDrawable *drawable = gimp_image_get_active_drawable (image);
 
       if (! gimp_viewable_get_children (GIMP_VIEWABLE (drawable)) &&
-          ! gimp_item_is_content_locked (GIMP_ITEM (drawable)))
+          ! gimp_item_is_content_locked (GIMP_ITEM (drawable))    &&
+          gimp_item_is_visible (GIMP_ITEM (drawable)))
         {
           switch (options->fill_mode)
             {
diff --git a/app/tools/gimpimagemaptool.c b/app/tools/gimpimagemaptool.c
index 88f9e8a..fa71a34 100644
--- a/app/tools/gimpimagemaptool.c
+++ b/app/tools/gimpimagemaptool.c
@@ -290,6 +290,13 @@ gimp_image_map_tool_initialize (GimpTool     *tool,
       return FALSE;
     }
 
+  if (! gimp_item_is_visible (GIMP_ITEM (drawable)))
+    {
+      g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED,
+                           _("The active layer is not visible."));
+      return FALSE;
+    }
+
   if (image_map_tool->active_picker)
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (image_map_tool->active_picker),
                                   FALSE);
diff --git a/app/tools/gimppainttool.c b/app/tools/gimppainttool.c
index 5f4879a..8263356 100644
--- a/app/tools/gimppainttool.c
+++ b/app/tools/gimppainttool.c
@@ -266,6 +266,13 @@ gimp_paint_tool_button_press (GimpTool            *tool,
       return;
     }
 
+  if (! gimp_item_is_visible (GIMP_ITEM (drawable)))
+    {
+      gimp_tool_message_literal (tool, display,
+                                 _("The active layer is not visible."));
+      return;
+    }
+
   curr_coords = *coords;
 
   gimp_item_get_offset (GIMP_ITEM (drawable), &off_x, &off_y);
@@ -522,7 +529,8 @@ gimp_paint_tool_cursor_update (GimpTool         *tool,
       GimpDrawable *drawable = gimp_image_get_active_drawable (image);
 
       if (gimp_viewable_get_children (GIMP_VIEWABLE (drawable)) ||
-          gimp_item_is_content_locked (GIMP_ITEM (drawable)))
+          gimp_item_is_content_locked (GIMP_ITEM (drawable))    ||
+          ! gimp_item_is_visible (GIMP_ITEM (drawable)))
         {
           modifier        = GIMP_CURSOR_MODIFIER_BAD;
           toggle_modifier = GIMP_CURSOR_MODIFIER_BAD;
diff --git a/app/tools/gimptransformtool.c b/app/tools/gimptransformtool.c
index 7e1d72b..30bb64d 100644
--- a/app/tools/gimptransformtool.c
+++ b/app/tools/gimptransformtool.c
@@ -271,6 +271,13 @@ gimp_transform_tool_initialize (GimpTool     *tool,
       return FALSE;
     }
 
+  if (! gimp_item_is_visible (GIMP_ITEM (drawable)))
+    {
+      g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED,
+                           _("The active layer is not visible."));
+      return FALSE;
+    }
+
   if (display != tool->display)
     {
       gint i;
@@ -741,8 +748,9 @@ gimp_transform_tool_cursor_update (GimpTool         *tool,
 
     case GIMP_TRANSFORM_TYPE_LAYER:
       drawable = gimp_image_get_active_drawable (image);
-      if (gimp_item_is_content_locked (GIMP_ITEM (drawable)) ||
-          gimp_item_is_position_locked (GIMP_ITEM (drawable)))
+      if (gimp_item_is_content_locked (GIMP_ITEM (drawable))  ||
+          gimp_item_is_position_locked (GIMP_ITEM (drawable)) ||
+          ! gimp_item_is_visible (GIMP_ITEM (drawable)))
         modifier = GIMP_CURSOR_MODIFIER_BAD;
       break;
 


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