void gimp_text_buffer_set_markup (GimpTextBuffer *buffer, const gchar *markup) { g_return_if_fail (GIMP_IS_TEXT_BUFFER (buffer)); gimp_text_buffer_set_text (buffer, NULL); if (markup) { GtkTextTagTable *tag_table; GtkTextBuffer *content; GtkTextIter insert; GError *error = NULL; tag_table = gtk_text_buffer_get_tag_table (GTK_TEXT_BUFFER (buffer)); content = gtk_text_buffer_new (tag_table); gtk_text_buffer_get_start_iter (content, &insert); if (! gtk_text_buffer_deserialize (GTK_TEXT_BUFFER (buffer), content, buffer->markup_atom, &insert, (const guint8 *) markup, -1, &error)) { g_printerr ("EEK: %s\n", error->message); g_clear_error (&error); } else { GtkTextIter start, end; gimp_text_buffer_post_deserialize (buffer, content); gtk_text_buffer_get_bounds (content, &start, &end); gtk_text_buffer_get_start_iter (GTK_TEXT_BUFFER (buffer), &insert); gtk_text_buffer_insert_range (GTK_TEXT_BUFFER (buffer), &insert, &start, &end); } g_object_unref (content); } gimp_text_buffer_clear_insert_tags (buffer); }
static gboolean test_serialize_deserialize (GtkTextBuffer *buffer, GdkAtom atom, GError **error) { GtkTextIter start, end; guint8 *spew; gsize spew_length; gboolean success; gtk_text_buffer_get_bounds (buffer, &start, &end); spew = gtk_text_buffer_serialize (buffer, buffer, atom, &start, &end, &spew_length); success = gtk_text_buffer_deserialize (buffer, buffer, atom, &end, spew, spew_length, error); g_free (spew); return success; }