[gimp] app: fix logic in gimp_edit_selection_tool_translate().



commit 6dc48f571c99307ff3d0fb07d976b338468ae93b
Author: Jehan <jehan girinstud io>
Date:   Wed Oct 19 15:47:11 2022 +0200

    app: fix logic in gimp_edit_selection_tool_translate().
    
    We should not check if all items are locked, but if one item is locked. It is
    enough to forbid the translation from happening.
    Otherwise it is currently possible to bypass position lock by using keyboard
    arrows for layers or channels.

 app/tools/gimpeditselectiontool.c | 29 +++++++++++++----------------
 1 file changed, 13 insertions(+), 16 deletions(-)
---
diff --git a/app/tools/gimpeditselectiontool.c b/app/tools/gimpeditselectiontool.c
index c10b62adb1..5831df3a45 100644
--- a/app/tools/gimpeditselectiontool.c
+++ b/app/tools/gimpeditselectiontool.c
@@ -1087,7 +1087,7 @@ gimp_edit_selection_tool_translate (GimpTool          *tool,
             if (gimp_item_is_position_locked (iter->data, NULL))
               {
                 locked_item    = iter->data;
-                locked_message = _("A selected path' positions is locked.");
+                locked_message = _("A selected path's position is locked.");
                 break;
               }
         }
@@ -1119,17 +1119,15 @@ gimp_edit_selection_tool_translate (GimpTool          *tool,
         }
       else if (GIMP_IS_CHANNEL (selected_items->data))
         {
-          gint n_items = 0;
-
           edit_mode = GIMP_TRANSLATE_MODE_CHANNEL;
 
           for (iter = selected_items; iter; iter = iter->next)
-            if (! gimp_item_is_position_locked (iter->data, NULL) &&
-                ! gimp_item_is_content_locked (iter->data, NULL))
-              n_items++;
-
-          if (n_items == 0)
-            locked_message = _("All selected channels' positions or pixels are locked.");
+            if (gimp_item_is_position_locked (iter->data, NULL))
+              {
+                locked_item    = iter->data;
+                locked_message = _("A selected channel's position is locked.");
+                break;
+              }
         }
       else if (gimp_layer_is_floating_sel (selected_items->data))
         {
@@ -1143,16 +1141,15 @@ gimp_edit_selection_tool_translate (GimpTool          *tool,
         }
       else
         {
-          gint n_items = 0;
-
           edit_mode = GIMP_TRANSLATE_MODE_LAYER;
 
           for (iter = selected_items; iter; iter = iter->next)
-            if (! gimp_item_is_position_locked (iter->data, NULL))
-              n_items++;
-
-          if (n_items == 0)
-            locked_message = _("All selected layers' positions are locked.");
+            if (gimp_item_is_position_locked (iter->data, NULL))
+              {
+                locked_item    = iter->data;
+                locked_message = _("A selected layer's position is locked.");
+                break;
+              }
         }
 
       break;


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