Changeset 1155
- Timestamp:
- 11/14/06 16:38:04
- Files:
-
- trunk/ChangeLog (modified) (1 diff)
- trunk/libtinymailui-mozembed/tny-moz-embed-html-mime-part-view.c (modified) (6 diffs)
- trunk/libtinymailui-mozembed/tny-moz-embed-msg-view.c (modified) (4 diffs)
- trunk/libtinymailui-mozembed/tny-moz-embed-msg-view.h (modified) (2 diffs)
- trunk/libtinymailui-mozembed/tny-moz-embed-stream.c (modified) (9 diffs)
- trunk/libtinymailui/tny-msg-view.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/ChangeLog
r1149 r1155 1 2006-11-14 Philip van Hoof <pvanhoof@gnome.org> 2 3 * libtinymailui-mozembed: fixes for the Gecko support 4 1 5 2006-11-13 Philip van Hoof <pvanhoof@gnome.org> 2 6 trunk/libtinymailui-mozembed/tny-moz-embed-html-mime-part-view.c
r994 r1155 67 67 68 68 69 static gpointer70 remove_html_stread_hack (gpointer data)71 {72 /* Sigh, I don't know why I need this :-(. I think GtkMozEmbed postpones73 the loading of the document to the very last moment. */74 75 sleep (5);76 77 /* This will remove the file in /tmp/ */78 g_object_unref (G_OBJECT (data));79 80 return NULL;81 }82 83 69 static void 84 70 tny_moz_embed_html_mime_part_view_set_part (TnyMimePartView *self, TnyMimePart *part) … … 89 75 g_object_unref (G_OBJECT (priv->part)); 90 76 91 if (part)77 if (part) 92 78 { 93 79 TnyStream *dest; … … 97 83 tny_mime_part_decode_to_stream (part, dest); 98 84 99 /* This will do: g_object_unref (G_OBJECT (dest)); */ 100 g_thread_create (remove_html_stread_hack, dest, FALSE, NULL); 101 85 g_object_unref (G_OBJECT (dest)); 102 86 g_object_ref (G_OBJECT (part)); 103 87 priv->part = part; 104 105 88 } 106 89 107 90 return; 108 91 } … … 112 95 { 113 96 /* Unimplemented. Clear self */ 114 115 return; 97 return; 116 98 } 117 99 … … 129 111 } 130 112 113 static gint 114 open_uri_cb (GtkMozEmbed *embed, const char *uri, gpointer data) 115 { 116 return 1; 117 } 118 119 static void 120 new_window_cb (GtkMozEmbed *embed, GtkMozEmbed **retval, guint chromemask, gpointer data) 121 { 122 *retval = NULL; 123 } 124 131 125 static void 132 126 tny_moz_embed_html_mime_part_view_instance_init (GTypeInstance *instance, gpointer g_class) 133 127 { 128 TnyMozEmbedHtmlMimePartView *self = (TnyMozEmbedHtmlMimePartView*) instance; 129 130 g_signal_connect (G_OBJECT (self), "new_window", 131 G_CALLBACK (new_window_cb), self); 132 133 g_signal_connect (G_OBJECT (self), "open_uri", 134 G_CALLBACK (open_uri_cb), self); 135 134 136 return; 135 137 } … … 143 145 if (G_LIKELY (priv->part)) 144 146 g_object_unref (G_OBJECT (priv->part)); 145 147 146 148 (*parent_class->finalize) (object); 147 149 trunk/libtinymailui-mozembed/tny-moz-embed-msg-view.c
r1107 r1155 55 55 } 56 56 57 static TnyMimePartView *single = NULL; 58 57 59 static TnyMimePartView* 58 tny_moz_embed_msg_view_create_mime_part_view_for (TnyMsgView *self, TnyMimePart *part)60 tny_moz_embed_msg_view_create_mime_part_view_for_default (TnyMsgView *self, TnyMimePart *part) 59 61 { 60 62 TnyMimePartView *retval = NULL; … … 64 66 if (tny_mime_part_content_type_is (part, "text/html")) 65 67 { 66 retval = tny_moz_embed_html_mime_part_view_new (); 68 if (!single) 69 single = tny_moz_embed_html_mime_part_view_new (); 70 71 /* We indeed never destroy the singleton single (as it crashes Gecko) */ 72 73 retval = (TnyMimePartView*) g_object_ref (G_OBJECT (single)); 67 74 gtk_box_pack_start (GTK_BOX (TNY_GTK_MSG_VIEW (self)->viewers), GTK_WIDGET (retval), TRUE, TRUE, 0); 68 75 gtk_widget_show (GTK_WIDGET (retval)); … … 70 77 71 78 if (!retval) 72 retval = TNY_ MOZ_EMBED_MSG_VIEW_GET_CLASS (self)->create_mime_part_view_for_orig_func (self, part);79 retval = TNY_GTK_MSG_VIEW_CLASS (parent_class)->create_mime_part_view_for_func (self, part); 73 80 74 81 return retval; 75 82 } 76 83 84 static TnyMimePartView* 85 tny_moz_embed_msg_view_create_mime_part_view_for (TnyMsgView *self, TnyMimePart *part) 86 { 87 return TNY_MOZ_EMBED_MSG_VIEW_GET_CLASS (self)->create_mime_part_view_for_func (self, part); 88 } 77 89 78 90 … … 85 97 object_class = (GObjectClass*) class; 86 98 99 class->create_mime_part_view_for_func = tny_moz_embed_msg_view_create_mime_part_view_for_default; 100 87 101 object_class->finalize = tny_moz_embed_msg_view_finalize; 88 102 89 103 /* Method overloading */ 90 class->create_mime_part_view_for_orig_func = TNY_GTK_MSG_VIEW_CLASS (class)->create_mime_part_view_for_func;91 104 TNY_GTK_MSG_VIEW_CLASS (class)->create_mime_part_view_for_func = tny_moz_embed_msg_view_create_mime_part_view_for; 92 105 trunk/libtinymailui-mozembed/tny-moz-embed-msg-view.h
r994 r1155 41 41 { 42 42 TnyGtkMsgView parent; 43 44 43 }; 45 44 … … 47 46 { 48 47 TnyGtkMsgViewClass parent_class; 49 TnyMimePartView* (*create_mime_part_view_for_orig_func) (TnyMsgView *self, TnyMimePart *part); 48 49 /* virtual methods */ 50 TnyMimePartView* (*create_mime_part_view_for_func) (TnyMsgView *self, TnyMimePart *part); 50 51 }; 51 52 trunk/libtinymailui-mozembed/tny-moz-embed-stream.c
r1107 r1155 37 37 { 38 38 GtkMozEmbed *embed; 39 gchar *filename; 40 gboolean htmlext; 39 gboolean stream_open; 41 40 }; 42 41 … … 84 83 ssize_t retval = -1; 85 84 86 /* TODO: Will always return the beginning of the file (but atm unused) */ 87 88 if (priv->filename) 89 { 90 FILE *file = fopen (priv->filename, "r"); 91 if (file) 92 { 93 retval = fread (data, 1, n, file); 94 fclose (file); 95 } 96 } 85 /* TODO (atm this is unused, would only be useful for a writable 86 HTML component, for example for editing E-mails with it) */ 97 87 98 88 return retval; … … 104 94 TnyMozEmbedStreamPriv *priv = TNY_MOZ_EMBED_STREAM_GET_PRIVATE (self); 105 95 106 if (priv->filename) 107 { 108 g_unlink (priv->filename); 109 g_free (priv->filename); 110 } 111 112 priv->htmlext = FALSE; 113 priv->filename = NULL; 96 if (priv->stream_open) 97 gtk_moz_embed_close_stream (priv->embed); 98 gtk_moz_embed_render_data (priv->embed, "", 0, "file:///", "text/html"); 99 if (priv->stream_open) 100 gtk_moz_embed_open_stream (priv->embed, "file:///", "text/html"); 114 101 115 102 return 0; … … 120 107 { 121 108 TnyMozEmbedStreamPriv *priv = TNY_MOZ_EMBED_STREAM_GET_PRIVATE (self); 122 FILE *file = NULL; 123 124 if (!priv->filename || !g_file_test (priv->filename, G_FILE_TEST_EXISTS)) 125 { 126 gint ofile; 127 gchar *tmpl, *filename; 128 129 if (priv->filename) 130 g_free (priv->filename); 131 132 tmpl = g_strdup_printf ("tinymail.tnymozembedstream.%s.XXXXXX", g_get_user_name ()); 133 134 ofile = g_file_open_tmp ((const gchar*)tmpl, &filename, NULL); 135 136 priv->filename = filename; 137 priv->htmlext = FALSE; 138 139 g_free (tmpl); 140 141 142 file = fdopen (ofile, "a"); 143 } 144 145 if (!file && priv->filename) 146 file = fopen (priv->filename, "a"); 147 148 if (file && priv->filename) 149 { 150 151 /* Dear free software world, do you NOW see we are fucking 152 things up?! This is insane! */ 153 154 gchar *str; 155 156 fputs (data, file); 157 fclose (file); 158 159 if (!priv->htmlext) 160 { 161 gchar *better = g_strdup_printf ("%s.html", priv->filename); 162 163 if (g_rename (priv->filename, better) != 0) 164 g_warning ("Can't rename %s to %s\n", priv->filename, better); 165 166 g_free (priv->filename); 167 priv->filename = better; 168 priv->htmlext = TRUE; 169 } 170 171 str = g_strdup_printf ("file://%s", priv->filename); 172 173 gtk_moz_embed_load_url (priv->embed, (const gchar*)str); 174 175 g_free (str); 176 177 } else { 178 g_warning (_("Can't write %s\n"), priv->filename); 179 } 109 110 if (!priv->stream_open) 111 gtk_moz_embed_open_stream (priv->embed, "file:///", "text/html"); 112 113 gtk_moz_embed_append_data (priv->embed, data, n); 180 114 181 115 return (ssize_t) n; … … 191 125 tny_moz_embed_stream_close (TnyStream *self) 192 126 { 193 tny_moz_embed_stream_reset (self); 127 TnyMozEmbedStreamPriv *priv = TNY_MOZ_EMBED_STREAM_GET_PRIVATE (self); 128 129 gtk_moz_embed_close_stream (priv->embed); 130 priv->stream_open = FALSE; 194 131 195 132 return 0; … … 201 138 return TRUE; 202 139 } 203 204 140 205 141 … … 222 158 223 159 priv->embed = embed; 160 priv->stream_open = FALSE; 224 161 225 162 return; … … 251 188 252 189 priv->embed = NULL; 253 priv-> filename = NULL;190 priv->stream_open = FALSE; 254 191 255 192 return; … … 262 199 TnyMozEmbedStreamPriv *priv = TNY_MOZ_EMBED_STREAM_GET_PRIVATE (self); 263 200 264 tny_moz_embed_stream_reset (TNY_STREAM (self));265 266 201 if (priv->embed) 202 { 203 if (priv->stream_open) 204 tny_moz_embed_stream_close (TNY_STREAM (self)); 267 205 g_object_unref (G_OBJECT (priv->embed)); 206 } 268 207 269 208 (*parent_class->finalize) (object); trunk/libtinymailui/tny-msg-view.c
r1010 r1155 83 83 * } 84 84 * if (!retval) 85 * retval = TNY_ MOZ_EMBED_MSG_VIEW_GET_CLASS (self)->create_mime_part_view_for_orig_func (self, part);85 * retval = TNY_GTK_MSG_VIEW_CLASS (parent_class)->create_mime_part_view_for_func (self, part); 86 86 * return retval; 87 87 * } … … 93 93 * object_class = (GObjectClass*) class; 94 94 * object_class->finalize = tny_moz_embed_msg_view_finalize; 95 * class->create_mime_part_view_for_orig_func = TNY_GTK_MSG_VIEW_CLASS (class)->create_mime_part_view_for_func;96 95 * TNY_GTK_MSG_VIEW_CLASS (class)->create_mime_part_view_for_func = tny_moz_embed_msg_view_create_mime_part_view_for; 97 96 * }
