app: edit-clear multi-layers aware.

This commit is contained in:
Jehan 2020-07-30 21:18:54 +02:00
parent 62eedd41b4
commit bf7d555759
2 changed files with 37 additions and 7 deletions

View File

@ -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);

View File

@ -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