diff --git a/app/actions/layers-commands.c b/app/actions/layers-commands.c index d5d833b54e..f19b710860 100644 --- a/app/actions/layers-commands.c +++ b/app/actions/layers-commands.c @@ -1152,6 +1152,8 @@ layers_retrieve_cmd_callback (GimpAction *action, gimp_link_layer_monitor (GIMP_LINK_LAYER (iter->data)); else if (GIMP_IS_TEXT_LAYER (iter->data) && ! gimp_item_is_text_layer (iter->data)) gimp_text_layer_retrieve (GIMP_TEXT_LAYER (iter->data)); + else if (GIMP_IS_VECTOR_LAYER (iter->data) && ! gimp_item_is_vector_layer (iter->data)) + gimp_vector_layer_retrieve (GIMP_VECTOR_LAYER (iter->data)); } gimp_image_undo_group_end (image); diff --git a/app/path/gimpvectorlayer.c b/app/path/gimpvectorlayer.c index d550c5989c..99ef45d0ac 100644 --- a/app/path/gimpvectorlayer.c +++ b/app/path/gimpvectorlayer.c @@ -658,28 +658,48 @@ gimp_vector_layer_refresh (GimpVectorLayer *layer) void gimp_vector_layer_discard (GimpVectorLayer *layer) { + GimpImage *image; + g_return_if_fail (GIMP_IS_VECTOR_LAYER (layer)); g_return_if_fail (gimp_item_is_attached (GIMP_ITEM (layer))); - if (! layer->options) + if (layer->modified) return; - if (layer->options->path) - gimp_image_undo_push_vector_layer (gimp_item_get_image (GIMP_ITEM (layer)), - _("Discard Vector Information"), - layer, NULL); + image = gimp_item_get_image (GIMP_ITEM (layer)); - g_object_set (layer, "vector-layer-options", NULL, NULL); + gimp_image_undo_push_vector_layer_modified (image, NULL, layer); + g_object_set (layer, "modified", TRUE, NULL); gimp_viewable_invalidate_preview (GIMP_VIEWABLE (layer)); gimp_image_flush (gimp_item_get_image (GIMP_ITEM (layer))); } +void +gimp_vector_layer_retrieve (GimpVectorLayer *layer) +{ + GimpImage *image; + + g_return_if_fail (GIMP_IS_VECTOR_LAYER (layer)); + g_return_if_fail (gimp_item_is_attached (GIMP_ITEM (layer))); + + if (! layer->modified) + return; + + image = gimp_item_get_image (GIMP_ITEM (layer)); + + gimp_image_undo_push_vector_layer_modified (image, NULL, layer); + gimp_image_undo_push_drawable_mod (image, NULL, GIMP_DRAWABLE (layer), TRUE); + g_object_set (layer, "modified", FALSE, NULL); + + gimp_vector_layer_render (layer); + gimp_image_flush (image); +} + gboolean gimp_item_is_vector_layer (GimpItem *item) { - return (GIMP_IS_VECTOR_LAYER (item) && - GIMP_VECTOR_LAYER (item)->options); + return (GIMP_IS_VECTOR_LAYER (item) && ! GIMP_VECTOR_LAYER (item)->modified); } diff --git a/app/path/gimpvectorlayer.h b/app/path/gimpvectorlayer.h index 7b7ce1e073..79edbd7062 100644 --- a/app/path/gimpvectorlayer.h +++ b/app/path/gimpvectorlayer.h @@ -62,6 +62,7 @@ GimpVectorLayerOptions * gimp_vector_layer_get_options (GimpVectorLayer *layer) void gimp_vector_layer_refresh (GimpVectorLayer *layer); void gimp_vector_layer_discard (GimpVectorLayer *layer); +void gimp_vector_layer_retrieve (GimpVectorLayer *layer); gboolean gimp_item_is_vector_layer (GimpItem *item);