Changeset 994

Show
Ignore:
Timestamp:
10/15/06 13:32:14
Author:
pvanhoof
Message:

Major api change about saving mime parts

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ChangeLog

    r991 r994  
    1 2006-10-13   Philip Van Hoof <pvanhoof@gnome.org> 
     12006-10-15  Philip Van Hoof <pvanhoof@gnome.org> 
     2 
     3        * Major refactoring in the TnySaveStrategy stuff 
     4        * Introduced a new client-type for the strategy pattern: 
     5        the TnyMimePartSaver 
     6        * Removed all saving functionality from the default gtk+ 
     7        types: the developer who will create an E-mail client is 
     8        the person who should connect the dots (inherit a TnyMsgView 
     9        and/or a TnyMimePartView, or implement it fully, and let that 
     10        type also implement the TnyMimePartSaver) 
     11 
     12        *  This was a major API change in libtinymailui 
     13         
     142006-10-13  Philip Van Hoof <pvanhoof@gnome.org> 
    215 
    316        * Added the TnyGtkAttachmentMimePartView type 
    417 
     18        *  This was a major API change in libtinymailui-gtk 
     19         
    5202006-10-12  Philip Van Hoof <pvanhoof@gnome.org> 
    621 
     
    924        * The TnyMimePartView API implemented for GtkMozEmbed 
    1025 
     26        * This was a major API change in libtinymailui 
     27          
    11282006-09-26  Philip Van Hoof <pvanhoof@gnome.org> 
    1229 
  • trunk/libtinymail-gnome-desktop/tny-gnome-platform-factory.c

    r900 r994  
    2020 
    2121#include <tny-gnome-platform-factory.h> 
    22  
    23 #include <tny-save-strategy.h> 
    24 #include <tny-gtk-save-strategy.h> 
    2522 
    2623#include <tny-account-store.h> 
     
    6259tny_gnome_platform_factory_new_msg_view (TnyPlatformFactory *self) 
    6360{ 
    64         TnySaveStrategy *save_strategy = tny_gtk_save_strategy_new (); 
    6561        TnyMsgView *retval; 
    6662     
    6763#ifdef MOZEMBED 
    68         retval = tny_moz_embed_msg_view_new (save_strategy); 
     64        retval = tny_moz_embed_msg_view_new (); 
    6965#else 
    70         retval = tny_gtk_msg_view_new (save_strategy); 
     66        retval = tny_gtk_msg_view_new (); 
    7167#endif 
    72  
    73         g_object_unref (G_OBJECT (save_strategy)); 
    7468 
    7569        return retval; 
  • trunk/libtinymail-gpe/tny-gpe-platform-factory.c

    r971 r994  
    2020 
    2121#include <tny-gpe-platform-factory.h> 
    22  
    23 #include <tny-save-strategy.h> 
    24 #include <tny-gtk-save-strategy.h> 
    2522 
    2623#include <tny-account-store.h> 
     
    5754tny_gpe_platform_factory_new_msg_view (TnyPlatformFactory *self) 
    5855{ 
    59         TnySaveStrategy *save_strategy = tny_gtk_save_strategy_new (); 
    60         TnyMsgView *retval = tny_gtk_msg_view_new (save_strategy); 
    61      
    62         g_object_unref (G_OBJECT (save_strategy)); 
    63      
    64         return retval; 
     56        return tny_gtk_msg_view_new ();     
    6557} 
    6658 
  • trunk/libtinymail-maemo/tny-maemo-platform-factory.c

    r971 r994  
    2020 
    2121#include <tny-maemo-platform-factory.h> 
    22  
    23 #include <tny-save-strategy.h> 
    24 #include <tny-gtk-save-strategy.h> 
    2522 
    2623#include <tny-account-store.h> 
     
    5754tny_maemo_platform_factory_new_msg_view (TnyPlatformFactory *self) 
    5855{ 
    59         TnySaveStrategy *save_strategy = tny_gtk_save_strategy_new (); 
    60         TnyMsgView *retval = tny_gtk_msg_view_new (save_strategy); 
    61      
    62         g_object_unref (G_OBJECT (save_strategy)); 
    63      
    64         return retval; 
     56        return tny_gtk_msg_view_new (); 
    6557} 
    6658 
  • trunk/libtinymail-olpc/tny-olpc-platform-factory.c

    r971 r994  
    2020 
    2121#include <tny-olpc-platform-factory.h> 
    22  
    23 #include <tny-save-strategy.h> 
    24 #include <tny-gtk-save-strategy.h> 
    2522 
    2623#include <tny-account-store.h> 
     
    5754tny_olpc_platform_factory_new_msg_view (TnyPlatformFactory *self) 
    5855{ 
    59         TnySaveStrategy *save_strategy = tny_gtk_save_strategy_new (); 
    60         TnyMsgView *retval = tny_gtk_msg_view_new (save_strategy); 
    61      
    62         g_object_unref (G_OBJECT (save_strategy)); 
    63      
    64         return retval; 
     56        return tny_gtk_msg_view_new ();     
    6557} 
    6658 
  • trunk/libtinymail/Makefile.am

    r900 r994  
    33lib_LTLIBRARIES = libtinymail-1.0.la 
    44 
    5 libtinymail_1_0_headers =              
    6         tny-shared.h                   
    7         tny-list.h             
    8         tny-iterator.h         
    9         tny-folder.h           
    10         tny-mime-part.h        
    11         tny-header.h           
    12         tny-msg.h                     
    13         tny-device.h           
    14         tny-account.h         
    15         tny-store-account.h   
    16         tny-transport-account.h       
    17         tny-account-store.h   
    18         tny-stream.h           
    19         tny-fs-stream.h                       
    20         tny-simple-list.h             
    21         tny-folder-store.h     
     5libtinymail_1_0_headers =
     6        tny-shared.h
     7        tny-list.h
     8        tny-iterator.h
     9        tny-folder.h
     10        tny-mime-part.h
     11        tny-header.h
     12        tny-msg.h
     13        tny-device.h
     14        tny-account.h
     15        tny-store-account.h
     16        tny-transport-account.h
     17        tny-account-store.h
     18        tny-stream.h
     19        tny-fs-stream.h
     20        tny-simple-list.h
     21        tny-folder-store.h
    2222        tny-folder-store-query.h 
    2323 
    24 libtinymail_1_0_la_SOURCES =          
    25         $(libtinymail_1_0_headers)     
    26         tny-list.c             
    27         tny-iterator.c         
    28         tny-msg.c                     
    29         tny-header.c           
    30         tny-mime-part.c        
    31         tny-folder.c           
    32         tny-device.c           
    33         tny-account.c         
    34         tny-store-account.c   
    35         tny-transport-account.c       
    36         tny-account-store.c   
    37         tny-stream.c           
    38         tny-fs-stream.c                       
    39         tny-simple-list-priv.h         
    40         tny-simple-list.c             
    41         tny-simple-list-iterator-priv.h       
    42         tny-simple-list-iterator.c     
    43         tny-folder-store.c     
     24libtinymail_1_0_la_SOURCES =
     25        $(libtinymail_1_0_headers)
     26        tny-list.c
     27        tny-iterator.c
     28        tny-msg.c
     29        tny-header.c
     30        tny-mime-part.c
     31        tny-folder.c
     32        tny-device.c
     33        tny-account.c
     34        tny-store-account.c
     35        tny-transport-account.c
     36        tny-account-store.c
     37        tny-stream.c
     38        tny-fs-stream.c
     39        tny-simple-list-priv.h
     40        tny-simple-list.c
     41        tny-simple-list-iterator-priv.h
     42        tny-simple-list-iterator.c
     43        tny-folder-store.c
    4444        tny-folder-store-query.c 
    4545 
  • trunk/libtinymailui-gtk/tny-gtk-attachment-mime-part-view.c

    r991 r994  
    5151{ 
    5252        TnyMimePart *part; 
    53         TnySaveStrategy *save_strategy; 
    5453        TnyGtkAttachListModel *imodel; 
    5554}; 
     
    5958 
    6059 
    61 static void 
    62 tny_gtk_attachment_mime_part_view_set_save_strategy (TnyMimePartView *self, TnySaveStrategy *strategy) 
    63 
    64         TnyGtkAttachmentMimePartViewPriv *priv = TNY_GTK_ATTACHMENT_MIME_PART_VIEW_GET_PRIVATE (self); 
    65  
    66         if (priv->save_strategy) 
    67                 g_object_unref (G_OBJECT (priv->save_strategy)); 
    68  
    69         g_object_ref (G_OBJECT (strategy)); 
    70         priv->save_strategy = strategy; 
    71  
    72         return; 
    73 
    74  
    75  
    76 static void 
    77 tny_gtk_attachment_mime_part_view_save_as_activated (GtkMenuItem *menuitem, gpointer user_data) 
    78 
    79         TnyGtkAttachmentMimePartView *self = user_data; 
    80         TnyGtkAttachmentMimePartViewPriv *priv = TNY_GTK_ATTACHMENT_MIME_PART_VIEW_GET_PRIVATE (self); 
    81  
    82         if (!G_LIKELY (priv->save_strategy)) 
    83         { 
    84                 g_warning (_("No save strategy for this mime part view\n")); 
    85                 return; 
    86         } 
    87  
    88         tny_save_strategy_save (priv->save_strategy, priv->part); 
    89  
    90         return; 
    91 
    92  
    93  
    94 static gint 
    95 tny_gtk_attachment_mime_part_view_popup_handler (GtkWidget *widget, GdkEvent *event) 
    96 {        
    97         g_return_val_if_fail (event != NULL, FALSE); 
    98          
    99          
    100         if (G_UNLIKELY (event->type == GDK_BUTTON_PRESS)) 
    101         { 
    102                 GtkMenu *menu; 
    103                 GdkEventButton *event_button; 
    104  
    105                 menu = GTK_MENU (widget); 
    106                 g_return_val_if_fail (widget != NULL, FALSE); 
    107                 g_return_val_if_fail (GTK_IS_MENU (widget), FALSE); 
    108  
    109                 event_button = (GdkEventButton *) event; 
    110                 if (G_LIKELY (event_button->button == 3)) 
    111                 { 
    112                         gtk_menu_popup (menu, NULL, NULL, NULL, NULL,  
    113                                           event_button->button, event_button->time); 
    114                         return TRUE; 
    115                 } 
    116         } 
    117          
    118         return FALSE; 
     60static TnyMimePart* 
     61tny_gtk_attachment_mime_part_view_get_part (TnyMimePartView *self) 
     62
     63        TnyGtkAttachmentMimePartViewPriv *priv = TNY_GTK_ATTACHMENT_MIME_PART_VIEW_GET_PRIVATE (self); 
     64        return (priv->part)?TNY_MIME_PART (g_object_ref (priv->part)):NULL; 
    11965} 
    12066 
     
    159105 **/ 
    160106TnyMimePartView* 
    161 tny_gtk_attachment_mime_part_view_new (TnySaveStrategy *save_strategy, TnyGtkAttachListModel *imodel) 
     107tny_gtk_attachment_mime_part_view_new (TnyGtkAttachListModel *imodel) 
    162108{ 
    163109        TnyGtkAttachmentMimePartView *self = g_object_new (TNY_TYPE_GTK_ATTACHMENT_MIME_PART_VIEW, NULL); 
    164  
    165         tny_mime_part_view_set_save_strategy (TNY_MIME_PART_VIEW (self), save_strategy); 
    166110 
    167111        g_object_ref (G_OBJECT (imodel)); 
     
    176120        TnyGtkAttachmentMimePartView *self = (TnyGtkAttachmentMimePartView *)instance; 
    177121        TnyGtkAttachmentMimePartViewPriv *priv = TNY_GTK_ATTACHMENT_MIME_PART_VIEW_GET_PRIVATE (self); 
    178         GtkMenu *menu = GTK_MENU (gtk_menu_new ()); 
    179         GtkWidget *mitem = gtk_menu_item_new_with_mnemonic ("Save _As"); 
    180122 
    181123        priv->imodel = NULL; 
    182         priv->save_strategy = NULL; 
    183  
    184         gtk_widget_show (mitem); 
    185         g_signal_connect (G_OBJECT (mitem), "activate",  
    186                 G_CALLBACK (tny_gtk_attachment_mime_part_view_save_as_activated), self); 
    187  
    188         gtk_menu_shell_append (GTK_MENU_SHELL (menu), mitem); 
    189  
    190         g_signal_connect_swapped (G_OBJECT (self), "button_press_event", 
    191                 G_CALLBACK (tny_gtk_attachment_mime_part_view_popup_handler), menu); 
    192124 
    193125        return; 
     
    208140        priv->part = NULL; 
    209141 
    210         if (G_LIKELY (priv->save_strategy)) 
    211                 g_object_unref (G_OBJECT (priv->save_strategy)); 
    212         priv->save_strategy = NULL; 
    213  
    214142        (*parent_class->finalize) (object); 
    215143 
     
    222150        TnyMimePartViewIface *klass = (TnyMimePartViewIface *)g; 
    223151 
     152        klass->get_part_func = tny_gtk_attachment_mime_part_view_get_part; 
    224153        klass->set_part_func = tny_gtk_attachment_mime_part_view_set_part; 
    225         klass->set_save_strategy_func = tny_gtk_attachment_mime_part_view_set_save_strategy; 
    226154        klass->clear_func = tny_gtk_attachment_mime_part_view_clear; 
    227155 
  • trunk/libtinymailui-gtk/tny-gtk-attachment-mime-part-view.h

    r991 r994  
    5454 
    5555GType tny_gtk_attachment_mime_part_view_get_type (void); 
    56 TnyMimePartView* tny_gtk_attachment_mime_part_view_new (TnySaveStrategy *save_strategy, TnyGtkAttachListModel *iview); 
     56TnyMimePartView* tny_gtk_attachment_mime_part_view_new (TnyGtkAttachListModel *iview); 
    5757 
    5858G_END_DECLS 
  • trunk/libtinymailui-gtk/tny-gtk-msg-view.c

    r992 r994  
    4343#include <tny-gtk-text-mime-part-view.h> 
    4444#include <tny-gtk-attachment-mime-part-view.h> 
     45#include <tny-mime-part-saver.h> 
    4546 
    4647#ifdef GNOME 
     
    6465        GtkIconView *attachview; 
    6566        GtkWidget *attachview_sw; 
    66         TnySaveStrategy *save_strategy; 
    6767}; 
    6868 
     
    8585        if (tny_mime_part_content_type_is (part, "text/*")) 
    8686        { 
    87                 retval = tny_gtk_text_mime_part_view_new (priv->save_strategy); 
     87                retval = tny_gtk_text_mime_part_view_new (); 
    8888                gtk_box_pack_start (GTK_BOX (TNY_GTK_MSG_VIEW (self)->viewers), GTK_WIDGET (retval), TRUE, TRUE, 0); 
    8989                gtk_widget_show (GTK_WIDGET (retval)); 
     
    103103                        model = gtk_icon_view_get_model (priv->attachview); 
    104104 
    105                 retval = tny_gtk_attachment_mime_part_view_new (priv->save_strategy,  
    106                                                 TNY_GTK_ATTACH_LIST_MODEL (model)); 
     105                retval = tny_gtk_attachment_mime_part_view_new (TNY_GTK_ATTACH_LIST_MODEL (model)); 
    107106        } 
    108107 
     
    150149 
    151150static void 
    152 tny_gtk_msg_view_set_save_strategy (TnyMsgView *self, TnySaveStrategy *strategy) 
    153 { 
    154         TNY_GTK_MSG_VIEW_GET_CLASS (self)->set_save_strategy_func (self, strategy); 
    155 } 
    156  
    157 static void 
    158 tny_gtk_msg_view_set_save_strategy_defimpl (TnyMsgView *self, TnySaveStrategy *strategy) 
    159 { 
    160         TnyGtkMsgViewPriv *priv = TNY_GTK_MSG_VIEW_GET_PRIVATE (self); 
    161  
    162         if (priv->save_strategy) 
    163                 g_object_unref (G_OBJECT (priv->save_strategy)); 
    164  
    165         g_object_ref (G_OBJECT (strategy)); 
    166         priv->save_strategy = strategy; 
    167  
    168         return; 
    169 } 
    170  
    171  
    172 static void 
    173 tny_gtk_msg_view_save_as_activated (GtkMenuItem *menuitem, gpointer user_data) 
    174 { 
    175         TnyGtkMsgView *self = user_data; 
    176         TnyGtkMsgViewPriv *priv = TNY_GTK_MSG_VIEW_GET_PRIVATE (self); 
    177  
    178         if (!G_LIKELY (priv->save_strategy)) 
    179         { 
    180                 g_warning (_("No save strategy for this message view\n")); 
    181                 return; 
    182         } 
    183          
    184         tny_save_strategy_save (priv->save_strategy, TNY_MIME_PART (self)); 
    185          
    186         return; 
    187 } 
    188  
    189  
    190 static gint 
    191 tny_gtk_msg_view_popup_handler (GtkWidget *widget, GdkEvent *event) 
    192 {        
    193         g_return_val_if_fail (event != NULL, FALSE); 
    194          
    195          
    196         if (G_UNLIKELY (event->type == GDK_BUTTON_PRESS)) 
    197         { 
    198                 GtkMenu *menu; 
    199                 GdkEventButton *event_button; 
    200  
    201                 menu = GTK_MENU (widget); 
    202                 g_return_val_if_fail (widget != NULL, FALSE); 
    203                 g_return_val_if_fail (GTK_IS_MENU (widget), FALSE); 
    204  
    205                 event_button = (GdkEventButton *) event; 
    206                 if (G_LIKELY (event_button->button == 3)) 
    207                 { 
    208                         gtk_menu_popup (menu, NULL, NULL, NULL, NULL,  
    209                                           event_button->button, event_button->time); 
    210                         return TRUE; 
    211                 } 
    212         } 
    213          
    214         return FALSE; 
    215 } 
    216  
    217 static void 
    218151tny_gtk_msg_view_set_unavailable (TnyMsgView *self) 
    219152{ 
     
    235168} 
    236169 
     170 
     171static TnyMsg* 
     172tny_gtk_msg_view_get_msg (TnyMsgView *self) 
     173{ 
     174        return TNY_GTK_MSG_VIEW_GET_CLASS (self)->get_msg_func (self); 
     175} 
     176 
     177static TnyMsg*  
     178tny_gtk_msg_view_get_msg_defimpl (TnyMsgView *self) 
     179{ 
     180        TnyGtkMsgViewPriv *priv = TNY_GTK_MSG_VIEW_GET_PRIVATE (self); 
     181         
     182        return (priv->msg)?TNY_MSG (g_object_ref (priv->msg)):NULL; 
     183} 
     184 
    237185static void 
    238186tny_gtk_msg_view_set_msg (TnyMsgView *self, TnyMsg *msg) 
    239187{ 
    240                TNY_GTK_MSG_VIEW_GET_CLASS (self)->set_msg_func (self, msg); 
     188        TNY_GTK_MSG_VIEW_GET_CLASS (self)->set_msg_func (self, msg); 
    241189} 
    242190 
     
    268216tny_gtk_msg_view_clear (TnyMsgView *self) 
    269217{ 
    270                TNY_GTK_MSG_VIEW_GET_CLASS (self)->clear_func (self); 
     218        TNY_GTK_MSG_VIEW_GET_CLASS (self)->clear_func (self); 
    271219} 
    272220 
     
    293241/** 
    294242 * tny_gtk_msg_view_new: 
    295  * @save_strategy: The save strategy to use 
    296243 * 
    297244 * Return value: a new #TnyMsgView instance implemented for Gtk+ 
    298245 **/ 
    299246TnyMsgView* 
    300 tny_gtk_msg_view_new (TnySaveStrategy *save_strategy
     247tny_gtk_msg_view_new (void
    301248{ 
    302249        TnyGtkMsgView *self = g_object_new (TNY_TYPE_GTK_MSG_VIEW, NULL); 
    303250 
    304         tny_msg_view_set_save_strategy (TNY_MSG_VIEW (self), save_strategy); 
    305  
    306251        return TNY_MSG_VIEW (self); 
    307252} 
     
    313258        TnyGtkMsgViewPriv *priv = TNY_GTK_MSG_VIEW_GET_PRIVATE (self); 
    314259        GtkWidget *vbox = gtk_vbox_new (FALSE, 1); 
    315         GtkMenu *menu = GTK_MENU (gtk_menu_new ()); 
    316         GtkWidget *mitem = gtk_menu_item_new_with_mnemonic ("Save _As"); 
    317          
    318         priv->save_strategy = NULL; 
     260         
     261        priv->msg = NULL; 
    319262         
    320263        gtk_scrolled_window_set_hadjustment (GTK_SCROLLED_WINDOW (self), NULL); 
    321264        gtk_scrolled_window_set_vadjustment (GTK_SCROLLED_WINDOW (self), NULL); 
    322  
    323         gtk_widget_show (mitem); 
    324  
    325         g_signal_connect (G_OBJECT (mitem), "activate",  
    326                 G_CALLBACK (tny_gtk_msg_view_save_as_activated), self); 
    327  
    328         gtk_menu_shell_append (GTK_MENU_SHELL (menu), mitem); 
    329265 
    330266        gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (self),  
     
    333269                        GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); 
    334270                         
    335         g_signal_connect_swapped (G_OBJECT (self), "button_press_event", 
    336                 G_CALLBACK (tny_gtk_msg_view_popup_handler), menu); 
    337  
    338271        priv->headerview = tny_gtk_header_view_new (); 
    339272        gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (priv->headerview), FALSE, FALSE, 0); 
     
    359292        gtk_icon_view_set_selection_mode (priv->attachview, GTK_SELECTION_SINGLE); 
    360293 
    361         g_signal_connect_swapped (G_OBJECT (priv->attachview), "button_press_event", 
    362                         G_CALLBACK (tny_gtk_msg_view_popup_handler), menu); 
    363  
    364294        gtk_icon_view_set_text_column (priv->attachview, 
    365295                        TNY_GTK_ATTACH_LIST_MODEL_FILENAME_COLUMN); 
     
    393323                g_object_unref (G_OBJECT (priv->msg)); 
    394324 
    395         if (G_LIKELY (priv->save_strategy)) 
    396                 g_object_unref (G_OBJECT (priv->save_strategy)); 
    397  
    398325        (*parent_class->finalize) (object); 
    399326 
     
    402329 
    403330static void 
    404 tny_gtk_msg_view_init (gpointer g, gpointer iface_data) 
     331tny_msg_view_init (gpointer g, gpointer iface_data) 
    405332{ 
    406333        TnyMsgViewIface *klass = (TnyMsgViewIface *)g; 
    407334 
     335        klass->get_msg_func = tny_gtk_msg_view_get_msg; 
    408336        klass->set_msg_func = tny_gtk_msg_view_set_msg; 
    409         klass->set_save_strategy_func = tny_gtk_msg_view_set_save_strategy; 
    410337        klass->set_unavailable_func = tny_gtk_msg_view_set_unavailable; 
    411338        klass->clear_func = tny_gtk_msg_view_clear; 
     
    425352        object_class->finalize = tny_gtk_msg_view_finalize; 
    426353 
     354        class->get_msg_func = tny_gtk_msg_view_get_msg_defimpl; 
    427355        class->set_msg_func = tny_gtk_msg_view_set_msg_defimpl; 
    428         class->set_save_strategy_func = tny_gtk_msg_view_set_save_strategy_defimpl; 
    429356        class->set_unavailable_func = tny_gtk_msg_view_set_unavailable_defimpl; 
    430357        class->clear_func = tny_gtk_msg_view_clear_defimpl; 
     
    457384                }; 
    458385 
    459                 static const GInterfaceInfo tny_gtk_msg_view_info =  
     386                static const GInterfaceInfo tny_msg_view_info =  
    460387                { 
    461                   (GInterfaceInitFunc) tny_gtk_msg_view_init, /* interface_init */ 
     388                  (GInterfaceInitFunc) tny_msg_view_init, /* interface_init */ 
    462389                  NULL,         /* interface_finalize */ 
    463390                  NULL          /* interface_data */ 
    464391                }; 
    465  
     392                 
    466393                type = g_type_register_static (GTK_TYPE_SCROLLED_WINDOW, 
    467394                        "TnyGtkMsgView", 
     
    469396 
    470397                g_type_add_interface_static (type, TNY_TYPE_MSG_VIEW,  
    471                         &tny_gtk_msg_view_info); 
    472  
     398                        &tny_msg_view_info); 
     399                         
    473400        } 
    474401 
  • trunk/libtinymailui-gtk/tny-gtk-msg-view.h

    r984 r994  
    2929#include <tny-stream.h> 
    3030#include <tny-mime-part.h> 
     31#include <tny-mime-part-saver.h> 
    3132#include <tny-save-strategy.h> 
    3233 
     
    5455         
    5556        /* virtual methods (they have a default implementation in TnyGtkMsgView */ 
     57        TnyMsg* (*get_msg_func) (TnyMsgView *self); 
    5658        void (*set_msg_func) (TnyMsgView *self, TnyMsg *msg); 
    57         void (*set_save_strategy_func) (TnyMsgView *self, TnySaveStrategy *strategy); 
    5859        void (*set_unavailable_func) (TnyMsgView *self); 
    5960        void (*clear_func) (TnyMsgView *self); 
     
    6263 
    6364GType tny_gtk_msg_view_get_type (void); 
    64 TnyMsgView* tny_gtk_msg_view_new (TnySaveStrategy *save_strategy); 
     65TnyMsgView* tny_gtk_msg_view_new (void); 
    6566 
    6667G_END_DECLS 
  • trunk/libtinymailui-gtk/tny-gtk-msg-window.c

    r900 r994  
    3737 
    3838static void 
    39 tny_gtk_msg_window_set_save_strategy (TnyMsgView *self, TnySaveStrategy *strategy
     39tny_gtk_msg_window_set_unavailable (TnyMsgView *self
    4040{ 
    4141        TnyGtkMsgWindowPriv *priv = TNY_GTK_MSG_WINDOW_GET_PRIVATE (self); 
    42  
    43         tny_msg_view_set_save_strategy (priv->msg_view, strategy); 
    44  
     42        tny_msg_view_set_unavailable (priv->msg_view); 
    4543        return; 
    4644} 
    4745 
    48 static void 
    49 tny_gtk_msg_window_set_unavailable (TnyMsgView *self) 
     46static TnyMsg*  
     47tny_gtk_msg_window_get_msg (TnyMsgView *self) 
    5048{ 
    5149        TnyGtkMsgWindowPriv *priv = TNY_GTK_MSG_WINDOW_GET_PRIVATE (self); 
    52  
    53         tny_msg_view_set_unavailable (priv->msg_view); 
    54  
    55         return; 
     50        return tny_msg_view_get_msg (priv->msg_view); 
    5651} 
    57  
    5852 
    5953static void  
     
    128122        TnyMsgViewIface *klass = (TnyMsgViewIface *)g; 
    129123 
     124        klass->get_msg_func = tny_gtk_msg_window_get_msg; 
    130125        klass->set_msg_func = tny_gtk_msg_window_set_msg; 
    131         klass->set_save_strategy_func = tny_gtk_msg_window_set_save_strategy; 
    132126        klass->set_unavailable_func = tny_gtk_msg_window_set_unavailable; 
    133127 
  • trunk/libtinymailui-gtk/tny-gtk-text-mime-part-view.c

    r991 r994  
    5151{ 
    5252        TnyMimePart *part; 
    53         TnySaveStrategy *save_strategy; 
    5453}; 
    5554 
     
    5756        (G_TYPE_INSTANCE_GET_PRIVATE ((o), TNY_TYPE_GTK_TEXT_MIME_PART_VIEW, TnyGtkTextMimePartViewPriv)) 
    5857 
    59          
    60  
    61 static void 
    62 tny_gtk_text_mime_part_view_set_save_strategy (TnyMimePartView *self, TnySaveStrategy *strategy) 
    63 
    64         TnyGtkTextMimePartViewPriv *priv = TNY_GTK_TEXT_MIME_PART_VIEW_GET_PRIVATE (self); 
    65  
    66         if (priv->save_strategy) 
    67                 g_object_unref (G_OBJECT (priv->save_strategy)); 
    68  
    69         g_object_ref (G_OBJECT (strategy)); 
    70         priv->save_strategy = strategy; 
    71  
    72         return; 
    73 
    74  
    75  
    76 static void 
    77 tny_gtk_text_mime_part_view_save_as_activated (GtkMenuItem *menuitem, gpointer user_data) 
    78 
    79         TnyGtkTextMimePartView *self = user_data; 
    80         TnyGtkTextMimePartViewPriv *priv = TNY_GTK_TEXT_MIME_PART_VIEW_GET_PRIVATE (self); 
    81  
    82         if (!G_LIKELY (priv->save_strategy)) 
    83         { 
    84                 g_warning (_("No save strategy for this mime part view\n")); 
    85                 return; 
    86         } 
    87  
    88         tny_save_strategy_save (priv->save_strategy, priv->part); 
    89  
    90         return; 
    91 
    92  
    93  
    94 static gint 
    95 tny_gtk_text_mime_part_view_popup_handler (GtkWidget *widget, GdkEvent *event) 
    96 {        
    97         g_return_val_if_fail (event != NULL, FALSE); 
    98          
    99          
    100         if (G_UNLIKELY (event->type == GDK_BUTTON_PRESS)) 
    101         { 
    102                 GtkMenu *menu; 
    103                 GdkEventButton *event_button; 
    104  
    105                 menu = GTK_MENU (widget); 
    106                 g_return_val_if_fail (widget != NULL, FALSE); 
    107                 g_return_val_if_fail (GTK_IS_MENU (widget), FALSE); 
    108  
    109                 event_button = (GdkEventButton *) event; 
    110                 if (G_LIKELY (event_button->button == 3)) 
    111                 { 
    112                         gtk_menu_popup (menu, NULL, NULL, NULL, NULL,  
    113                                           event_button->button, event_button->time); 
    114                         return TRUE; 
    115                 } 
    116         } 
    117          
    118         return FALSE; 
     58 
     59static TnyMimePart* 
     60tny_gtk_text_mime_part_view_get_part (TnyMimePartView *self) 
     61
     62        TnyGtkTextMimePartViewPriv *priv = TNY_GTK_TEXT_MIME_PART_VIEW_GET_PRIVATE (self); 
     63        return (priv->part)?TNY_MIME_PART (g_object_ref (priv->part)):NULL; 
    11964} 
    12065 
     
    166111/** 
    167112 * tny_gtk_text_mime_part_view_new: 
    168  * @save_strategy: The save strategy to use 
    169113 * 
    170114 * Return value: a new #TnyMimePartView instance implemented for Gtk+ 
    171115 **/ 
    172116TnyMimePartView* 
    173 tny_gtk_text_mime_part_view_new (TnySaveStrategy *save_strategy
     117tny_gtk_text_mime_part_view_new (void
    174118{ 
    175119        TnyGtkTextMimePartView *self = g_object_new (TNY_TYPE_GTK_TEXT_MIME_PART_VIEW, NULL); 
    176120 
    177         tny_mime_part_view_set_save_strategy (TNY_MIME_PART_VIEW (self), save_strategy); 
    178  
    179121        return TNY_MIME_PART_VIEW (self); 
    180122} 
     
    185127        TnyGtkTextMimePartView *self = (TnyGtkTextMimePartView *)instance; 
    186128        TnyGtkTextMimePartViewPriv *priv = TNY_GTK_TEXT_MIME_PART_VIEW_GET_PRIVATE (self); 
    187         GtkMenu *menu = GTK_MENU (gtk_menu_new ()); 
    188         GtkWidget *mitem = gtk_menu_item_new_with_mnemonic ("Save _As"); 
    189  
    190         priv->save_strategy = NULL; 
    191         gtk_widget_show (mitem); 
    192  
    193         g_signal_connect (G_OBJECT (mitem), "activate",  
    194                 G_CALLBACK (tny_gtk_text_mime_part_view_save_as_activated), self); 
    195  
    196         gtk_menu_shell_append (GTK_MENU_SHELL (menu), mitem); 
    197                          
    198         g_signal_connect_swapped (G_OBJECT (self), "button_press_event", 
    199                 G_CALLBACK (tny_gtk_text_mime_part_view_popup_handler), menu); 
    200129 
    201130        gtk_text_view_set_editable (GTK_TEXT_VIEW (self), FALSE); 
     
    212141        if (G_LIKELY (priv->part)) 
    213142                g_object_unref (G_OBJECT (priv->part)); 
    214  
    215         if (G_LIKELY (priv->save_strategy)) 
    216                 g_object_unref (G_OBJECT (priv->save_strategy)); 
    217143     
    218144        (*parent_class->finalize) (object); 
     
    226152        TnyMimePartViewIface *klass = (TnyMimePartViewIface *)g; 
    227153 
     154        klass->get_part_func = tny_gtk_text_mime_part_view_get_part; 
    228155        klass->set_part_func = tny_gtk_text_mime_part_view_set_part; 
    229         klass->set_save_strategy_func = tny_gtk_text_mime_part_view_set_save_strategy; 
    230156        klass->clear_func = tny_gtk_text_mime_part_view_clear; 
    231157         
  • trunk/libtinymailui-gtk/tny-gtk-text-mime-part-view.h

    r984 r994  
    5353 
    5454GType tny_gtk_text_mime_part_view_get_type (void); 
    55 TnyMimePartView* tny_gtk_text_mime_part_view_new (TnySaveStrategy *save_strategy); 
     55TnyMimePartView* tny_gtk_text_mime_part_view_new (void); 
    5656 
    5757G_END_DECLS 
  • trunk/libtinymailui-mozembed/tny-moz-embed-html-mime-part-view.c

    r993 r994  
    5252{ 
    5353        TnyMimePart *part; 
    54         TnySaveStrategy *save_strategy; 
    5554}; 
    5655 
     
    5958 
    6059 
    61 static void 
    62 tny_moz_embed_html_mime_part_view_set_save_strategy (TnyMimePartView *self, TnySaveStrategy *strategy) 
     60 
     61static TnyMimePart* 
     62tny_moz_embed_html_mime_part_view_get_part (TnyMimePartView *self) 
    6363{ 
    6464        TnyMozEmbedHtmlMimePartViewPriv *priv = TNY_MOZ_EMBED_HTML_MIME_PART_VIEW_GET_PRIVATE (self); 
    65  
    66         if (priv->save_strategy) 
    67                 g_object_unref (G_OBJECT (priv->save_strategy)); 
    68  
    69         g_object_ref (G_OBJECT (strategy)); 
    70         priv->save_strategy = strategy; 
    71  
    72         return; 
    73 
    74  
    75  
    76 static void 
    77 tny_moz_embed_html_mime_part_view_save_as_activated (GtkMenuItem *menuitem, gpointer user_data) 
    78 
    79         TnyMozEmbedHtmlMimePartView *self = user_data; 
    80         TnyMozEmbedHtmlMimePartViewPriv *priv = TNY_MOZ_EMBED_HTML_MIME_PART_VIEW_GET_PRIVATE (self); 
    81  
    82         if (!G_LIKELY (priv->save_strategy)) 
    83         { 
    84                 g_warning (_("No save strategy for this mime part view\n")); 
    85                 return; 
    86         } 
    87  
    88         tny_save_strategy_save (priv->save_strategy, priv->part); 
    89  
    90         return; 
    91 
    92  
    93  
    94 static gint 
    95 tny_moz_embed_html_mime_part_view_popup_handler (GtkWidget *widget, GdkEvent *event) 
    96 {        
    97         g_return_val_if_fail (event != NULL, FALSE); 
    98          
    99          
    100         if (G_UNLIKELY (event->type == GDK_BUTTON_PRESS)) 
    101         { 
    102                 GtkMenu *menu; 
    103                 GdkEventButton *event_button; 
    104  
    105                 menu = GTK_MENU (widget); 
    106                 g_return_val_if_fail (widget != NULL, FALSE); 
    107                 g_return_val_if_fail (GTK_IS_MENU (widget), FALSE); 
    108  
    109                 event_button = (GdkEventButton *) event; 
    110                 if (G_LIKELY (event_button->button == 3)) 
    111                 { 
    112                         gtk_menu_popup (menu, NULL, NULL, NULL, NULL,  
    113                                           event_button->button, event_button->time); 
    114                         return TRUE; 
    115                 } 
    116         } 
    117          
    118         return FALSE; 
    119 
    120  
    121          
     65        return (priv->part)?TNY_MIME_PART (g_object_ref (priv->part)):NULL; 
     66
     67 
     68 
    12269static gpointer  
    12370remove_html_stread_hack (gpointer data) 
     
    171118/** 
    172119 * tny_moz_embed_html_mime_part_view_new: 
    173  * @save_strategy: The save strategy to use 
    174120 * 
    175121 * Return value: a new #TnyMimePartView instance implemented for Gtk+ 
    176122 **/ 
    177123TnyMimePartView* 
    178 tny_moz_embed_html_mime_part_view_new (TnySaveStrategy *save_strategy
     124tny_moz_embed_html_mime_part_view_new (void
    179125{ 
    180126        TnyMozEmbedHtmlMimePartView *self = g_object_new (TNY_TYPE_MOZ_EMBED_HTML_MIME_PART_VIEW, NULL); 
    181127 
    182         tny_mime_part_view_set_save_strategy (TNY_MIME_PART_VIEW (self), save_strategy); 
    183  
    184128        return TNY_MIME_PART_VIEW (self); 
    185129} 
     
    188132tny_moz_embed_html_mime_part_view_instance_init (GTypeInstance *instance, gpointer g_class) 
    189133{ 
    190         TnyMozEmbedHtmlMimePartView *self = (TnyMozEmbedHtmlMimePartView *)instance; 
    191         TnyMozEmbedHtmlMimePartViewPriv *priv = TNY_MOZ_EMBED_HTML_MIME_PART_VIEW_GET_PRIVATE (self); 
    192         GtkMenu *menu = GTK_MENU (gtk_menu_new ()); 
    193         GtkWidget *mitem = gtk_menu_item_new_with_mnemonic ("Save _As"); 
    194  
    195         priv->save_strategy = NULL; 
    196         gtk_widget_show (mitem); 
    197  
    198         g_signal_connect (G_OBJECT (mitem), "activate",  
    199                 G_CALLBACK (tny_moz_embed_html_mime_part_view_save_as_activated), self); 
    200  
    201         gtk_menu_shell_append (GTK_MENU_SHELL (menu), mitem); 
    202                          
    203         g_signal_connect_swapped (G_OBJECT (self), "button_press_event", 
    204                 G_CALLBACK (tny_moz_embed_html_mime_part_view_popup_handler), menu); 
    205  
    206134        return; 
    207135} 
    &