X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-store-widget.c;h=f77a087c3aeaba2cd5f4bcab5b3b263a919729bf;hb=8a821d22130a023dbd639d6a9117245320cb3a2b;hp=33989dbf03981d2eba640c927be40df4210f065b;hpb=b691e563dd858d472dc25de76704c5410e60d352;p=modest diff --git a/src/maemo/modest-store-widget.c b/src/maemo/modest-store-widget.c index 33989db..f77a087 100644 --- a/src/maemo/modest-store-widget.c +++ b/src/maemo/modest-store-widget.c @@ -28,6 +28,8 @@ */ #include +#include +#include #include "modest-store-widget.h" #include @@ -37,24 +39,26 @@ static void modest_store_widget_init (ModestStoreWidget *obj); static void modest_store_widget_finalize (GObject *obj); /* list my signals */ enum { - /* MY_SIGNAL_1, */ - /* MY_SIGNAL_2, */ + DATA_CHANGED_SIGNAL, LAST_SIGNAL }; typedef struct _ModestStoreWidgetPrivate ModestStoreWidgetPrivate; struct _ModestStoreWidgetPrivate { - gchar* proto; - GtkWidget *servername; GtkWidget *username; + + ModestPairList *security_protos; GtkWidget *security; + + ModestPairList *transport_store_protos; + GtkWidget *auth; GtkWidget *chooser; GtkWidget *remember_pwd; - - ModestWidgetFactory *factory; + + ModestTransportStoreProtocol proto; }; #define MODEST_STORE_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_STORE_WIDGET, \ @@ -63,7 +67,7 @@ struct _ModestStoreWidgetPrivate { static GtkContainerClass *parent_class = NULL; /* uncomment the following if you have defined any signals */ -/* static guint signals[LAST_SIGNAL] = {0}; */ +static guint signals[LAST_SIGNAL] = {0}; GType modest_store_widget_get_type (void) @@ -101,11 +105,14 @@ modest_store_widget_class_init (ModestStoreWidgetClass *klass) g_type_class_add_private (gobject_class, sizeof(ModestStoreWidgetPrivate)); /* signal definitions go here, e.g.: */ -/* signals[MY_SIGNAL_1] = */ -/* g_signal_new ("my_signal_1",....); */ -/* signals[MY_SIGNAL_2] = */ -/* g_signal_new ("my_signal_2",....); */ -/* etc. */ + signals[DATA_CHANGED_SIGNAL] = + g_signal_new ("data_changed", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET(ModestStoreWidgetClass, data_changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); } static void @@ -114,8 +121,7 @@ modest_store_widget_init (ModestStoreWidget *obj) ModestStoreWidgetPrivate *priv; priv = MODEST_STORE_WIDGET_GET_PRIVATE(obj); - - priv->proto = NULL; + priv->proto = MODEST_PROTOCOL_TRANSPORT_STORE_UNKNOWN; } @@ -186,13 +192,19 @@ mbox_configuration (ModestStoreWidget *self) return box; } +static void +on_entry_changed (GtkEntry *entry, gpointer user_data) +{ + g_signal_emit (MODEST_STORE_WIDGET (user_data), signals[DATA_CHANGED_SIGNAL], 0); +} static GtkWidget* imap_pop_configuration (ModestStoreWidget *self) { ModestStoreWidgetPrivate *priv; GtkWidget *label, *box, *hbox; - + GtkWidget *combo; + priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); box = gtk_vbox_new (FALSE, 6); @@ -220,13 +232,17 @@ imap_pop_configuration (ModestStoreWidget *self) gtk_label_set_markup (GTK_LABEL(label),_("Security")); gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 0); + /* 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->security_protos = modest_protocol_info_get_connection_protocol_pair_list (); + priv->security = modest_combo_box_new (priv->security_protos, g_str_equal); + hbox = gtk_hbox_new (FALSE, 6); label = gtk_label_new(NULL); gtk_label_set_text (GTK_LABEL(label),_("Connection type:")); gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX(hbox), modest_widget_factory_get_combo_box - (priv->factory, MODEST_COMBO_BOX_TYPE_SECURITY_PROTOS), - FALSE, FALSE,0); + gtk_box_pack_start (GTK_BOX(hbox), priv->security, FALSE, FALSE,0); gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 0); hbox = gtk_hbox_new (FALSE, 6); @@ -234,10 +250,14 @@ imap_pop_configuration (ModestStoreWidget *self) gtk_label_set_text (GTK_LABEL(label),_("Authentication:")); gtk_box_pack_start (GTK_BOX(hbox), label, FALSE, FALSE, 6); - gtk_box_pack_start (GTK_BOX(hbox), modest_widget_factory_get_combo_box - (priv->factory, MODEST_COMBO_BOX_TYPE_AUTH_PROTOS), - FALSE, FALSE, 0); + + /* 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); priv->remember_pwd = gtk_check_button_new_with_label (_("Remember password")); gtk_box_pack_start (GTK_BOX(hbox),priv->remember_pwd, @@ -245,6 +265,10 @@ imap_pop_configuration (ModestStoreWidget *self) gtk_box_pack_start (GTK_BOX(box), hbox, FALSE, FALSE, 0); + /* Handle entry modifications */ + g_signal_connect (priv->username, "changed", G_CALLBACK (on_entry_changed), self); + g_signal_connect (priv->servername, "changed", G_CALLBACK (on_entry_changed), self); + return box; } @@ -252,26 +276,19 @@ imap_pop_configuration (ModestStoreWidget *self) static void modest_store_widget_finalize (GObject *obj) { - ModestStoreWidgetPrivate *priv; - priv = MODEST_STORE_WIDGET_GET_PRIVATE(obj); + ModestStoreWidgetPrivate *priv = MODEST_STORE_WIDGET_GET_PRIVATE(obj); + + /* These had to stay alive for as long as the comboboxes that used them: */ + modest_pair_list_free (priv->security_protos); + modest_pair_list_free (priv->transport_store_protos); - if (priv->factory) { - g_object_unref (priv->factory); - priv->factory = NULL; - } - - if (priv->proto) { - g_free (priv->proto); - priv->proto = NULL; - } - G_OBJECT_CLASS(parent_class)->finalize (obj); } GtkWidget* -modest_store_widget_new (ModestWidgetFactory *factory, const gchar *proto) +modest_store_widget_new (ModestTransportStoreProtocol proto) { GObject *obj; GtkWidget *w; @@ -279,25 +296,20 @@ modest_store_widget_new (ModestWidgetFactory *factory, const gchar *proto) ModestStoreWidgetPrivate *priv; g_return_val_if_fail (proto, NULL); - g_return_val_if_fail (factory, NULL); obj = g_object_new(MODEST_TYPE_STORE_WIDGET, NULL); self = MODEST_STORE_WIDGET(obj); priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); - g_object_ref (factory); - priv->factory = factory; - - priv->proto = g_strdup (proto); + priv->proto = proto; - if (strcmp (proto, MODEST_PROTOCOL_STORE_POP) == 0 || - strcmp (proto, MODEST_PROTOCOL_STORE_IMAP) == 0) { + if (proto == MODEST_PROTOCOL_STORE_POP || proto == MODEST_PROTOCOL_STORE_IMAP) w = imap_pop_configuration (self); - } else if (strcmp (proto, MODEST_PROTOCOL_STORE_MAILDIR) == 0) { + else if (proto == MODEST_PROTOCOL_STORE_MAILDIR) w = maildir_configuration (self); - } else if (strcmp (proto, MODEST_PROTOCOL_STORE_MBOX) == 0) { + else if (proto == MODEST_PROTOCOL_STORE_MBOX) w = mbox_configuration (self); - } else + else w = gtk_label_new (""); gtk_widget_show_all (w); @@ -306,7 +318,6 @@ modest_store_widget_new (ModestWidgetFactory *factory, const gchar *proto) return GTK_WIDGET(self); } - gboolean modest_store_widget_get_remember_password (ModestStoreWidget *self) { @@ -315,10 +326,12 @@ modest_store_widget_get_remember_password (ModestStoreWidget *self) g_return_val_if_fail (self, FALSE); priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); - return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(priv->remember_pwd)); + if (GTK_IS_TOGGLE_BUTTON(priv->remember_pwd)) + return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(priv->remember_pwd)); + else + return FALSE; } - const gchar* modest_store_widget_get_username (ModestStoreWidget *self) { @@ -326,8 +339,11 @@ modest_store_widget_get_username (ModestStoreWidget *self) g_return_val_if_fail (self, NULL); priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); - - return gtk_entry_get_text (GTK_ENTRY(priv->username)); + + if (GTK_IS_ENTRY(priv->username)) + return gtk_entry_get_text (GTK_ENTRY(priv->username)); + else + return NULL; } const gchar* @@ -338,18 +354,35 @@ modest_store_widget_get_servername (ModestStoreWidget *self) g_return_val_if_fail (self, NULL); priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); - return gtk_entry_get_text (GTK_ENTRY(priv->servername)); + if (GTK_IS_ENTRY(priv->servername)) + return gtk_entry_get_text (GTK_ENTRY(priv->servername)); + else + return NULL; } -const gchar* +ModestTransportStoreProtocol modest_store_widget_get_proto (ModestStoreWidget *self) { ModestStoreWidgetPrivate *priv; - g_return_val_if_fail (self, FALSE); + g_return_val_if_fail (self, MODEST_PROTOCOL_TRANSPORT_STORE_UNKNOWN); priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); return priv->proto; } + +gchar * +modest_store_widget_get_path (ModestStoreWidget *self) +{ + ModestStoreWidgetPrivate *priv; + + g_return_val_if_fail (self, NULL); + priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); + + if (GTK_IS_FILE_CHOOSER(priv->chooser)) + return gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(priv->chooser)); + else + return NULL; +}