X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fgtk%2Fmodest-store-widget.c;h=e6d38a89da97084d03e679b9d9d7281a5d82fd65;hb=04dcc689cbbcf245a1229bd9ddd2d243991f1aaa;hp=33989dbf03981d2eba640c927be40df4210f065b;hpb=4c17eac51757809148b84e229bede6323aac270a;p=modest diff --git a/src/gtk/modest-store-widget.c b/src/gtk/modest-store-widget.c index 33989db..e6d38a8 100644 --- a/src/gtk/modest-store-widget.c +++ b/src/gtk/modest-store-widget.c @@ -28,6 +28,8 @@ */ #include +#include +#include #include "modest-store-widget.h" #include @@ -37,24 +39,21 @@ 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; GtkWidget *security; GtkWidget *auth; GtkWidget *chooser; GtkWidget *remember_pwd; - - ModestWidgetFactory *factory; + + ModestProtocol proto; }; #define MODEST_STORE_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_STORE_WIDGET, \ @@ -63,7 +62,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 +100,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 +116,7 @@ modest_store_widget_init (ModestStoreWidget *obj) ModestStoreWidgetPrivate *priv; priv = MODEST_STORE_WIDGET_GET_PRIVATE(obj); - - priv->proto = NULL; + priv->proto = MODEST_PROTOCOL_UNKNOWN; } @@ -186,13 +187,20 @@ 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) { + ModestPairList *protos; ModestStoreWidgetPrivate *priv; GtkWidget *label, *box, *hbox; - + GtkWidget *combo; + priv = MODEST_STORE_WIDGET_GET_PRIVATE(self); box = gtk_vbox_new (FALSE, 6); @@ -220,13 +228,15 @@ imap_pop_configuration (ModestStoreWidget *self) gtk_label_set_markup (GTK_LABEL(label),_("Security")); gtk_box_pack_start (GTK_BOX(box), label, FALSE, FALSE, 0); + protos = modest_protocol_info_get_protocol_pair_list (MODEST_PROTOCOL_TYPE_SECURITY); + priv->security = modest_combo_box_new (protos, g_str_equal); + modest_pair_list_free (protos); + 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 +244,12 @@ 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); + + protos = modest_protocol_info_get_protocol_pair_list (MODEST_PROTOCOL_TYPE_AUTH); + combo = modest_combo_box_new (protos, g_str_equal); + modest_pair_list_free (protos); + 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 +257,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 +268,13 @@ imap_pop_configuration (ModestStoreWidget *self) static void modest_store_widget_finalize (GObject *obj) { - ModestStoreWidgetPrivate *priv; - priv = MODEST_STORE_WIDGET_GET_PRIVATE(obj); - - 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 (ModestProtocol proto) { GObject *obj; GtkWidget *w; @@ -279,25 +282,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 +304,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 +312,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 +325,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 +340,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* +ModestProtocol modest_store_widget_get_proto (ModestStoreWidget *self) { ModestStoreWidgetPrivate *priv; - g_return_val_if_fail (self, FALSE); + g_return_val_if_fail (self, MODEST_PROTOCOL_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, MODEST_PROTOCOL_UNKNOWN); + 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; +}