2007-07-04 Murray Cumming <murrayc@murrayc.com>
[modest] / src / maemo / modest-transport-widget.c
index f909a2c..3b114e6 100644 (file)
@@ -49,11 +49,14 @@ enum {
 
 typedef struct _ModestTransportWidgetPrivate ModestTransportWidgetPrivate;
 struct _ModestTransportWidgetPrivate {
-       ModestProtocol proto;
+       ModestTransportStoreProtocol proto;
        GtkWidget *servername;
        GtkWidget *username;
        GtkWidget *auth;
        GtkWidget *remember_pwd;
+       
+       ModestPairList *transport_store_protos;
+       ModestPairList *auth_protos;
 };
 #define MODEST_TRANSPORT_WIDGET_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
                                                      MODEST_TYPE_TRANSPORT_WIDGET, \
@@ -113,12 +116,18 @@ modest_transport_widget_init (ModestTransportWidget *obj)
        ModestTransportWidgetPrivate *priv;
        priv = MODEST_TRANSPORT_WIDGET_GET_PRIVATE(obj); 
        
-       priv->proto = MODEST_PROTOCOL_UNKNOWN;
+       priv->proto = MODEST_PROTOCOL_TRANSPORT_STORE_UNKNOWN;
 }
 
 static void
 modest_transport_widget_finalize (GObject *obj)
 {
+       ModestTransportWidgetPrivate *priv = MODEST_TRANSPORT_WIDGET_GET_PRIVATE(obj);
+       
+       /* These had to stay alive for as long as the comboboxes that used them: */
+       modest_pair_list_free (priv->transport_store_protos);
+       modest_pair_list_free (priv->auth_protos);
+       
        G_OBJECT_CLASS(parent_class)->finalize (obj);
 }
 
@@ -141,7 +150,6 @@ smtp_configuration (ModestTransportWidget *self)
 {
        ModestTransportWidgetPrivate *priv;
        GtkWidget *label, *box, *hbox, *combo;
-       ModestPairList *protos;
        
        priv = MODEST_TRANSPORT_WIDGET_GET_PRIVATE(self);
        box = gtk_vbox_new (FALSE, 6);
@@ -185,9 +193,11 @@ smtp_configuration (ModestTransportWidget *self)
        gtk_label_set_text (GTK_LABEL(label),_("Connection type:"));
        gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0);
 
-       protos = modest_protocol_info_get_protocol_security_pair_list ();
-       combo  = modest_combo_box_new (protos, g_str_equal);
-       modest_pair_list_free (protos);
+       /* Note: This ModestPairList* must exist for as long as the combo
+        * that uses it, because the ModestComboBox uses the ID opaquely, 
+        * so it can't know how to manage its memory. */
+       priv->transport_store_protos = modest_protocol_info_get_transport_store_protocol_pair_list ();
+       combo = modest_combo_box_new (priv->transport_store_protos, g_str_equal);
        
        gtk_box_pack_start (GTK_BOX(hbox), combo, FALSE, FALSE,0);
        gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 0);
@@ -198,9 +208,11 @@ smtp_configuration (ModestTransportWidget *self)
        gtk_label_set_text (GTK_LABEL(label),_("Authentication:"));
        gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 6);
 
-       protos = modest_protocol_info_get_protocol_auth_pair_list ();
-       combo  = modest_combo_box_new (protos, g_str_equal);
-       modest_pair_list_free (protos);
+       /* Note: This ModestPairList* must exist for as long as the combo
+        * that uses it, because the ModestComboBox uses the ID opaquely, 
+        * so it can't know how to manage its memory. */
+       priv->auth_protos = modest_protocol_info_get_auth_protocol_pair_list ();
+       combo  = modest_combo_box_new (priv->auth_protos, g_str_equal);
        
        gtk_box_pack_start (GTK_BOX(hbox), combo, FALSE, FALSE, 0);
        priv->remember_pwd =
@@ -212,7 +224,7 @@ smtp_configuration (ModestTransportWidget *self)
 
 
 GtkWidget*
-modest_transport_widget_new (ModestProtocol proto)
+modest_transport_widget_new (ModestTransportStoreProtocol proto)
 {
        GObject *obj;
        GtkWidget *w;
@@ -284,12 +296,12 @@ modest_transport_widget_get_servername (ModestTransportWidget *self)
 }
 
 
-ModestProtocol
+ModestTransportStoreProtocol
 modest_transport_widget_get_proto (ModestTransportWidget *self)
 {
        ModestTransportWidgetPrivate *priv;
 
-       g_return_val_if_fail (self, MODEST_PROTOCOL_UNKNOWN);
+       g_return_val_if_fail (self, MODEST_PROTOCOL_TRANSPORT_STORE_UNKNOWN);
        priv = MODEST_TRANSPORT_WIDGET_GET_PRIVATE(self);
 
        return priv->proto;