evolution r35090 - in branches/mbarnes-composer: . addressbook addressbook/gui/component addressbook/gui/contact-list-editor addressbook/gui/merging addressbook/gui/widgets calendar calendar/common calendar/conduits/calendar calendar/conduits/memo calendar/conduits/todo calendar/gui calendar/gui/dialogs composer e-util help help/es help/quickref help/quickref/pl mail plugins/backup-restore plugins/exchange-operations plugins/external-editor plugins/groupwise-features plugins/import-ics-attachments plugins/itip-formatter plugins/save-calendar po shell widgets widgets/e-timezone-dialog widgets/misc widgets/table widgets/text



Author: mbarnes
Date: Tue Feb 26 05:33:35 2008
New Revision: 35090
URL: http://svn.gnome.org/viewvc/evolution?rev=35090&view=rev

Log:
Merge revisions 34994:35089 from trunk.


Added:
   branches/mbarnes-composer/help/quickref/pl/
      - copied from r35089, /trunk/help/quickref/pl/
Modified:
   branches/mbarnes-composer/ChangeLog
   branches/mbarnes-composer/NEWS
   branches/mbarnes-composer/addressbook/ChangeLog
   branches/mbarnes-composer/addressbook/gui/component/addressbook-migrate.c
   branches/mbarnes-composer/addressbook/gui/component/addressbook.c
   branches/mbarnes-composer/addressbook/gui/contact-list-editor/e-contact-list-editor.c
   branches/mbarnes-composer/addressbook/gui/merging/eab-contact-merging.c
   branches/mbarnes-composer/addressbook/gui/widgets/e-addressbook-reflow-adapter.c
   branches/mbarnes-composer/calendar/ChangeLog
   branches/mbarnes-composer/calendar/common/authentication.c
   branches/mbarnes-composer/calendar/common/authentication.h
   branches/mbarnes-composer/calendar/conduits/calendar/calendar-conduit.c
   branches/mbarnes-composer/calendar/conduits/memo/memo-conduit.c
   branches/mbarnes-composer/calendar/conduits/todo/todo-conduit.c
   branches/mbarnes-composer/calendar/gui/calendar-config.c
   branches/mbarnes-composer/calendar/gui/comp-editor-factory.c
   branches/mbarnes-composer/calendar/gui/comp-util.c
   branches/mbarnes-composer/calendar/gui/dialogs/comp-editor.c
   branches/mbarnes-composer/calendar/gui/dialogs/e-send-options-utils.c
   branches/mbarnes-composer/calendar/gui/dialogs/recurrence-page.c
   branches/mbarnes-composer/calendar/gui/e-cal-model-tasks.c
   branches/mbarnes-composer/calendar/gui/e-cal-model.c
   branches/mbarnes-composer/calendar/gui/e-calendar-table.c
   branches/mbarnes-composer/calendar/gui/e-calendar-table.etspec
   branches/mbarnes-composer/calendar/gui/e-calendar-view.c
   branches/mbarnes-composer/calendar/gui/e-day-view-main-item.c
   branches/mbarnes-composer/calendar/gui/e-day-view-top-item.c
   branches/mbarnes-composer/calendar/gui/e-day-view.c
   branches/mbarnes-composer/calendar/gui/e-itip-control.c
   branches/mbarnes-composer/calendar/gui/e-memo-table.c
   branches/mbarnes-composer/calendar/gui/e-memos.c
   branches/mbarnes-composer/calendar/gui/e-tasks.c
   branches/mbarnes-composer/calendar/gui/e-week-view.c
   branches/mbarnes-composer/calendar/gui/gnome-cal.c
   branches/mbarnes-composer/calendar/gui/itip-utils.c
   branches/mbarnes-composer/calendar/gui/migration.c
   branches/mbarnes-composer/calendar/gui/print.c
   branches/mbarnes-composer/composer/ChangeLog
   branches/mbarnes-composer/composer/e-msg-composer.c
   branches/mbarnes-composer/configure.in
   branches/mbarnes-composer/e-util/ChangeLog
   branches/mbarnes-composer/e-util/e-config.c
   branches/mbarnes-composer/e-util/e-text-event-processor-emacs-like.c
   branches/mbarnes-composer/help/ChangeLog
   branches/mbarnes-composer/help/es/es.po
   branches/mbarnes-composer/help/quickref/Makefile.am
   branches/mbarnes-composer/mail/ChangeLog
   branches/mbarnes-composer/mail/em-composer-utils.c
   branches/mbarnes-composer/mail/em-folder-browser.c
   branches/mbarnes-composer/mail/em-folder-view.c
   branches/mbarnes-composer/mail/em-format-html.c
   branches/mbarnes-composer/mail/em-format-quote.c
   branches/mbarnes-composer/mail/em-popup.c
   branches/mbarnes-composer/mail/mail-component.c
   branches/mbarnes-composer/mail/mail-folder-cache.c
   branches/mbarnes-composer/mail/mail-folder-cache.h
   branches/mbarnes-composer/mail/mail-ops.c
   branches/mbarnes-composer/mail/mail-ops.h
   branches/mbarnes-composer/mail/mail-send-recv.c
   branches/mbarnes-composer/mail/message-list.c
   branches/mbarnes-composer/plugins/backup-restore/ChangeLog
   branches/mbarnes-composer/plugins/backup-restore/backup.c
   branches/mbarnes-composer/plugins/exchange-operations/ChangeLog
   branches/mbarnes-composer/plugins/exchange-operations/exchange-account-setup.c
   branches/mbarnes-composer/plugins/exchange-operations/exchange-delegates-user.c
   branches/mbarnes-composer/plugins/exchange-operations/exchange-folder-subscription.c
   branches/mbarnes-composer/plugins/external-editor/ChangeLog
   branches/mbarnes-composer/plugins/external-editor/external-editor.c
   branches/mbarnes-composer/plugins/groupwise-features/ChangeLog
   branches/mbarnes-composer/plugins/groupwise-features/install-shared.c
   branches/mbarnes-composer/plugins/groupwise-features/send-options.c
   branches/mbarnes-composer/plugins/groupwise-features/share-folder-common.c
   branches/mbarnes-composer/plugins/import-ics-attachments/ChangeLog
   branches/mbarnes-composer/plugins/import-ics-attachments/icsimporter.c
   branches/mbarnes-composer/plugins/itip-formatter/ChangeLog
   branches/mbarnes-composer/plugins/itip-formatter/itip-formatter.c
   branches/mbarnes-composer/plugins/itip-formatter/itip-view.c
   branches/mbarnes-composer/plugins/save-calendar/ChangeLog
   branches/mbarnes-composer/plugins/save-calendar/ical-format.c
   branches/mbarnes-composer/po/ChangeLog
   branches/mbarnes-composer/po/ar.po
   branches/mbarnes-composer/po/ca.po
   branches/mbarnes-composer/po/de.po
   branches/mbarnes-composer/po/el.po
   branches/mbarnes-composer/po/en_GB.po
   branches/mbarnes-composer/po/es.po
   branches/mbarnes-composer/po/et.po
   branches/mbarnes-composer/po/eu.po
   branches/mbarnes-composer/po/fi.po
   branches/mbarnes-composer/po/gl.po
   branches/mbarnes-composer/po/it.po
   branches/mbarnes-composer/po/ja.po
   branches/mbarnes-composer/po/ko.po
   branches/mbarnes-composer/po/mk.po
   branches/mbarnes-composer/po/nb.po
   branches/mbarnes-composer/po/ne.po
   branches/mbarnes-composer/po/nl.po
   branches/mbarnes-composer/po/oc.po
   branches/mbarnes-composer/po/pl.po
   branches/mbarnes-composer/po/pt.po
   branches/mbarnes-composer/po/pt_BR.po
   branches/mbarnes-composer/po/sl.po
   branches/mbarnes-composer/po/sv.po
   branches/mbarnes-composer/po/th.po
   branches/mbarnes-composer/po/tr.po
   branches/mbarnes-composer/po/vi.po
   branches/mbarnes-composer/shell/ChangeLog
   branches/mbarnes-composer/shell/e-shell-nm.c
   branches/mbarnes-composer/shell/main.c
   branches/mbarnes-composer/widgets/ChangeLog
   branches/mbarnes-composer/widgets/e-timezone-dialog/e-timezone-dialog.c
   branches/mbarnes-composer/widgets/e-timezone-dialog/e-timezone-dialog.glade
   branches/mbarnes-composer/widgets/misc/ChangeLog
   branches/mbarnes-composer/widgets/misc/e-calendar-item.c
   branches/mbarnes-composer/widgets/misc/e-cursors.c
   branches/mbarnes-composer/widgets/table/ChangeLog
   branches/mbarnes-composer/widgets/table/e-table-item.c
   branches/mbarnes-composer/widgets/text/e-text.c

Modified: branches/mbarnes-composer/NEWS
==============================================================================
--- branches/mbarnes-composer/NEWS	(original)
+++ branches/mbarnes-composer/NEWS	Tue Feb 26 05:33:35 2008
@@ -1,3 +1,50 @@
+Evolution 2.21.91 2008-02-11
+----------------------------
+
+New in 2.21.91
+	Documentation update for 2.22. (PC Radhika)
+
+Bug Fixes:
+	#240073 - Fix regression in strike out completed task (Milan Crha)
+	#249501 - Fix for attachments with '%' in the filename to be handled well (Milan Crha)
+	#395939 - Free alarms (Milan Crha)
+	#411576 - Give gconf option to have same fonts in vertical view column. (Srinivasa Ragavan)
+	#468427 - Fixes lots of crashes around itip-formatter (Srinivasa Ragavan)
+	#502571 - Name change to Crash Detection (Srinivasa Ragavan)
+	#506948 - Unescape while copying urls (Srinivasa Ragavan)
+	#509741 - Crash while asking certificate popup (Matthew Barnes)
+	#510642 - Improved error messages (Suman Manjunath)
+	#514736 - Added application/ms-tnef to supported mime type. (Paul Bolle)
+	#514771 - Fixes a crash while decoding attachments (Paul Bolle)
+	#511600 - Doc fixes (PC Radhika)
+	#511602 - Doc fixes (PC Radhila)
+	#512623 - Fix keystates for thread expand (Milan Crha)
+	#513285 - Do not use entities in doc (Wouter Bolsterlee)
+	#513395 - Make sure that camel url isn't null (Jeff Cai)
+	#515054 - Better spam support - Upsync SPAM flags (Milan Crha)
+
+Other Contributors:
+	Windows build fixes (Tor Lillqvist)
+	G_STRFUNC build fixes (Matthew Barnes)
+	Fix for Google Calendar Alarm (Srinivasa Ragavan)
+
+Updated Translations:
+	Kjartan Maraas (nb)
+	Jorge Gonzalez (es)
+	Daniel Nylander (sv)
+	Inaki Larranaga Murgoitio (eu)
+	StÃphane Raimbault (fr)
+	Claude Paroz (fr)
+	Duarte Loreto (pt)
+	Chao-Hsiung Liao (zh_HK)
+	Chao-Hsiung Liao (zh_TW)
+	Andre Klapper (de)
+	Yannig Marchegay (oc)
+	Shankar Prasad (kn)
+	Djihed Afifi (ar)
+	Sandeep Shedmake (mr)
+	Washington Lins (pt_BR)
+
 Evolution 2.21.90 2008-01-28
 ----------------------------
 

Modified: branches/mbarnes-composer/addressbook/gui/component/addressbook-migrate.c
==============================================================================
--- branches/mbarnes-composer/addressbook/gui/component/addressbook-migrate.c	(original)
+++ branches/mbarnes-composer/addressbook/gui/component/addressbook-migrate.c	Tue Feb 26 05:33:35 2008
@@ -216,6 +216,8 @@
 
 	} while (conflict);
 
+	g_strfreev (p);
+
 	return g_string_free (s, FALSE);
 }
 

Modified: branches/mbarnes-composer/addressbook/gui/component/addressbook.c
==============================================================================
--- branches/mbarnes-composer/addressbook/gui/component/addressbook.c	(original)
+++ branches/mbarnes-composer/addressbook/gui/component/addressbook.c	Tue Feb 26 05:33:35 2008
@@ -211,9 +211,9 @@
 		g_free (password_prompt);
 
 		remember = get_remember_password (source);
-		pass_dup = e_passwords_ask_password (prompt, component_name, uri, prompt,
-						     flags, &remember,
-						     NULL);
+		pass_dup = e_passwords_ask_password (
+			_("Enter password"), component_name,
+			uri, prompt, flags, &remember, NULL);
 		if (remember != get_remember_password (source))
 			set_remember_password (source, remember);
 

Modified: branches/mbarnes-composer/addressbook/gui/contact-list-editor/e-contact-list-editor.c
==============================================================================
--- branches/mbarnes-composer/addressbook/gui/contact-list-editor/e-contact-list-editor.c	(original)
+++ branches/mbarnes-composer/addressbook/gui/contact-list-editor/e-contact-list-editor.c	Tue Feb 26 05:33:35 2008
@@ -1387,6 +1387,7 @@
 	gint email_num = -1;
 	GList *list, *iter;
 	GList *values;
+	char *value;
 
 	destination = e_destination_new ();
 
@@ -1407,16 +1408,17 @@
 			contact_uid = param_data;
 		else if (!g_ascii_strcasecmp (param_name, EVC_X_DEST_EMAIL_NUM))
 			email_num = atoi (param_data);
-		else if (!g_ascii_strcasecmp (param_name, EVC_X_DEST_NAME))
-			e_destination_set_name (destination, param_data);
-		else if (!g_ascii_strcasecmp (param_name, EVC_X_DEST_EMAIL))
-			e_destination_set_email (destination, param_data);
 		else if (!g_ascii_strcasecmp (param_name, EVC_X_DEST_HTML_MAIL))
 			e_destination_set_html_mail_pref (
 				destination,
 				!g_ascii_strcasecmp (param_data, "true"));
 	}
 
+	value = e_vcard_attribute_get_value (attr);
+	if (value)
+		e_destination_set_raw (destination, value);
+	g_free (value);
+
 	if (contact_uid != NULL)
 		e_destination_set_contact_uid (
 			destination, contact_uid, email_num);

Modified: branches/mbarnes-composer/addressbook/gui/merging/eab-contact-merging.c
==============================================================================
--- branches/mbarnes-composer/addressbook/gui/merging/eab-contact-merging.c	(original)
+++ branches/mbarnes-composer/addressbook/gui/merging/eab-contact-merging.c	Tue Feb 26 05:33:35 2008
@@ -343,6 +343,7 @@
 		     value = 1;
 		     break;
 	case GTK_RESPONSE_CANCEL:
+	default:
 	             value = 0;
 		     break;
 	}

Modified: branches/mbarnes-composer/addressbook/gui/widgets/e-addressbook-reflow-adapter.c
==============================================================================
--- branches/mbarnes-composer/addressbook/gui/widgets/e-addressbook-reflow-adapter.c	(original)
+++ branches/mbarnes-composer/addressbook/gui/widgets/e-addressbook-reflow-adapter.c	Tue Feb 26 05:33:35 2008
@@ -181,6 +181,7 @@
 
 		if (contact1 && contact2) {
 			const char *file_as1, *file_as2;
+			const char *uid1, *uid2;
 			file_as1 = e_contact_get_const (contact1, E_CONTACT_FILE_AS);
 			file_as2 = e_contact_get_const (contact2, E_CONTACT_FILE_AS);
 			if (file_as1 && file_as2)
@@ -189,8 +190,14 @@
 				return -1;
 			if (file_as2)
 				return 1;
-			return strcmp(e_contact_get_const (contact1, E_CONTACT_UID),
-				      e_contact_get_const (contact2, E_CONTACT_UID));
+			uid1 = e_contact_get_const (contact1, E_CONTACT_UID);
+			uid2 = e_contact_get_const (contact2, E_CONTACT_UID);
+			if (uid1 && uid2)
+				return strcmp(uid1, uid2);
+			if (uid1)
+				return -1;
+			if (uid2)
+				return 1;
 		}
 		if (contact1)
 			return -1;

Modified: branches/mbarnes-composer/calendar/common/authentication.c
==============================================================================
--- branches/mbarnes-composer/calendar/common/authentication.c	(original)
+++ branches/mbarnes-composer/calendar/common/authentication.c	Tue Feb 26 05:33:35 2008
@@ -30,6 +30,7 @@
 #include <libedataserver/e-source.h>
 #include <libedataserverui/e-passwords.h>
 #include "authentication.h"
+#include <libedataserver/e-url.h>
 
 static GHashTable *source_lists_hash = NULL;
 
@@ -55,6 +56,44 @@
 	return password;
 }
 
+static char *
+build_pass_key (ECal *ecal)
+{
+	char *euri_str;
+	const char *uri;
+	EUri *euri;
+
+	uri = e_cal_get_uri (ecal);
+
+	euri = e_uri_new (uri);
+	euri_str = e_uri_to_string (euri, FALSE);
+
+	e_uri_free (euri);
+	return euri_str;
+}
+
+void 
+auth_cal_forget_password (ECal *ecal)
+{
+	ESource *source = NULL;
+	const char *auth_domain = NULL, *component_name = NULL,  *auth_type = NULL;
+	char *key = NULL;
+
+	source = e_cal_get_source (ecal);
+	auth_domain = e_source_get_property (source, "auth-domain");
+	component_name = auth_domain ? auth_domain : "Calendar";
+
+	auth_type = e_source_get_property (source, "auth-type");
+	if (auth_type)
+		key = build_pass_key (ecal);
+	else
+		key = e_source_get_uri (source);
+
+	e_passwords_forget_password (component_name, key);
+
+	g_free (key);
+}
+
 ECal *
 auth_new_cal_from_default (ECalSourceType type)
 {

Modified: branches/mbarnes-composer/calendar/common/authentication.h
==============================================================================
--- branches/mbarnes-composer/calendar/common/authentication.h	(original)
+++ branches/mbarnes-composer/calendar/common/authentication.h	Tue Feb 26 05:33:35 2008
@@ -30,5 +30,6 @@
 ECal *auth_new_cal_from_default (ECalSourceType type);
 ECal *auth_new_cal_from_source (ESource *source, ECalSourceType type);
 ECal *auth_new_cal_from_uri (const char *uri, ECalSourceType type);
+void auth_cal_forget_password (ECal *ecal);
 
 #endif

Modified: branches/mbarnes-composer/calendar/conduits/calendar/calendar-conduit.c
==============================================================================
--- branches/mbarnes-composer/calendar/conduits/calendar/calendar-conduit.c	(original)
+++ branches/mbarnes-composer/calendar/conduits/calendar/calendar-conduit.c	Tue Feb 26 05:33:35 2008
@@ -840,6 +840,8 @@
 	static char record[0xffff];
 #endif
 
+	memset(&p, 0, sizeof (p));
+
 	g_assert (local->comp != NULL);
 	g_assert (local->appt != NULL );
 

Modified: branches/mbarnes-composer/calendar/conduits/memo/memo-conduit.c
==============================================================================
--- branches/mbarnes-composer/calendar/conduits/memo/memo-conduit.c	(original)
+++ branches/mbarnes-composer/calendar/conduits/memo/memo-conduit.c	Tue Feb 26 05:33:35 2008
@@ -473,6 +473,8 @@
 	static char record[0xffff];
 #endif
 
+	memset(&p, 0, sizeof (p));
+
 	g_assert (local->comp != NULL);
 	g_assert (local->memo != NULL );
 

Modified: branches/mbarnes-composer/calendar/conduits/todo/todo-conduit.c
==============================================================================
--- branches/mbarnes-composer/calendar/conduits/todo/todo-conduit.c	(original)
+++ branches/mbarnes-composer/calendar/conduits/todo/todo-conduit.c	Tue Feb 26 05:33:35 2008
@@ -621,6 +621,8 @@
 
 	memset (&p, 0, sizeof (GnomePilotRecord));
 
+	memset(&p, 0, sizeof (p));
+
 	p.ID = local->local.ID;
 	p.category = local->local.category;
 	p.attr = local->local.attr;

Modified: branches/mbarnes-composer/calendar/gui/calendar-config.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/calendar-config.c	(original)
+++ branches/mbarnes-composer/calendar/gui/calendar-config.c	Tue Feb 26 05:33:35 2008
@@ -1572,6 +1572,7 @@
 				sexp = g_strdup_printf ("(not (completed-before? (make-time \"%s\")))", isodate);
 			else
 				sexp = g_strdup_printf ("(completed-before? (make-time \"%s\"))", isodate);
+			g_free (isodate);
 		}
 	}
 

Modified: branches/mbarnes-composer/calendar/gui/comp-editor-factory.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/comp-editor-factory.c	(original)
+++ branches/mbarnes-composer/calendar/gui/comp-editor-factory.c	Tue Feb 26 05:33:35 2008
@@ -281,6 +281,7 @@
 	/* Set the object on the editor */
 	comp_editor_edit_comp (editor, comp);
 	comp_editor_focus (editor);
+	g_object_unref (comp);
 
 	oc->editor_count++;
 	g_signal_connect (editor, "destroy", G_CALLBACK (editor_destroy_cb), oc);

Modified: branches/mbarnes-composer/calendar/gui/comp-util.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/comp-util.c	(original)
+++ branches/mbarnes-composer/calendar/gui/comp-util.c	Tue Feb 26 05:33:35 2008
@@ -207,7 +207,8 @@
 gboolean
 cal_comp_is_on_server (ECalComponent *comp, ECal *client)
 {
-	const char *uid, *rid = NULL;
+	const char *uid;
+	char *rid = NULL;
 	icalcomponent *icalcomp;
 	GError *error = NULL;
 
@@ -232,6 +233,7 @@
 
 	if (e_cal_get_object (client, uid, rid, &icalcomp, &error)) {
 		icalcomponent_free (icalcomp);
+		g_free (rid);
 
 		return TRUE;
 	}
@@ -240,6 +242,7 @@
 		g_warning (G_STRLOC ": %s", error->message);
 
 	g_clear_error (&error);
+	g_free (rid);
 
 	return FALSE;
 }

Modified: branches/mbarnes-composer/calendar/gui/dialogs/comp-editor.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/dialogs/comp-editor.c	(original)
+++ branches/mbarnes-composer/calendar/gui/dialogs/comp-editor.c	Tue Feb 26 05:33:35 2008
@@ -279,21 +279,16 @@
 
 		for (i = 0; urls[i] != NULL; i++) {
 			str = g_strstrip (urls[i]);
-			if (urls[i][0] == '#') {
-				g_free(str);
+			if (urls[i][0] == '#')
 				continue;
-			}
 
 			if (!g_ascii_strncasecmp (str, "mailto:";, 7)) {
 				/* TODO does not handle mailto now */
-				g_free (str);
 			} else {
 				url = camel_url_new (str, NULL);
 
-				if (url == NULL) {
-					g_free (str);
+				if (url == NULL)
 					continue;
-				}
 
 				if (!g_ascii_strcasecmp (url->protocol, "file"))
 					e_attachment_bar_attach
@@ -306,11 +301,10 @@
 						 str, "attachment");
 
 				camel_url_free (url);
-				g_free (str);
 			}
 		}
 
-		g_free (urls);
+		g_strfreev (urls);
 		success = TRUE;
 		break;
 	case DND_TYPE_TEXT_VCARD:

Modified: branches/mbarnes-composer/calendar/gui/dialogs/e-send-options-utils.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/dialogs/e-send-options-utils.c	(original)
+++ branches/mbarnes-composer/calendar/gui/dialogs/e-send-options-utils.c	Tue Feb 26 05:33:35 2008
@@ -183,9 +183,14 @@
 
 		if (gopts->delay_enabled) {
 			struct icaltimetype temp;
+			char *str;
+
 			icaltimezone *zone = calendar_config_get_icaltimezone ();
 			temp = icaltime_from_timet_with_zone (gopts->delay_until, FALSE, zone);
-			prop = icalproperty_new_x (icaltime_as_ical_string (temp));
+
+			str = icaltime_as_ical_string (temp);
+			prop = icalproperty_new_x (str);
+			g_free (str);
 			icalproperty_set_x_name (prop, "X-EVOLUTION-OPTIONS-DELAY");
 			icalcomponent_add_property (icalcomp, prop);
 		}

Modified: branches/mbarnes-composer/calendar/gui/dialogs/recurrence-page.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/dialogs/recurrence-page.c	(original)
+++ branches/mbarnes-composer/calendar/gui/dialogs/recurrence-page.c	Tue Feb 26 05:33:35 2008
@@ -857,7 +857,7 @@
 	/* If our component has not been set yet through ::fill_widgets(), we
 	 * cannot preview the recurrence.
 	 */
-	if (!priv->comp || e_cal_component_is_instance (priv->comp))
+	if (!priv || !priv->comp || e_cal_component_is_instance (priv->comp))
 		return;
 
 	/* Create a scratch component with the start/end and

Modified: branches/mbarnes-composer/calendar/gui/e-cal-model-tasks.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/e-cal-model-tasks.c	(original)
+++ branches/mbarnes-composer/calendar/gui/e-cal-model-tasks.c	Tue Feb 26 05:33:35 2008
@@ -699,6 +699,8 @@
 
 	case ICAL_STATUS_CANCELLED:
 		ensure_task_not_complete (comp_data);
+		/* do this again, because the previous function changed status to NEEDSACTION */
+		icalproperty_set_status (prop, status);
 		break;
 
 	case ICAL_STATUS_COMPLETED:

Modified: branches/mbarnes-composer/calendar/gui/e-cal-model.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/e-cal-model.c	(original)
+++ branches/mbarnes-composer/calendar/gui/e-cal-model.c	Tue Feb 26 05:33:35 2008
@@ -242,6 +242,7 @@
 		}
 
 		priv->clients = NULL;
+		priv->default_client = NULL;
 	}
 
 	if (G_OBJECT_CLASS (e_cal_model_parent_class)->dispose)
@@ -1296,7 +1297,8 @@
 		ECalModelComponent *comp_data = g_ptr_array_index (priv->objects, i);
 
 		if (comp_data) {
-			const char *uid, *rid;
+			const char *uid;
+			char *rid = NULL;
 			gboolean has_rid = (id->rid && *id->rid);
 
 			uid = icalcomponent_get_uid (comp_data->icalcomp);
@@ -1305,11 +1307,15 @@
 			if (uid && *uid) {
 				if ((!client || comp_data->client == client) && !strcmp (id->uid, uid)) {
 					if (has_rid) {
-						if (!(rid && *rid && !strcmp (rid, id->rid)))
+						if (!(rid && *rid && !strcmp (rid, id->rid))) {
+							g_free (rid);
 							continue;
+						}
 					}
+					g_free (rid);
 					return comp_data;
 				}
+			g_free (rid);
 			}
 		}
 	}
@@ -1699,6 +1705,9 @@
 		return;
 	}
 
+	if (model->priv->default_client == client_data->client)
+		model->priv->default_client = NULL;
+
 	/* Remove the client from the list */
 	model->priv->clients = g_list_remove (model->priv->clients, client_data);
 
@@ -1746,7 +1755,6 @@
 redo_queries (ECalModel *model)
 {
 	ECalModelPrivate *priv;
-	char *iso_start, *iso_end;
 	GList *l;
 	int len;
 
@@ -1756,6 +1764,8 @@
 		g_free (priv->full_sexp);
 
 	if (priv->start != -1 && priv->end != -1) {
+		char *iso_start, *iso_end;
+
 		iso_start = isodate_from_time_t (priv->start);
 		iso_end = isodate_from_time_t (priv->end);
 
@@ -1764,6 +1774,8 @@
 						   "     %s)",
 						   iso_start, iso_end,
 						   priv->search_sexp ? priv->search_sexp : "");
+		g_free (iso_start);
+		g_free (iso_end);
 	} else if (priv->search_sexp) {
 		priv->full_sexp = g_strdup (priv->search_sexp);
 	} else {

Modified: branches/mbarnes-composer/calendar/gui/e-calendar-table.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/e-calendar-table.c	(original)
+++ branches/mbarnes-composer/calendar/gui/e-calendar-table.c	Tue Feb 26 05:33:35 2008
@@ -220,6 +220,39 @@
 		return 0;
 }
 
+static gint
+status_from_string (const char *str)
+{
+	int status = -2;
+
+	if (!str || !str[0])
+		status = -1;
+	else if (!g_utf8_collate (str, _("Not Started")))
+		status = 0;
+	else if (!g_utf8_collate (str, _("In Progress")))
+		status = 1;
+	else if (!g_utf8_collate (str, _("Completed")))
+		status = 2;
+	else if (!g_utf8_collate (str, _("Canceled")))
+		status = 3;
+
+	return status;
+}
+
+static gint
+status_compare_cb (gconstpointer a, gconstpointer b)
+{
+	int sa = status_from_string ((const char *)a);
+	int sb = status_from_string ((const char *)b);
+
+	if (sa < sb)
+		return -1;
+	else if (sa > sb)
+		return 1;
+
+	return 0;
+}
+
 static void
 row_appended_cb (ECalModel *model, ECalendarTable *cal_table)
 {
@@ -412,6 +445,8 @@
 				    percent_compare_cb);
 	e_table_extras_add_compare (extras, "priority-compare",
 				    priority_compare_cb);
+	e_table_extras_add_compare (extras, "status-compare",
+				    status_compare_cb);
 
 	/* Create pixmaps */
 
@@ -846,6 +881,7 @@
 					     icalcomponent_new_clone (child));
 		icalcomponent_free (child);
 	}
+	g_free (child);
 }
 
 /**
@@ -880,6 +916,7 @@
 
 	/* free memory */
 	icalcomponent_free (cal_table->tmp_vcal);
+	g_free (comp_str);
 	cal_table->tmp_vcal = NULL;
 }
 
@@ -1038,6 +1075,7 @@
 
 		tedit = COMP_EDITOR (task_editor_new (client, flags));
 		comp_editor_edit_comp (tedit, comp);
+		g_object_unref (comp);
 
 		if (flags & COMP_EDITOR_IS_ASSIGNED)
 			task_editor_show_assignment (TASK_EDITOR (tedit));

Modified: branches/mbarnes-composer/calendar/gui/e-calendar-table.etspec
==============================================================================
--- branches/mbarnes-composer/calendar/gui/e-calendar-table.etspec	(original)
+++ branches/mbarnes-composer/calendar/gui/e-calendar-table.etspec	Tue Feb 26 05:33:35 2008
@@ -7,7 +7,7 @@
   <ETableColumn model_col= "12" _title="Due date" expansion="2.0" minimum_width="10" resizable="true" cell="dateedit" compare="date-compare" priority="-2"/>
   <ETableColumn model_col= "15" _title="% Complete" expansion="1.0" minimum_width="10" resizable="true" cell="percent" compare="percent-compare" priority="-3"/>
   <ETableColumn model_col= "16" _title="Priority" expansion="1.0" minimum_width="10" resizable="true" cell="priority" compare="priority-compare" priority="-3"/>
-  <ETableColumn model_col="17" _title="Status" expansion="1.0" minimum_width="10" resizable="true" cell="calstatus" compare="collate" priority="-1"/>
+  <ETableColumn model_col="17" _title="Status" expansion="1.0" minimum_width="10" resizable="true" cell="calstatus" compare="status-compare" priority="-1"/>
   <ETableColumn model_col="0" _title="Categories" cell="calstring" compare="stringcase" expansion="1.0" minimum_width="10" resizable="true" priority="-2"/>
 
   <ETableState>

Modified: branches/mbarnes-composer/calendar/gui/e-calendar-view.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/e-calendar-view.c	(original)
+++ branches/mbarnes-composer/calendar/gui/e-calendar-view.c	Tue Feb 26 05:33:35 2008
@@ -693,7 +693,7 @@
 
 		e_cal_component_get_uid (comp, &uid);
 		if (e_cal_component_is_instance (comp)) {
-			const char *rid;
+			char *rid = NULL;
 			icalcomponent *icalcomp;
 
 			/* when cutting detached instances, only cut that instance */
@@ -706,6 +706,7 @@
 			} else
 				e_cal_remove_object_with_mod (event->comp_data->client, uid, NULL,
 						CALOBJ_MOD_ALL, &error);
+			g_free (rid);
 		} else
 			e_cal_remove_object (event->comp_data->client, uid, &error);
 		delete_error_dialog (error, E_CAL_COMPONENT_EVENT);
@@ -768,6 +769,7 @@
 
 	/* free memory */
 	icalcomponent_free (vcal_comp);
+	g_free (comp_str);
 	g_list_free (selected);
 }
 
@@ -954,6 +956,7 @@
 
 	if (delete) {
 		const char *uid;
+		char *rid = NULL;
 
 		if ((itip_organizer_is_user (comp, event->comp_data->client) || itip_sentby_is_user (comp))
 		    && cancel_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (cal_view)),
@@ -967,15 +970,16 @@
 			g_object_unref (comp);
 			return;
 		}
-
+		rid = e_cal_component_get_recurid_as_string (comp);
 		if (e_cal_util_component_is_instance (event->comp_data->icalcomp) || e_cal_util_component_has_recurrences (event->comp_data->icalcomp))
 			e_cal_remove_object_with_mod (event->comp_data->client, uid,
-				e_cal_component_get_recurid_as_string (comp), CALOBJ_MOD_ALL, &error);
+				rid, CALOBJ_MOD_ALL, &error);
 		else
 			e_cal_remove_object (event->comp_data->client, uid, &error);
 
 		delete_error_dialog (error, E_CAL_COMPONENT_EVENT);
 		g_clear_error (&error);
+		g_free (rid);
 	}
 
 	g_object_unref (comp);
@@ -1065,7 +1069,8 @@
 		delete = delete_component_dialog (comp, FALSE, 1, vtype, GTK_WIDGET (cal_view));
 
 	if (delete) {
-		const char *uid, *rid = NULL;
+		const char *uid;
+		char *rid = NULL;
 		ECalComponentDateTime dt;
 		icaltimezone *zone = NULL;
 		gboolean is_instance = FALSE;
@@ -1124,6 +1129,7 @@
 
 		delete_error_dialog (error, E_CAL_COMPONENT_EVENT);
 		g_clear_error (&error);
+		g_free (rid);
 	}
 
 	/* free memory */
@@ -2291,11 +2297,13 @@
 	for (property = icalcomponent_get_first_property (icalcomp, ICAL_CATEGORIES_PROPERTY);
 	     property != NULL;
 	     property = icalcomponent_get_next_property (icalcomp, ICAL_CATEGORIES_PROPERTY)) {
-		const char *value = icalproperty_get_value_as_string (property);
+		char *value = icalproperty_get_value_as_string (property);
 
 		if (value && strcmp (category, value) == 0){
+			g_free (value);
 			return TRUE;
 		}
+		g_free (value);
 	}
 
 	return FALSE;

Modified: branches/mbarnes-composer/calendar/gui/e-day-view-main-item.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/e-day-view-main-item.c	(original)
+++ branches/mbarnes-composer/calendar/gui/e-day-view-main-item.c	Tue Feb 26 05:33:35 2008
@@ -373,21 +373,27 @@
 
 		/* If the event is TRANSPARENT, skip it. */
 		e_cal_component_get_transparency (comp, &transparency);
-		if (transparency == E_CAL_COMPONENT_TRANSP_TRANSPARENT)
+		if (transparency == E_CAL_COMPONENT_TRANSP_TRANSPARENT) {
+			g_object_unref (comp);
 			continue;
+		}
 
 		/* We can skip the events in the first column since they will
 		   draw over this anyway. */
-		if (event->num_columns > 0 && event->start_row_or_col == 0)
+		if (event->num_columns > 0 && event->start_row_or_col == 0) {
+			g_object_unref (comp);
 			continue;
+		}
 
 		bar_y = event->start_minute * day_view->row_height / day_view->mins_per_row;
 		bar_h = event->end_minute * day_view->row_height / day_view->mins_per_row - bar_y;
 		bar_y -= y;
 
 		/* Skip it if it isn't visible. */
-		if (bar_y >= height || bar_y + bar_h <= 0)
+		if (bar_y >= height || bar_y + bar_h <= 0) {
+			g_object_unref (comp);
 			continue;
+		}
 
 		gdk_draw_rectangle (drawable, gc, TRUE,
 				    grid_x, bar_y,
@@ -427,14 +433,18 @@
 
 		/* If the event is TRANSPARENT, skip it. */
 		e_cal_component_get_transparency (comp, &transparency);
-		if (transparency == E_CAL_COMPONENT_TRANSP_TRANSPARENT)
+		if (transparency == E_CAL_COMPONENT_TRANSP_TRANSPARENT) {
+			g_object_unref (comp);
 			continue;
+		}
 
 		if (!e_day_view_find_long_event_days (event,
 						      day_view->days_shown,
 						      day_view->day_starts,
-						      &start_day, &end_day))
+						      &start_day, &end_day)) {
+			g_object_unref (comp);
 			continue;
+		}
 
 		for (day = start_day; day <= end_day; day++) {
 			grid_x = day_view->day_offsets[day] + 1 - x;
@@ -1099,21 +1109,27 @@
 
 		/* If the event is TRANSPARENT, skip it. */
 		e_cal_component_get_transparency (comp, &transparency);
-		if (transparency == E_CAL_COMPONENT_TRANSP_TRANSPARENT)
+		if (transparency == E_CAL_COMPONENT_TRANSP_TRANSPARENT) {
+			g_object_unref (comp);
 			continue;
+		}
 
 		/* We can skip the events in the first column since they will
 		   draw over this anyway. */
-		if (event->num_columns > 0 && event->start_row_or_col == 0)
+		if (event->num_columns > 0 && event->start_row_or_col == 0) {
+			g_object_unref (comp);
 			continue;
+		}
 
 		bar_y = event->start_minute * day_view->row_height / day_view->mins_per_row;
 		bar_h = event->end_minute * day_view->row_height / day_view->mins_per_row - bar_y;
 		bar_y -= y;
 
 		/* Skip it if it isn't visible. */
-		if (bar_y >= height || bar_y + bar_h <= 0)
+		if (bar_y >= height || bar_y + bar_h <= 0) {
+			g_object_unref (comp);
 			continue;
+		}
 
 		cairo_rectangle (cr, grid_x, bar_y,
 			       E_DAY_VIEW_BAR_WIDTH - 2, bar_h);
@@ -1169,14 +1185,18 @@
 
 		/* If the event is TRANSPARENT, skip it. */
 		e_cal_component_get_transparency (comp, &transparency);
-		if (transparency == E_CAL_COMPONENT_TRANSP_TRANSPARENT)
+		if (transparency == E_CAL_COMPONENT_TRANSP_TRANSPARENT) {
+			g_object_unref (comp);
 			continue;
+		}
 
 		if (!e_day_view_find_long_event_days (event,
 						      day_view->days_shown,
 						      day_view->day_starts,
-						      &start_day, &end_day))
+						      &start_day, &end_day)) {
+			g_object_unref (comp);
 			continue;
+		}
 
 		for (day = start_day; day <= end_day; day++) {
 			grid_x = day_view->day_offsets[day] + 1 - x;

Modified: branches/mbarnes-composer/calendar/gui/e-day-view-top-item.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/e-day-view-top-item.c	(original)
+++ branches/mbarnes-composer/calendar/gui/e-day-view-top-item.c	Tue Feb 26 05:33:35 2008
@@ -428,8 +428,10 @@
 	/* If we are editing the event we don't show the icons or the start
 	   & end times. */
 	if (day_view->editing_event_day == E_DAY_VIEW_LONG_EVENT
-	    && day_view->editing_event_num == event_num)
+	    && day_view->editing_event_num == event_num) {
+		g_object_unref (comp);
 		return;
+	}
 
 	/* Determine the position of the label, so we know where to place the
 	   icons. Note that since the top canvas never scrolls we don't need
@@ -1048,8 +1050,11 @@
 	/* If we are editing the event we don't show the icons or the start
 	   & end times. */
 	if (day_view->editing_event_day == E_DAY_VIEW_LONG_EVENT
-	    && day_view->editing_event_num == event_num)
+	    && day_view->editing_event_num == event_num) {
+		g_object_unref (comp);
+		cairo_destroy (cr);
 		return;
+	}
 
 	/* Determine the position of the label, so we know where to place the
 	   icons. Note that since the top canvas never scrolls we don't need

Modified: branches/mbarnes-composer/calendar/gui/e-day-view.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/e-day-view.c	(original)
+++ branches/mbarnes-composer/calendar/gui/e-day-view.c	Tue Feb 26 05:33:35 2008
@@ -517,7 +517,8 @@
 static void
 process_component (EDayView *day_view, ECalModelComponent *comp_data)
 {
-	const char *uid, *rid;
+	const char *uid;
+	char *rid = NULL;
 	ECalComponent *comp;
 	AddEventData add_event_data;
 
@@ -546,6 +547,7 @@
 	e_day_view_add_event (comp, comp_data->instance_start, comp_data->instance_end, &add_event_data);
 
 	g_object_unref (comp);
+	g_free (rid);
 }
 
 static void
@@ -619,7 +621,8 @@
 
 	for (i = row + count; i > row; i--) {
 		gint day, event_num;
-		const char *uid, *rid = NULL;
+		const char *uid = NULL;
+		char *rid = NULL;
 		ECalModelComponent *comp_data;
 
 		comp_data = e_cal_model_get_component_at (E_CAL_MODEL (etm), i - 1);
@@ -637,6 +640,7 @@
 
 		if (e_day_view_find_event_from_uid (day_view, comp_data->client, uid, rid, &day, &event_num))
 			e_day_view_remove_event_cb (day_view, day, event_num, NULL);
+		g_free (rid);
 	}
 
 	gtk_widget_queue_draw (day_view->top_canvas);
@@ -2641,7 +2645,8 @@
 {
 	EDayViewEvent *event;
 	gint day, event_num;
-	const char *u, *r;
+	const char *u;
+	char *r = NULL;
 
 	if (!uid)
 		return FALSE;
@@ -2661,8 +2666,11 @@
 					r = icaltime_as_ical_string (icalcomponent_get_recurrenceid (event->comp_data->icalcomp));
 					if (!r || !*r)
 						continue;
-					if (strcmp (rid, r) != 0)
+					if (strcmp (rid, r) != 0) {
+						g_free (r);
 						continue;
+					}
+					g_free (r);
 				}
 
 				*day_return = day;
@@ -5779,6 +5787,7 @@
 				    text_x, item_y);
 
 	g_object_unref (layout);
+	g_object_unref (comp);
 }
 
 
@@ -5798,13 +5807,17 @@
 		e_day_view_reshape_day_event (day_view, day, event_num);
 		event = &g_array_index (day_view->events[day], EDayViewEvent, event_num);
 		current_comp_string = icalcomponent_as_ical_string (event->comp_data->icalcomp);
-		if (day_view->last_edited_comp_string == NULL)
+		if (day_view->last_edited_comp_string == NULL) {
+			g_free (current_comp_string);
 			continue;
+		}			
+
 		if (strncmp (current_comp_string, day_view->last_edited_comp_string,50) == 0) {
 			e_canvas_item_grab_focus (event->canvas_item, TRUE);
 			g_free (day_view->last_edited_comp_string);
 			day_view-> last_edited_comp_string = NULL;
 		}
+		g_free (current_comp_string);
 	}
 }
 
@@ -8922,6 +8935,7 @@
 		}
 
 		icalcomponent_free (vcal);
+		g_free (comp_str);
 	}
 }
 
@@ -9057,8 +9071,10 @@
 
 			e_cal_component_commit_sequence (comp);
 			if (e_cal_component_is_instance (comp)) {
-				if (!recur_component_dialog (client, comp, &mod, NULL, FALSE))
+				if (!recur_component_dialog (client, comp, &mod, NULL, FALSE)) {
+					g_object_unref (comp);
 					return;
+				}
 
 				if (mod == CALOBJ_MOD_THIS) {
 					e_cal_component_set_rdate_list (comp, NULL);

Modified: branches/mbarnes-composer/calendar/gui/e-itip-control.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/e-itip-control.c	(original)
+++ branches/mbarnes-composer/calendar/gui/e-itip-control.c	Tue Feb 26 05:33:35 2008
@@ -1914,6 +1914,7 @@
 {
 	EItipControlPrivate *priv;
 	struct icaltimetype stamp;
+	char *str;
 	icalproperty *prop;
 	icalcomponent *clone;
 	GtkWidget *dialog;
@@ -1931,7 +1932,9 @@
 	 * and you then look at it in Outlook).
 	 */
 	stamp = icaltime_current_time_with_zone (icaltimezone_get_utc_timezone ());
-	prop = icalproperty_new_x (icaltime_as_ical_string (stamp));
+	str = icaltime_as_ical_string (stamp);
+	prop = icalproperty_new_x (str);
+	g_free (str);
 	icalproperty_set_x_name (prop, "X-MICROSOFT-CDO-REPLYTIME");
 	icalcomponent_add_property (priv->ical_comp, prop);
 

Modified: branches/mbarnes-composer/calendar/gui/e-memo-table.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/e-memo-table.c	(original)
+++ branches/mbarnes-composer/calendar/gui/e-memo-table.c	Tue Feb 26 05:33:35 2008
@@ -555,6 +555,7 @@
 					     icalcomponent_new_clone (child));
 		icalcomponent_free (child);
 	}
+	g_free (comp_str);
 }
 
 static void
@@ -609,6 +610,7 @@
 
 	/* free memory */
 	icalcomponent_free (memo_table->tmp_vcal);
+	g_free (comp_str);
 	memo_table->tmp_vcal = NULL;
 }
 
@@ -763,6 +765,7 @@
 		medit = COMP_EDITOR (memo_editor_new (comp_data->client, flags));
 
 		comp_editor_edit_comp (medit, comp);
+		g_object_unref (comp);
 
 		e_comp_editor_registry_add (comp_editor_registry, medit, FALSE);
 	}

Modified: branches/mbarnes-composer/calendar/gui/e-memos.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/e-memos.c	(original)
+++ branches/mbarnes-composer/calendar/gui/e-memos.c	Tue Feb 26 05:33:35 2008
@@ -421,6 +421,7 @@
 		}
 
 		icalcomponent_free (vcal);
+		g_free (comp_str);
 	}
 }
 

Modified: branches/mbarnes-composer/calendar/gui/e-tasks.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/e-tasks.c	(original)
+++ branches/mbarnes-composer/calendar/gui/e-tasks.c	Tue Feb 26 05:33:35 2008
@@ -518,6 +518,7 @@
 		}
 
 		icalcomponent_free (vcal);
+		g_free (comp_str);
 	}
 }
 
@@ -962,6 +963,9 @@
 	priv = tasks->priv;
 
 	source = e_cal_get_source (ecal);
+	
+	if (status == E_CALENDAR_STATUS_AUTHENTICATION_FAILED)
+		auth_cal_forget_password (ecal);
 
 	switch (status) {
 	case E_CALENDAR_STATUS_OK :
@@ -1008,6 +1012,9 @@
 
 	source = e_cal_get_source (ecal);
 
+	if (status == E_CALENDAR_STATUS_AUTHENTICATION_FAILED)
+		auth_cal_forget_password (ecal);
+
 	switch (status) {
 	case E_CALENDAR_STATUS_OK :
 		g_signal_handlers_disconnect_matched (ecal, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, default_client_cal_opened_cb, NULL);

Modified: branches/mbarnes-composer/calendar/gui/e-week-view.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/e-week-view.c	(original)
+++ branches/mbarnes-composer/calendar/gui/e-week-view.c	Tue Feb 26 05:33:35 2008
@@ -303,7 +303,8 @@
 	ECalComponent *comp = NULL;
 	AddEventData add_event_data;
 	/* rid is never used in this function? */
-	const char *uid, *rid;
+	const char *uid;
+	char *rid = NULL;
 
 	/* If we don't have a valid date set yet, just return. */
 	if (!g_date_valid (&week_view->first_day_shown))
@@ -329,6 +330,7 @@
 	e_week_view_add_event (comp, comp_data->instance_start, comp_data->instance_end, FALSE, &add_event_data);
 
 	g_object_unref (comp);
+	g_free (rid);
 }
 
 static void
@@ -396,7 +398,8 @@
 
 	for (i = row + count; i > row; i--) {
 		gint event_num;
-		const char *uid, *rid = NULL;
+		const char *uid;
+		char *rid = NULL;
 		ECalModelComponent *comp_data;
 
 		comp_data = e_cal_model_get_component_at (E_CAL_MODEL (etm), i - 1);
@@ -414,6 +417,7 @@
 
 		if (e_week_view_find_event_from_uid (week_view, comp_data->client, uid, rid, &event_num))
 			e_week_view_remove_event_cb (week_view, event_num, NULL);
+		g_free (rid);
 	}
 
 	gtk_widget_queue_draw (week_view->main_canvas);
@@ -2525,15 +2529,16 @@
 
 			e_week_view_reshape_event_span (week_view, event_num,
 							span_num);
-			current_comp_string = icalcomponent_as_ical_string (event->comp_data->icalcomp);
 			if (week_view->last_edited_comp_string == NULL)
 				continue;
+			current_comp_string = icalcomponent_as_ical_string (event->comp_data->icalcomp);
 			if (strncmp (current_comp_string, week_view->last_edited_comp_string,50) == 0) {
 				EWeekViewEventSpan *span;
 				span = &g_array_index (week_view->spans, EWeekViewEventSpan, event->spans_index + span_num);
 				e_canvas_item_grab_focus (span->text_item, TRUE);
 				week_view->last_edited_comp_string = NULL;
 			}
+			g_free (current_comp_string);
 		}
 	}
 
@@ -3650,7 +3655,8 @@
 
 	num_events = week_view->events->len;
 	for (event_num = 0; event_num < num_events; event_num++) {
-		const char *u, *r;
+		const char *u;
+		char *r = NULL;
 
 		event = &g_array_index (week_view->events, EWeekViewEvent,
 					event_num);
@@ -3664,8 +3670,11 @@
 				r = icaltime_as_ical_string (icalcomponent_get_recurrenceid (event->comp_data->icalcomp));
 				if (!r || !*r)
 					continue;
-				if (strcmp (rid, r) != 0)
+				if (strcmp (rid, r) != 0) {
+					g_free (r);
 					continue;
+				}
+				g_free (r);
 			}
 
 			*event_num_return = event_num;

Modified: branches/mbarnes-composer/calendar/gui/gnome-cal.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/gnome-cal.c	(original)
+++ branches/mbarnes-composer/calendar/gui/gnome-cal.c	Tue Feb 26 05:33:35 2008
@@ -2642,6 +2642,10 @@
 	default:
 		break;
 	}
+
+	if (status == E_CALENDAR_STATUS_AUTHENTICATION_FAILED && source_type == E_CAL_SOURCE_TYPE_EVENT)
+		auth_cal_forget_password (ecal);
+
 	switch (status) {
 	case E_CALENDAR_STATUS_OK:
 		break;
@@ -3815,13 +3819,14 @@
 				GError *error = NULL;
 
 				if (e_cal_util_component_is_instance (m->data) || e_cal_util_component_has_recurrences (m->data)) {
-					const char *rid = NULL;
+					char *rid = NULL;
 					struct icaltimetype recur_id = icalcomponent_get_recurrenceid (m->data);
 
 					if (!icaltime_is_null_time (recur_id) )
 						rid = icaltime_as_ical_string (recur_id);
 
 					e_cal_remove_object_with_mod (client, uid, rid, CALOBJ_MOD_ALL, &error);
+					g_free (rid);
 				} else {
 					e_cal_remove_object (client, uid, &error);
 				}

Modified: branches/mbarnes-composer/calendar/gui/itip-utils.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/itip-utils.c	(original)
+++ branches/mbarnes-composer/calendar/gui/itip-utils.c	Tue Feb 26 05:33:35 2008
@@ -844,7 +844,7 @@
 	     prop != NULL;
 	     prop = icalcomponent_get_next_property (icomp, ICAL_ATTENDEE_PROPERTY))
 	{
-		const char *attendee;
+		char *attendee;
 		char *attendee_text;
 		icalparameter *param;
 		const char *attendee_sentby;
@@ -861,6 +861,7 @@
 			continue;
 
 		attendee_text = g_strdup (itip_strip_mailto (attendee));
+		g_free (attendee);
 		attendee_text = g_strstrip (attendee_text);
 		found = match = e_account_list_find(itip_addresses_get(), E_ACCOUNT_FIND_ID_ADDRESS, attendee_text) != NULL;
 
@@ -1167,7 +1168,7 @@
 	EDestination **destinations;
 	ECalComponent *comp = NULL;
 	icalcomponent *top_level = NULL;
-	char *ical_string;
+	char *ical_string = NULL;
 	gchar *from;
 	gchar *content_type;
 	gchar *subject;
@@ -1274,6 +1275,7 @@
 	g_free (from);
 	g_free (content_type);
 	g_free (subject);
+	g_free (ical_string);
 
 	return retval;
 }
@@ -1294,7 +1296,7 @@
 	GList *users = NULL;
 	gchar *from;
 	gchar *subject;
-	char *ical_string;
+	char *ical_string = NULL;
 	gboolean retval = FALSE;
 
 	/* Tidy up the comp */
@@ -1437,7 +1439,7 @@
 
 	g_free (from);
 	g_free (subject);
-
+	g_free (ical_string);
 	return retval;
 }
 
@@ -1595,7 +1597,7 @@
 	SoupSession *session;
 	SoupMessage *msg;
 	SoupURI *real_uri;
-	char *ical_string;
+	char *ical_string = NULL;
 
 	toplevel = e_cal_util_new_top_level ();
 	icalcomponent_set_method (toplevel, ICAL_METHOD_PUBLISH);
@@ -1607,7 +1609,6 @@
 	icomp = comp_fb_normalize (icalcomp);
 
 	icalcomponent_add_component (toplevel, icomp);
-	ical_string = icalcomponent_as_ical_string (toplevel);
 
 	/* Publish the component */
 	session = soup_session_async_new ();
@@ -1630,7 +1631,9 @@
 		g_object_unref (session);
 		return FALSE;
 	}
+
 	soup_message_set_flags (msg, SOUP_MESSAGE_NO_REDIRECT);
+	ical_string = icalcomponent_as_ical_string (toplevel);
 	soup_message_set_request (msg, "text/calendar", SOUP_MEMORY_TEMPORARY,
 				  ical_string, strlen (ical_string));
 
@@ -1642,11 +1645,13 @@
 			  msg->reason_phrase);
 		g_object_unref (msg);
 		g_object_unref (session);
+		g_free (ical_string);
 		return FALSE;
 	}
 
 	g_object_unref (msg);
 	g_object_unref (session);
+	g_free (ical_string);
 
 	return TRUE;
 }

Modified: branches/mbarnes-composer/calendar/gui/migration.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/migration.c	(original)
+++ branches/mbarnes-composer/calendar/gui/migration.c	Tue Feb 26 05:33:35 2008
@@ -279,6 +279,7 @@
 			break;
 
 	} while (conflict);
+	g_strfreev (p);
 
 	return g_string_free (s, FALSE);
 }

Modified: branches/mbarnes-composer/calendar/gui/print.c
==============================================================================
--- branches/mbarnes-composer/calendar/gui/print.c	(original)
+++ branches/mbarnes-composer/calendar/gui/print.c	Tue Feb 26 05:33:35 2008
@@ -1992,8 +1992,10 @@
 
 		x = left;
 		xend = right - 2;
-		if (y > bottom)
+		if (y > bottom) {
+			g_object_unref (comp);
 			break;
+		}
 
 		/* Print the box to put the tick in. */
 		print_border (context, x + 2, x + 8, y + 6, y + 15, 0.1, -1.0);

Modified: branches/mbarnes-composer/composer/e-msg-composer.c
==============================================================================
--- branches/mbarnes-composer/composer/e-msg-composer.c	(original)
+++ branches/mbarnes-composer/composer/e-msg-composer.c	Tue Feb 26 05:33:35 2008
@@ -2089,16 +2089,13 @@
 
 		for (i = 0; urls[i] != NULL; i++) {
 			str = g_strstrip (urls[i]);
-			if (str[0] == '#' || str[0] == '\0') {
-				g_free (str);
+			if (str[0] == '#' || str[0] == '\0')
 				continue;
-			}
 
 			handle_uri (composer, str, html_dnd);
-			g_free (str);
 		}
 
-		g_free (urls);
+		g_strfreev (urls);
 		success = TRUE;
 		break;
 	case DND_TYPE_TEXT_VCARD:

Modified: branches/mbarnes-composer/configure.in
==============================================================================
--- branches/mbarnes-composer/configure.in	(original)
+++ branches/mbarnes-composer/configure.in	Tue Feb 26 05:33:35 2008
@@ -1,7 +1,7 @@
 # Process this file with autoconf to produce a configure script.
 AC_PREREQ(2.52)
 
-AC_INIT(evolution, 2.21.91, http://bugzilla.gnome.org/enter_bug.cgi?product=Evolution)
+AC_INIT(evolution, 2.21.92, http://bugzilla.gnome.org/enter_bug.cgi?product=Evolution)
 AC_CONFIG_SRCDIR(README)
 
 # Some requirements have versioned package names
@@ -13,7 +13,7 @@
 # Required Packages
 m4_define([glib_minimum_version], [2.15.3])
 m4_define([gtk_minimum_version], [2.12.0])
-m4_define([eds_minimum_version], [2.21.91])
+m4_define([eds_minimum_version], [2.21.92])
 m4_define([gnome_icon_theme_minimum_version], [2.19.91])
 m4_define([gnome_vfs_minimum_version], [2.4.0])
 m4_define([libbonobo_minimum_version], [2.20.3])
@@ -630,6 +630,8 @@
 fi
 AM_CONDITIONAL(ENABLE_CAIRO, [test x$enable_cairo_calendar = xyes])
 
+AC_DEFINE(HANDLE_LIBICAL_MEMORY, 1, [Define it once memory returned by libical is free'ed properly])
+
 dnl **************************************************
 dnl * Posix thread support
 dnl **************************************************
@@ -1203,7 +1205,7 @@
 
 case "$host" in
 *solaris*)
-	AC_PATH_PROGS(KILL_PROCESS_CMD, pkill)
+	KILL_PROCESS_CMD="/usr/bin/pkill -x"
 	;;
 *)
 	AC_PATH_PROGS(KILL_PROCESS_CMD, killall pkill)
@@ -1898,6 +1900,7 @@
 help/quickref/it/Makefile
 help/quickref/fr/Makefile
 help/quickref/oc/Makefile
+help/quickref/pl/Makefile
 help/quickref/pt/Makefile
 help/quickref/sv/Makefile
 help/quickref/sq/Makefile

Modified: branches/mbarnes-composer/e-util/e-config.c
==============================================================================
--- branches/mbarnes-composer/e-util/e-config.c	(original)
+++ branches/mbarnes-composer/e-util/e-config.c	Tue Feb 26 05:33:35 2008
@@ -135,7 +135,7 @@
 		g_free(wn);
 	}
 
-	while ( (cn = (struct _check_node *)e_dlist_remhead(&p->widgets)) ) {
+	while ( (cn = (struct _check_node *)e_dlist_remhead(&p->checks)) ) {
 		g_free(cn->pageid);
 		g_free(cn);
 	}

Modified: branches/mbarnes-composer/e-util/e-text-event-processor-emacs-like.c
==============================================================================
--- branches/mbarnes-composer/e-util/e-text-event-processor-emacs-like.c	(original)
+++ branches/mbarnes-composer/e-util/e-text-event-processor-emacs-like.c	Tue Feb 26 05:33:35 2008
@@ -131,18 +131,18 @@
 	 */
 	switch (event->type) {
 	case GDK_BUTTON_PRESS:
-		if (event->button.button == 1) {
+		if (event->button.button == 1 || event->button.button == 2) {
 			command.action = E_TEP_GRAB;
 			command.time = event->button.time;
 			g_signal_emit_by_name (tep, "command", &command);
-			if (event->button.state & GDK_SHIFT_MASK)
+			if (event->button.button == 1 && event->button.state & GDK_SHIFT_MASK)
 				command.action = E_TEP_SELECT;
 			else
 				command.action = E_TEP_MOVE;
 			command.position = E_TEP_VALUE;
 			command.value = event->button.position;
 			command.time = event->button.time;
-			tep_el->mouse_down = TRUE;
+			tep_el->mouse_down = event->button.button == 1;
 		}
 		break;
 	case GDK_2BUTTON_PRESS:

Modified: branches/mbarnes-composer/help/quickref/Makefile.am
==============================================================================
--- branches/mbarnes-composer/help/quickref/Makefile.am	(original)
+++ branches/mbarnes-composer/help/quickref/Makefile.am	Tue Feb 26 05:33:35 2008
@@ -1,3 +1,3 @@
-SUBDIRS = C de es fr hu it oc pt sv sq
+SUBDIRS = C de es fr hu it oc pl pt sv sq
 
 EXTRA_DIST = evolution-logo.eps

Modified: branches/mbarnes-composer/mail/em-composer-utils.c
==============================================================================
--- branches/mbarnes-composer/mail/em-composer-utils.c	(original)
+++ branches/mbarnes-composer/mail/em-composer-utils.c	Tue Feb 26 05:33:35 2008
@@ -746,6 +746,7 @@
 	e_msg_composer_drop_editor_undo (composer);
 
 	gtk_widget_show ((GtkWidget *) composer);
+	gdk_window_raise (((GtkWidget *) composer)->window);
 }
 
 /**

Modified: branches/mbarnes-composer/mail/em-folder-browser.c
==============================================================================
--- branches/mbarnes-composer/mail/em-folder-browser.c	(original)
+++ branches/mbarnes-composer/mail/em-folder-browser.c	Tue Feb 26 05:33:35 2008
@@ -2009,8 +2009,32 @@
 
 		/* Fixme */
 		sstate = camel_object_meta_get(folder, "evolution:search_state");
-		g_object_set(emfb->search, "state", sstate, NULL);
-		g_free(sstate);
+		if (sstate) {
+			g_object_set(emfb->search, "state", sstate, NULL);
+			g_free(sstate);
+		} else {
+			gboolean outgoing;
+			outgoing = em_utils_folder_is_drafts (emfv->folder, emfv->folder_uri)
+				|| em_utils_folder_is_sent (emfv->folder, emfv->folder_uri)
+				|| em_utils_folder_is_outbox (emfv->folder, emfv->folder_uri);
+
+			e_search_bar_set_text ((ESearchBar *)emfb->search, "");
+
+			if (outgoing) {
+				e_search_bar_set_item_id ((ESearchBar *)emfb->search, 1);
+				((ESearchBar *)emfb->search)->block_search = TRUE;
+				e_search_bar_set_item_menu ((ESearchBar *)emfb->search, 1);
+				((ESearchBar *)emfb->search)->block_search = FALSE;
+
+			} else {
+				e_search_bar_set_item_id ((ESearchBar *)emfb->search, 0);
+				((ESearchBar *)emfb->search)->block_search = TRUE;
+				e_search_bar_set_item_menu ((ESearchBar *)emfb->search, 0);
+				((ESearchBar *)emfb->search)->block_search = FALSE;
+
+			}
+			e_search_bar_paint ((ESearchBar *)emfb->search);
+		}
 
 		/* set the query manually, so we dont pop up advanced or saved search stuff */
 

Modified: branches/mbarnes-composer/mail/em-folder-view.c
==============================================================================
--- branches/mbarnes-composer/mail/em-folder-view.c	(original)
+++ branches/mbarnes-composer/mail/em-folder-view.c	Tue Feb 26 05:33:35 2008
@@ -664,6 +664,7 @@
 		g_free (filename);
 		filename = g_strdup_printf ("current_wide_view-%s.xml", safe_id);
 		p->view_instance->current_view_filename = g_build_filename (collection->local_dir, filename, NULL);
+		g_free (filename);
 		g_free (safe_id);
 	}
 	g_free (id);

Modified: branches/mbarnes-composer/mail/em-format-html.c
==============================================================================
--- branches/mbarnes-composer/mail/em-format-html.c	(original)
+++ branches/mbarnes-composer/mail/em-format-html.c	Tue Feb 26 05:33:35 2008
@@ -309,6 +309,12 @@
 	if (emfh->mark_citations ^ state || emfh->citation_colour != citation_colour) {
 		emfh->mark_citations = state;
 		emfh->citation_colour = citation_colour;
+
+		if (state)
+			emfh->text_html_flags |= CAMEL_MIME_FILTER_TOHTML_MARK_CITATION;
+		else
+			emfh->text_html_flags &= ~CAMEL_MIME_FILTER_TOHTML_MARK_CITATION;
+
 		em_format_redraw((EMFormat *)emfh);
 	}
 }

Modified: branches/mbarnes-composer/mail/em-format-quote.c
==============================================================================
--- branches/mbarnes-composer/mail/em-format-quote.c	(original)
+++ branches/mbarnes-composer/mail/em-format-quote.c	Tue Feb 26 05:33:35 2008
@@ -36,9 +36,11 @@
 
 #include <libedataserver/e-iconv.h>
 #include <glib/gi18n.h>
+#include <gconf/gconf-client.h>
 
 #include "em-stripsig-filter.h"
 #include "em-format-quote.h"
+#include "mail-config.h"
 
 struct _EMFormatQuotePrivate {
 	int dummy;
@@ -148,8 +150,8 @@
 	((EMFormatClass *)emfq_parent)->format_clone(emf, folder, uid, msg, src);
 
 	camel_stream_reset(emfq->stream);
-
-	emfq_format_empty_line(emf, emfq->stream, (CamelMimePart *)msg, NULL);
+	if (gconf_client_get_bool(mail_config_get_gconf_client(), "/apps/evolution/mail/composer/top_signature", NULL))
+		emfq_format_empty_line(emf, emfq->stream, (CamelMimePart *)msg, NULL);
 	handle = em_format_find_handler(emf, "x-evolution/message/prefix");
 	if (handle)
 		handle->handler(emf, emfq->stream, (CamelMimePart *)msg, handle);
@@ -391,9 +393,7 @@
 
 	if (emfq->flags & EM_FORMAT_QUOTE_CITE)
 		camel_stream_printf(stream, "<!--+GtkHTML:<DATA class=\"ClueFlow\" key=\"orig\" value=\"1\">-->\n"
-				    "<blockquote type=cite>\n"
-				    "<font color=\"#%06x\">\n",
-				    emfq->citation_colour & 0xffffff);
+				    "<blockquote type=cite>\n");
 
 	if (((CamelMimePart *)emf->message) != part) {
 		camel_stream_printf(stream,  "%s</br>\n", _("-------- Forwarded Message --------"));
@@ -404,7 +404,7 @@
 	em_format_part (emf, stream, part);
 
 	if (emfq->flags & EM_FORMAT_QUOTE_CITE)
-		camel_stream_write_string(stream, "</blockquote></font><!--+GtkHTML:<DATA class=\"ClueFlow\" clear=\"orig\">-->");
+		camel_stream_write_string(stream, "</blockquote><!--+GtkHTML:<DATA class=\"ClueFlow\" clear=\"orig\">-->");
 }
 
 static void

Modified: branches/mbarnes-composer/mail/em-popup.c
==============================================================================
--- branches/mbarnes-composer/mail/em-popup.c	(original)
+++ branches/mbarnes-composer/mail/em-popup.c	Tue Feb 26 05:33:35 2008
@@ -652,7 +652,6 @@
 	EPopupTarget *target = ep->target;
 	CamelMimePart *part;
 
-	printf("in emp_apps_open_in\n");
 	if (target->type == EM_POPUP_TARGET_ATTACHMENTS)
 		part = ((EAttachment *) ((EMPopupTargetAttachments *) target)->attachments->data)->body;
 	else

Modified: branches/mbarnes-composer/mail/mail-component.c
==============================================================================
--- branches/mbarnes-composer/mail/mail-component.c	(original)
+++ branches/mbarnes-composer/mail/mail-component.c	Tue Feb 26 05:33:35 2008
@@ -206,7 +206,7 @@
 	g_free(si);
 }
 
-static void
+static gboolean
 mc_add_store_done(CamelStore *store, CamelFolderInfo *info, void *data)
 {
 	struct _store_info *si = data;
@@ -223,6 +223,8 @@
 	}
 
 	store_info_unref(si);
+
+	return TRUE;
 }
 
 /* Utility functions.  */
@@ -489,6 +491,7 @@
 
 	g_free (priv->context_path);
 	g_mutex_free(priv->lock);
+	g_object_unref (priv->model);
 	g_object_unref (priv->logger);
 	g_free (priv);
 
@@ -831,11 +834,14 @@
 	mail_config_prune_proxies ();
 	switch (mc->priv->quit_state) {
 	case MC_QUIT_START: {
+		extern int camel_application_is_exiting;
 		int now = time(NULL)/60/60/24, days;
 		gboolean empty_junk;
 
 		GConfClient *gconf = mail_config_get_gconf_client();
 
+		camel_application_is_exiting = TRUE;
+
 		mail_vfolder_shutdown();
 
 		mc->priv->quit_expunge = gconf_client_get_bool(gconf, "/apps/evolution/mail/trash/empty_on_exit", NULL)

Modified: branches/mbarnes-composer/mail/mail-folder-cache.c
==============================================================================
--- branches/mbarnes-composer/mail/mail-folder-cache.c	(original)
+++ branches/mbarnes-composer/mail/mail-folder-cache.c	Tue Feb 26 05:33:35 2008
@@ -723,7 +723,7 @@
 	int id;			/* id for cancellation */
 	guint cancel:1;		/* also tells us we're cancelled */
 
-	void (*done)(CamelStore *store, CamelFolderInfo *info, void *data);
+	gboolean (*done)(CamelStore *store, CamelFolderInfo *info, void *data);
 	void *data;
 };
 
@@ -782,11 +782,12 @@
 	UNLOCK(info_lock);
 }
 
-static void
+static gboolean
 update_folders(CamelStore *store, CamelFolderInfo *fi, void *data)
 {
 	struct _update_data *ud = data;
 	struct _store_info *si;
+	gboolean res = TRUE;
 
 	d(printf("Got folderinfo for store %s\n", store->parent_object.provider->protocol));
 
@@ -803,8 +804,10 @@
 	UNLOCK(info_lock);
 
 	if (ud->done)
-		ud->done(store, fi, ud->data);
+		res = ud->done (store, fi, ud->data);
 	g_free(ud);
+
+	return res;
 }
 
 
@@ -906,7 +909,7 @@
 
 void
 mail_note_store(CamelStore *store, CamelOperation *op,
-		void (*done)(CamelStore *store, CamelFolderInfo *info, void *data), void *data)
+		gboolean (*done)(CamelStore *store, CamelFolderInfo *info, void *data), void *data)
 {
 	struct _store_info *si;
 	struct _update_data *ud;

Modified: branches/mbarnes-composer/mail/mail-folder-cache.h
==============================================================================
--- branches/mbarnes-composer/mail/mail-folder-cache.h	(original)
+++ branches/mbarnes-composer/mail/mail-folder-cache.h	Tue Feb 26 05:33:35 2008
@@ -29,10 +29,11 @@
 
 /* Add a store whose folders should appear in the shell
    The folders are scanned from the store, and/or added at
-   runtime via the folder_created event */
+   runtime via the folder_created event.
+   The 'done' function returns if we can free folder info. */
 void
 mail_note_store (CamelStore *store, CamelOperation *op,
-		 void (*done) (CamelStore *store, CamelFolderInfo *info, void *data),
+		 gboolean (*done) (CamelStore *store, CamelFolderInfo *info, void *data),
 		 void *data);
 
 /* de-note a store */

Modified: branches/mbarnes-composer/mail/mail-ops.c
==============================================================================
--- branches/mbarnes-composer/mail/mail-ops.c	(original)
+++ branches/mbarnes-composer/mail/mail-ops.c	Tue Feb 26 05:33:35 2008
@@ -1042,8 +1042,9 @@
 
 	CamelStore *store;
 	CamelFolderInfo *info;
-	void (*done)(CamelStore *store, CamelFolderInfo *info, void *data);
+	gboolean (*done)(CamelStore *store, CamelFolderInfo *info, void *data);
 	void *data;
+	gboolean can_clear; /* whether we can clear folder info */
 };
 
 static gchar *
@@ -1078,13 +1079,15 @@
 	}
 
 	if (m->done)
-		m->done (m->store, m->info, m->data);
+		m->can_clear = m->done (m->store, m->info, m->data);
+	else
+		m->can_clear = TRUE;
 }
 
 static void
 get_folderinfo_free (struct _get_folderinfo_msg *m)
 {
-	if (m->info)
+	if (m->info && m->can_clear)
 		camel_store_free_folder_info(m->store, m->info);
 	camel_object_unref(m->store);
 }
@@ -1098,7 +1101,7 @@
 };
 
 int
-mail_get_folderinfo (CamelStore *store, CamelOperation *op, void (*done)(CamelStore *store, CamelFolderInfo *info, void *data), void *data)
+mail_get_folderinfo (CamelStore *store, CamelOperation *op, gboolean (*done)(CamelStore *store, CamelFolderInfo *info, void *data), void *data)
 {
 	struct _get_folderinfo_msg *m;
 	int id;

Modified: branches/mbarnes-composer/mail/mail-ops.h
==============================================================================
--- branches/mbarnes-composer/mail/mail-ops.h	(original)
+++ branches/mbarnes-composer/mail/mail-ops.h	Tue Feb 26 05:33:35 2008
@@ -103,7 +103,7 @@
 
 /* get folder info asynchronously */
 int mail_get_folderinfo (CamelStore *store, CamelOperation *op,
-			 void (*done)(CamelStore *store, CamelFolderInfo *info, void *data),
+			 gboolean (*done)(CamelStore *store, CamelFolderInfo *info, void *data),
 			 void *data);
 
 /* remove an existing folder */

Modified: branches/mbarnes-composer/mail/mail-send-recv.c
==============================================================================
--- branches/mbarnes-composer/mail/mail-send-recv.c	(original)
+++ branches/mbarnes-composer/mail/mail-send-recv.c	Tue Feb 26 05:33:35 2008
@@ -778,12 +778,30 @@
 
 /* ********************************************************************** */
 
+static void
+get_folders (CamelStore *store, GPtrArray *folders, CamelFolderInfo *info)
+{
+	CamelException ex;
+
+	camel_exception_init (&ex);
+
+	while (info) {
+		if (camel_store_can_refresh_folder (store, info, &ex))
+			g_ptr_array_add (folders, g_strdup (info->uri));
+		camel_exception_clear (&ex);
+
+		get_folders (store, folders, info->child);
+		info = info->next;
+	}
+}
+
 struct _refresh_folders_msg {
 	MailMsg base;
 
 	struct _send_info *info;
 	GPtrArray *folders;
 	CamelStore *store;
+	CamelFolderInfo *finfo;
 };
 
 static gchar *
@@ -799,6 +817,8 @@
 	CamelFolder *folder;
 	CamelException ex = CAMEL_EXCEPTION_INITIALISER;
 
+	get_folders (m->store, m->folders, m->finfo);
+
 	for (i=0;i<m->folders->len;i++) {
 		folder = mail_tool_uri_to_folder(m->folders->pdata[i], 0, &ex);
 		if (folder) {
@@ -829,6 +849,8 @@
 	for (i=0;i<m->folders->len;i++)
 		g_free(m->folders->pdata[i]);
 	g_ptr_array_free(m->folders, TRUE);
+
+	camel_store_free_folder_info (m->store, m->finfo);
 	camel_object_unref(m->store);
 }
 
@@ -840,24 +862,7 @@
 	(MailMsgFreeFunc) refresh_folders_free
 };
 
-static void
-get_folders (CamelStore *store, GPtrArray *folders, CamelFolderInfo *info)
-{
-	CamelException ex;
-
-	camel_exception_init (&ex);
-
-	while (info) {
-		if (camel_store_can_refresh_folder (store, info, &ex))
-			g_ptr_array_add (folders, g_strdup (info->uri));
-		camel_exception_clear (&ex);
-
-		get_folders (store, folders, info->child);
-		info = info->next;
-	}
-}
-
-static void
+static gboolean
 receive_update_got_folderinfo(CamelStore *store, CamelFolderInfo *info, void *data)
 {
 	if (info) {
@@ -865,18 +870,22 @@
 		struct _refresh_folders_msg *m;
 		struct _send_info *sinfo = data;
 
-		get_folders(store, folders, info);
-
 		m = mail_msg_new(&refresh_folders_info);
 		m->store = store;
 		camel_object_ref(store);
 		m->folders = folders;
 		m->info = sinfo;
+		m->finfo = info;
 
 		mail_msg_unordered_push (m);
+
+		/* do not free folder info, we will free it later */
+		return FALSE;
 	} else {
 		receive_done ("", data);
 	}
+
+	return TRUE;
 }
 
 static void

Modified: branches/mbarnes-composer/mail/message-list.c
==============================================================================
--- branches/mbarnes-composer/mail/message-list.c	(original)
+++ branches/mbarnes-composer/mail/message-list.c	Tue Feb 26 05:33:35 2008
@@ -1493,8 +1493,11 @@
 		char **sender_name = NULL;
 		str = camel_message_info_from (msg_info);
 		if(str && str[0] != '\0'){
-			sender_name=g_strsplit(str,"<",2);
-			return (void *)(*sender_name);
+			char *res;
+			sender_name = g_strsplit (str,"<",2);
+			res = g_strdup (*sender_name);
+			g_strfreev (sender_name);
+			return (void *)(res);
 		}
 		else
 			return (void *)("");

Modified: branches/mbarnes-composer/plugins/backup-restore/backup.c
==============================================================================
--- branches/mbarnes-composer/plugins/backup-restore/backup.c	(original)
+++ branches/mbarnes-composer/plugins/backup-restore/backup.c	Tue Feb 26 05:33:35 2008
@@ -13,8 +13,8 @@
 #include <libgnome/gnome-util.h>
 
 #define EVOLUTION "evolution"
-#define EVOLUTION_DIR "~/.evolution/"
-#define EVOLUTION_DIR_BACKUP "~/.evolution-old/"
+#define EVOLUTION_DIR "$HOME/.evolution/"
+#define EVOLUTION_DIR_BACKUP "$HOME/.evolution-old/"
 #define GCONF_DUMP_FILE "backup-restore-gconf.xml"
 #define GCONF_DUMP_PATH EVOLUTION_DIR GCONF_DUMP_FILE
 #define GCONF_DIR "/apps/evolution"
@@ -81,7 +81,7 @@
 	/* FIXME compression type?" */
 	/* FIXME date/time stamp?" */
 	/* FIXME backup location?" */
-	command = g_strdup_printf ("cd ~ && tar zpcf %s .evolution .camel_certs", filename);
+	command = g_strdup_printf ("cd $HOME && tar cf - .evolution .camel_certs | gzip > %s", filename);
 	s (command);
 	g_free (command);
 
@@ -113,11 +113,11 @@
 	CANCEL (complete);
 	txt = _("Backup current Evolution data");
 	s ("mv " EVOLUTION_DIR " " EVOLUTION_DIR_BACKUP);
-	s ("mv ~/.camel_certs ~/.camel_certs_old");
+	s ("mv $HOME/.camel_certs ~/.camel_certs_old");
 
 	CANCEL (complete);
 	txt = _("Extracting files from backup");
-	command = g_strdup_printf ("cd ~ && tar zxf %s", filename);
+	command = g_strdup_printf ("cd $HOME && gzip -cd %s| tar xf -", filename);
 	s (command);
 	g_free (command);
 
@@ -129,7 +129,7 @@
 	txt = _("Removing temporary backup files");
 	s ("rm -rf " GCONF_DUMP_PATH);
 	s ("rm -rf " EVOLUTION_DIR_BACKUP);
-	s ("rm -rf ~/.camel_certs_old");
+	s ("rm -rf $HOME/.camel_certs_old");
 
 	if (restart_arg) {
 		CANCEL (complete);

Modified: branches/mbarnes-composer/plugins/exchange-operations/exchange-account-setup.c
==============================================================================
--- branches/mbarnes-composer/plugins/exchange-operations/exchange-account-setup.c	(original)
+++ branches/mbarnes-composer/plugins/exchange-operations/exchange-account-setup.c	Tue Feb 26 05:33:35 2008
@@ -953,6 +953,7 @@
 	GtkVBox *vbx;
 	GtkHBox *hbx_size;
 	char *folder_name, *folder_size;
+	int mode;
 
 	service = CAMEL_SERVICE (camel_folder_get_parent_store (cml_folder));
 	if (!service)
@@ -965,10 +966,15 @@
 	if (g_ascii_strcasecmp (provider->protocol, "exchange"))
 		return NULL;
 
+	account = exchange_operations_get_exchange_account ();  
+	exchange_account_is_offline (account, &mode);  
+	if (mode == OFFLINE_MODE)  
+		return NULL;  
+	
 	folder_name = (char*) camel_folder_get_name (cml_folder);
 	if (!folder_name)
 		folder_name = g_strdup ("name");
-	account = exchange_operations_get_exchange_account ();
+
 	model = exchange_account_folder_size_get_model (account);
 	if (model)
 		folder_size = g_strdup_printf (_("%s KB"), exchange_folder_size_get_val (model, folder_name));

Modified: branches/mbarnes-composer/plugins/exchange-operations/exchange-delegates-user.c
==============================================================================
--- branches/mbarnes-composer/plugins/exchange-operations/exchange-delegates-user.c	(original)
+++ branches/mbarnes-composer/plugins/exchange-operations/exchange-delegates-user.c	Tue Feb 26 05:33:35 2008
@@ -30,8 +30,11 @@
 #include <mail/mail-component.h>
 #include <mail/mail-send-recv.h>
 #include <camel/camel-multipart.h>
+#include <camel/camel-mime-utils.h>
 #include <camel/camel-stream-mem.h>
 #include <exchange-account.h>
+#include "exchange-delegates.h"
+#include <exchange/exchange-account.h>
 #include <e2k-global-catalog.h>
 #include <e2k-marshal.h>
 #include <e2k-sid.h>
@@ -51,6 +54,8 @@
 #undef GTK_DISABLE_DEPRECATED
 #include <gtk/gtkoptionmenu.h>
 
+#include <glib.h>
+
 #include <string.h>
 
 

Modified: branches/mbarnes-composer/plugins/exchange-operations/exchange-folder-subscription.c
==============================================================================
--- branches/mbarnes-composer/plugins/exchange-operations/exchange-folder-subscription.c	(original)
+++ branches/mbarnes-composer/plugins/exchange-operations/exchange-folder-subscription.c	Tue Feb 26 05:33:35 2008
@@ -240,6 +240,7 @@
 			g_free (folder_name);
 			switch (result) {
 				case EXCHANGE_ACCOUNT_FOLDER_OK:
+					exchange_account_rescan_tree (subscription_info->account);
 					break;
 				case EXCHANGE_ACCOUNT_FOLDER_ALREADY_EXISTS:
 					e_error_run (NULL, ERROR_DOMAIN ":folder-exists-error", NULL);
@@ -281,7 +282,7 @@
 
 		g_object_unref (folder);
 		path = g_strdup_printf ("/%s", user_email_address);
-		exchange_account_open_folder (subscription_info->account, g_strdup_printf ("/%s", path));
+		exchange_account_open_folder (subscription_info->account, path);
 		g_free (path);
 		g_free (user_email_address);
 		gtk_widget_destroy (dialog);
@@ -296,6 +297,11 @@
 	GladeXML *glade_xml;
 	GtkWidget *dialog, *ok_button;
 	SubscriptionInfo *subscription_info;
+	int mode;
+
+	exchange_account_is_offline (account, &mode);
+	if (mode == OFFLINE_MODE)
+		return FALSE;
 
 	subscription_info = g_new0 (SubscriptionInfo, 1);
 	subscription_info->account = account;

Modified: branches/mbarnes-composer/plugins/external-editor/external-editor.c
==============================================================================
--- branches/mbarnes-composer/plugins/external-editor/external-editor.c	(original)
+++ branches/mbarnes-composer/plugins/external-editor/external-editor.c	Tue Feb 26 05:33:35 2008
@@ -41,6 +41,7 @@
 				camel_internet_address_add (cia, " ", address_tokens [i]);
 				d(printf ("\nAdding camel_internet_address[%s] \n", address_tokens [i]));
 			}
+			g_strfreev (address_tokens);
 
 			return cia;
 		}
@@ -139,6 +140,8 @@
 			g_signal_connect (GTK_OBJECT (composer), "save-draft", G_CALLBACK (em_utils_composer_save_draft_cb), NULL);
 
 			gtk_widget_show (GTK_WIDGET (composer));
+
+			g_strfreev (tokens);
 		}
 	}
 #else

Modified: branches/mbarnes-composer/plugins/groupwise-features/install-shared.c
==============================================================================
--- branches/mbarnes-composer/plugins/groupwise-features/install-shared.c	(original)
+++ branches/mbarnes-composer/plugins/groupwise-features/install-shared.c	Tue Feb 26 05:33:35 2008
@@ -97,6 +97,7 @@
 		camel_exception_init (&ex);
 		if (!(store = (CamelStore *) camel_session_get_service (mail_component_peek_session(NULL), uri, CAMEL_PROVIDER_STORE, &ex))) {
 			camel_exception_clear (&ex);
+			g_strfreev (names);
 			return;
 		}
 
@@ -122,12 +123,15 @@
 				camel_exception_init (&ex);
 				if (!(provider = camel_provider_get(uri, &ex))) {
 					camel_exception_clear (&ex);
+					g_strfreev (names);
 					return;
 				}
 
 				/* make sure the new store belongs in the tree */
-				if (!(provider->flags & CAMEL_PROVIDER_IS_STORAGE))
+				if (!(provider->flags & CAMEL_PROVIDER_IS_STORAGE)) {
+					g_strfreev (names);
 					return;
+				}
 
 				em_folder_tree_model_add_store (model, store, account->name);
 				camel_object_unref (store);

Modified: branches/mbarnes-composer/plugins/groupwise-features/send-options.c
==============================================================================
--- branches/mbarnes-composer/plugins/groupwise-features/send-options.c	(original)
+++ branches/mbarnes-composer/plugins/groupwise-features/send-options.c	Tue Feb 26 05:33:35 2008
@@ -374,6 +374,7 @@
 			if (so_uri) {
 				if (!strcmp (so_uri, uri)) {
 					g_free (so_uri), so_uri = NULL;
+					g_strfreev (temp);
 					return E_SOURCE (r->data);
 				}
 				g_free (so_uri), so_uri = NULL;

Modified: branches/mbarnes-composer/plugins/groupwise-features/share-folder-common.c
==============================================================================
--- branches/mbarnes-composer/plugins/groupwise-features/share-folder-common.c	(original)
+++ branches/mbarnes-composer/plugins/groupwise-features/share-folder-common.c	Tue Feb 26 05:33:35 2008
@@ -531,8 +531,9 @@
 			g_free (name);
 		}
 		e_gw_connection_free_container_list (container_list);
-		if (names)
-		g_strfreev(names);
 	}
+
+	if (names)
+		g_strfreev (names);
 	return id;
 }

Modified: branches/mbarnes-composer/plugins/import-ics-attachments/icsimporter.c
==============================================================================
--- branches/mbarnes-composer/plugins/import-ics-attachments/icsimporter.c	(original)
+++ branches/mbarnes-composer/plugins/import-ics-attachments/icsimporter.c	Tue Feb 26 05:33:35 2008
@@ -235,6 +235,7 @@
 
 	markup = g_markup_printf_escaped ("<b>%s</b>", label_str);
 	gtk_label_set_markup (GTK_LABEL (label), markup);
+	g_free (markup);
 	hbox = gtk_hbox_new (FALSE, FALSE);
 	gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 6);
 	gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 6);

Modified: branches/mbarnes-composer/plugins/itip-formatter/itip-formatter.c
==============================================================================
--- branches/mbarnes-composer/plugins/itip-formatter/itip-formatter.c	(original)
+++ branches/mbarnes-composer/plugins/itip-formatter/itip-formatter.c	Tue Feb 26 05:33:35 2008
@@ -141,7 +141,7 @@
 	for (prop = icalcomponent_get_first_property (ical_comp, ICAL_ATTENDEE_PROPERTY);
 	     prop != NULL;
 	     prop = icalcomponent_get_next_property (ical_comp, ICAL_ATTENDEE_PROPERTY)) {
-		const char *attendee;
+		char *attendee;
 		char *text;
 
 		attendee = icalproperty_get_value_as_string (prop);
@@ -153,9 +153,11 @@
 		text = g_strstrip (text);
 		if (text && !g_ascii_strcasecmp (address, text)) {
 			g_free (text);
+			g_free (attendee);
 			break;
 		}
 		g_free (text);
+		g_free (attendee);
 	}
 
 	return prop;
@@ -219,7 +221,7 @@
 			prop = find_attendee (ical_comp, account->id->address);
 
 			if (prop) {
-				const char *text;
+				char *text;
 				icalparameter *param;
 
 				param = icalproperty_get_first_parameter (prop, ICAL_CN_PARAMETER);
@@ -229,6 +231,7 @@
 				text = icalproperty_get_value_as_string (prop);
 
 				pitip->to_address = g_strdup (itip_strip_mailto (text));
+				g_free (text);
 				g_strstrip (pitip->to_address);
 
 				pitip->my_address = g_strdup (account->id->address);
@@ -268,7 +271,7 @@
 			prop = find_attendee_if_sentby (ical_comp, account->id->address);
 
 			if (prop) {
-				const char *text;
+				char *text;
 				icalparameter *param;
 
 				param = icalproperty_get_first_parameter (prop, ICAL_CN_PARAMETER);
@@ -278,6 +281,7 @@
 				text = icalproperty_get_value_as_string (prop);
 
 				pitip->to_address = g_strdup (itip_strip_mailto (text));
+				g_free (text);
 				g_strstrip (pitip->to_address);
 
 				pitip->my_address = g_strdup (account->id->address);
@@ -300,7 +304,7 @@
 {
 	EIterator *it;
 	icalproperty *prop;
-	const char *organizer;
+	char *organizer;
 	icalparameter *param;
 	const char *organizer_sentby;
 	char *organizer_clean = NULL;
@@ -315,6 +319,7 @@
 	if (organizer) {
 		organizer_clean = g_strdup (itip_strip_mailto (organizer));
 		organizer_clean = g_strstrip (organizer_clean);
+		g_free (organizer);
 	}
 
 	param = icalproperty_get_first_parameter (prop, ICAL_SENTBY_PARAMETER);
@@ -718,7 +723,7 @@
 	FormatItipFindData *fd = NULL;
 	GSList *groups, *l, *sources_conflict = NULL, *all_sources = NULL;
 	const char *uid;
-	const char *rid;
+	char *rid = NULL;
 	CamelURL *url;
 	char *uri;
 	ESource *source = NULL, *current_source = NULL;
@@ -784,7 +789,7 @@
 			fd = g_new0 (FormatItipFindData, 1);
 			fd->puri = pitip;
 			fd->uid = g_strdup (uid);
-			fd->rid = g_strdup (rid);
+			fd->rid = rid;
 
 			if (pitip->start_time && pitip->end_time) {
 				start = isodate_from_time_t (pitip->start_time);
@@ -911,6 +916,7 @@
 	ESource *source;
 	GError *error = NULL;
 	gboolean result = TRUE;
+	char *str;
 
 	/* Set X-MICROSOFT-CDO-REPLYTIME to record the time at which
 	 * the user accepted/declined the request. (Outlook ignores
@@ -922,7 +928,9 @@
 	 * and you then look at it in Outlook).
 	 */
 	stamp = icaltime_current_time_with_zone (icaltimezone_get_utc_timezone ());
-	prop = icalproperty_new_x (icaltime_as_ical_string (stamp));
+	str = icaltime_as_ical_string (stamp);
+	prop = icalproperty_new_x (str);
+	g_free (str);
 	icalproperty_set_x_name (prop, "X-MICROSOFT-CDO-REPLYTIME");
 	icalcomponent_add_property (pitip->ical_comp, prop);
 
@@ -1130,7 +1138,8 @@
 {
 	ECalComponent *comp = NULL;
 	icalcomponent *icalcomp = NULL, *org_icalcomp;
-	const char *uid, *rid;
+	const char *uid;
+	char *rid = NULL;
 	const char *delegate;
 	GError *error = NULL;
 
@@ -1245,6 +1254,7 @@
  cleanup:
 	if (comp != NULL)
 		g_object_unref (comp);
+	g_free (rid);
 }
 
 static void
@@ -1598,12 +1608,17 @@
 {
 	struct _itip_puri *pitip = data;
 	struct _opencal_msg *m;
+	char *start, *end;
 
+	start = isodate_from_time_t (pitip->start_time);
+	end = isodate_from_time_t (pitip->end_time);
 	m = mail_msg_new (&open_calendar_info);
-	m->command = g_strdup_printf ("evolution \"calendar://?startdate=%s&enddate=%s\"",
-				   isodate_from_time_t (pitip->start_time), isodate_from_time_t (pitip->end_time));
+	m->command = g_strdup_printf ("evolution \"calendar://?startdate=%s&enddate=%s\"", start, end);
 	mail_msg_slow_ordered_push (m);
 
+	g_free (start);
+	g_free (end);
+
 	return FALSE;
 }
 

Modified: branches/mbarnes-composer/plugins/itip-formatter/itip-view.c
==============================================================================
--- branches/mbarnes-composer/plugins/itip-formatter/itip-view.c	(original)
+++ branches/mbarnes-composer/plugins/itip-formatter/itip-view.c	Tue Feb 26 05:33:35 2008
@@ -349,64 +349,64 @@
 
 	/* The current account ID (i.e. the delegatee) is receiving a copy of the request/response. Here we ask the delegatee to respond/accept on behalf of the delegator. */
 	if (priv->organizer && priv->proxy)
-		on_behalf_of = g_strdup_printf (_("Please respond on behalf of <b>%s</b>"), priv->proxy);
+		on_behalf_of = g_markup_printf_escaped (_("Please respond on behalf of <b>%s</b>"), priv->proxy);
 	else if (priv->attendee && priv->proxy)
-		on_behalf_of = g_strdup_printf (_("Received on behalf of <b>%s</b>"), priv->proxy);
+		on_behalf_of = g_markup_printf_escaped (_("Received on behalf of <b>%s</b>"), priv->proxy);
 
 	switch (priv->mode) {
 	case ITIP_VIEW_MODE_PUBLISH:
 		if (priv->organizer_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s has published the following meeting information:"), organizer, priv->organizer_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s has published the following meeting information:"), organizer, priv->organizer_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> has published the following meeting information:"), organizer);
+			sender = g_markup_printf_escaped (_("<b>%s</b> has published the following meeting information:"), organizer);
 		break;
 	case ITIP_VIEW_MODE_REQUEST:
 		/* FIXME is the delegator stuff handled correctly here? */
 		if (priv->delegator) {
-			sender = g_strdup_printf (_("<b>%s</b> has delegated the following meeting to you:"), priv->delegator);
+			sender = g_markup_printf_escaped (_("<b>%s</b> has delegated the following meeting to you:"), priv->delegator);
 		} else {
 			if (priv->organizer_sentby)
-				sender = g_strdup_printf (_("<b>%s</b> through %s requests your presence at the following meeting:"), organizer, priv->organizer_sentby);
+				sender = g_markup_printf_escaped (_("<b>%s</b> through %s requests your presence at the following meeting:"), organizer, priv->organizer_sentby);
 			else
-				sender = g_strdup_printf (_("<b>%s</b> requests your presence at the following meeting:"), organizer);
+				sender = g_markup_printf_escaped (_("<b>%s</b> requests your presence at the following meeting:"), organizer);
 		}
 		break;
 	case ITIP_VIEW_MODE_ADD:
 		/* FIXME What text for this? */
 		if (priv->organizer_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s wishes to add to an existing meeting:"), organizer, priv->organizer_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s wishes to add to an existing meeting:"), organizer, priv->organizer_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> wishes to add to an existing meeting:"), organizer);
+			sender = g_markup_printf_escaped (_("<b>%s</b> wishes to add to an existing meeting:"), organizer);
 		break;
 	case ITIP_VIEW_MODE_REFRESH:
 		if (priv->attendee_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s wishes to receive the latest information for the following meeting:"), attendee, priv->attendee_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s wishes to receive the latest information for the following meeting:"), attendee, priv->attendee_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> wishes to receive the latest information for the following meeting:"), attendee);
+			sender = g_markup_printf_escaped (_("<b>%s</b> wishes to receive the latest information for the following meeting:"), attendee);
 		break;
 	case ITIP_VIEW_MODE_REPLY:
 		if (priv->attendee_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s has sent back the following meeting response:"), attendee, priv->attendee_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s has sent back the following meeting response:"), attendee, priv->attendee_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> has sent back the following meeting response:"), attendee);
+			sender = g_markup_printf_escaped (_("<b>%s</b> has sent back the following meeting response:"), attendee);
 		break;
 	case ITIP_VIEW_MODE_CANCEL:
 		if (priv->organizer_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s has canceled the following meeting:"), organizer, priv->organizer_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s has canceled the following meeting:"), organizer, priv->organizer_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> has canceled the following meeting."), organizer);
+			sender = g_markup_printf_escaped (_("<b>%s</b> has canceled the following meeting."), organizer);
 		break;
 	case ITIP_VIEW_MODE_COUNTER:
 		if (priv->attendee_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s has proposed the following meeting changes."), attendee, priv->attendee_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s has proposed the following meeting changes."), attendee, priv->attendee_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> has proposed the following meeting changes."), attendee);
+			sender = g_markup_printf_escaped (_("<b>%s</b> has proposed the following meeting changes."), attendee);
 		break;
 	case ITIP_VIEW_MODE_DECLINECOUNTER:
 		if (priv->organizer_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s has declined the following meeting changes:"), organizer, priv->organizer_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s has declined the following meeting changes:"), organizer, priv->organizer_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> has declined the following meeting changes."), organizer);
+			sender = g_markup_printf_escaped (_("<b>%s</b> has declined the following meeting changes."), organizer);
 		break;
 	default:
 		break;
@@ -437,64 +437,64 @@
 
 	/* The current account ID (i.e. the delegatee) is receiving a copy of the request/response. Here we ask the delegatee to respond/accept on behalf of the delegator. */
 	if (priv->organizer && priv->proxy)
-		on_behalf_of = g_strdup_printf (_("Please respond on behalf of <b>%s</b>"), priv->proxy);
+		on_behalf_of = g_markup_printf_escaped (_("Please respond on behalf of <b>%s</b>"), priv->proxy);
 	else if (priv->attendee && priv->proxy)
-		on_behalf_of = g_strdup_printf (_("Received on behalf of <b>%s</b>"), priv->proxy);
+		on_behalf_of = g_markup_printf_escaped (_("Received on behalf of <b>%s</b>"), priv->proxy);
 
 	switch (priv->mode) {
 	case ITIP_VIEW_MODE_PUBLISH:
 		if (priv->organizer_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s has published the following task:"), organizer, priv->organizer_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s has published the following task:"), organizer, priv->organizer_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> has published the following task:"), organizer);
+			sender = g_markup_printf_escaped (_("<b>%s</b> has published the following task:"), organizer);
 		break;
 	case ITIP_VIEW_MODE_REQUEST:
 		/* FIXME is the delegator stuff handled correctly here? */
 		if (priv->delegator) {
-			sender = g_strdup_printf (_("<b>%s</b> requests the assignment of %s to the following task:"), organizer, priv->delegator);
+			sender = g_markup_printf_escaped (_("<b>%s</b> requests the assignment of %s to the following task:"), organizer, priv->delegator);
 		} else {
 			if (priv->organizer_sentby)
-				sender = g_strdup_printf (_("<b>%s</b> through %s has assigned you a task:"), organizer, priv->organizer_sentby);
+				sender = g_markup_printf_escaped (_("<b>%s</b> through %s has assigned you a task:"), organizer, priv->organizer_sentby);
 			else
-				sender = g_strdup_printf (_("<b>%s</b> has assigned you a task:"), organizer);
+				sender = g_markup_printf_escaped (_("<b>%s</b> has assigned you a task:"), organizer);
 		}
 		break;
 	case ITIP_VIEW_MODE_ADD:
 		/* FIXME What text for this? */
 		if (priv->organizer_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s wishes to add to an existing task:"), organizer, priv->organizer_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s wishes to add to an existing task:"), organizer, priv->organizer_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> wishes to add to an existing task:"), organizer);
+			sender = g_markup_printf_escaped (_("<b>%s</b> wishes to add to an existing task:"), organizer);
 		break;
 	case ITIP_VIEW_MODE_REFRESH:
 		if (priv->attendee_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s wishes to receive the latest information for the following assigned task:"), attendee, priv->attendee_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s wishes to receive the latest information for the following assigned task:"), attendee, priv->attendee_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> wishes to receive the latest information for the following assigned task:"), attendee);
+			sender = g_markup_printf_escaped (_("<b>%s</b> wishes to receive the latest information for the following assigned task:"), attendee);
 		break;
 	case ITIP_VIEW_MODE_REPLY:
 		if (priv->attendee_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s has sent back the following assigned task response:"), attendee, priv->attendee_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s has sent back the following assigned task response:"), attendee, priv->attendee_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> has sent back the following assigned task response:"), attendee);
+			sender = g_markup_printf_escaped (_("<b>%s</b> has sent back the following assigned task response:"), attendee);
 		break;
 	case ITIP_VIEW_MODE_CANCEL:
 		if (priv->organizer_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s has canceled the following assigned task:"), organizer, priv->organizer_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s has canceled the following assigned task:"), organizer, priv->organizer_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> has canceled the following assigned task:"), organizer);
+			sender = g_markup_printf_escaped (_("<b>%s</b> has canceled the following assigned task:"), organizer);
 		break;
 	case ITIP_VIEW_MODE_COUNTER:
 		if (priv->attendee_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s has proposed the following task assignment changes:"), attendee, priv->attendee_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s has proposed the following task assignment changes:"), attendee, priv->attendee_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> has proposed the following task assignment changes:"), attendee);
+			sender = g_markup_printf_escaped (_("<b>%s</b> has proposed the following task assignment changes:"), attendee);
 		break;
 	case ITIP_VIEW_MODE_DECLINECOUNTER:
 		if (priv->organizer_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s has declined the following assigned task:"), organizer, priv->organizer_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s has declined the following assigned task:"), organizer, priv->organizer_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> has declined the following assigned task:"), organizer);
+			sender = g_markup_printf_escaped (_("<b>%s</b> has declined the following assigned task:"), organizer);
 		break;
 	default:
 		break;
@@ -525,29 +525,29 @@
 
 	/* The current account ID (i.e. the delegatee) is receiving a copy of the request/response. Here we ask the delegatee to respond/accept on behalf of the delegator. */
 	if (priv->organizer && priv->proxy)
-		on_behalf_of = g_strdup_printf (_("Please respond on behalf of <b>%s</b>"), priv->proxy);
+		on_behalf_of = g_markup_printf_escaped (_("Please respond on behalf of <b>%s</b>"), priv->proxy);
 	else if (priv->attendee && priv->proxy)
-		on_behalf_of = g_strdup_printf (_("Received on behalf of <b>%s</b>"), priv->proxy);
+		on_behalf_of = g_markup_printf_escaped (_("Received on behalf of <b>%s</b>"), priv->proxy);
 
 	switch (priv->mode) {
 	case ITIP_VIEW_MODE_PUBLISH:
 		if (priv->organizer_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s has published the following memo:"), organizer, priv->organizer_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s has published the following memo:"), organizer, priv->organizer_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> has published the following memo:"), organizer);
+			sender = g_markup_printf_escaped (_("<b>%s</b> has published the following memo:"), organizer);
 		break;
 	case ITIP_VIEW_MODE_ADD:
 		/* FIXME What text for this? */
 		if (priv->organizer_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s wishes to add to an existing memo:"), organizer, priv->organizer_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s wishes to add to an existing memo:"), organizer, priv->organizer_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> wishes to add to an existing memo:"), organizer);
+			sender = g_markup_printf_escaped (_("<b>%s</b> wishes to add to an existing memo:"), organizer);
 		break;
 	case ITIP_VIEW_MODE_CANCEL:
 		if (priv->organizer_sentby)
-			sender = g_strdup_printf (_("<b>%s</b> through %s has canceled the following shared memo:"), organizer, priv->organizer_sentby);
+			sender = g_markup_printf_escaped (_("<b>%s</b> through %s has canceled the following shared memo:"), organizer, priv->organizer_sentby);
 		else
-			sender = g_strdup_printf (_("<b>%s</b> has canceled the following shared memo:"), organizer);
+			sender = g_markup_printf_escaped (_("<b>%s</b> has canceled the following shared memo:"), organizer);
 		break;
 	default:
 		break;
@@ -594,7 +594,7 @@
 
 	priv = view->priv;
 
-	summary = g_strdup_printf ("<b>%s</b>", priv->summary);
+	summary = g_markup_printf_escaped ("<b>%s</b>", priv->summary);
 
 	gtk_label_set_text (GTK_LABEL (priv->summary_label), summary);
 	gtk_label_set_use_markup (GTK_LABEL (priv->summary_label), TRUE);

Modified: branches/mbarnes-composer/plugins/save-calendar/ical-format.c
==============================================================================
--- branches/mbarnes-composer/plugins/save-calendar/ical-format.c	(original)
+++ branches/mbarnes-composer/plugins/save-calendar/ical-format.c	Tue Feb 26 05:33:35 2008
@@ -105,7 +105,7 @@
 		return;
 
 	/* open source client */
-	source_client = auth_new_cal_from_source (primary_source, type);
+	source_client = (ECal*) auth_new_cal_from_source (primary_source, type);
 	if (!e_cal_open (source_client, TRUE, &error)) {
 		display_error_message (gtk_widget_get_toplevel (GTK_WIDGET (target->selector)), error->message);
 		g_object_unref (source_client);

Modified: branches/mbarnes-composer/shell/e-shell-nm.c
==============================================================================
--- branches/mbarnes-composer/shell/e-shell-nm.c	(original)
+++ branches/mbarnes-composer/shell/e-shell-nm.c	Tue Feb 26 05:33:35 2008
@@ -64,16 +64,22 @@
 	DBusError error;
 	const char *object;
 	ShellLineStatus status;
-	EShellWindow *window = E_SHELL_WINDOW (user_data);
-	EShell *shell = e_shell_window_peek_shell ((EShellWindow *) user_data);
+	EShellWindow *window = NULL;
+	EShell *shell = NULL;
 	GNOME_Evolution_ShellState shell_state;
 	EShellLineStatus line_status;
 
+ 	if (!user_data || !E_IS_SHELL_WINDOW (user_data))
+ 		return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ 
+ 	window = E_SHELL_WINDOW (user_data);
+ 	shell = e_shell_window_peek_shell (window);
+
 	dbus_error_init (&error);
 	object = dbus_message_get_path (message);
 
 	if (dbus_message_is_signal (message, DBUS_INTERFACE_LOCAL, "Disconnected") &&
-		 strcmp (dbus_message_get_path (message), DBUS_PATH_LOCAL) == 0) {
+		object && !strcmp (object, DBUS_PATH_LOCAL)) {
 		dbus_connection_unref (dbus_connection);
 		dbus_connection = NULL;
 

Modified: branches/mbarnes-composer/shell/main.c
==============================================================================
--- branches/mbarnes-composer/shell/main.c	(original)
+++ branches/mbarnes-composer/shell/main.c	Tue Feb 26 05:33:35 2008
@@ -145,6 +145,8 @@
 	system (KILL_PROCESS_CMD " -9 evolution-data-server-1.4 2> /dev/null");
 	system (KILL_PROCESS_CMD " -9 evolution-data-server-1.6 2> /dev/null");
 	system (KILL_PROCESS_CMD " -9 evolution-data-server-1.8 2> /dev/null");
+	system (KILL_PROCESS_CMD " -9 evolution-data-server-1.10 2> /dev/null");
+	system (KILL_PROCESS_CMD " -9 evolution-data-server-1.12 2> /dev/null");
 
 	system (KILL_PROCESS_CMD " -9 lt-evolution-alarm-notify 2> /dev/null");
 	system (KILL_PROCESS_CMD " -9 evolution-alarm-notify 2> /dev/null");

Modified: branches/mbarnes-composer/widgets/e-timezone-dialog/e-timezone-dialog.c
==============================================================================
--- branches/mbarnes-composer/widgets/e-timezone-dialog/e-timezone-dialog.c	(original)
+++ branches/mbarnes-composer/widgets/e-timezone-dialog/e-timezone-dialog.c	Tue Feb 26 05:33:35 2008
@@ -27,8 +27,10 @@
 #include <string.h>
 #include <glib/gi18n.h>
 #include <gtk/gtksignal.h>
-#include <gtk/gtkcombo.h>
-#include <gtk/gtkentry.h>
+#include <gtk/gtkcombobox.h>
+#include <gtk/gtkliststore.h>
+#include <gtk/gtkcellrenderertext.h>
+#include <gtk/gtkcelllayout.h>
 #include <gtk/gtklabel.h>
 #include <gnome.h>
 #include <glade/glade.h>
@@ -110,8 +112,14 @@
 						 EMapPoint	*point);
 static void	set_map_timezone		(ETimezoneDialog *etd,
 						 icaltimezone    *zone);
-static void	on_combo_changed		(GtkEditable	*entry,
+static void	on_combo_changed		(GtkComboBox	*combo,
 						 ETimezoneDialog *etd);
+
+static void timezone_combo_get_active_text 	(GtkComboBox *combo, 
+						 const char **zone_name);
+static gboolean timezone_combo_set_active_text 	(GtkComboBox *combo, 
+						 const char *zone_name);
+
 static void	map_destroy_cb			(gpointer data,
 						 GObject *where_object_was);
 
@@ -198,28 +206,22 @@
 {
 	ETimezoneDialogPrivate *priv;
 	icalarray *zones;
-	GtkWidget *listitem;
-	GtkCombo *combo;
+	GtkComboBox *combo;
+	GList *l, *list_items = NULL;
+	GtkListStore *list_store;
+	GtkTreeIter iter;
+	GtkCellRenderer *cell;
+	GHashTable *index;
 	int i;
 
 	priv = etd->priv;
 
-	combo = GTK_COMBO (priv->timezone_combo);
-
-	/* Clear any existing items in the combo. */
-	gtk_list_clear_items (GTK_LIST (combo->list), 0, -1);
-
-	/* Put the ""UTC" entry at the top of the combo's list. */
-	listitem = gtk_list_item_new_with_label (_("UTC"));
-	gtk_widget_show (listitem);
-	gtk_container_add (GTK_CONTAINER (combo->list), listitem);
-
 	/* Get the array of builtin timezones. */
 	zones = icaltimezone_get_builtin_timezones ();
 
 	for (i = 0; i < zones->num_elements; i++) {
 		icaltimezone *zone;
-		char *location;
+		gchar *location;
 
 		zone = icalarray_element_at (zones, i);
 
@@ -230,10 +232,42 @@
 				 icaltimezone_get_latitude (zone),
 				 E_TIMEZONE_DIALOG_MAP_POINT_NORMAL_RGBA);
 
-		listitem = gtk_list_item_new_with_label (location);
-		gtk_widget_show (listitem);
-		gtk_container_add (GTK_CONTAINER (combo->list), listitem);
+		list_items = g_list_prepend (list_items, location);
 	}
+
+	list_items = g_list_sort (list_items, (GCompareFunc) g_utf8_collate);
+
+	/* Put the "UTC" entry at the top of the combo's list. */
+	list_items = g_list_prepend (list_items, _("UTC"));
+
+	combo = GTK_COMBO_BOX (priv->timezone_combo);
+
+	cell = gtk_cell_renderer_text_new ();
+	gtk_cell_layout_pack_start ((GtkCellLayout *) combo, cell, TRUE);
+	gtk_cell_layout_set_attributes ((GtkCellLayout *) combo, cell, "text", 0, NULL);
+
+	list_store = gtk_list_store_new (1, G_TYPE_STRING);
+	index = g_hash_table_new (g_str_hash, g_str_equal);
+	for (l = list_items, i = 0; l != NULL; l = l->next, ++i) {
+		gtk_list_store_append (list_store, &iter);
+		gtk_list_store_set (list_store, &iter, 0, (gchar *)(l->data), -1);
+		g_hash_table_insert (index, (gchar *)(l->data), GINT_TO_POINTER (i));
+	}
+
+	g_object_set_data_full (G_OBJECT (list_store), "index", index, (GDestroyNotify) g_hash_table_destroy);
+
+	gtk_combo_box_set_model (combo, (GtkTreeModel *) list_store);
+
+	gtk_rc_parse_string (
+		"style \"e-timezone-combo-style\" {\n"
+		"  GtkComboBox::appears-as-list = 1\n"
+		"}\n"
+		"\n"
+		"widget \"*.e-timezone-dialog-combo\" style \"e-timezone-combo-style\"");
+
+	gtk_widget_set_name (priv->timezone_combo, "e-timezone-dialog-combo");
+
+	g_list_free (list_items);
 }
 
 
@@ -279,8 +313,6 @@
 			       | GDK_LEAVE_NOTIFY_MASK
 			       | GDK_VISIBILITY_NOTIFY_MASK);
 
-	gtk_editable_set_editable (GTK_EDITABLE (GTK_COMBO (priv->timezone_combo)->entry), FALSE);
-
 	e_timezone_dialog_add_timezones (etd);
 
 	gtk_container_add (GTK_CONTAINER (priv->map_window), map);
@@ -294,7 +326,7 @@
         g_signal_connect (map, "visibility-notify-event", G_CALLBACK (on_map_visibility_changed), etd);
 	g_signal_connect (map, "button-press-event", G_CALLBACK (on_map_button_pressed), etd);
 
-	g_signal_connect (GTK_COMBO (priv->timezone_combo)->entry, "changed", G_CALLBACK (on_combo_changed), etd);
+	g_signal_connect (GTK_COMBO_BOX (priv->timezone_combo), "changed", G_CALLBACK (on_combo_changed), etd);
 
 	return etd;
 
@@ -527,8 +559,8 @@
 	        e_map_point_set_color_rgba (priv->map, priv->point_hover,
 					    E_TIMEZONE_DIALOG_MAP_POINT_NORMAL_RGBA);
 
-	gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (priv->timezone_combo)->entry),
-			    zone_display_name (priv->zone));
+	timezone_combo_set_active_text (GTK_COMBO_BOX (priv->timezone_combo),
+					zone_display_name (priv->zone));
 	gtk_label_set_text (GTK_LABEL (priv->preview_label), "");
 
 	priv->point_hover = NULL;
@@ -591,8 +623,8 @@
 		priv->point_selected = priv->point_hover;
 
 		priv->zone = get_zone_from_point (etd, priv->point_selected);
-		gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (priv->timezone_combo)->entry),
-				    zone_display_name (priv->zone));
+		timezone_combo_set_active_text (GTK_COMBO_BOX (priv->timezone_combo),
+						zone_display_name (priv->zone));
 	}
 
 	return TRUE;
@@ -691,8 +723,8 @@
 
 	gtk_label_set_text (GTK_LABEL (priv->preview_label),
 			    zone ? display : "");
-	gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (priv->timezone_combo)->entry),
-			    zone ? zone_display_name(zone) : "");
+	timezone_combo_set_active_text (GTK_COMBO_BOX (priv->timezone_combo),
+					zone ? zone_display_name(zone) : "");
 
 	set_map_timezone (etd, zone);
 	g_free (display);
@@ -741,7 +773,7 @@
 
 
 static void
-on_combo_changed (GtkEditable *entry, ETimezoneDialog *etd)
+on_combo_changed (GtkComboBox *combo_box, ETimezoneDialog *etd)
 {
 	ETimezoneDialogPrivate *priv;
 	const char *new_zone_name;
@@ -752,11 +784,11 @@
 
 	priv = etd->priv;
 
-	new_zone_name = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (priv->timezone_combo)->entry));
+	timezone_combo_get_active_text (GTK_COMBO_BOX (priv->timezone_combo), &new_zone_name);
 
 	if (!*new_zone_name)
 		priv->zone = NULL;
-	else if (!strcmp (new_zone_name, _("UTC")))
+	else if (!g_utf8_collate (new_zone_name, _("UTC")))
 		priv->zone = icaltimezone_get_utc_timezone ();
 	else {
 		priv->zone = NULL;
@@ -765,7 +797,7 @@
 		for (i = 0; i < zones->num_elements; i++) {
 			map_zone = icalarray_element_at (zones, i);
 			location = _(icaltimezone_get_location (map_zone));
-			if (!strcmp (new_zone_name, location)) {
+			if (!g_utf8_collate (new_zone_name, location)) {
 				priv->zone = map_zone;
 				break;
 			}
@@ -775,6 +807,39 @@
 	set_map_timezone (etd, map_zone);
 }
 
+static void 
+timezone_combo_get_active_text (GtkComboBox *combo, const char **zone_name)
+{
+	GtkTreeModel *list_store;
+	GtkTreeIter iter;
+
+	list_store = gtk_combo_box_get_model (combo);
+
+	/* Get the active iter in the list */
+	if (gtk_combo_box_get_active_iter (combo, &iter)) 
+		gtk_tree_model_get (list_store, &iter, 0, zone_name, -1);
+	else 
+		*zone_name = "";
+}
+
+static gboolean 
+timezone_combo_set_active_text (GtkComboBox *combo, const char *zone_name)
+{
+	GtkTreeModel *list_store;
+	GHashTable *index;
+	gpointer id = NULL;
+
+	list_store = gtk_combo_box_get_model (combo);
+	index = (GHashTable *) g_object_get_data (G_OBJECT (list_store), "index");
+
+	if (zone_name && *zone_name) 
+		id = g_hash_table_lookup (index, zone_name);
+
+	gtk_combo_box_set_active (combo, GPOINTER_TO_INT (id));
+
+	return (id != NULL);
+}
+
 /**
  * e_timezone_dialog_reparent:
  * @etd: #ETimezoneDialog.

Modified: branches/mbarnes-composer/widgets/e-timezone-dialog/e-timezone-dialog.glade
==============================================================================
--- branches/mbarnes-composer/widgets/e-timezone-dialog/e-timezone-dialog.glade	(original)
+++ branches/mbarnes-composer/widgets/e-timezone-dialog/e-timezone-dialog.glade	Tue Feb 26 05:33:35 2008
@@ -247,7 +247,7 @@
 	      <property name="yalign">0.5</property>
 	      <property name="xpad">0</property>
 	      <property name="ypad">0</property>
-	      <property name="mnemonic_widget">combo-entry1</property>
+	      <property name="mnemonic_widget">timezone-combo</property>
 	    </widget>
 	    <packing>
 	      <property name="padding">0</property>
@@ -284,59 +284,13 @@
 	      </child>
 
 	      <child>
-		<widget class="GtkCombo" id="timezone-combo">
+		<widget class="GtkComboBox" id="timezone-combo">
 		  <property name="visible">True</property>
-		  <property name="value_in_list">False</property>
-		  <property name="allow_empty">True</property>
-		  <property name="case_sensitive">False</property>
-		  <property name="enable_arrow_keys">True</property>
-		  <property name="enable_arrows_always">False</property>
+		  <property name="add_tearoffs">False</property>
+		  <property name="focus_on_click">True</property>
 		  <accessibility>
 		    <atkproperty name="AtkObject::accessible_name" translatable="yes">TimeZone Combobox</atkproperty>
 		  </accessibility>
-
-		  <child internal-child="entry">
-		    <widget class="GtkEntry" id="combo-entry1">
-		      <property name="visible">True</property>
-		      <property name="can_focus">True</property>
-		      <property name="editable">False</property>
-		      <property name="visibility">True</property>
-		      <property name="max_length">0</property>
-		      <property name="text" translatable="yes"></property>
-		      <property name="has_frame">True</property>
-		      <property name="invisible_char">*</property>
-		      <property name="activates_default">False</property>
-		    </widget>
-		  </child>
-
-		  <child internal-child="list">
-		    <widget class="GtkList" id="convertwidget3">
-		      <property name="visible">True</property>
-		      <property name="selection_mode">GTK_SELECTION_BROWSE</property>
-
-		      <child>
-			<widget class="GtkListItem" id="convertwidget4">
-			  <property name="visible">True</property>
-
-			  <child>
-			    <widget class="GtkLabel" id="convertwidget5">
-			      <property name="visible">True</property>
-			      <property name="label" translatable="yes"></property>
-			      <property name="use_underline">False</property>
-			      <property name="use_markup">False</property>
-			      <property name="justify">GTK_JUSTIFY_LEFT</property>
-			      <property name="wrap">False</property>
-			      <property name="selectable">False</property>
-			      <property name="xalign">0</property>
-			      <property name="yalign">0.5</property>
-			      <property name="xpad">0</property>
-			      <property name="ypad">0</property>
-			    </widget>
-			  </child>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
 		</widget>
 		<packing>
 		  <property name="padding">0</property>

Modified: branches/mbarnes-composer/widgets/misc/e-calendar-item.c
==============================================================================
--- branches/mbarnes-composer/widgets/misc/e-calendar-item.c	(original)
+++ branches/mbarnes-composer/widgets/misc/e-calendar-item.c	Tue Feb 26 05:33:35 2008
@@ -430,9 +430,9 @@
 		calitem->styles = NULL;
 	}
 
-	if (calitem->signal_emission_idle_id != 0) {
+	if (calitem->signal_emission_idle_id > 0) {
 		g_source_remove (calitem->signal_emission_idle_id);
-		calitem->signal_emission_idle_id = 0;
+		calitem->signal_emission_idle_id = -1;
 	}
 
 	if (calitem->font_desc) {
@@ -1678,8 +1678,10 @@
 
 	/* Just return if the month is outside the given area. */
 	if (month_x >= width || month_x + calitem->month_width <= 0
-	    || month_y >= height || month_y + calitem->month_height <= 0)
+	    || month_y >= height || month_y + calitem->month_height <= 0) {
+		cairo_destroy (cr);
 		return;
+	}
 
 	month = calitem->month + row * calitem->cols + col;
 	year = calitem->year + month / 12;
@@ -1746,6 +1748,7 @@
 
 	if (clip_width <= 0 || clip_height <= 0) {
 		g_object_unref (layout);
+		cairo_destroy (cr);
 		return;
 	}
 

Modified: branches/mbarnes-composer/widgets/misc/e-cursors.c
==============================================================================
--- branches/mbarnes-composer/widgets/misc/e-cursors.c	(original)
+++ branches/mbarnes-composer/widgets/misc/e-cursors.c	Tue Feb 26 05:33:35 2008
@@ -115,11 +115,11 @@
 	e_color_init ();
 
 	for (i = 0; cursors [i].hot_x; i++){
-		GdkBitmap *bitmap = NULL, *mask = NULL;
-
 		if (cursors [i].hot_x < 0)
 			cursors [i].cursor = gdk_cursor_new (cursors [i].hot_y);
 		else {
+			GdkBitmap *bitmap = NULL, *mask = NULL;
+
 			create_bitmap_and_mask_from_xpm (&bitmap, &mask, cursors [i].xpm);
 
 			/* The foreground and background colours are reversed.
@@ -131,6 +131,9 @@
 					&e_black, &e_white,
 					cursors [i].hot_x,
 					cursors [i].hot_y);
+
+			g_object_unref (bitmap);
+			g_object_unref (mask);
 		}
 	}
 

Modified: branches/mbarnes-composer/widgets/table/e-table-item.c
==============================================================================
--- branches/mbarnes-composer/widgets/table/e-table-item.c	(original)
+++ branches/mbarnes-composer/widgets/table/e-table-item.c	Tue Feb 26 05:33:35 2008
@@ -2701,7 +2701,6 @@
 				break;
 			}
 
-
 			g_signal_emit (eti, eti_signals [KEY_PRESS], 0,
 				       model_to_view_row(eti, cursor_row), cursor_col, e, &return_val);
 			if ((!return_val) &&
@@ -2743,6 +2742,11 @@
 			break;
 		case GDK_Home:
 		case GDK_KP_Home:
+			if (eti_editing (eti)) {
+				handled = FALSE;
+				break;
+			}
+
 			if (eti->cursor_mode != E_CURSOR_LINE) {
 				eti_cursor_move (eti, model_to_view_row(eti, cursor_row), 0);
 				return_val = TRUE;
@@ -2751,6 +2755,11 @@
 			break;
 		case GDK_End:
 		case GDK_KP_End:
+			if (eti_editing (eti)) {
+				handled = FALSE;
+				break;
+			}
+
 			if (eti->cursor_mode != E_CURSOR_LINE) {
 				eti_cursor_move (eti, model_to_view_row(eti, cursor_row), eti->cols - 1);
 				return_val = TRUE;

Modified: branches/mbarnes-composer/widgets/text/e-text.c
==============================================================================
--- branches/mbarnes-composer/widgets/text/e-text.c	(original)
+++ branches/mbarnes-composer/widgets/text/e-text.c	Tue Feb 26 05:33:35 2008
@@ -1700,7 +1700,7 @@
 	    cy > text->clip_cy + clip_height)
 		return 1;
 
-	if (text->fill_clip_rectangle)
+	if (text->fill_clip_rectangle || !text->text || !*text->text)
 		return 0;
 
 	cx -= text->cx;



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