[gimp/gimp-2-10] app: add GimpImage::linked-items-changed signal



commit fbcabeb99f77d34357bdc93b4b5ad843318f28e1
Author: Ell <ell_se yahoo com>
Date:   Sat Jan 18 15:10:32 2020 +0200

    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.
    
    (cherry picked from commit 7d6737fe9ac55010d41e9d90bb39cd90f4e85771)

 app/core/gimpimage.c | 19 +++++++++++++++++++
 app/core/gimpimage.h |  2 ++
 app/core/gimpitem.c  | 12 ++++++------
 3 files changed, 27 insertions(+), 6 deletions(-)
---
diff --git a/app/core/gimpimage.c b/app/core/gimpimage.c
index b807273037..a13c99afa3 100644
--- a/app/core/gimpimage.c
+++ b/app/core/gimpimage.c
@@ -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,
@@ -353,6 +354,15 @@ gimp_image_class_init (GimpImageClass *klass)
                   gimp_marshal_VOID__VOID,
                   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),
@@ -606,6 +616,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;
@@ -3293,6 +3304,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,
diff --git a/app/core/gimpimage.h b/app/core/gimpimage.h
index 526edf5805..14baa0428a 100644
--- a/app/core/gimpimage.h
+++ b/app/core/gimpimage.h
@@ -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,
@@ -245,6 +246,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,
diff --git a/app/core/gimpitem.c b/app/core/gimpitem.c
index 2870a9edd9..d38b8e3ef2 100644
--- a/app/core/gimpitem.c
+++ b/app/core/gimpitem.c
@@ -2334,18 +2334,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");
     }
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]