Usando el widget GtkHtml2

Tras una pregunta de como usar GtkHtml2 como widget en una aplicacion GTK+/GNOME, indague un poco en el código gGtkHtml2 y yelp, y pude crear un pequeño ejemplo que muestra un HTML dentro de una ventana.

Actualmente existen dos widgets orientados a procesar HTML y mostrar el resultado en un widget. Ellos son gtkhtml y gtkhtml2.

El ejemplo con el cual trabajé es respecto a gtkhtml2, y lo que hace es simplemente crear el documento, el widget que lo contendrá y muestra un texto con un poco de HTML. Si el texto, tiene enlaces no funcionará, porque es necesario implementar los callbacks "link_clicked" y "request_url", quizás mas adelantes :-)

Para compilar el código sería de la siguente forma:

$ gcc -Wall -g -o html `pkg-config --cflags --libs libgtkhtml-2.0` html.c

El código de html.c es:

<span style="color: #a020f0;">#include </span><span style="color: #ff00ff;"><gtk/gtk.h></span>
<span style="color: #a020f0;">#include </span><span style="color: #ff00ff;"><libgtkhtml/gtkhtml.h></span>
<span style="color: #2e8b57;"><strong>int</strong></span>
main (<span style="color: #2e8b57;"><strong>int</strong></span> argc, <span style="color: #2e8b57;"><strong>char</strong></span> **argv)
{
GtkWidget *window;
GtkWidget *html;
GtkWidget *scrolledwindow;
HtmlDocument *html_doc;
gchar *text = <span style="color: #ff00ff;">"<html><body><h1>Hola mundo!</h1></body></html>"</span>;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), <span style="color: #ff00ff;">"window"</span>);
gtk_window_set_default_size (GTK_WINDOW (window), <span style="color: #ff00ff;">350</span>, <span style="color: #ff00ff;">400</span>);
scrolledwindow = gtk_scrolled_window_new (<span style="color: #ff00ff;">NULL</span>, <span style="color: #ff00ff;">NULL</span>);
gtk_container_add (GTK_CONTAINER (window), scrolledwindow);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW
(scrolledwindow),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
g_signal_connect ((gpointer) window, <span style="color: #ff00ff;">"delete_event"</span>,
G_CALLBACK (gtk_main_quit), <span style="color: #ff00ff;">NULL</span>);
<span style="color: #0000ff;">/*</span><span style="color: #0000ff;"> Creacion del documento:</span>
<span style="color: #0000ff;">       Es importante el procedimiento:</span>
<span style="color: #0000ff;">       Abrir, Escribir, Cerrar.  Mientras no se cierre</span>
<span style="color: #0000ff;">       el documento no se mostrará.</span>
<span style="color: #0000ff;">    */</span>
html_doc = html_document_new ();
html_document_clear (html_doc);
html_document_open_stream (html_doc, <span style="color: #ff00ff;">"text/html"</span>);
html_document_write_stream (HTML_DOCUMENT (html_doc), text,
strlen (text));
html_document_close_stream (html_doc);
<span style="color: #0000ff;">/*</span><span style="color: #0000ff;"> Creacion de la vista y asociacion al documento </span>
<span style="color: #0000ff;">       html creado previamente </span>
<span style="color: #0000ff;">    */</span>
html = html_view_new ();
html_view_set_document (HTML_VIEW (html), html_doc);
gtk_container_add (GTK_CONTAINER (scrolledwindow), html);
gtk_widget_show_all (window);
gtk_main ();
<span style="color: #a52a2a;"><strong>return</strong></span> <span style="color: #ff00ff;">0</span>;
}