diff --git a/app/core/gimpdrawable-filters.c b/app/core/gimpdrawable-filters.c index 363b39a873..ab32c33d86 100644 --- a/app/core/gimpdrawable-filters.c +++ b/app/core/gimpdrawable-filters.c @@ -299,7 +299,8 @@ gimp_drawable_merge_filters (GimpDrawable *drawable) */ if (GIMP_LIST (drawable->private->filter_stack)->queue->head) { - GimpDrawableFilter *filter = NULL; + GimpDrawableFilter *filter = NULL; + gboolean add_alpha = FALSE; for (list = GIMP_LIST (drawable->private->filter_stack)->queue->tail; list; @@ -307,7 +308,12 @@ gimp_drawable_merge_filters (GimpDrawable *drawable) { if (GIMP_IS_DRAWABLE_FILTER (list->data) && gimp_filter_get_active (GIMP_FILTER (list->data))) - filter = list->data; + { + filter = list->data; + + if (! add_alpha) + add_alpha = gimp_drawable_filter_get_add_alpha (filter); + } } if (filter) @@ -317,6 +323,9 @@ gimp_drawable_merge_filters (GimpDrawable *drawable) GeglNode *output; GeglRectangle output_rect; + if (GIMP_IS_LAYER (drawable) && add_alpha) + gimp_layer_add_alpha (GIMP_LAYER (drawable)); + graph = gimp_filter_stack_get_graph (GIMP_FILTER_STACK (drawable->private->filter_stack)); output = gegl_node_get_output_proxy (graph, "output"); output_rect = gegl_node_get_bounding_box (output); diff --git a/app/core/gimpdrawablefilter.c b/app/core/gimpdrawablefilter.c index c8fcf11419..2c4d4ad816 100644 --- a/app/core/gimpdrawablefilter.c +++ b/app/core/gimpdrawablefilter.c @@ -530,6 +530,8 @@ gimp_drawable_filter_duplicate (GimpDrawable *drawable, prior_filter->composite_mode); gimp_drawable_filter_set_region (filter, prior_filter->region); + gimp_drawable_filter_set_add_alpha (filter, + prior_filter->add_alpha); gimp_filter_set_active (GIMP_FILTER (filter), gimp_filter_get_active (GIMP_FILTER (prior_filter))); gimp_filter_set_is_last_node (GIMP_FILTER (filter), @@ -1127,6 +1129,14 @@ gimp_drawable_filter_update (GimpDrawableFilter *filter, return (*error != NULL); } +gboolean +gimp_drawable_filter_get_add_alpha (GimpDrawableFilter *filter) +{ + g_return_val_if_fail (GIMP_IS_DRAWABLE_FILTER (filter), FALSE); + + return filter->add_alpha; +} + void gimp_drawable_filter_set_add_alpha (GimpDrawableFilter *filter, gboolean add_alpha) diff --git a/app/core/gimpdrawablefilter.h b/app/core/gimpdrawablefilter.h index feb711960a..c86658712e 100644 --- a/app/core/gimpdrawablefilter.h +++ b/app/core/gimpdrawablefilter.h @@ -126,6 +126,7 @@ gboolean gimp_drawable_filter_update (GimpDrawableFilter *filter, const gchar **auxinputnames, const GimpDrawable **auxinputs, GError **error); +gboolean gimp_drawable_filter_get_add_alpha (GimpDrawableFilter *filter); void gimp_drawable_filter_set_add_alpha (GimpDrawableFilter *filter, gboolean add_alpha);