From 545b794b72ba241fe921aa4d62892a8faff5b10a Mon Sep 17 00:00:00 2001 From: Jehan Date: Tue, 10 Jan 2023 19:32:14 +0100 Subject: [PATCH] app: setting color tags actions now multi-item aware. --- app/actions/channels-commands.c | 7 +++---- app/actions/items-commands.c | 32 +++++++++++++++++++++++--------- app/actions/items-commands.h | 2 +- app/actions/layers-commands.c | 5 +---- app/actions/vectors-commands.c | 7 +++---- 5 files changed, 31 insertions(+), 22 deletions(-) diff --git a/app/actions/channels-commands.c b/app/actions/channels-commands.c index 1769d7c876..83996da73b 100644 --- a/app/actions/channels-commands.c +++ b/app/actions/channels-commands.c @@ -526,14 +526,13 @@ channels_color_tag_cmd_callback (GimpAction *action, gpointer data) { GimpImage *image; - GimpChannel *channel; + GList *channels; GimpColorTag color_tag; - return_if_no_channel (image, channel, data); + return_if_no_channels (image, channels, data); color_tag = (GimpColorTag) g_variant_get_int32 (value); - items_color_tag_cmd_callback (action, image, GIMP_ITEM (channel), - color_tag); + items_color_tag_cmd_callback (action, image, channels, color_tag); } void diff --git a/app/actions/items-commands.c b/app/actions/items-commands.c index 67eb2159da..9cd565f50b 100644 --- a/app/actions/items-commands.c +++ b/app/actions/items-commands.c @@ -220,23 +220,37 @@ items_lock_position_cmd_callback (GimpAction *action, void items_color_tag_cmd_callback (GimpAction *action, GimpImage *image, - GimpItem *item, + GList *items, GimpColorTag color_tag) { - if (color_tag != gimp_item_get_color_tag (item)) - { - GimpUndo *undo; - gboolean push_undo = TRUE; + GimpUndo *undo; + gboolean push_undo = TRUE; + GList *iter; + if (g_list_length (items) == 1) + { undo = gimp_image_undo_can_compress (image, GIMP_TYPE_ITEM_UNDO, GIMP_UNDO_ITEM_COLOR_TAG); - if (undo && GIMP_ITEM_UNDO (undo)->item == item) + if (undo && GIMP_ITEM_UNDO (undo)->item == GIMP_ITEM (items->data)) push_undo = FALSE; - - gimp_item_set_color_tag (item, color_tag, push_undo); - gimp_image_flush (image); } + else + { + /* TODO: undo groups cannot be compressed so far. */ + gimp_image_undo_group_start (image, + GIMP_UNDO_GROUP_ITEM_PROPERTIES, + "Item color tag"); + } + + for (iter = items; iter; iter = iter->next) + if (color_tag != gimp_item_get_color_tag (iter->data)) + gimp_item_set_color_tag (iter->data, color_tag, push_undo); + + if (g_list_length (items) == 1) + gimp_image_undo_group_end (image); + + gimp_image_flush (image); } void diff --git a/app/actions/items-commands.h b/app/actions/items-commands.h index 91c6dba7c5..8c64adaa8d 100644 --- a/app/actions/items-commands.h +++ b/app/actions/items-commands.h @@ -34,7 +34,7 @@ void items_lock_position_cmd_callback (GimpAction *action, void items_color_tag_cmd_callback (GimpAction *action, GimpImage *image, - GimpItem *item, + GList *items, GimpColorTag color_tag); void items_fill_cmd_callback (GimpAction *action, diff --git a/app/actions/layers-commands.c b/app/actions/layers-commands.c index e9ef3f55b5..d020eb3f33 100644 --- a/app/actions/layers-commands.c +++ b/app/actions/layers-commands.c @@ -2105,15 +2105,12 @@ layers_color_tag_cmd_callback (GimpAction *action, { GimpImage *image; GList *layers; - GList *iter; GimpColorTag color_tag; return_if_no_layers (image, layers, data); color_tag = (GimpColorTag) g_variant_get_int32 (value); - for (iter = layers; iter; iter = iter->next) - items_color_tag_cmd_callback (action, image, GIMP_ITEM (iter->data), - color_tag); + items_color_tag_cmd_callback (action, image, layers, color_tag); } diff --git a/app/actions/vectors-commands.c b/app/actions/vectors-commands.c index 957e185243..7d9ad56dde 100644 --- a/app/actions/vectors-commands.c +++ b/app/actions/vectors-commands.c @@ -758,14 +758,13 @@ vectors_color_tag_cmd_callback (GimpAction *action, gpointer data) { GimpImage *image; - GimpVectors *vectors; + GList *vectors; GimpColorTag color_tag; - return_if_no_vectors (image, vectors, data); + return_if_no_vectors_list (image, vectors, data); color_tag = (GimpColorTag) g_variant_get_int32 (value); - items_color_tag_cmd_callback (action, image, GIMP_ITEM (vectors), - color_tag); + items_color_tag_cmd_callback (action, image, vectors, color_tag); }