actions,core,file: Copy inactive filters
Previously we used gimp_drawable_has_filters () to detect if a layer had any filters set. However, this function only gets active filters, leading to filters with their visibility set to FALSE not being copied. This patch checks the number of children in the filter stack container instead to get an accurate filter count.
This commit is contained in:
@ -818,7 +818,8 @@ layers_duplicate_cmd_callback (GimpAction *action,
|
|||||||
_("Duplicate layers"));
|
_("Duplicate layers"));
|
||||||
for (iter = layers; iter; iter = iter->next)
|
for (iter = layers; iter; iter = iter->next)
|
||||||
{
|
{
|
||||||
GimpLayer *new_layer;
|
GimpLayer *new_layer;
|
||||||
|
GimpContainer *filters;
|
||||||
|
|
||||||
new_layer = GIMP_LAYER (gimp_item_duplicate (GIMP_ITEM (iter->data),
|
new_layer = GIMP_LAYER (gimp_item_duplicate (GIMP_ITEM (iter->data),
|
||||||
G_TYPE_FROM_INSTANCE (iter->data)));
|
G_TYPE_FROM_INSTANCE (iter->data)));
|
||||||
@ -834,7 +835,8 @@ layers_duplicate_cmd_callback (GimpAction *action,
|
|||||||
new_layers = g_list_prepend (new_layers, new_layer);
|
new_layers = g_list_prepend (new_layers, new_layer);
|
||||||
|
|
||||||
/* Import any attached layer effects */
|
/* Import any attached layer effects */
|
||||||
if (gimp_drawable_has_filters (GIMP_DRAWABLE (iter->data)))
|
filters = gimp_drawable_get_filters (GIMP_DRAWABLE (iter->data));
|
||||||
|
if (gimp_container_get_n_children (filters) > 0)
|
||||||
{
|
{
|
||||||
GList *filter_list;
|
GList *filter_list;
|
||||||
GimpContainer *filters;
|
GimpContainer *filters;
|
||||||
|
@ -493,15 +493,15 @@ gimp_edit_paste_get_tagged_layers (GimpImage *image,
|
|||||||
"gimp-image-copied-layer"));
|
"gimp-image-copied-layer"));
|
||||||
if (copied)
|
if (copied)
|
||||||
{
|
{
|
||||||
|
GimpContainer *filters;
|
||||||
|
|
||||||
layer = GIMP_LAYER (gimp_item_convert (GIMP_ITEM (iter->data),
|
layer = GIMP_LAYER (gimp_item_convert (GIMP_ITEM (iter->data),
|
||||||
image, layer_type));
|
image, layer_type));
|
||||||
|
|
||||||
if (gimp_drawable_has_filters (GIMP_DRAWABLE (iter->data)))
|
filters = gimp_drawable_get_filters (GIMP_DRAWABLE (iter->data));
|
||||||
|
if (gimp_container_get_n_children (filters) > 0)
|
||||||
{
|
{
|
||||||
GList *filter_list;
|
GList *filter_list;
|
||||||
GimpContainer *filters;
|
|
||||||
|
|
||||||
filters = gimp_drawable_get_filters (GIMP_DRAWABLE (iter->data));
|
|
||||||
|
|
||||||
for (filter_list = GIMP_LIST (filters)->queue->tail;
|
for (filter_list = GIMP_LIST (filters)->queue->tail;
|
||||||
filter_list;
|
filter_list;
|
||||||
|
@ -1330,10 +1330,11 @@ gimp_drawable_convert_type (GimpDrawable *drawable,
|
|||||||
gboolean push_undo,
|
gboolean push_undo,
|
||||||
GimpProgress *progress)
|
GimpProgress *progress)
|
||||||
{
|
{
|
||||||
const Babl *old_format;
|
const Babl *old_format;
|
||||||
const Babl *new_format;
|
const Babl *new_format;
|
||||||
gint old_bits;
|
gint old_bits;
|
||||||
gint new_bits;
|
gint new_bits;
|
||||||
|
GimpContainer *filters;
|
||||||
|
|
||||||
g_return_if_fail (GIMP_IS_DRAWABLE (drawable));
|
g_return_if_fail (GIMP_IS_DRAWABLE (drawable));
|
||||||
g_return_if_fail (GIMP_IS_IMAGE (dest_image));
|
g_return_if_fail (GIMP_IS_IMAGE (dest_image));
|
||||||
@ -1382,11 +1383,11 @@ gimp_drawable_convert_type (GimpDrawable *drawable,
|
|||||||
/* Update the masks of any filters */
|
/* Update the masks of any filters */
|
||||||
/* TODO: Move to gimp_drawable_real_convert_type () once it's updated
|
/* TODO: Move to gimp_drawable_real_convert_type () once it's updated
|
||||||
* to run for all GimpDrawable child classes */
|
* to run for all GimpDrawable child classes */
|
||||||
if (gimp_drawable_has_filters (drawable))
|
filters = gimp_drawable_get_filters (drawable);
|
||||||
|
if (gimp_container_get_n_children (filters) > 0)
|
||||||
{
|
{
|
||||||
const Babl *mask_format;
|
const Babl *mask_format;
|
||||||
GList *filter_list;
|
GList *filter_list;
|
||||||
GimpContainer *filters = gimp_drawable_get_filters (drawable);
|
|
||||||
GimpPrecision new_mask_precision;
|
GimpPrecision new_mask_precision;
|
||||||
|
|
||||||
mask_format = gimp_image_get_mask_format (dest_image);
|
mask_format = gimp_image_get_mask_format (dest_image);
|
||||||
|
@ -591,6 +591,7 @@ gimp_group_layer_duplicate (GimpItem *item,
|
|||||||
GimpItem *child = list->data;
|
GimpItem *child = list->data;
|
||||||
GimpItem *new_child;
|
GimpItem *new_child;
|
||||||
GimpLayerMask *mask;
|
GimpLayerMask *mask;
|
||||||
|
GimpContainer *filters;
|
||||||
|
|
||||||
new_child = gimp_item_duplicate (child, G_TYPE_FROM_INSTANCE (child));
|
new_child = gimp_item_duplicate (child, G_TYPE_FROM_INSTANCE (child));
|
||||||
|
|
||||||
@ -617,12 +618,10 @@ gimp_group_layer_duplicate (GimpItem *item,
|
|||||||
position++);
|
position++);
|
||||||
|
|
||||||
/* Copy any attached layer effects */
|
/* Copy any attached layer effects */
|
||||||
if (gimp_drawable_has_filters (GIMP_DRAWABLE (child)))
|
filters = gimp_drawable_get_filters (GIMP_DRAWABLE (child));
|
||||||
|
if (gimp_container_get_n_children (filters) > 0)
|
||||||
{
|
{
|
||||||
GList *filter_list;
|
GList *filter_list;
|
||||||
GimpContainer *filters;
|
|
||||||
|
|
||||||
filters = gimp_drawable_get_filters (GIMP_DRAWABLE (child));
|
|
||||||
|
|
||||||
for (filter_list = GIMP_LIST (filters)->queue->tail; filter_list;
|
for (filter_list = GIMP_LIST (filters)->queue->tail; filter_list;
|
||||||
filter_list = g_list_previous (filter_list))
|
filter_list = g_list_previous (filter_list))
|
||||||
|
@ -243,8 +243,9 @@ gimp_image_duplicate_layers (GimpImage *image,
|
|||||||
list;
|
list;
|
||||||
list = g_list_next (list))
|
list = g_list_next (list))
|
||||||
{
|
{
|
||||||
GimpLayer *layer = list->data;
|
GimpLayer *layer = list->data;
|
||||||
GimpLayer *new_layer;
|
GimpLayer *new_layer;
|
||||||
|
GimpContainer *filters;
|
||||||
|
|
||||||
if (gimp_layer_is_floating_sel (layer))
|
if (gimp_layer_is_floating_sel (layer))
|
||||||
continue;
|
continue;
|
||||||
@ -263,12 +264,10 @@ gimp_image_duplicate_layers (GimpImage *image,
|
|||||||
NULL, count++, FALSE);
|
NULL, count++, FALSE);
|
||||||
|
|
||||||
/* Import any attached layer effects */
|
/* Import any attached layer effects */
|
||||||
if (gimp_drawable_has_filters (GIMP_DRAWABLE (layer)))
|
filters = gimp_drawable_get_filters (GIMP_DRAWABLE (layer));
|
||||||
|
if (gimp_container_get_n_children (filters) > 0)
|
||||||
{
|
{
|
||||||
GList *filter_list;
|
GList *filter_list;
|
||||||
GimpContainer *filters;
|
|
||||||
|
|
||||||
filters = gimp_drawable_get_filters (GIMP_DRAWABLE (layer));
|
|
||||||
|
|
||||||
for (filter_list = GIMP_LIST (filters)->queue->tail; filter_list;
|
for (filter_list = GIMP_LIST (filters)->queue->tail; filter_list;
|
||||||
filter_list = g_list_previous (filter_list))
|
filter_list = g_list_previous (filter_list))
|
||||||
|
@ -341,10 +341,11 @@ gimp_image_new_copy_drawables (GimpImage *image,
|
|||||||
{
|
{
|
||||||
if (g_list_find (copied_drawables, iter->data))
|
if (g_list_find (copied_drawables, iter->data))
|
||||||
{
|
{
|
||||||
GimpLayer *new_layer;
|
GimpLayer *new_layer;
|
||||||
GType new_type;
|
GimpContainer *filters;
|
||||||
gboolean is_group;
|
GType new_type;
|
||||||
gboolean is_tagged;
|
gboolean is_group;
|
||||||
|
gboolean is_tagged;
|
||||||
|
|
||||||
if (GIMP_IS_LAYER (iter->data))
|
if (GIMP_IS_LAYER (iter->data))
|
||||||
new_type = G_TYPE_FROM_INSTANCE (iter->data);
|
new_type = G_TYPE_FROM_INSTANCE (iter->data);
|
||||||
@ -388,12 +389,10 @@ gimp_image_new_copy_drawables (GimpImage *image,
|
|||||||
if (gimp_layer_can_lock_alpha (new_layer))
|
if (gimp_layer_can_lock_alpha (new_layer))
|
||||||
gimp_layer_set_lock_alpha (new_layer, FALSE, FALSE);
|
gimp_layer_set_lock_alpha (new_layer, FALSE, FALSE);
|
||||||
|
|
||||||
if (gimp_drawable_has_filters (GIMP_DRAWABLE (iter->data)))
|
filters = gimp_drawable_get_filters (GIMP_DRAWABLE (iter->data));
|
||||||
|
if (gimp_container_get_n_children (filters) > 0)
|
||||||
{
|
{
|
||||||
GList *filter_list;
|
GList *filter_list;
|
||||||
GimpContainer *filters;
|
|
||||||
|
|
||||||
filters = gimp_drawable_get_filters (GIMP_DRAWABLE (iter->data));
|
|
||||||
|
|
||||||
for (filter_list = GIMP_LIST (filters)->queue->tail; filter_list;
|
for (filter_list = GIMP_LIST (filters)->queue->tail; filter_list;
|
||||||
filter_list = g_list_previous (filter_list))
|
filter_list = g_list_previous (filter_list))
|
||||||
|
@ -778,19 +778,20 @@ file_open_convert_items (GimpImage *dest_image,
|
|||||||
|
|
||||||
for (list = items; list; list = g_list_next (list))
|
for (list = items; list; list = g_list_next (list))
|
||||||
{
|
{
|
||||||
GimpItem *src = list->data;
|
GimpItem *src = list->data;
|
||||||
GimpItem *item;
|
GimpContainer *filters = NULL;
|
||||||
|
GimpItem *item;
|
||||||
|
|
||||||
item = gimp_item_convert (src, dest_image, G_TYPE_FROM_INSTANCE (src));
|
item = gimp_item_convert (src, dest_image, G_TYPE_FROM_INSTANCE (src));
|
||||||
|
|
||||||
/* Import any attached layer effects */
|
/* Import any attached layer effects */
|
||||||
if (GIMP_IS_DRAWABLE (item) &&
|
if (GIMP_IS_DRAWABLE (item))
|
||||||
gimp_drawable_has_filters (GIMP_DRAWABLE (src)))
|
filters = gimp_drawable_get_filters (GIMP_DRAWABLE (src));
|
||||||
{
|
|
||||||
GList *filter_list;
|
|
||||||
GimpContainer *filters;
|
|
||||||
|
|
||||||
filters = gimp_drawable_get_filters (GIMP_DRAWABLE (src));
|
if (filters != NULL &&
|
||||||
|
gimp_container_get_n_children (filters) > 0)
|
||||||
|
{
|
||||||
|
GList *filter_list;
|
||||||
|
|
||||||
for (filter_list = GIMP_LIST (filters)->queue->tail; filter_list;
|
for (filter_list = GIMP_LIST (filters)->queue->tail; filter_list;
|
||||||
filter_list = g_list_previous (filter_list))
|
filter_list = g_list_previous (filter_list))
|
||||||
|
Reference in New Issue
Block a user