aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog2
-rw-r--r--mail/mail-config.c95
2 files changed, 87 insertions, 10 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index d3b1725439..2da03ce276 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -9,6 +9,8 @@
* mail-config.c: Config dialogs are completed.
(service_acceptable): Fixed a segfault caused by duplicate
camel_exception_free()
+ (providers_config_new): Identity and Source clists are now filled in
+ when the dialog is created as well as the Transport page
* folder-browser-factory.c: Renamed Tool/ menu items
Vfolder was changed to Virtual Folder and
diff --git a/mail/mail-config.c b/mail/mail-config.c
index 8b6692f64e..16c4bef88b 100644
--- a/mail/mail-config.c
+++ b/mail/mail-config.c
@@ -1012,7 +1012,7 @@ prepare_first (GnomeDruidPage *page, GnomeDruid *druid, gpointer user_data)
}
static struct identity_record idrec;
-static char *source, *transport;
+static char *source = NULL, *transport = NULL;
static void
cancel (GnomeDruid *druid, gpointer window)
@@ -1215,7 +1215,9 @@ mail_config_druid (void)
}
static gint identity_row = -1;
+static gint identity_max_row = -1;
static gint source_row = -1;
+static gint source_max_row = -1;
struct identity_dialog_data {
GtkWidget *clist;
@@ -1254,7 +1256,9 @@ on_cmdIdentityConfigDialogCancel_clicked (GtkWidget *dialog, gpointer user_data)
if (data && data->new_entry) {
gtk_clist_remove (GTK_CLIST (data->clist), identity_row);
- identity_row = -1;
+ identity_max_row--;
+ identity_row = identity_row > identity_max_row ? identity_max_row : identity_row;
+ gtk_clist_select_row (GTK_CLIST (data->clist), identity_row, 0);
}
}
@@ -1386,7 +1390,9 @@ on_SourceConfigDialogButton_clicked (GnomeDialog *dialog, int button, gpointer u
g_print ("Cancel clicked\n");
if (data && data->new_entry) {
gtk_clist_remove (GTK_CLIST (data->clist), source_row);
- source_row = -1;
+ source_max_row--;
+ source_row = source_row > source_max_row ? source_max_row : source_row;
+ gtk_clist_select_row (GTK_CLIST (data->clist), source_row, 0);
}
break;
}
@@ -1515,9 +1521,12 @@ on_cmdIdentityAdd_clicked (GtkWidget *widget, gpointer user_data)
char *text[] = { "", "", "", "" };
gtk_clist_append (GTK_CLIST (user_data), text);
+
if (identity_row > -1)
gtk_clist_unselect_row (GTK_CLIST (user_data), identity_row, 0);
- gtk_clist_select_row (GTK_CLIST (user_data), identity_row + 1, 0);
+
+ identity_max_row++;
+ gtk_clist_select_row (GTK_CLIST (user_data), identity_max_row, 0);
/* now create the editing dialog */
dialog = create_identity_config_dialog (FALSE, &idrec, GTK_WIDGET (user_data));
@@ -1570,11 +1579,12 @@ on_cmdSourcesAdd_clicked (GtkWidget *widget, gpointer user_data)
char *text[] = { "" };
gtk_clist_append (GTK_CLIST (user_data), text);
+ source_max_row++;
if (source_row > -1)
gtk_clist_unselect_row (GTK_CLIST (user_data), source_row, 0);
- gtk_clist_select_row (GTK_CLIST (user_data), source_row + 1, 0);
+ gtk_clist_select_row (GTK_CLIST (user_data), source_max_row, 0);
/* now create the editing dialog */
dialog = create_source_config_dialog (FALSE, &source, GTK_WIDGET (user_data));
@@ -1670,6 +1680,8 @@ providers_config_new (void)
GList *providers, *p, *sources, *transports;
GtkWidget *table, *interior_notebook;
char *titles[] = { _("Name"), _("Address"), _("Organization"), _("Signature file") };
+ char *path;
+ gboolean configured;
int page;
@@ -1739,11 +1751,50 @@ providers_config_new (void)
gtk_clist_set_column_width (GTK_CLIST (clistIdentities), 0, 80);
gtk_clist_column_titles_show (GTK_CLIST (clistIdentities));
- /* TODO: we should really have a GList of identities */
- idrec.name = NULL;
- idrec.address = NULL;
- idrec.organization = NULL;
- idrec.sigfile = NULL;
+ /* Find out if stuff has been configured */
+ path = g_strdup_printf ("=%s/config=/mail/configured", evolution_dir);
+ configured = gnome_config_get_bool (path);
+ g_free (path);
+
+ identity_row = -1;
+ if (configured) {
+ char *text[] = { "", "", "", "" };
+ struct identity_record *data;
+
+ /* add an entry to the identity clist */
+ gtk_clist_append (GTK_CLIST (clistIdentities), text);
+ identity_max_row = 0;
+
+ path = g_strdup_printf ("=%s/config=/mail/id_name", evolution_dir);
+ idrec.name = gnome_config_get_string (path);
+ gtk_clist_set_text (GTK_CLIST (clistIdentities), 0, 0, idrec.name);
+ g_free (path);
+
+ path = g_strdup_printf ("=%s/config=/mail/id_addr", evolution_dir);
+ idrec.address = gnome_config_get_string (path);
+ gtk_clist_set_text (GTK_CLIST (clistIdentities), 0, 1, idrec.address);
+ g_free (path);
+
+ path = g_strdup_printf ("=%s/config=/mail/id_org", evolution_dir);
+ idrec.organization = gnome_config_get_string (path);
+ gtk_clist_set_text (GTK_CLIST (clistIdentities), 0, 2, idrec.organization);
+ g_free (path);
+
+ path = g_strdup_printf ("=%s/config=/mail/id_sig", evolution_dir);
+ idrec.sigfile = gnome_config_get_string (path);
+ gtk_clist_set_text (GTK_CLIST (clistIdentities), 0, 3, idrec.sigfile);
+ g_free (path);
+
+ data = g_malloc0 (sizeof (struct identity_record));
+ data->name = g_strdup (idrec.name);
+ data->address = g_strdup (idrec.address);
+ data->organization = g_strdup (idrec.organization);
+ data->sigfile = g_strdup (idrec.sigfile);
+ gtk_clist_set_row_data (GTK_CLIST (clistIdentities), 0, data);
+ } else {
+ identity_max_row = -1;
+ }
+
lblIdentities = gtk_label_new (_("Identities"));
gtk_widget_set_name (lblIdentities, "lblIdentities");
@@ -1825,6 +1876,25 @@ providers_config_new (void)
gtk_clist_set_column_width (GTK_CLIST (clistSources), 0, 80);
gtk_clist_column_titles_show (GTK_CLIST (clistSources));
+ if (configured && !source) {
+ path = g_strdup_printf ("=%s/config=/mail/source", evolution_dir);
+ source = gnome_config_get_string (path);
+ g_free (path);
+ }
+
+ source_row = -1;
+ if (source) {
+ char *text[] = { "" };
+
+ gtk_clist_append (GTK_CLIST (clistSources), text);
+ source_max_row = 0;
+
+ gtk_clist_set_text (GTK_CLIST (clistSources), 0, 0, source);
+ gtk_clist_set_row_data (GTK_CLIST (clistSources), 0, g_strdup(source));
+ } else {
+ source_max_row = -1;
+ }
+
lblMailSources = gtk_label_new (_("Mail sources"));
gtk_widget_set_name (lblMailSources, "lblMailSources");
gtk_widget_ref (lblMailSources);
@@ -1889,6 +1959,11 @@ providers_config_new (void)
(GtkDestroyNotify) gtk_widget_unref);
gtk_widget_show (transport_page_vbox);
gtk_container_add (GTK_CONTAINER (notebook), transport_page_vbox);
+ if (configured && !transport) {
+ path = g_strdup_printf ("=%s/config=/mail/transport", evolution_dir);
+ transport = gnome_config_get_string (path);
+ g_free (path);
+ }
create_transport_page (transport_page_vbox, transports, &transport);
/* Set the data in the transports page */