aboutsummaryrefslogtreecommitdiffstats
path: root/mail/em-html-stream.c
diff options
context:
space:
mode:
authorNot Zed <NotZed@Ximian.com>2003-09-18 05:19:04 +0800
committerMichael Zucci <zucchi@src.gnome.org>2003-09-18 05:19:04 +0800
commit81a0ff5bc44a3bd11399e6b3c985735737606c8c (patch)
tree54b5ed4342a6843c1db4c7e75f2e1b1fe9b82dff /mail/em-html-stream.c
parenta36a1bb70b6ebcb51ac39304370c89bda63e11b9 (diff)
downloadgsoc2013-evolution-81a0ff5bc44a3bd11399e6b3c985735737606c8c.tar.gz
gsoc2013-evolution-81a0ff5bc44a3bd11399e6b3c985735737606c8c.tar.zst
gsoc2013-evolution-81a0ff5bc44a3bd11399e6b3c985735737606c8c.zip
cvs removed.
2003-09-17 Not Zed <NotZed@Ximian.com> * folder-browser.c, folder-browser.h, folder-browser-ui.c folder-browser-ui.h, mail-callbacks.c, mail-callbacks.h mail-display.c, mail-display.h, mail-display-stream.c mail-display-stream.h, mail-format.c, mail-format.h mail-identify.c, mail-search.c, mail-search.h message-browser.c, message-browser.h, subscribe-dialog.c subscribe-dialog.h, mail-font-prefs.c, mail-font-prefs.h: cvs removed. * Makefile.am: Removed mail-font-prefs.[ch], hasn't been built for ages. * em-*.c: killed a bunch of printfs. * em-format-html-display.c (efhd_html_button_press_event): update for html object api chagnes. ** Merge in mail-refactor-2 branch. svn path=/trunk/; revision=22602
Diffstat (limited to 'mail/em-html-stream.c')
-rw-r--r--mail/em-html-stream.c168
1 files changed, 168 insertions, 0 deletions
diff --git a/mail/em-html-stream.c b/mail/em-html-stream.c
new file mode 100644
index 0000000000..e50d6caee0
--- /dev/null
+++ b/mail/em-html-stream.c
@@ -0,0 +1,168 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Authors: Jeffrey Stedfast <fejj@ximian.com>
+ * Michael Zucchi <notzed@ximian.com>
+ *
+ * Copyright 2003 Ximian, Inc. (www.ximian.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <gtkhtml/gtkhtml.h>
+#include <gtkhtml/gtkhtml-stream.h>
+#include <gtk/gtkmain.h>
+#include "em-html-stream.h"
+
+#define d(x)
+
+static void em_html_stream_class_init (EMHTMLStreamClass *klass);
+static void em_html_stream_init (CamelObject *object);
+static void em_html_stream_finalize (CamelObject *object);
+
+static ssize_t emhs_sync_write(CamelStream *stream, const char *buffer, size_t n);
+static int emhs_sync_close(CamelStream *stream);
+static int emhs_sync_flush(CamelStream *stream);
+
+static EMSyncStreamClass *parent_class = NULL;
+
+CamelType
+em_html_stream_get_type (void)
+{
+ static CamelType type = CAMEL_INVALID_TYPE;
+
+ if (type == CAMEL_INVALID_TYPE) {
+ parent_class = (EMSyncStreamClass *)em_sync_stream_get_type();
+ type = camel_type_register (em_sync_stream_get_type(),
+ "EMHTMLStream",
+ sizeof (EMHTMLStream),
+ sizeof (EMHTMLStreamClass),
+ (CamelObjectClassInitFunc) em_html_stream_class_init,
+ NULL,
+ (CamelObjectInitFunc) em_html_stream_init,
+ (CamelObjectFinalizeFunc) em_html_stream_finalize);
+ }
+
+ return type;
+}
+
+static void
+em_html_stream_class_init (EMHTMLStreamClass *klass)
+{
+ ((EMSyncStreamClass *)klass)->sync_write = emhs_sync_write;
+ ((EMSyncStreamClass *)klass)->sync_flush = emhs_sync_flush;
+ ((EMSyncStreamClass *)klass)->sync_close = emhs_sync_close;
+}
+
+static void
+em_html_stream_init (CamelObject *object)
+{
+ /*EMHTMLStream *emhs = (EMHTMLStream *)object;*/
+}
+
+static void
+emhs_cleanup(EMHTMLStream *emhs)
+{
+ emhs->html_stream = NULL;
+ emhs->sync.cancel = TRUE;
+ g_signal_handler_disconnect(emhs->html, emhs->destroy_id);
+ g_object_unref(emhs->html);
+ emhs->html = NULL;
+}
+
+static void
+em_html_stream_finalize (CamelObject *object)
+{
+ EMHTMLStream *emhs = (EMHTMLStream *)object;
+
+ d(printf("%p: finalising stream\n", object));
+ if (emhs->html_stream) {
+ d(printf("%p: html stream still open - error\n", object));
+ /* set 'in finalise' flag */
+ camel_stream_close((CamelStream *)emhs);
+ }
+}
+
+static ssize_t
+emhs_sync_write(CamelStream *stream, const char *buffer, size_t n)
+{
+ EMHTMLStream *emhs = EM_HTML_STREAM (stream);
+
+ if (emhs->html_stream == NULL)
+ return -1;
+
+ gtk_html_stream_write(emhs->html_stream, buffer, n);
+
+ return (ssize_t) n;
+}
+
+static int
+emhs_sync_flush(CamelStream *stream)
+{
+ EMHTMLStream *emhs = (EMHTMLStream *)stream;
+
+ if (emhs->html_stream == NULL)
+ return -1;
+
+ /* FIXME: flush html stream via gtkhtml_stream_flush which doens't exist yet ... */
+ while (gtk_events_pending ())
+ gtk_main_iteration ();
+
+ return 0;
+}
+
+static int
+emhs_sync_close(CamelStream *stream)
+{
+ EMHTMLStream *emhs = (EMHTMLStream *)stream;
+
+ if (emhs->html_stream == NULL)
+ return -1;
+
+ gtk_html_stream_close(emhs->html_stream, GTK_HTML_STREAM_OK);
+ emhs_cleanup(emhs);
+
+ return 0;
+}
+
+static void
+emhs_gtkhtml_destroy(struct _GtkHTML *html, EMHTMLStream *emhs)
+{
+ d(printf("%p: emhs gtkhtml destroy\n", emhs));
+ emhs_cleanup(emhs);
+}
+
+/* TODO: Could pass NULL for html_stream, and do a gtk_html_begin
+ on first data -> less flashing */
+CamelStream *
+em_html_stream_new(struct _GtkHTML *html, struct _GtkHTMLStream *html_stream)
+{
+ EMHTMLStream *new;
+
+ new = EM_HTML_STREAM (camel_object_new (EM_HTML_STREAM_TYPE));
+ new->html_stream = html_stream;
+ new->html = html;
+ g_object_ref(html);
+ new->destroy_id = g_signal_connect(html, "destroy", G_CALLBACK(emhs_gtkhtml_destroy), new);
+
+ em_sync_stream_set_buffer_size(&new->sync, 4096);
+
+ return (CamelStream *)new;
+}