From ae02db90a366dac856dc8e538dcf1b7d337a7f6c Mon Sep 17 00:00:00 2001 From: Alx Sa Date: Sat, 31 May 2025 12:38:47 +0000 Subject: [PATCH] core: Don't merge floating selection as filter Floating selections are added to the same stack as non-destructive filters. While the GUI prevents merging filters when there is a floating selection, gimp_drawable_merge_filters () did not explicitly prevent this. This patch replaces the while loop to merge filters with a for loop, and explicitly checks if the item in the stack is a drawable filter (and not a temporary one). --- app/core/gimpdrawable-filters.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/app/core/gimpdrawable-filters.c b/app/core/gimpdrawable-filters.c index 1d445b6689..7e32f61a17 100644 --- a/app/core/gimpdrawable-filters.c +++ b/app/core/gimpdrawable-filters.c @@ -328,12 +328,20 @@ gimp_drawable_merge_filters (GimpDrawable *drawable) g_clear_object (&buffer); } - while ((list = GIMP_LIST (drawable->private->filter_stack)->queue->tail)) + for (list = GIMP_LIST (drawable->private->filter_stack)->queue->tail; + list; + list = list->prev) { - gimp_image_undo_push_filter_remove (gimp_item_get_image (GIMP_ITEM (drawable)), - _("Merge filter"), drawable, list->data); + if (GIMP_IS_DRAWABLE_FILTER (list->data) && + ! gimp_drawable_filter_get_temporary (list->data)) - gimp_drawable_remove_filter (drawable, GIMP_FILTER (list->data)); + { + gimp_image_undo_push_filter_remove (gimp_item_get_image (GIMP_ITEM (drawable)), + _("Merge filter"), + drawable, list->data); + gimp_drawable_remove_filter (drawable, + GIMP_FILTER (list->data)); + } } }