Changeset 1155

Show
Ignore:
Timestamp:
11/14/06 16:38:04
Author:
pvanhoof
Message:

Fixes for the Gecko support

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ChangeLog

    r1149 r1155  
     12006-11-14  Philip van Hoof <pvanhoof@gnome.org> 
     2 
     3        * libtinymailui-mozembed: fixes for the Gecko support 
     4 
    152006-11-13  Philip van Hoof <pvanhoof@gnome.org> 
    26 
  • trunk/libtinymailui-mozembed/tny-moz-embed-html-mime-part-view.c

    r994 r1155  
    6767 
    6868 
    69 static gpointer  
    70 remove_html_stread_hack (gpointer data) 
    71 { 
    72         /* Sigh, I don't know why I need this :-(. I think GtkMozEmbed postpones 
    73            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  
    8369static void  
    8470tny_moz_embed_html_mime_part_view_set_part (TnyMimePartView *self, TnyMimePart *part) 
     
    8975                g_object_unref (G_OBJECT (priv->part)); 
    9076                         
    91       if (part) 
     77      if (part) 
    9278        { 
    9379                TnyStream *dest; 
     
    9783                tny_mime_part_decode_to_stream (part, dest); 
    9884 
    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)); 
    10286                g_object_ref (G_OBJECT (part)); 
    10387                priv->part = part; 
    104                  
    10588        } 
    106      
     89 
    10790        return; 
    10891} 
     
    11295{ 
    11396        /* Unimplemented. Clear self */ 
    114          
    115         return; 
     97        return; 
    11698} 
    11799 
     
    129111} 
    130112 
     113static gint  
     114open_uri_cb (GtkMozEmbed *embed, const char *uri, gpointer data) 
     115{ 
     116        return 1; 
     117} 
     118 
     119static void  
     120new_window_cb (GtkMozEmbed *embed, GtkMozEmbed **retval, guint chromemask, gpointer data) 
     121{ 
     122        *retval = NULL; 
     123} 
     124 
    131125static void 
    132126tny_moz_embed_html_mime_part_view_instance_init (GTypeInstance *instance, gpointer g_class) 
    133127{ 
     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 
    134136        return; 
    135137} 
     
    143145        if (G_LIKELY (priv->part)) 
    144146                g_object_unref (G_OBJECT (priv->part)); 
    145      
     147 
    146148        (*parent_class->finalize) (object); 
    147149 
  • trunk/libtinymailui-mozembed/tny-moz-embed-msg-view.c

    r1107 r1155  
    5555} 
    5656 
     57static TnyMimePartView *single = NULL; 
     58 
    5759static TnyMimePartView* 
    58 tny_moz_embed_msg_view_create_mime_part_view_for (TnyMsgView *self, TnyMimePart *part) 
     60tny_moz_embed_msg_view_create_mime_part_view_for_default (TnyMsgView *self, TnyMimePart *part) 
    5961{ 
    6062        TnyMimePartView *retval = NULL; 
     
    6466        if (tny_mime_part_content_type_is (part, "text/html")) 
    6567        { 
    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)); 
    6774                gtk_box_pack_start (GTK_BOX (TNY_GTK_MSG_VIEW (self)->viewers), GTK_WIDGET (retval), TRUE, TRUE, 0); 
    6875                gtk_widget_show (GTK_WIDGET (retval)); 
     
    7077 
    7178        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); 
    7380 
    7481        return retval; 
    7582} 
    7683 
     84static TnyMimePartView* 
     85tny_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} 
    7789 
    7890 
     
    8597        object_class = (GObjectClass*) class; 
    8698 
     99        class->create_mime_part_view_for_func = tny_moz_embed_msg_view_create_mime_part_view_for_default; 
     100 
    87101        object_class->finalize = tny_moz_embed_msg_view_finalize; 
    88102 
    89103        /* Method overloading */ 
    90         class->create_mime_part_view_for_orig_func = TNY_GTK_MSG_VIEW_CLASS (class)->create_mime_part_view_for_func;     
    91104        TNY_GTK_MSG_VIEW_CLASS (class)->create_mime_part_view_for_func = tny_moz_embed_msg_view_create_mime_part_view_for; 
    92105 
  • trunk/libtinymailui-mozembed/tny-moz-embed-msg-view.h

    r994 r1155  
    4141{ 
    4242        TnyGtkMsgView parent; 
    43  
    4443}; 
    4544 
     
    4746{ 
    4847        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); 
    5051}; 
    5152 
  • trunk/libtinymailui-mozembed/tny-moz-embed-stream.c

    r1107 r1155  
    3737{ 
    3838        GtkMozEmbed *embed; 
    39         gchar *filename; 
    40         gboolean htmlext; 
     39        gboolean stream_open; 
    4140}; 
    4241 
     
    8483        ssize_t retval = -1; 
    8584 
    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) */ 
    9787 
    9888        return retval; 
     
    10494        TnyMozEmbedStreamPriv *priv = TNY_MOZ_EMBED_STREAM_GET_PRIVATE (self); 
    10595 
    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"); 
    114101 
    115102        return 0; 
     
    120107{ 
    121108        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); 
    180114 
    181115        return (ssize_t) n; 
     
    191125tny_moz_embed_stream_close (TnyStream *self) 
    192126{ 
    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; 
    194131 
    195132        return 0; 
     
    201138        return TRUE; 
    202139} 
    203  
    204140 
    205141 
     
    222158 
    223159        priv->embed = embed; 
     160        priv->stream_open = FALSE; 
    224161 
    225162        return; 
     
    251188 
    252189        priv->embed = NULL; 
    253         priv->filename = NULL
     190        priv->stream_open = FALSE
    254191 
    255192        return; 
     
    262199        TnyMozEmbedStreamPriv *priv = TNY_MOZ_EMBED_STREAM_GET_PRIVATE (self); 
    263200 
    264         tny_moz_embed_stream_reset (TNY_STREAM (self)); 
    265  
    266201        if (priv->embed) 
     202        { 
     203                if (priv->stream_open) 
     204                        tny_moz_embed_stream_close (TNY_STREAM (self)); 
    267205                g_object_unref (G_OBJECT (priv->embed)); 
     206        } 
    268207 
    269208        (*parent_class->finalize) (object); 
  • trunk/libtinymailui/tny-msg-view.c

    r1010 r1155  
    8383 *     } 
    8484 *     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); 
    8686 *     return retval; 
    8787 * } 
     
    9393 *      object_class = (GObjectClass*) class; 
    9494 *      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;     
    9695 *      TNY_GTK_MSG_VIEW_CLASS (class)->create_mime_part_view_for_func = tny_moz_embed_msg_view_create_mime_part_view_for; 
    9796 * }