Hi, Currently it is not possible to configure a exchange account in evolution if the mailbox name and account name are different which is a major issue. This patch adds a new Entry to the account configuration window to allow the user to specify the mailbox name if its different. The author of the patch is Milan (mcrha redhat com). The patch does not break any API/ABI. This has been reviewed and tested well enough. More details can be found in the bug. The patch can be found at http://bugzilla.gnome.org/show_bug.cgi?id=273627#c88 . Have attached the screen shot. thanks, Chenthill.
Index: plugins/exchange-operations/exchange-account-setup.c =================================================================== --- plugins/exchange-operations/exchange-account-setup.c (revision 35582) +++ plugins/exchange-operations/exchange-account-setup.c (working copy) @@ -426,6 +426,7 @@ owa_authenticate_user(GtkWidget *button, char *at, *user; gboolean valid = FALSE; ExchangeParams *exchange_params; + GtkWidget *mailbox_entry = g_object_get_data (G_OBJECT (button), "mailbox-entry"); exchange_params = g_new0 (ExchangeParams, 1); exchange_params->host = NULL; @@ -467,6 +468,9 @@ owa_authenticate_user(GtkWidget *button, /* Supress the trailing slash */ key [strlen(key) -1] = 0; + /* set the mailbox before function call to let it use our, not create one */ + exchange_params->mailbox = g_strdup (camel_url_get_param (url, "mailbox")); + valid = e2k_validate_user (owa_url, key, &url->user, exchange_params, &remember_password, &result, GTK_WINDOW (gtk_widget_get_toplevel (button))); @@ -485,6 +489,12 @@ owa_authenticate_user(GtkWidget *button, camel_url_set_param (url, "mailbox", valid ? exchange_params->mailbox : NULL); camel_url_set_param (url, "owa_path", valid ? exchange_params->owa_path : NULL); + if (mailbox_entry) { + const char *par = camel_url_get_param (url, "mailbox"); + + gtk_entry_set_text (GTK_ENTRY (mailbox_entry), par ? par : ""); + } + g_free (exchange_params->owa_path); g_free (exchange_params->mailbox); g_free (exchange_params->host); @@ -542,6 +552,46 @@ owa_editor_entry_changed(GtkWidget *entr camel_url_free (url); } +static void +update_mailbox_param_in_url (EAccount *account, e_account_item_t item, const char *mailbox) +{ + CamelURL *url; + char *url_string; + const char *target_url; + + if (!account) + return; + + target_url = e_account_get_string (account, item); + if (target_url && target_url[0] != '\0') + url = camel_url_new (target_url, NULL); + else + return; + + if (mailbox && *mailbox) + camel_url_set_param (url, "mailbox", mailbox); + else + camel_url_set_param (url, "mailbox", NULL); + + url_string = camel_url_to_string (url, 0); + e_account_set_string (account, item, url_string); + g_free (url_string); + camel_url_free (url); +} + +static void +mailbox_editor_entry_changed (GtkWidget *entry, EConfig *config) +{ + EMConfigTargetAccount *target; + const char *mailbox; + + target = (EMConfigTargetAccount *)config->target; + mailbox = gtk_entry_get_text (GTK_ENTRY (entry)); + + update_mailbox_param_in_url (target->account, E_ACCOUNT_SOURCE_URL, mailbox); + update_mailbox_param_in_url (target->account, E_ACCOUNT_TRANSPORT_URL, mailbox); +} + static char * construct_owa_url (CamelURL *url) { @@ -574,8 +624,8 @@ org_gnome_exchange_owa_url(EPlugin *epl, { EMConfigTargetAccount *target_account; const char *source_url; - char *owa_url = NULL; - GtkWidget *owa_entry; + char *owa_url = NULL, *mailbox_name; + GtkWidget *owa_entry, *mailbox_entry; CamelURL *url; int row; GtkWidget *hbox, *label, *button; @@ -607,6 +657,7 @@ org_gnome_exchange_owa_url(EPlugin *epl, } owa_url = g_strdup (camel_url_get_param(url, "owa_url")); + mailbox_name = g_strdup (camel_url_get_param (url, "mailbox")); /* if the host is null, then user+other info is dropped silently, force it to be kept */ if (url->host == NULL) { @@ -667,7 +718,26 @@ org_gnome_exchange_owa_url(EPlugin *epl, /* check for correctness of the input in the owa_entry */ owa_editor_entry_changed (owa_entry, data->config); + row++; + label = gtk_label_new_with_mnemonic (_("_Mailbox:")); + gtk_widget_show (label); + + mailbox_entry = gtk_entry_new (); + gtk_widget_show (mailbox_entry); + if (mailbox_name) + gtk_entry_set_text (GTK_ENTRY (mailbox_entry), mailbox_name); + + gtk_label_set_mnemonic_widget (GTK_LABEL (label), mailbox_entry); + + g_signal_connect (mailbox_entry, "changed", G_CALLBACK (mailbox_editor_entry_changed), data->config); + g_object_set_data (G_OBJECT (button), "mailbox-entry", mailbox_entry); + + gtk_table_attach (GTK_TABLE (data->parent), label, 0, 1, row, row+1, 0, 0, 0, 0); + gtk_table_attach (GTK_TABLE (data->parent), mailbox_entry, 1, 2, row, row+1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0); + g_free (owa_url); + g_free (mailbox_name); + return hbox; } Index: plugins/exchange-operations/ChangeLog =================================================================== --- plugins/exchange-operations/ChangeLog (revision 35582) +++ plugins/exchange-operations/ChangeLog (working copy) @@ -1,3 +1,13 @@ +2008-06-03 Milan Crha <mcrha redhat com> + + ** Fix for bug #273627 + + * exchange-account-setup.c: (owa_authenticate_user), + (update_mailbox_param_in_url), (mailbox_editor_entry_changed), + (org_gnome_exchange_owa_url): New entry to enter mailbox name in case + it differs from the username. The entry is updated after a validation + and shows the mailbox name as was used for validation. + 2008-06-02 Jacob Brown <jeblinux gmail com> ** Fix for bug #529464
Attachment:
Screenshot-Evolution Account Assistant.jpg
Description: JPEG image