gint gtk_html_stream_vprintf (GtkHTMLStream *stream, const gchar *format, va_list ap) { gsize len; gchar *buf = NULL; gchar *mbuf = NULL; gchar *result_string = NULL; gint rv; va_list ap_copy; G_VA_COPY (ap_copy, ap); result_string = g_strdup_vprintf (format, ap_copy); g_return_val_if_fail (result_string != NULL, 0); len = strlen (result_string) + 1; g_free (result_string); if (len < 8192) buf = alloca (len); if (buf == NULL) buf = mbuf = g_malloc (len); rv = vsprintf (buf, format, ap); gtk_html_stream_write (stream, buf, rv); g_free (mbuf); return rv; }
static void on_html_http_url_requested_disconnect (C2Request *request, C2NetObjectByte *byte, gboolean success, C2Pthread2 *data) { GtkHTMLStream *stream = data->v2; gtk_html_stream_write (stream, request->source, request->got_size); gtk_html_stream_close (stream, GTK_HTML_STREAM_OK); }
static void on_html_http_link_clicked_disconnect (C2Request *request, gboolean success, C2Pthread3 *data) { GtkHTML *html = GTK_HTML (data->v1); GtkHTMLStream *stream = data->v3; const gchar *ptr; gint length = request->got_size; ptr = (request->source+request->got_size)-length; gtk_html_stream_write (stream, request->source, request->got_size); gtk_html_end (html, stream, success ? GTK_HTML_STREAM_OK : GTK_HTML_STREAM_ERROR); }
static void stream_log_write (GtkHTMLStream *stream, const gchar *buffer, gsize size, gpointer user_data) { GtkHTMLLog *log = user_data; gint i; for (i=0; i<size; i++) fprintf (log->file, "%c", buffer [i]); gtk_html_stream_write (log->stream, buffer, size); }
static void on_html_c2dist_url_requested (C2Pthread2 *data) { GtkHTMLStream *stream; gchar *file, *path; gint length; path = g_strdup_printf (PKGDATADIR G_DIR_SEPARATOR_S "%s", ((gchar *) data->v1)+9); length = c2_get_file (path, &file); g_free (path); if (length < 0) return; stream = (GtkHTMLStream *) data->v2; gtk_html_stream_write (stream, file, length); g_free (file); }
static void gtkhtml_url_requested_cb (GtkHTML *html, const gchar *url, GtkHTMLStream *stream) { // to load images (and possibly other external embed files) FILE *file = fopen (url, "rb"); if (!file) { g_warning ("Error: couldn't open file '%s'\n", url); return; } fseek (file, 0, SEEK_END); size_t file_size = ftell (file); rewind (file); gboolean error; gchar *data = g_new (gchar, file_size); error = fread (data, 1, file_size, file) < file_size; fclose (file); if (!error) gtk_html_stream_write (stream, data, file_size); g_free (data); }
static void view_source_dialog(GtkhtmlEditor *editor, const gchar *title, const gchar *content_type, gboolean show_output) { GtkWidget *dialog; GtkWidget *content; GtkWidget *scrolled_window; GString *string; dialog = gtk_dialog_new_with_buttons(title, GTK_WINDOW(editor), GTK_DIALOG_DESTROY_WITH_PARENT, #ifdef HAVE_GTK_310 "_Close", GTK_RESPONSE_CLOSE, #else GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, #endif NULL); scrolled_window = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN); gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), scrolled_window, TRUE, TRUE, 0); gtk_container_set_border_width(GTK_CONTAINER(dialog), 6); gtk_container_set_border_width(GTK_CONTAINER(scrolled_window), 6); gtk_window_set_default_size(GTK_WINDOW(dialog), 400, 300); string = g_string_sized_new(4096); gtk_html_export(gtkhtml_editor_get_html(editor), content_type, (GtkHTMLSaveReceiverFn) view_source_dialog_receiver, string); if (show_output) { GtkHTMLStream *stream; content = gtk_html_new(); stream = gtk_html_begin(GTK_HTML(content)); gtk_html_stream_write(stream, string->str, string->len); gtk_html_stream_close(stream, GTK_HTML_STREAM_OK); } else { GtkTextBuffer *buffer; content = gtk_text_view_new(); buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(content)); gtk_text_buffer_set_text(buffer, string->str, string->len); gtk_text_view_set_editable(GTK_TEXT_VIEW(content), FALSE); } g_string_free(string, TRUE); gtk_container_add(GTK_CONTAINER(scrolled_window), content); gtk_widget_show_all(scrolled_window); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); }