From b23afad4726a54f8fadd951bf01aabaea90a3b4c Mon Sep 17 00:00:00 2001 From: scott Date: Sat, 14 Feb 1998 19:19:16 +0000 Subject: [PATCH] Proper refcounting for layer masks. Well, ok, almost proper. :) --sg --- app/core/gimplayer.c | 21 ++++++++++++++++++--- app/core/gimplayer.h | 2 ++ app/gimplayer.c | 21 ++++++++++++++++++--- app/gimplayer.h | 2 ++ app/layer.c | 21 ++++++++++++++++++--- app/layer.h | 2 ++ 6 files changed, 60 insertions(+), 9 deletions(-) diff --git a/app/core/gimplayer.c b/app/core/gimplayer.c index 0529c8bb77..ffe11d5843 100644 --- a/app/core/gimplayer.c +++ b/app/core/gimplayer.c @@ -353,7 +353,7 @@ layer_copy (layer, add_alpha) /* duplicate the layer mask if necessary */ if (layer->mask) { - new_layer->mask = layer_mask_copy (layer->mask); + new_layer->mask = layer_mask_ref (layer_mask_copy (layer->mask)); new_layer->apply_mask = layer->apply_mask; new_layer->edit_mask = layer->edit_mask; new_layer->show_mask = layer->show_mask; @@ -428,7 +428,7 @@ layer_add_mask (layer, mask) if (layer->mask) return NULL; - layer->mask = mask; + layer->mask = layer_mask_ref (mask); mask->layer = layer; /* Set the application mode in the layer to "apply" */ @@ -1429,7 +1429,22 @@ layer_mask_get_ID (int ID) void layer_mask_delete (LayerMask * layermask) { - gtk_object_destroy (GTK_OBJECT (layermask)); + gtk_object_unref (GTK_OBJECT (layermask)); +} + +LayerMask * +layer_mask_ref (LayerMask *mask) +{ + gtk_object_ref (GTK_OBJECT (mask)); + gtk_object_sink (GTK_OBJECT (mask)); + return mask; +} + + +void +layer_mask_unref (LayerMask *mask) +{ + gtk_object_unref (GTK_OBJECT (mask)); } void diff --git a/app/core/gimplayer.h b/app/core/gimplayer.h index 8f44b5c34b..da59ac0e85 100644 --- a/app/core/gimplayer.h +++ b/app/core/gimplayer.h @@ -118,6 +118,8 @@ LayerMask * layer_mask_new (int, int, int, char *, LayerMask * layer_mask_copy (LayerMask *); void layer_mask_delete (LayerMask *); LayerMask * layer_mask_get_ID (int); +LayerMask * layer_mask_ref (LayerMask *); +void layer_mask_unref (LayerMask *); /* access functions */ diff --git a/app/gimplayer.c b/app/gimplayer.c index 0529c8bb77..ffe11d5843 100644 --- a/app/gimplayer.c +++ b/app/gimplayer.c @@ -353,7 +353,7 @@ layer_copy (layer, add_alpha) /* duplicate the layer mask if necessary */ if (layer->mask) { - new_layer->mask = layer_mask_copy (layer->mask); + new_layer->mask = layer_mask_ref (layer_mask_copy (layer->mask)); new_layer->apply_mask = layer->apply_mask; new_layer->edit_mask = layer->edit_mask; new_layer->show_mask = layer->show_mask; @@ -428,7 +428,7 @@ layer_add_mask (layer, mask) if (layer->mask) return NULL; - layer->mask = mask; + layer->mask = layer_mask_ref (mask); mask->layer = layer; /* Set the application mode in the layer to "apply" */ @@ -1429,7 +1429,22 @@ layer_mask_get_ID (int ID) void layer_mask_delete (LayerMask * layermask) { - gtk_object_destroy (GTK_OBJECT (layermask)); + gtk_object_unref (GTK_OBJECT (layermask)); +} + +LayerMask * +layer_mask_ref (LayerMask *mask) +{ + gtk_object_ref (GTK_OBJECT (mask)); + gtk_object_sink (GTK_OBJECT (mask)); + return mask; +} + + +void +layer_mask_unref (LayerMask *mask) +{ + gtk_object_unref (GTK_OBJECT (mask)); } void diff --git a/app/gimplayer.h b/app/gimplayer.h index 8f44b5c34b..da59ac0e85 100644 --- a/app/gimplayer.h +++ b/app/gimplayer.h @@ -118,6 +118,8 @@ LayerMask * layer_mask_new (int, int, int, char *, LayerMask * layer_mask_copy (LayerMask *); void layer_mask_delete (LayerMask *); LayerMask * layer_mask_get_ID (int); +LayerMask * layer_mask_ref (LayerMask *); +void layer_mask_unref (LayerMask *); /* access functions */ diff --git a/app/layer.c b/app/layer.c index 0529c8bb77..ffe11d5843 100644 --- a/app/layer.c +++ b/app/layer.c @@ -353,7 +353,7 @@ layer_copy (layer, add_alpha) /* duplicate the layer mask if necessary */ if (layer->mask) { - new_layer->mask = layer_mask_copy (layer->mask); + new_layer->mask = layer_mask_ref (layer_mask_copy (layer->mask)); new_layer->apply_mask = layer->apply_mask; new_layer->edit_mask = layer->edit_mask; new_layer->show_mask = layer->show_mask; @@ -428,7 +428,7 @@ layer_add_mask (layer, mask) if (layer->mask) return NULL; - layer->mask = mask; + layer->mask = layer_mask_ref (mask); mask->layer = layer; /* Set the application mode in the layer to "apply" */ @@ -1429,7 +1429,22 @@ layer_mask_get_ID (int ID) void layer_mask_delete (LayerMask * layermask) { - gtk_object_destroy (GTK_OBJECT (layermask)); + gtk_object_unref (GTK_OBJECT (layermask)); +} + +LayerMask * +layer_mask_ref (LayerMask *mask) +{ + gtk_object_ref (GTK_OBJECT (mask)); + gtk_object_sink (GTK_OBJECT (mask)); + return mask; +} + + +void +layer_mask_unref (LayerMask *mask) +{ + gtk_object_unref (GTK_OBJECT (mask)); } void diff --git a/app/layer.h b/app/layer.h index 8f44b5c34b..da59ac0e85 100644 --- a/app/layer.h +++ b/app/layer.h @@ -118,6 +118,8 @@ LayerMask * layer_mask_new (int, int, int, char *, LayerMask * layer_mask_copy (LayerMask *); void layer_mask_delete (LayerMask *); LayerMask * layer_mask_get_ID (int); +LayerMask * layer_mask_ref (LayerMask *); +void layer_mask_unref (LayerMask *); /* access functions */