void gimp_text_layer_xcf_save_prepare (GimpTextLayer *layer) { GimpText *text; g_return_if_fail (GIMP_IS_TEXT_LAYER (layer)); /* If the layer has a text parasite already, it wasn't changed and we * can simply save the original parasite back which is still attached. */ if (layer->text_parasite) return; text = gimp_text_layer_get_text (layer); if (text) { GimpParasite *parasite = gimp_text_to_parasite (text); /* Don't push an undo because the parasite only exists temporarily * while the text layer is saved to XCF. */ gimp_item_parasite_attach (GIMP_ITEM (layer), parasite, FALSE); gimp_parasite_free (parasite); } }
void gimp_text_layer_set (GimpTextLayer *layer, const gchar *undo_desc, const gchar *first_property_name, ...) { GimpImage *image; GimpText *text; va_list var_args; g_return_if_fail (gimp_item_is_text_layer (GIMP_ITEM (layer))); g_return_if_fail (gimp_item_is_attached (GIMP_ITEM (layer))); text = gimp_text_layer_get_text (layer); if (! text) return; image = gimp_item_get_image (GIMP_ITEM (layer)); gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_TEXT, undo_desc); g_object_freeze_notify (G_OBJECT (layer)); if (layer->modified) { gimp_image_undo_push_text_layer_modified (image, NULL, layer); /* pass copy_tiles = TRUE so we not only ref the tiles; after * being a text layer again, undo doesn't care about the * layer's pixels any longer because they are generated, so * changing the text would happily overwrite the layer's * pixels, changing the pixels on the undo stack too without * any chance to ever undo again. */ gimp_image_undo_push_drawable_mod (image, NULL, GIMP_DRAWABLE (layer), TRUE); } gimp_image_undo_push_text_layer (image, undo_desc, layer, NULL); va_start (var_args, first_property_name); g_object_set_valist (G_OBJECT (text), first_property_name, var_args); va_end (var_args); g_object_set (layer, "modified", FALSE, NULL); g_object_thaw_notify (G_OBJECT (layer)); gimp_image_undo_group_end (image); }
static void layer_options_dialog_toggle_rename (GtkWidget *widget, LayerOptionsDialog *options) { if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) && gimp_item_is_text_layer (GIMP_ITEM (options->layer))) { GimpTextLayer *text_layer = GIMP_TEXT_LAYER (options->layer); GimpText *text = gimp_text_layer_get_text (text_layer); if (text && text->text) { gchar *name = gimp_utf8_strtrim (text->text, 30); gtk_entry_set_text (GTK_ENTRY (options->name_entry), name); g_free (name); } } }