Requesting Freeze break for stable branch - GNOME 2.22 - bug 273627



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



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]