From 637105b962916bae90f3f71235b378ea79769504 Mon Sep 17 00:00:00 2001 From: Ell Date: Mon, 10 Dec 2018 08:22:50 -0500 Subject: [PATCH] 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;