app: add gimp_image_equal_selected_drawables().

This can be used in various places where we want to check whether a
previously saved list of drawables is still the same list of selected
drawables. It used to be easily done with an equality test with a single
active drawable, but not anymore with a list of selected drawables.
This commit is contained in:
Jehan 2020-05-25 11:21:17 +02:00
parent 8bf8eb9dc0
commit 661f057603
2 changed files with 39 additions and 0 deletions

View File

@ -4479,6 +4479,42 @@ gimp_image_set_active_vectors (GimpImage *image,
return active_vectors;
}
/**
* gimp_image_equal_selected_drawables:
* @image:
* @drawables:
*
* Compare the list of @drawables with the selected drawables in @image
* (i.e. the result of gimp_image_equal_selected_drawables()).
* The order of the @drawables does not matter, only if the size and
* contents of the list is the same.
*/
gboolean
gimp_image_equal_selected_drawables (GimpImage *image,
GList *drawables)
{
GList *selected_drawables;
GList *iter;
gboolean equal = FALSE;
selected_drawables = gimp_image_get_selected_drawables (image);
if (g_list_length (drawables) == g_list_length (selected_drawables))
{
equal = TRUE;
for (iter = drawables; iter; iter = iter->next)
if (! g_list_find (selected_drawables, iter->data))
{
equal = FALSE;
break;
}
}
g_list_free (selected_drawables);
return equal;
}
GList *
gimp_image_get_selected_drawables (GimpImage *image)
{

View File

@ -379,6 +379,9 @@ void gimp_image_unset_selected_channels (GimpImage *image);
GimpVectors * gimp_image_set_active_vectors (GimpImage *image,
GimpVectors *vectors);
gboolean gimp_image_equal_selected_drawables (GimpImage *image,
GList *drawables);
GList * gimp_image_get_selected_drawables (GimpImage *image);
GList * gimp_image_get_selected_layers (GimpImage *image);
GList * gimp_image_get_selected_channels (GimpImage *image);