Пример #1
0
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);
}
Пример #4
0
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);
}
Пример #6
0
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);
}
Пример #7
0
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);
}