diff --git a/ChangeLog b/ChangeLog index 144e958e7c1473f975b053e1f6f9b424038e7cbf..d2352b0ea03f153ebb203b28c75fb50235103fe0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2002-09-01 Michael Natterer + + Refcount layer masks correctly. Fixes layer mask undo. + + * app/core/gimplayer.c (gimp_layer_add_mask): ref the mask. + + * app/xcf/xcf-load.c + * app/gui/layers-commands.c + * tools/pdbgen/pdb/image.pdb: unref layer masks after adding them. + + * app/pdb/image_cmds.c: regenerated. + 2002-08-30 Michael Natterer * app/widgets/Makefile.am diff --git a/app/actions/layers-commands.c b/app/actions/layers-commands.c index 9c2d2f85eaabf4a8be8549e936488fc34d1e2466..8ae0b31f2485c6f5ca4fd77e691e8b4652b33a21 100644 --- a/app/actions/layers-commands.c +++ b/app/actions/layers-commands.c @@ -581,7 +581,7 @@ layers_new_layer_query (GimpImage *gimage, gimp_viewable_dialog_new (GIMP_VIEWABLE (gimage), _("New Layer"), "new_layer_options", GTK_STOCK_NEW, - _("New Layer Options"), + _("Create a New Layer"), gimp_standard_help_func, "dialogs/layers/new_layer.html", @@ -853,6 +853,8 @@ add_mask_query_ok_callback (GtkWidget *widget, { mask = gimp_layer_create_mask (layer, options->add_mask_type); gimp_layer_add_mask (layer, mask, TRUE); + g_object_unref (G_OBJECT (mask)); + gimp_image_flush (gimage); } @@ -876,9 +878,9 @@ layers_add_mask_query (GimpLayer *layer) /* The dialog */ options->query_box = gimp_viewable_dialog_new (GIMP_VIEWABLE (layer), - _("Add Mask"), "add_mask_options", + _("Add Layer Mask"), "add_mask_options", GTK_STOCK_ADD, - _("Add Layer Mask Options"), + _("Add a Mask to the Layer"), gimp_standard_help_func, "dialogs/layers/add_layer_mask.html", diff --git a/app/core/gimplayer.c b/app/core/gimplayer.c index fcc245c3bb0311c52d19cc57f402961b3936fc6f..90e0643cac6cf70414efcfcd2c6993a49cb4515d 100644 --- a/app/core/gimplayer.c +++ b/app/core/gimplayer.c @@ -589,6 +589,7 @@ gimp_layer_add_mask (GimpLayer *layer, } layer->mask = mask; + g_object_ref (G_OBJECT (layer->mask)); gimp_layer_mask_set_layer (mask, layer); diff --git a/app/gui/layers-commands.c b/app/gui/layers-commands.c index 9c2d2f85eaabf4a8be8549e936488fc34d1e2466..8ae0b31f2485c6f5ca4fd77e691e8b4652b33a21 100644 --- a/app/gui/layers-commands.c +++ b/app/gui/layers-commands.c @@ -581,7 +581,7 @@ layers_new_layer_query (GimpImage *gimage, gimp_viewable_dialog_new (GIMP_VIEWABLE (gimage), _("New Layer"), "new_layer_options", GTK_STOCK_NEW, - _("New Layer Options"), + _("Create a New Layer"), gimp_standard_help_func, "dialogs/layers/new_layer.html", @@ -853,6 +853,8 @@ add_mask_query_ok_callback (GtkWidget *widget, { mask = gimp_layer_create_mask (layer, options->add_mask_type); gimp_layer_add_mask (layer, mask, TRUE); + g_object_unref (G_OBJECT (mask)); + gimp_image_flush (gimage); } @@ -876,9 +878,9 @@ layers_add_mask_query (GimpLayer *layer) /* The dialog */ options->query_box = gimp_viewable_dialog_new (GIMP_VIEWABLE (layer), - _("Add Mask"), "add_mask_options", + _("Add Layer Mask"), "add_mask_options", GTK_STOCK_ADD, - _("Add Layer Mask Options"), + _("Add a Mask to the Layer"), gimp_standard_help_func, "dialogs/layers/add_layer_mask.html", diff --git a/app/pdb/image_cmds.c b/app/pdb/image_cmds.c index 52f467ae01f3cb9748f54ac96d3aa4e1f34fb148..693daf949d7e04bc5158a3d25b88ade0a20cac58 100644 --- a/app/pdb/image_cmds.c +++ b/app/pdb/image_cmds.c @@ -1605,7 +1605,12 @@ image_add_layer_mask_invoker (Gimp *gimp, success = FALSE; if (success) - success = gimp_layer_add_mask (layer, mask, TRUE) != NULL; + { + success = gimp_layer_add_mask (layer, mask, TRUE) != NULL; + + if (success) + g_object_unref (G_OBJECT (mask)); + } return procedural_db_return_args (&image_add_layer_mask_proc, success); } diff --git a/app/xcf/xcf-load.c b/app/xcf/xcf-load.c index 8d19d4077317c3d32316a8963b8e0b0397586b4e..f2b7cf82c6452d8edc9f04e520d86a7d6fee31f3 100644 --- a/app/xcf/xcf-load.c +++ b/app/xcf/xcf-load.c @@ -903,6 +903,7 @@ xcf_load_layer (XcfInfo *info, GIMP_DRAWABLE (layer_mask)->offset_y = GIMP_DRAWABLE (layer)->offset_y; gimp_layer_add_mask (layer, layer_mask, FALSE); + g_object_unref (G_OBJECT (layer)); layer->mask->apply_mask = apply_mask; layer->mask->edit_mask = edit_mask; diff --git a/tools/pdbgen/pdb/image.pdb b/tools/pdbgen/pdb/image.pdb index dcc05968e5024fc792489e751139d96f34477922..4c310bd919769ad4a974f543e0fecfe7b15e5023 100644 --- a/tools/pdbgen/pdb/image.pdb +++ b/tools/pdbgen/pdb/image.pdb @@ -677,7 +677,12 @@ HELP %invoke = ( code => <<'CODE' -success = gimp_layer_add_mask (layer, mask, TRUE) != NULL; +{ + success = gimp_layer_add_mask (layer, mask, TRUE) != NULL; + + if (success) + g_object_unref (G_OBJECT (mask)); +} CODE ); }