From 9bd530a2b197114adede217bf0fc76e57d7fcd78 Mon Sep 17 00:00:00 2001 From: Jehan Date: Mon, 13 Apr 2020 17:11:57 +0200 Subject: [PATCH] app: add gimp_image_get_selected_drawables(). It is meant to replace gimp_image_get_active_drawable() in the end. Note that I am not fully sure yet what we should do with multiple layers selected, when some of them have a mask which is being edited. --- app/core/gimpimage.c | 41 +++++++++++++++++++++++++++++++++++++++++ app/core/gimpimage.h | 1 + 2 files changed, 42 insertions(+) diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c index 234cfc29eb..dcd5fef2e3 100644 --- a/app/core/gimpimage.c +++ b/app/core/gimpimage.c @@ -4472,6 +4472,47 @@ gimp_image_set_active_vectors (GimpImage *image, return active_vectors; } +GList * +gimp_image_get_selected_drawables (GimpImage *image) +{ + GimpImagePrivate *private; + GList *selected_channels; + GList *selected_layers; + + g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL); + + private = GIMP_IMAGE_GET_PRIVATE (image); + + selected_channels = gimp_item_tree_get_selected_items (private->channels); + selected_layers = gimp_item_tree_get_selected_items (private->layers); + + /* If there is an active channel (a saved selection, etc.), + * we ignore the active layer + */ + if (selected_channels) + { + return selected_channels; + } + else if (selected_layers) + { + if (g_list_length (selected_layers) == 1) + { + /* As a special case, if only one layer is selected and mask + * edit is in progress, we return the mask as selected + * drawable instead of the layer. + */ + GimpLayer *layer = GIMP_LAYER (selected_layers->data); + GimpLayerMask *mask = gimp_layer_get_mask (layer); + + if (mask && gimp_layer_get_edit_mask (layer)) + selected_layers->data = mask; + } + return selected_layers; + } + + return NULL; +} + GList * gimp_image_get_selected_layers (GimpImage *image) { diff --git a/app/core/gimpimage.h b/app/core/gimpimage.h index 33d973a3ba..58e1be8eaa 100644 --- a/app/core/gimpimage.h +++ b/app/core/gimpimage.h @@ -379,6 +379,7 @@ void gimp_image_unset_selected_channels (GimpImage *image); GimpVectors * gimp_image_set_active_vectors (GimpImage *image, GimpVectors *vectors); +GList * gimp_image_get_selected_drawables (GimpImage *image); GList * gimp_image_get_selected_layers (GimpImage *image); GList * gimp_image_get_selected_channels (GimpImage *image); GList * gimp_image_get_selected_vectors (GimpImage *image);