[gimp] app: edit-clear multi-layers aware.



commit bf7d555759fdbd07c2f95167a35bd17e289573ff
Author: Jehan <jehan girinstud io>
Date:   Thu Jul 30 21:18:54 2020 +0200

    app: edit-clear multi-layers aware.

 app/actions/edit-actions.c  | 19 ++++++++++++++++++-
 app/actions/edit-commands.c | 25 +++++++++++++++++++------
 2 files changed, 37 insertions(+), 7 deletions(-)
---
diff --git a/app/actions/edit-actions.c b/app/actions/edit-actions.c
index 7091686c3c..77c3c50086 100644
--- a/app/actions/edit-actions.c
+++ b/app/actions/edit-actions.c
@@ -295,11 +295,28 @@ edit_actions_update (GimpActionGroup *group,
   gboolean      children     = FALSE;
   gboolean      undo_enabled = FALSE;
 
+  gboolean      have_no_groups = FALSE; /* At least 1 selected layer is not a group.         */
+  gboolean      have_writable  = FALSE; /* At least 1 selected layer has no contents lock.   */
+
   if (image)
     {
+      GList *iter;
+
       drawables = gimp_image_get_selected_drawables (image);
       drawable = gimp_image_get_active_drawable (image);
 
+      for (iter = drawables; iter; iter = iter->next)
+        {
+          if (! gimp_viewable_get_children (GIMP_VIEWABLE (iter->data)))
+            have_no_groups = TRUE;
+
+          if (! gimp_item_is_content_locked (GIMP_ITEM (iter->data)))
+            have_writable = TRUE;
+
+          if (have_no_groups && have_writable)
+            break;
+        }
+
       if (drawable)
         {
           writable = ! gimp_item_is_content_locked (GIMP_ITEM (drawable));
@@ -372,7 +389,7 @@ edit_actions_update (GimpActionGroup *group,
   SET_SENSITIVE ("edit-named-copy-visible", drawable);
   /*             "edit-named-paste" is always active */
 
-  SET_SENSITIVE ("edit-clear",              writable && !children);
+  SET_SENSITIVE ("edit-clear",              have_writable && have_no_groups);
   SET_SENSITIVE ("edit-fill-fg",            writable && !children);
   SET_SENSITIVE ("edit-fill-bg",            writable && !children);
   SET_SENSITIVE ("edit-fill-pattern",       writable && !children);
diff --git a/app/actions/edit-commands.c b/app/actions/edit-commands.c
index 4789337325..05d515e3fe 100644
--- a/app/actions/edit-commands.c
+++ b/app/actions/edit-commands.c
@@ -482,15 +482,28 @@ edit_clear_cmd_callback (GimpAction *action,
                          GVariant   *value,
                          gpointer    data)
 {
-  GimpImage    *image;
-  GimpDrawable *drawable;
-  return_if_no_drawable (image, drawable, data);
+  GimpImage *image;
+  GList     *drawables;
+  GList     *iter;
 
-  if (! check_drawable_alpha (drawable, data))
-    return;
+  return_if_no_drawables (image, drawables, data);
 
-  gimp_drawable_edit_clear (drawable, action_data_get_context (data));
+  for (iter = drawables; iter; iter = iter->next)
+    /* Return if any has a locked alpha. */
+    if (! check_drawable_alpha (iter->data, data))
+      return;
+
+  gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_PAINT,
+                               _("Clear"));
+
+  for (iter = drawables; iter; iter = iter->next)
+    if (! gimp_viewable_get_children (GIMP_VIEWABLE (iter->data)) &&
+        ! gimp_item_is_content_locked (GIMP_ITEM (iter->data)))
+      gimp_drawable_edit_clear (iter->data, action_data_get_context (data));
+
+  gimp_image_undo_group_end (image);
   gimp_image_flush (image);
+  g_list_free (drawables);
 }
 
 void


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