app: add GimpImage::linked-items-changed signal

Add a new GimpImage::linked-items-changed signal, which is emitted
whenever the set of linked items in an image changes.
This commit is contained in:
Ell 2020-01-18 15:10:32 +02:00
parent fcc1c3d380
commit 7d6737fe9a
3 changed files with 27 additions and 6 deletions

View File

@ -102,6 +102,7 @@ enum
ACTIVE_LAYER_CHANGED,
ACTIVE_CHANNEL_CHANGED,
ACTIVE_VECTORS_CHANGED,
LINKED_ITEMS_CHANGED,
COMPONENT_VISIBILITY_CHANGED,
COMPONENT_ACTIVE_CHANGED,
MASK_CHANGED,
@ -346,6 +347,15 @@ gimp_image_class_init (GimpImageClass *klass)
NULL, NULL, NULL,
G_TYPE_NONE, 0);
gimp_image_signals[LINKED_ITEMS_CHANGED] =
g_signal_new ("linked-items-changed",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (GimpImageClass, linked_items_changed),
NULL, NULL,
gimp_marshal_VOID__VOID,
G_TYPE_NONE, 0);
gimp_image_signals[COMPONENT_VISIBILITY_CHANGED] =
g_signal_new ("component-visibility-changed",
G_TYPE_FROM_CLASS (klass),
@ -595,6 +605,7 @@ gimp_image_class_init (GimpImageClass *klass)
klass->active_layer_changed = NULL;
klass->active_channel_changed = NULL;
klass->active_vectors_changed = NULL;
klass->linked_items_changed = NULL;
klass->component_visibility_changed = NULL;
klass->component_active_changed = NULL;
klass->mask_changed = NULL;
@ -3282,6 +3293,14 @@ gimp_image_alpha_changed (GimpImage *image)
g_signal_emit (image, gimp_image_signals[ALPHA_CHANGED], 0);
}
void
gimp_image_linked_items_changed (GimpImage *image)
{
g_return_if_fail (GIMP_IS_IMAGE (image));
g_signal_emit (image, gimp_image_signals[LINKED_ITEMS_CHANGED], 0);
}
void
gimp_image_invalidate (GimpImage *image,
gint x,

View File

@ -57,6 +57,7 @@ struct _GimpImageClass
void (* active_layer_changed) (GimpImage *image);
void (* active_channel_changed) (GimpImage *image);
void (* active_vectors_changed) (GimpImage *image);
void (* linked_items_changed) (GimpImage *image);
void (* component_visibility_changed) (GimpImage *image,
GimpChannelType channel);
void (* component_active_changed) (GimpImage *image,
@ -248,6 +249,7 @@ GimpComponentMask gimp_image_get_visible_mask (GimpImage *image);
void gimp_image_mode_changed (GimpImage *image);
void gimp_image_precision_changed (GimpImage *image);
void gimp_image_alpha_changed (GimpImage *image);
void gimp_image_linked_items_changed (GimpImage *image);
void gimp_image_invalidate (GimpImage *image,
gint x,
gint y,

View File

@ -2328,18 +2328,18 @@ gimp_item_set_linked (GimpItem *item,
if (gimp_item_get_linked (item) != linked)
{
if (push_undo && gimp_item_is_attached (item))
{
GimpImage *image = gimp_item_get_image (item);
GimpImage *image = gimp_item_get_image (item);
if (image)
gimp_image_undo_push_item_linked (image, NULL, item);
}
if (push_undo && image && gimp_item_is_attached (item))
gimp_image_undo_push_item_linked (image, NULL, item);
GET_PRIVATE (item)->linked = linked;
g_signal_emit (item, gimp_item_signals[LINKED_CHANGED], 0);
if (image)
gimp_image_linked_items_changed (image);
g_object_notify (G_OBJECT (item), "linked");
}
}