[gimp] app: edit-clear multi-layers aware.
- From: Jehan <jehanp src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: edit-clear multi-layers aware.
- Date: Thu, 30 Jul 2020 19:19:34 +0000 (UTC)
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]