[gimp] app: in all tools, blink lock box when the current item is locked



commit 637105b962916bae90f3f71235b378ea79769504
Author: Ell <ell_se yahoo com>
Date:   Mon Dec 10 08:22:50 2018 -0500

    app: in all tools, blink lock box when the current item is locked
    
    In all tools, when the current item can't be edited due to its lock
    mask, use gimp_tools_blink_lock_box(), added in the previous
    commit,to blink the lock box of the corresponding dockable, in
    addition to showing an error message in the status bar, to hint at
    the source of the error.

 app/display/gimptoolpath.c        |  8 ++++++++
 app/tools/gimpbucketfilltool.c    |  3 +++
 app/tools/gimpcagetool.c          |  3 +++
 app/tools/gimpcroptool.c          |  3 +++
 app/tools/gimpeditselectiontool.c |  2 ++
 app/tools/gimpfiltertool.c        |  3 +++
 app/tools/gimpgradienttool.c      |  3 +++
 app/tools/gimpmovetool.c          |  2 ++
 app/tools/gimppainttool.c         | 15 +++++++++++----
 app/tools/gimpselectiontool.c     |  4 ++++
 app/tools/gimptransformtool.c     |  3 +++
 app/tools/gimpwarptool.c          |  3 +++
 12 files changed, 48 insertions(+), 4 deletions(-)
---
diff --git a/app/display/gimptoolpath.c b/app/display/gimptoolpath.c
index 027ef9486e..276057c601 100644
--- a/app/display/gimptoolpath.c
+++ b/app/display/gimptoolpath.c
@@ -37,6 +37,8 @@
 
 #include "widgets/gimpwidgets-utils.h"
 
+#include "tools/gimptools-utils.h"
+
 #include "gimpcanvashandle.h"
 #include "gimpcanvasitem-utils.h"
 #include "gimpcanvasline.h"
@@ -492,6 +494,8 @@ static gboolean
 gimp_tool_path_check_writable (GimpToolPath *path)
 {
   GimpToolPathPrivate *private = path->private;
+  GimpToolWidget      *widget  = GIMP_TOOL_WIDGET (path);
+  GimpDisplayShell    *shell   = gimp_tool_widget_get_shell (widget);
 
   if (gimp_item_is_content_locked (GIMP_ITEM (private->vectors)) ||
       gimp_item_is_position_locked (GIMP_ITEM (private->vectors)))
@@ -499,6 +503,10 @@ gimp_tool_path_check_writable (GimpToolPath *path)
       gimp_tool_widget_set_status (GIMP_TOOL_WIDGET (path),
                                    _("The active path is locked."));
 
+      /* FIXME: this should really be done by the tool */
+      gimp_tools_blink_lock_box (shell->display->gimp,
+                                 GIMP_ITEM (private->vectors));
+
       private->function = VECTORS_FINISHED;
 
       return FALSE;
diff --git a/app/tools/gimpbucketfilltool.c b/app/tools/gimpbucketfilltool.c
index 31955f417f..bf0f0f243f 100644
--- a/app/tools/gimpbucketfilltool.c
+++ b/app/tools/gimpbucketfilltool.c
@@ -55,6 +55,7 @@
 #include "gimpbucketfilltool.h"
 #include "gimpcoloroptions.h"
 #include "gimptoolcontrol.h"
+#include "gimptools-utils.h"
 
 #include "gimp-intl.h"
 
@@ -292,6 +293,8 @@ gimp_bucket_fill_tool_initialize (GimpTool     *tool,
     {
       g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED,
                            _("The active layer's pixels are locked."));
+      if (error)
+        gimp_tools_blink_lock_box (display->gimp, GIMP_ITEM (drawable));
       return FALSE;
     }
 
diff --git a/app/tools/gimpcagetool.c b/app/tools/gimpcagetool.c
index c1065f5c39..9ebb124663 100644
--- a/app/tools/gimpcagetool.c
+++ b/app/tools/gimpcagetool.c
@@ -50,6 +50,7 @@
 #include "gimpcagetool.h"
 #include "gimpcageoptions.h"
 #include "gimptoolcontrol.h"
+#include "gimptools-utils.h"
 
 #include "gimp-intl.h"
 
@@ -225,6 +226,8 @@ gimp_cage_tool_initialize (GimpTool     *tool,
     {
       g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED,
                            _("The active layer's pixels are locked."));
+      if (error)
+        gimp_tools_blink_lock_box (display->gimp, GIMP_ITEM (drawable));
       return FALSE;
     }
 
diff --git a/app/tools/gimpcroptool.c b/app/tools/gimpcroptool.c
index bfb233b69d..40863f22f1 100644
--- a/app/tools/gimpcroptool.c
+++ b/app/tools/gimpcroptool.c
@@ -40,6 +40,7 @@
 #include "gimpcroptool.h"
 #include "gimprectangleoptions.h"
 #include "gimptoolcontrol.h"
+#include "gimptools-utils.h"
 
 #include "gimp-intl.h"
 
@@ -458,6 +459,8 @@ gimp_crop_tool_commit (GimpCropTool *crop_tool)
                 {
                   gimp_tool_message_literal (tool, tool->display,
                                              _("The active layer's pixels are locked."));
+                  gimp_tools_blink_lock_box (tool->display->gimp,
+                                             GIMP_ITEM (layer));
                   return;
                 }
 
diff --git a/app/tools/gimpeditselectiontool.c b/app/tools/gimpeditselectiontool.c
index 3a5c0f33e4..a58a197e2c 100644
--- a/app/tools/gimpeditselectiontool.c
+++ b/app/tools/gimpeditselectiontool.c
@@ -56,6 +56,7 @@
 #include "gimpdrawtool.h"
 #include "gimpeditselectiontool.h"
 #include "gimptoolcontrol.h"
+#include "gimptools-utils.h"
 #include "tool_manager.h"
 
 #include "gimp-intl.h"
@@ -1196,6 +1197,7 @@ gimp_edit_selection_tool_translate (GimpTool          *tool,
   else if (locked_message)
     {
       gimp_tool_message_literal (tool, display, locked_message);
+      gimp_tools_blink_lock_box (display->gimp, item);
       return TRUE;
     }
 
diff --git a/app/tools/gimpfiltertool.c b/app/tools/gimpfiltertool.c
index 068954b8b4..1b86469137 100644
--- a/app/tools/gimpfiltertool.c
+++ b/app/tools/gimpfiltertool.c
@@ -72,6 +72,7 @@
 #include "gimpfiltertool-widgets.h"
 #include "gimpguidetool.h"
 #include "gimptoolcontrol.h"
+#include "gimptools-utils.h"
 #include "tool_manager.h"
 
 #include "gimp-intl.h"
@@ -273,6 +274,8 @@ gimp_filter_tool_initialize (GimpTool     *tool,
     {
       g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED,
                            _("The active layer's pixels are locked."));
+      if (error)
+        gimp_tools_blink_lock_box (display->gimp, GIMP_ITEM (drawable));
       return FALSE;
     }
 
diff --git a/app/tools/gimpgradienttool.c b/app/tools/gimpgradienttool.c
index c3050ba2ad..741a68e22d 100644
--- a/app/tools/gimpgradienttool.c
+++ b/app/tools/gimpgradienttool.c
@@ -51,6 +51,7 @@
 #include "gimpgradienttool.h"
 #include "gimpgradienttool-editor.h"
 #include "gimptoolcontrol.h"
+#include "gimptools-utils.h"
 
 #include "gimp-intl.h"
 
@@ -252,6 +253,8 @@ gimp_gradient_tool_initialize (GimpTool     *tool,
     {
       g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED,
                            _("The active layer's pixels are locked."));
+      if (error)
+        gimp_tools_blink_lock_box (display->gimp, GIMP_ITEM (drawable));
       return FALSE;
     }
 
diff --git a/app/tools/gimpmovetool.c b/app/tools/gimpmovetool.c
index 393d51f903..afd2666c8b 100644
--- a/app/tools/gimpmovetool.c
+++ b/app/tools/gimpmovetool.c
@@ -56,6 +56,7 @@
 #include "gimpmoveoptions.h"
 #include "gimpmovetool.h"
 #include "gimptoolcontrol.h"
+#include "gimptools-utils.h"
 
 #include "gimp-intl.h"
 
@@ -336,6 +337,7 @@ gimp_move_tool_button_press (GimpTool            *tool,
   else if (locked_message)
     {
       gimp_tool_message_literal (tool, display, locked_message);
+      gimp_tools_blink_lock_box (display->gimp, active_item);
       gimp_tool_control (tool, GIMP_TOOL_ACTION_HALT, display);
       return;
     }
diff --git a/app/tools/gimppainttool.c b/app/tools/gimppainttool.c
index 3b37769505..b303831019 100644
--- a/app/tools/gimppainttool.c
+++ b/app/tools/gimppainttool.c
@@ -53,6 +53,7 @@
 #include "gimppainttool.h"
 #include "gimppainttool-paint.h"
 #include "gimptoolcontrol.h"
+#include "gimptools-utils.h"
 
 #include "gimp-intl.h"
 
@@ -105,6 +106,7 @@ static GimpCanvasItem *
 
 static gboolean  gimp_paint_tool_check_alpha (GimpPaintTool         *paint_tool,
                                               GimpDrawable          *drawable,
+                                              GimpDisplay           *display,
                                               GError               **error);
 
 static void   gimp_paint_tool_hard_notify    (GimpPaintOptions      *options,
@@ -282,10 +284,11 @@ gimp_paint_tool_button_press (GimpTool            *tool,
     {
       gimp_tool_message_literal (tool, display,
                                  _("The active layer's pixels are locked."));
+      gimp_tools_blink_lock_box (display->gimp, GIMP_ITEM (drawable));
       return;
     }
 
-  if (! gimp_paint_tool_check_alpha (paint_tool, drawable, &error))
+  if (! gimp_paint_tool_check_alpha (paint_tool, drawable, display, &error))
     {
       GtkWidget *options_gui;
       GtkWidget *mode_box;
@@ -485,9 +488,9 @@ gimp_paint_tool_cursor_update (GimpTool         *tool,
       GimpImage    *image    = gimp_display_get_image (display);
       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_paint_tool_check_alpha (paint_tool, drawable, NULL) ||
+      if (gimp_viewable_get_children (GIMP_VIEWABLE (drawable))               ||
+          gimp_item_is_content_locked (GIMP_ITEM (drawable))                  ||
+          ! gimp_paint_tool_check_alpha (paint_tool, drawable, display, NULL) ||
           ! gimp_item_is_visible (GIMP_ITEM (drawable)))
         {
           modifier        = GIMP_CURSOR_MODIFIER_BAD;
@@ -821,6 +824,7 @@ gimp_paint_tool_get_outline (GimpPaintTool *paint_tool,
 static gboolean
 gimp_paint_tool_check_alpha (GimpPaintTool  *paint_tool,
                              GimpDrawable   *drawable,
+                             GimpDisplay    *display,
                              GError        **error)
 {
   GimpPaintToolClass *klass = GIMP_PAINT_TOOL_GET_CLASS (paint_tool);
@@ -843,6 +847,9 @@ gimp_paint_tool_check_alpha (GimpPaintTool  *paint_tool,
             error, GIMP_ERROR, GIMP_FAILED,
             _("The active layer's alpha channel is locked."));
 
+          if (error)
+            gimp_tools_blink_lock_box (display->gimp, GIMP_ITEM (drawable));
+
           return FALSE;
         }
     }
diff --git a/app/tools/gimpselectiontool.c b/app/tools/gimpselectiontool.c
index bf75d9769f..96396091bd 100644
--- a/app/tools/gimpselectiontool.c
+++ b/app/tools/gimpselectiontool.c
@@ -38,6 +38,7 @@
 #include "gimpselectiontool.h"
 #include "gimpselectionoptions.h"
 #include "gimptoolcontrol.h"
+#include "gimptools-utils.h"
 
 #include "gimp-intl.h"
 
@@ -451,6 +452,9 @@ gimp_selection_tool_check (GimpSelectionTool  *sel_tool,
           g_set_error (error, GIMP_ERROR, GIMP_FAILED,
                        _("The active layer's pixels are locked."));
 
+          if (error)
+            gimp_tools_blink_lock_box (display->gimp, GIMP_ITEM (drawable));
+
           return FALSE;
         }
       break;
diff --git a/app/tools/gimptransformtool.c b/app/tools/gimptransformtool.c
index 01237bad69..1f1744a6aa 100644
--- a/app/tools/gimptransformtool.c
+++ b/app/tools/gimptransformtool.c
@@ -46,6 +46,7 @@
 #include "widgets/gimpwidgets-utils.h"
 
 #include "gimptoolcontrol.h"
+#include "gimptools-utils.h"
 #include "gimptransformoptions.h"
 #include "gimptransformtool.h"
 
@@ -572,6 +573,8 @@ gimp_transform_tool_check_active_item (GimpTransformTool  *tr_tool,
   if (locked_message)
     {
       g_set_error_literal (error, GIMP_ERROR, GIMP_FAILED, locked_message);
+      if (error)
+        gimp_tools_blink_lock_box (display->gimp, item);
       return NULL;
     }
 
diff --git a/app/tools/gimpwarptool.c b/app/tools/gimpwarptool.c
index 513d60f2ff..e0f1e4e7fa 100644
--- a/app/tools/gimpwarptool.c
+++ b/app/tools/gimpwarptool.c
@@ -48,6 +48,7 @@
 #include "gimpwarptool.h"
 #include "gimpwarpoptions.h"
 #include "gimptoolcontrol.h"
+#include "gimptools-utils.h"
 
 #include "gimp-intl.h"
 
@@ -629,6 +630,8 @@ gimp_warp_tool_can_stroke (GimpWarpTool *wt,
         {
           gimp_tool_message_literal (tool, display,
                                      _("The active layer's pixels are locked."));
+
+          gimp_tools_blink_lock_box (display->gimp, GIMP_ITEM (drawable));
         }
 
       return FALSE;


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