#include /* clipped from my threaded network code, called by http_get_image */ if ((id = g_async_queue_try_pop (jc->jn->image_queue))) { if (id->image->data) html_stream_write (id->stream, id->image->data, id->image->len); g_free (id->image->data); g_free (id->url); g_free (id); } /* end clip */ void url_requested (HtmlDocument *doc, const gchar *uri, HtmlStream *stream, gpointer data) { JadeClient *jc = (JadeClient *) data; http_get_image (jc, uri, stream); return; } void dialog_build_preview (JadeClient *jc, JadeItem *ji, const gchar *html) { GtkWidget *view; GtkWidget *scrolled_window; HtmlDocument *doc; static GtkWidget *dialog = NULL; if (dialog) { gtk_window_present (GTK_WINDOW (dialog)); return; } dialog = gtk_dialog_new_with_buttons ( "Jade - Preview Item", GTK_WINDOW (util_window_get (jc)), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_REJECT, NULL); gtk_widget_set_size_request (dialog, 620, 440); doc = html_document_new (); g_signal_connect (G_OBJECT (doc), "request_url", G_CALLBACK (url_requested), jc); html_document_open_stream (doc, "text/html"); html_document_write_stream (doc, html, strlen (html)); html_document_close_stream (doc); view = html_view_new (); html_view_set_document (HTML_VIEW (view), doc); html_view_set_magnification (HTML_VIEW (view), 1.0); scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_container_add (GTK_CONTAINER (scrolled_window), view); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), scrolled_window, TRUE, TRUE, 3); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (preview_item_response), jc); g_signal_connect (G_OBJECT (dialog), "destroy", G_CALLBACK (gtk_widget_destroyed), &dialog); gtk_widget_show_all (dialog); return; }