[evolution/account-mgmt: 20/33] Adapt calendar/gui to the new ESource API.



commit 0368f6d8d37db66355474cb529e08e5e53b9eaad
Author: Matthew Barnes <mbarnes redhat com>
Date:   Mon Dec 13 16:05:32 2010 -0500

    Adapt calendar/gui to the new ESource API.

 calendar/gui/alarm-notify/config-data.h     |    1 -
 calendar/gui/dialogs/Makefile.am            |    3 -
 calendar/gui/dialogs/calendar-setup.c       |  608 ---------------------------
 calendar/gui/dialogs/calendar-setup.h       |   44 --
 calendar/gui/dialogs/comp-editor.c          |    4 +-
 calendar/gui/dialogs/e-send-options-utils.c |   66 ++-
 calendar/gui/dialogs/e-send-options-utils.h |    2 +-
 calendar/gui/dialogs/event-page.c           |   51 +--
 calendar/gui/dialogs/memo-page.c            |   59 +--
 calendar/gui/dialogs/select-source-dialog.c |   43 +--
 calendar/gui/dialogs/task-page.c            |   49 +--
 calendar/gui/e-cal-component-preview.c      |    2 +-
 calendar/gui/e-cal-config.c                 |    2 +
 calendar/gui/e-cal-event.c                  |    5 +-
 calendar/gui/e-cal-event.h                  |    4 +-
 calendar/gui/e-cal-model.c                  |   71 +++-
 calendar/gui/e-cal-model.h                  |    5 +-
 calendar/gui/e-calendar-selector.c          |   45 +--
 calendar/gui/e-calendar-selector.h          |    3 +-
 calendar/gui/e-calendar-view.c              |    6 +-
 calendar/gui/e-day-view.c                   |    2 +-
 calendar/gui/e-meeting-list-view.c          |   11 +-
 calendar/gui/e-meeting-store.c              |   17 +-
 calendar/gui/e-memo-list-selector.c         |   53 +--
 calendar/gui/e-memo-list-selector.h         |    3 +-
 calendar/gui/e-task-list-selector.c         |   53 +--
 calendar/gui/e-task-list-selector.h         |    3 +-
 27 files changed, 214 insertions(+), 1001 deletions(-)
---
diff --git a/calendar/gui/alarm-notify/config-data.h b/calendar/gui/alarm-notify/config-data.h
index ae92217..d3c3718 100644
--- a/calendar/gui/alarm-notify/config-data.h
+++ b/calendar/gui/alarm-notify/config-data.h
@@ -30,7 +30,6 @@
 #include <libical/ical.h>
 #include <libecal/e-cal.h>
 #include <gconf/gconf-client.h>
-#include <libedataserver/e-source-list.h>
 
 GConfClient  *config_data_get_conf_client (void);
 
diff --git a/calendar/gui/dialogs/Makefile.am b/calendar/gui/dialogs/Makefile.am
index 38e0c47..84efd57 100644
--- a/calendar/gui/dialogs/Makefile.am
+++ b/calendar/gui/dialogs/Makefile.am
@@ -25,7 +25,6 @@ ecalendarinclude_HEADERS =		\
 	comp-editor.h			\
 	alarm-dialog.h			\
 	alarm-list-dialog.h		\
-	calendar-setup.h		\
 	cancel-comp.h			\
 	changed-comp.h			\
 	comp-editor-util.h		\
@@ -59,8 +58,6 @@ libcal_dialogs_la_SOURCES =		\
 	alarm-dialog.h			\
 	alarm-list-dialog.c		\
 	alarm-list-dialog.h		\
-	calendar-setup.c		\
-	calendar-setup.h		\
 	cancel-comp.c			\
 	cancel-comp.h			\
 	changed-comp.c			\
diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c
index 14b94eb..ecc6dc1 100644
--- a/calendar/gui/dialogs/comp-editor.c
+++ b/calendar/gui/dialogs/comp-editor.c
@@ -858,7 +858,7 @@ action_save_cb (GtkAction *action,
 		e_alert_submit (
 			E_ALERT_SINK (editor),
 			"calendar:prompt-read-only-cal-editor",
-			e_source_peek_name (
+			e_source_get_display_name (
 				e_cal_get_source (priv->client)),
 			NULL);
 		return;
@@ -2075,7 +2075,7 @@ prompt_and_save_changes (CompEditor *editor, gboolean send)
 			e_alert_submit (
 				E_ALERT_SINK (editor),
 				"calendar:prompt-read-only-cal-editor",
-				e_source_peek_name (
+				e_source_get_display_name (
 					e_cal_get_source (priv->client)),
 				NULL);
 			/* don't discard changes when selected readonly calendar */
diff --git a/calendar/gui/dialogs/e-send-options-utils.c b/calendar/gui/dialogs/e-send-options-utils.c
index b21352d..64402a3 100644
--- a/calendar/gui/dialogs/e-send-options-utils.c
+++ b/calendar/gui/dialogs/e-send-options-utils.c
@@ -23,32 +23,39 @@
  */
 
 #include "e-send-options-utils.h"
+
 #include <glib.h>
+#include <stdlib.h>
 #include <string.h>
 
+#include <libedataserver/e-source-extension.h>
+
 void
-e_send_options_utils_set_default_data (ESendOptionsDialog *sod, ESource *source, const gchar *type)
+e_send_options_utils_set_default_data (ESendOptionsDialog *sod,
+                                       ESource *source,
+                                       const gchar *type)
 {
 	ESendOptionsGeneral *gopts = NULL;
 	ESendOptionsStatusTracking *sopts;
-	GConfClient *gconf = gconf_client_get_default ();
-	ESourceList *source_list;
-	const gchar *uid;
-	const gchar *value;
+	ESourceExtension *extension;
+	const gchar *extension_name;
+	gchar *value;
 
-	gopts = sod->data->gopts;
-	sopts = sod->data->sopts;
+	/* FIXME These is all GroupWise-specific settings.
+	 *       They absolutely do not belong here. */
 
-	if (!strcmp (type, "calendar"))
-		source_list = e_source_list_new_for_gconf (gconf, "/apps/evolution/calendar/sources");
-	else
-		source_list = e_source_list_new_for_gconf (gconf, "/apps/evolution/tasks/sources");
+	extension_name = "GroupWise Backend";
+
+	if (!e_source_has_extension (source, extension_name))
+		return;
+
+	extension = e_source_get_extension (source, extension_name);
 
-	uid = e_source_peek_uid (source);
-	source = e_source_list_peek_source_by_uid (source_list, uid);
+	gopts = sod->data->gopts;
+	sopts = sod->data->sopts;
 
 		/* priority */
-	value = e_source_get_property (source, "priority");
+	g_object_get (extension, "priority", &value, NULL);
 	if (value) {
 		if (!strcmp (value, "high"))
 			gopts->priority = E_PRIORITY_HIGH;
@@ -59,8 +66,10 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod, ESource *source,
 		else
 			gopts->priority = E_PRIORITY_UNDEFINED;
 	}
+	g_free (value);
+
 		/* Reply requested */
-	value = e_source_get_property (source, "reply-requested");
+	g_object_get (extension, "reply-requested", &value, NULL);
 	if (value) {
 		if (!strcmp (value, "none"))
 			gopts->reply_enabled = FALSE;
@@ -72,8 +81,10 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod, ESource *source,
 			gopts->reply_within = i;
 		}
 	}
+	g_free (value);
+
 		/* Delay delivery */
-	value = e_source_get_property (source, "delay-delivery");
+	g_object_get (extension, "delivery-delay", &value, NULL);
 	if (value) {
 		if (!strcmp (value, "none"))
 			gopts->delay_enabled = FALSE;
@@ -82,8 +93,10 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod, ESource *source,
 			gopts->delay_until = icaltime_as_timet (icaltime_from_string (value));
 		}
 	}
+	g_free (value);
+
 		/* Expiration Date */
-	value = e_source_get_property (source, "expiration");
+	g_object_get (extension, "expiration", &value, NULL);
 	if (value) {
 		if (!strcmp (value, "none"))
 			gopts->expiration_enabled = FALSE;
@@ -96,8 +109,10 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod, ESource *source,
 			gopts->expire_after = i;
 		}
 	}
+	g_free (value);
+
 		/* status tracking */
-	value = e_source_get_property (source, "status-tracking");
+	g_object_get (extension, "status-tracking", &value, NULL);
 	if (value) {
 		if (!strcmp (value, "none"))
 			sopts->tracking_enabled = FALSE;
@@ -111,42 +126,45 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod, ESource *source,
 				sopts->track_when = E_ALL;
 		}
 	}
+	g_free (value);
 
 		/* Return Notifications */
 
-	value = e_source_get_property (source, "return-open");
+	g_object_get (extension, "return-open", &value, NULL);
 	if (value) {
 		if (!strcmp (value, "none"))
 			sopts->opened = E_RETURN_NOTIFY_NONE;
 		else
 			sopts->opened = E_RETURN_NOTIFY_MAIL;
 	}
+	g_free (value);
 
-	value = e_source_get_property (source, "return-accept");
+	g_object_get (extension, "return-accept", &value, NULL);
 	if (value) {
 		if (!strcmp (value, "none"))
 			sopts->accepted = E_RETURN_NOTIFY_NONE;
 		else
 			sopts->accepted = E_RETURN_NOTIFY_MAIL;
 	}
+	g_free (value);
 
-	value = e_source_get_property (source, "return-decline");
+	g_object_get (extension, "return-decline", &value, NULL);
 	if (value) {
 		if (!strcmp (value, "none"))
 			sopts->declined = E_RETURN_NOTIFY_NONE;
 		else
 			sopts->declined = E_RETURN_NOTIFY_MAIL;
 	}
+	g_free (value);
 
-	value = e_source_get_property (source, "return-complete");
+	g_object_get (extension, "return-complete", &value, NULL);
 	if (value) {
 		if (!strcmp (value, "none"))
 			sopts->completed = E_RETURN_NOTIFY_NONE;
 		else
 			sopts->completed = E_RETURN_NOTIFY_MAIL;
 	}
-
-	g_object_unref (gconf);
+	g_free (value);
 }
 
 void
diff --git a/calendar/gui/dialogs/e-send-options-utils.h b/calendar/gui/dialogs/e-send-options-utils.h
index c1a63a2..3ec7542 100644
--- a/calendar/gui/dialogs/e-send-options-utils.h
+++ b/calendar/gui/dialogs/e-send-options-utils.h
@@ -27,7 +27,7 @@
 
 #include "misc/e-send-options.h"
 #include <libecal/e-cal-component.h>
-#include <libedataserver/e-source-list.h>
+#include <libedataserver/e-source.h>
 
 void		e_send_options_utils_set_default_data
 						(ESendOptionsDialog *sod,
diff --git a/calendar/gui/dialogs/event-page.c b/calendar/gui/dialogs/event-page.c
index 0cbe3e3..3758cbd 100644
--- a/calendar/gui/dialogs/event-page.c
+++ b/calendar/gui/dialogs/event-page.c
@@ -101,7 +101,6 @@ struct _EventPagePrivate {
 	GtkWidget *info_hbox;
 	GtkWidget *info_icon;
 	GtkWidget *info_string;
-	gchar *subscriber_info_text;
 
 	GtkWidget *summary;
 	GtkWidget *summary_label;
@@ -261,7 +260,6 @@ event_page_finalize (GObject *object)
 	g_ptr_array_free (priv->deleted_attendees, TRUE);
 
 	g_free (priv->old_summary);
-	g_free (priv->subscriber_info_text);
 
 	priv->alarm_list_dlg_widget = NULL;
 
@@ -765,12 +763,11 @@ check_starts_in_the_past (EventPage *epage)
 	}
 
 	if (comp_editor_test_time_in_the_past (start_tt)) {
-		gchar *tmp = g_strconcat ("<b>", _("Event's start time is in the past"), "</b>",
-			priv->subscriber_info_text ? "\n" : "", priv->subscriber_info_text, NULL);
+		gchar *tmp = g_strconcat ("<b>", _("Event's start time is in the past"), "</b>", NULL);
 		event_page_set_info_string (epage, GTK_STOCK_DIALOG_WARNING, tmp);
 		g_free (tmp);
 	} else {
-		event_page_set_info_string (epage, priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, priv->subscriber_info_text);
+		event_page_set_info_string (epage, NULL, NULL);
 	}
 
 	return TRUE;
@@ -814,7 +811,7 @@ sensitize_widgets (EventPage *epage)
 		event_page_set_info_string (epage, GTK_STOCK_DIALOG_INFO, tmp);
 		g_free (tmp);
 	} else if (!check_starts_in_the_past (epage)) {
-		event_page_set_info_string (epage, priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, priv->subscriber_info_text);
+		event_page_set_info_string (epage, NULL, NULL);
 	}
 
 	alarm = e_dialog_combo_box_get (priv->alarm_time_combo, priv->alarm_map) != ALARM_NONE;
@@ -2302,8 +2299,6 @@ get_widgets (EventPage *epage)
 
 	priv->source_selector = GW ("source");
 
-	e_util_set_source_combo_box_list (priv->source_selector, "/apps/evolution/calendar/sources");
-
 	completion = e_category_completion_new ();
 	gtk_entry_set_completion (GTK_ENTRY (priv->categories), completion);
 	g_object_unref (completion);
@@ -2655,7 +2650,7 @@ source_changed_cb (ESourceComboBox *source_combo_box, EventPage *epage)
 		dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
 						 GTK_MESSAGE_WARNING, GTK_BUTTONS_OK,
 						 _("Unable to open the calendar '%s'."),
-						 e_source_peek_name (source));
+						 e_source_get_display_name (source));
 		gtk_dialog_run (GTK_DIALOG (dialog));
 		gtk_widget_destroy (dialog);
 	} else {
@@ -2686,26 +2681,8 @@ source_changed_cb (ESourceComboBox *source_combo_box, EventPage *epage)
 static void
 set_subscriber_info_string (EventPage *epage, const gchar *backend_address)
 {
-	CompEditor *editor;
-	ECal *client;
-	ESource *source;
-
-	editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
-	client = comp_editor_get_client (editor);
-	source = e_cal_get_source (client);
-
-	if (e_source_get_property (source, "subscriber")) {
-		g_free (epage->priv->subscriber_info_text);
-		/* Translators: This string is used when we are creating an Event
-		   (meeting or appointment)  on behalf of some other user */
-		epage->priv->subscriber_info_text = g_markup_printf_escaped (_("You are acting on behalf of %s"), backend_address);
-	} else {
-		g_free (epage->priv->subscriber_info_text);
-		epage->priv->subscriber_info_text = NULL;
-	}
-
 	if (!check_starts_in_the_past (epage))
-		event_page_set_info_string (epage, epage->priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, epage->priv->subscriber_info_text);
+		event_page_set_info_string (epage, NULL, NULL);
 }
 
 static void
@@ -3100,32 +3077,18 @@ static void
 event_page_select_organizer (EventPage *epage, const gchar *backend_address)
 {
 	EventPagePrivate *priv = epage->priv;
-	CompEditor *editor;
 	GList *l;
-	ECal *client;
 	EAccount *def_account;
 	gchar *def_address = NULL;
 	const gchar *default_address;
 	gboolean subscribed_cal = FALSE;
-	ESource *source = NULL;
-	const gchar *user_addr = NULL;
+	const gchar *user_addr;
 
 	def_account = itip_addresses_get_default ();
 	if (def_account && def_account->enabled)
 		def_address = g_strdup_printf("%s <%s>", def_account->id->name, def_account->id->address);
 
-	editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
-	client = comp_editor_get_client (editor);
-
-	if (client)
-		source = e_cal_get_source (client);
-	if (source)
-		user_addr = e_source_get_property (source, "subscriber");
-
-	if (user_addr)
-		subscribed_cal = TRUE;
-	else
-		user_addr = (backend_address && *backend_address) ? backend_address : NULL;
+	user_addr = (backend_address && *backend_address) ? backend_address : NULL;
 
 	default_address = NULL;
 	if (user_addr)
diff --git a/calendar/gui/dialogs/memo-page.c b/calendar/gui/dialogs/memo-page.c
index 03cf7e7..4138982 100644
--- a/calendar/gui/dialogs/memo-page.c
+++ b/calendar/gui/dialogs/memo-page.c
@@ -73,7 +73,6 @@ struct _MemoPagePrivate {
 	GtkWidget *info_hbox;
 	GtkWidget *info_icon;
 	GtkWidget *info_string;
-	gchar *subscriber_info_text;
 
 	/* Organizer */
 	GtkWidget *org_label;
@@ -166,8 +165,6 @@ memo_page_finalize (GObject *object)
 		priv->builder = NULL;
 	}
 
-	g_free (priv->subscriber_info_text);
-
 	/* Chain up to parent's finalize() method. */
 	G_OBJECT_CLASS (memo_page_parent_class)->finalize (object);
 }
@@ -337,12 +334,11 @@ check_starts_in_the_past (MemoPage *mpage)
 	start_tt.is_date = TRUE;
 	if (e_date_edit_get_date (E_DATE_EDIT (priv->start_date), &start_tt.year, &start_tt.month, &start_tt.day) &&
 	    comp_editor_test_time_in_the_past (start_tt)) {
-		gchar *tmp = g_strconcat ("<b>", _("Memo's start date is in the past"), "</b>",
-			priv->subscriber_info_text ? "\n" : "", priv->subscriber_info_text, NULL);
+		gchar *tmp = g_strconcat ("<b>", _("Memo's start date is in the past"), "</b>", NULL);
 		memo_page_set_info_string (mpage, GTK_STOCK_DIALOG_WARNING, tmp);
 		g_free (tmp);
 	} else {
-		memo_page_set_info_string (mpage, priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, priv->subscriber_info_text);
+		memo_page_set_info_string (mpage, NULL, NULL);
 	}
 
 	return TRUE;
@@ -383,7 +379,7 @@ sensitize_widgets (MemoPage *mpage)
 		memo_page_set_info_string (mpage, GTK_STOCK_DIALOG_INFO, tmp);
 		g_free (tmp);
 	} else if (!check_starts_in_the_past (mpage)) {
-		memo_page_set_info_string (mpage, priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, priv->subscriber_info_text);
+		memo_page_set_info_string (mpage, NULL, NULL);
 	}
 
 	/* The list of organizers is set to be non-editable. Otherwise any
@@ -469,7 +465,7 @@ fill_comp_with_recipients (ENameSelector *name_selector, ECalComponent *comp)
 				ENameSelectorModel *model;
 				EContactStore *c_store;
 				GList *books, *l;
-				gchar *uri = e_contact_get (contact, E_CONTACT_BOOK_URI);
+				gchar *uid = e_contact_get (contact, E_CONTACT_BOOK_URI);
 
 				dialog = e_name_selector_peek_dialog (name_selector);
 				model = e_name_selector_dialog_peek_model (dialog);
@@ -477,9 +473,11 @@ fill_comp_with_recipients (ENameSelector *name_selector, ECalComponent *comp)
 				books = e_contact_store_get_books (c_store);
 
 				for (l = books; l; l = l->next) {
-					EBook *b = l->data;
-					if (g_str_equal (uri, e_book_get_uri (b))) {
-						book = b;
+					ESource *source;
+
+					source = e_book_get_source (l->data);
+					if (g_str_equal (uid, e_source_get_uid (source))) {
+						book = l->data;
 						break;
 					}
 				}
@@ -833,8 +831,6 @@ get_widgets (MemoPage *mpage)
 	priv->source_selector = GW ("source");
 #undef GW
 
-	e_util_set_source_combo_box_list (priv->source_selector, "/apps/evolution/memos/sources");
-
 	completion = e_category_completion_new ();
 	gtk_entry_set_completion (GTK_ENTRY (priv->categories), completion);
 	g_object_unref (completion);
@@ -893,7 +889,7 @@ source_changed_cb (ESourceComboBox *source_combo_box,
 		dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
 						 GTK_MESSAGE_WARNING, GTK_BUTTONS_OK,
 						 _("Unable to open memos in '%s'."),
-						 e_source_peek_name (source));
+						 e_source_get_display_name (source));
 		gtk_dialog_run (GTK_DIALOG (dialog));
 		gtk_widget_destroy (dialog);
 	} else {
@@ -919,26 +915,8 @@ static void
 set_subscriber_info_string (MemoPage *mpage,
                             const gchar *backend_address)
 {
-	CompEditor *editor;
-	ECal *client;
-	ESource *source;
-
-	editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (mpage));
-	client = comp_editor_get_client (editor);
-	source = e_cal_get_source (client);
-
-	if (e_source_get_property (source, "subscriber")) {
-		g_free (mpage->priv->subscriber_info_text);
-		/* Translators: This string is used when we are creating a Memo
-		   on behalf of some other user */
-		mpage->priv->subscriber_info_text = g_markup_printf_escaped (_("You are acting on behalf of %s"), backend_address);
-	} else {
-		g_free (mpage->priv->subscriber_info_text);
-		mpage->priv->subscriber_info_text = NULL;
-	}
-
 	if (!check_starts_in_the_past (mpage))
-		memo_page_set_info_string (mpage, mpage->priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, mpage->priv->subscriber_info_text);
+		memo_page_set_info_string (mpage, NULL, NULL);
 }
 
 static void
@@ -1076,13 +1054,11 @@ memo_page_select_organizer (MemoPage *mpage, const gchar *backend_address)
 	CompEditor *editor;
 	CompEditorFlags flags;
 	GList *l;
-	ECal *client;
 	EAccount *def_account;
 	gchar *def_address = NULL;
 	const gchar *default_address;
 	gboolean subscribed_cal = FALSE;
-	ESource *source = NULL;
-	const gchar *user_addr = NULL;
+	const gchar *user_addr;
 
 	def_account = itip_addresses_get_default ();
 	if (def_account && def_account->enabled)
@@ -1090,18 +1066,9 @@ memo_page_select_organizer (MemoPage *mpage, const gchar *backend_address)
 
 	priv = mpage->priv;
 	editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (mpage));
-	client = comp_editor_get_client (editor);
 	flags = comp_editor_get_flags (editor);
 
-	if (client)
-		source = e_cal_get_source (client);
-	if (source)
-		user_addr = e_source_get_property (source, "subscriber");
-
-	if (user_addr)
-		subscribed_cal = TRUE;
-	else
-		user_addr = (backend_address && *backend_address) ? backend_address : NULL;
+	user_addr = (backend_address && *backend_address) ? backend_address : NULL;
 
 	default_address = NULL;
 	if (user_addr)
diff --git a/calendar/gui/dialogs/select-source-dialog.c b/calendar/gui/dialogs/select-source-dialog.c
index 79905d5..5147b67 100644
--- a/calendar/gui/dialogs/select-source-dialog.c
+++ b/calendar/gui/dialogs/select-source-dialog.c
@@ -26,6 +26,7 @@
 #endif
 
 #include <glib/gi18n.h>
+#include <libecal/e-source-calendar.h>
 #include <libedataserverui/e-source-selector-dialog.h>
 #include "select-source-dialog.h"
 
@@ -38,26 +39,23 @@ ESource *
 select_source_dialog (GtkWindow *parent, ECalSourceType obj_type, ESource *except_source)
 {
 	GtkWidget *dialog;
-	ESourceList *source_list;
+	ESourceRegistry *registry;
 	ESource *selected_source = NULL;
-	const gchar *gconf_key;
-	GConfClient *conf_client;
+	const gchar *extension_name;
 	const gchar *icon_name = NULL;
 
 	if (obj_type == E_CAL_SOURCE_TYPE_EVENT)
-		gconf_key = "/apps/evolution/calendar/sources";
+		extension_name = E_SOURCE_EXTENSION_CALENDAR;
 	else if (obj_type == E_CAL_SOURCE_TYPE_TODO)
-		gconf_key = "/apps/evolution/tasks/sources";
-	else if (obj_type == E_CAL_SOURCE_TYPE_JOURNAL)
-                gconf_key = "/apps/evolution/memos/sources";
+		extension_name = E_SOURCE_EXTENSION_TASK_LIST;
+        else if (obj_type == E_CAL_SOURCE_TYPE_JOURNAL)
+		extension_name = E_SOURCE_EXTENSION_MEMO_LIST;
 	else
 		return NULL;
 
-	conf_client = gconf_client_get_default ();
-	source_list = e_source_list_new_for_gconf (conf_client, gconf_key);
-
 	/* create the dialog */
-	dialog = e_source_selector_dialog_new (parent, source_list);
+	registry = e_source_registry_get_default ();
+	dialog = e_source_selector_dialog_new (parent, registry, extension_name);
 
 	if (obj_type == E_CAL_SOURCE_TYPE_EVENT)
 		icon_name = "x-office-calendar";
@@ -72,24 +70,15 @@ select_source_dialog (GtkWindow *parent, ECalSourceType obj_type, ESource *excep
 	if (except_source)
 		g_object_set_data (G_OBJECT (dialog), "except-source", except_source);
 
-	if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) {
-		selected_source = e_source_selector_dialog_peek_primary_selection (E_SOURCE_SELECTOR_DIALOG (dialog));
-		if (selected_source) {
-			gchar *absolute_uri;
-
-			/* set the absolute URI on the source we keep around, since the group
-			   will be unrefed */
-			absolute_uri = e_source_build_absolute_uri (selected_source);
-			e_source_set_absolute_uri (selected_source, (const gchar *) absolute_uri);
+	if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_OK)
+		goto exit;
 
-			g_object_ref (selected_source);
-			g_free (absolute_uri);
-		}
-	} else
-		selected_source = NULL;
+	selected_source = e_source_selector_dialog_peek_primary_selection (
+		E_SOURCE_SELECTOR_DIALOG (dialog));
+	if (selected_source != NULL)
+		g_object_ref (selected_source);
 
-	g_object_unref (conf_client);
-	g_object_unref (source_list);
+exit:
 	gtk_widget_destroy (dialog);
 
 	return selected_source;
diff --git a/calendar/gui/dialogs/task-page.c b/calendar/gui/dialogs/task-page.c
index e56c74e..d4201f6 100644
--- a/calendar/gui/dialogs/task-page.c
+++ b/calendar/gui/dialogs/task-page.c
@@ -83,7 +83,6 @@ struct _TaskPagePrivate {
 	GtkWidget *info_hbox;
 	GtkWidget *info_icon;
 	GtkWidget *info_string;
-	gchar *subscriber_info_text;
 
 	GtkWidget *summary;
 	GtkWidget *summary_label;
@@ -192,8 +191,6 @@ task_page_finalize (GObject *object)
 		priv->deleted_attendees, (GFunc) g_object_unref, NULL);
 	g_ptr_array_free (priv->deleted_attendees, TRUE);
 
-	g_free (priv->subscriber_info_text);
-
 	/* Chain up to parent's finalize() method. */
 	G_OBJECT_CLASS (task_page_parent_class)->finalize (object);
 }
@@ -340,12 +337,11 @@ check_starts_in_the_past (TaskPage *tpage)
 
 	if (start_in_past || due_in_past) {
 		gchar *tmp = g_strconcat ("<b>", start_in_past ? _("Task's start date is in the past") : "",
-			start_in_past && due_in_past ? "\n" : "", due_in_past ? _("Task's due date is in the past") : "", "</b>",
-			priv->subscriber_info_text ? "\n" : "", priv->subscriber_info_text, NULL);
+			start_in_past && due_in_past ? "\n" : "", due_in_past ? _("Task's due date is in the past") : "", "</b>", NULL);
 		task_page_set_info_string (tpage, GTK_STOCK_DIALOG_WARNING, tmp);
 		g_free (tmp);
 	} else {
-		task_page_set_info_string (tpage, priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, priv->subscriber_info_text);
+		task_page_set_info_string (tpage, NULL, NULL);
 	}
 
 	return TRUE;
@@ -383,7 +379,7 @@ sensitize_widgets (TaskPage *tpage)
 		task_page_set_info_string (tpage, GTK_STOCK_DIALOG_INFO, tmp);
 		g_free (tmp);
 	} else if (!check_starts_in_the_past (tpage)) {
-		task_page_set_info_string (tpage, priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, priv->subscriber_info_text);
+		task_page_set_info_string (tpage, NULL, NULL);
 	}
 
 	/* The list of organizers is set to be non-editable. Otherwise any
@@ -1445,7 +1441,6 @@ get_widgets (TaskPage *tpage)
 	gtk_box_pack_start (GTK_BOX (priv->list_box), sw, TRUE, TRUE, 0);
 
 	priv->source_selector = e_builder_get_widget (priv->builder, "source");
-	e_util_set_source_combo_box_list (priv->source_selector, "/apps/evolution/tasks/sources");
 
 	gtk_label_set_mnemonic_widget (GTK_LABEL (priv->calendar_label), priv->source_selector);
 
@@ -1745,7 +1740,7 @@ source_changed_cb (ESourceComboBox *source_combo_box, TaskPage *tpage)
 		dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
 						 GTK_MESSAGE_WARNING, GTK_BUTTONS_OK,
 						 _("Unable to open tasks in '%s'."),
-						 e_source_peek_name (source));
+						 e_source_get_display_name (source));
 		gtk_dialog_run (GTK_DIALOG (dialog));
 		gtk_widget_destroy (dialog);
 	} else {
@@ -1775,26 +1770,8 @@ source_changed_cb (ESourceComboBox *source_combo_box, TaskPage *tpage)
 static void
 set_subscriber_info_string (TaskPage *tpage, const gchar *backend_address)
 {
-	CompEditor *editor;
-	ECal *client;
-	ESource *source;
-
-	editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (tpage));
-	client = comp_editor_get_client (editor);
-	source = e_cal_get_source (client);
-
-	if (e_source_get_property (source, "subscriber")) {
-		g_free (tpage->priv->subscriber_info_text);
-		/* Translators: This string is used when we are creating a Task
-		   on behalf of some other user */
-		tpage->priv->subscriber_info_text = g_markup_printf_escaped (_("You are acting on behalf of %s"), backend_address);
-	} else {
-		g_free (tpage->priv->subscriber_info_text);
-		tpage->priv->subscriber_info_text = NULL;
-	}
-
 	if (!check_starts_in_the_past (tpage))
-		task_page_set_info_string (tpage, tpage->priv->subscriber_info_text ? GTK_STOCK_DIALOG_INFO : NULL, tpage->priv->subscriber_info_text);
+		task_page_set_info_string (tpage, NULL, NULL);
 }
 
 void
@@ -1978,32 +1955,18 @@ static void
 task_page_select_organizer (TaskPage *tpage, const gchar *backend_address)
 {
 	TaskPagePrivate *priv = tpage->priv;
-	CompEditor *editor;
 	GList *l;
 	EAccount *def_account;
 	gchar *def_address = NULL;
 	const gchar *default_address;
 	gboolean subscribed_cal = FALSE;
-	ESource *source = NULL;
-	ECal *client;
 	const gchar *user_addr = NULL;
 
-	editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (tpage));
-	client = comp_editor_get_client (editor);
-
 	def_account = itip_addresses_get_default ();
 	if (def_account && def_account->enabled)
 		def_address = g_strdup_printf("%s <%s>", def_account->id->name, def_account->id->address);
 
-	if (client)
-		source = e_cal_get_source (client);
-	if (source)
-		user_addr = e_source_get_property (source, "subscriber");
-
-	if (user_addr)
-		subscribed_cal = TRUE;
-	else
-		user_addr = (backend_address && *backend_address) ? backend_address : NULL;
+	user_addr = (backend_address && *backend_address) ? backend_address : NULL;
 
 	default_address = NULL;
 	if (user_addr)
diff --git a/calendar/gui/e-cal-component-preview.c b/calendar/gui/e-cal-component-preview.c
index 636e734..be431da 100644
--- a/calendar/gui/e-cal-component-preview.c
+++ b/calendar/gui/e-cal-component-preview.c
@@ -92,7 +92,7 @@ update_comp_info (ECalComponentPreview *preview,
 		gint *sequence = NULL;
 		gint comp_sequence;
 
-		cal_uid = g_strdup (e_source_peek_uid (e_cal_get_source (ecal)));
+		cal_uid = g_strdup (e_source_get_uid (e_cal_get_source (ecal)));
 		e_cal_component_get_uid (comp, &uid);
 		comp_uid = g_strdup (uid);
 		e_cal_component_get_last_modified (comp, &itm);
diff --git a/calendar/gui/e-cal-config.c b/calendar/gui/e-cal-config.c
index 10dc316..c87a3be 100644
--- a/calendar/gui/e-cal-config.c
+++ b/calendar/gui/e-cal-config.c
@@ -25,6 +25,8 @@
 #endif
 
 #include <gtk/gtk.h>
+#include <gconf/gconf-client.h>
+
 #include "e-cal-config.h"
 
 static GObjectClass *ecp_parent_class;
diff --git a/calendar/gui/e-cal-event.c b/calendar/gui/e-cal-event.c
index 7d0a9d1..8d2e6d8 100644
--- a/calendar/gui/e-cal-event.c
+++ b/calendar/gui/e-cal-event.c
@@ -47,8 +47,6 @@ ece_target_free (EEvent *ev, EEventTarget *t)
 		ECalEventTargetBackend *s = (ECalEventTargetBackend *) t;
 		if (s->shell_backend)
 			g_object_unref (s->shell_backend);
-		if (s->source_list)
-			g_object_unref (s->source_list);
 		break; }
 	}
 
@@ -95,12 +93,11 @@ e_cal_event_peek (void)
 }
 
 ECalEventTargetBackend *
-e_cal_event_target_new_module (ECalEvent *ece, EShellBackend *shell_backend, ESourceList *source_list, guint32 flags)
+e_cal_event_target_new_module (ECalEvent *ece, EShellBackend *shell_backend, guint32 flags)
 {
 	ECalEventTargetBackend *t = e_event_target_new (&ece->event, E_CAL_EVENT_TARGET_BACKEND, sizeof (*t));
 
 	t->shell_backend = g_object_ref (shell_backend);
-	t->source_list = g_object_ref (source_list);
 	t->target.mask = ~flags;
 
 	return t;
diff --git a/calendar/gui/e-cal-event.h b/calendar/gui/e-cal-event.h
index 8d72a93..b194207 100644
--- a/calendar/gui/e-cal-event.h
+++ b/calendar/gui/e-cal-event.h
@@ -25,7 +25,6 @@
 #define __E_CAL_EVENT_H__
 
 #include <glib-object.h>
-#include <libedataserver/e-source-list.h>
 
 #include "e-util/e-event.h"
 #include "shell/e-shell-backend.h"
@@ -49,7 +48,6 @@ typedef struct _ECalEventTargetBackend ECalEventTargetBackend;
 struct _ECalEventTargetBackend {
 	EEventTarget target;
 	EShellBackend *shell_backend;
-	ESourceList *source_list;
 };
 
 struct _ECalEvent {
@@ -64,7 +62,7 @@ struct _ECalEventClass {
 
 GType                     e_cal_event_get_type (void);
 ECalEvent*                e_cal_event_peek (void);
-ECalEventTargetBackend* e_cal_event_target_new_module (ECalEvent *ece, EShellBackend *shell_backend, ESourceList *source_list, guint32 flags);
+ECalEventTargetBackend* e_cal_event_target_new_module (ECalEvent *ece, EShellBackend *shell_backend, guint32 flags);
 
 G_END_DECLS
 
diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c
index 0b32987..60a8f23 100644
--- a/calendar/gui/e-cal-model.c
+++ b/calendar/gui/e-cal-model.c
@@ -31,7 +31,9 @@
 #include <glib/gi18n.h>
 #include <libedataserver/e-flag.h>
 #include <libedataserver/e-time-utils.h>
+#include <libedataserver/e-source-selectable.h>
 #include <libecal/e-cal-time-util.h>
+#include <libecal/e-source-calendar.h>
 #include "comp-util.h"
 #include "e-cal-model.h"
 #include "itip-utils.h"
@@ -1544,15 +1546,19 @@ ecm_value_to_string (ETableModel *etm, gint col, gconstpointer value)
 
 typedef struct {
 	const gchar *color;
-	GList *uris;
+	GList *uids;
 } AssignedColorData;
 
 static const gchar *
 ecm_get_color_for_component (ECalModel *model, ECalModelComponent *comp_data)
 {
 	ESource *source;
+	ESourceSelectable *extension;
 	const gchar *color_spec;
+	const gchar *extension_name;
+	const gchar *uid;
 	gint i, first_empty = 0;
+
 	static AssignedColorData assigned_colors[] = {
 		{ "#BECEDD", NULL }, /* 190 206 221     Blue */
 		{ "#E2F0EF", NULL }, /* 226 240 239     Light Blue */
@@ -1568,34 +1574,48 @@ ecm_get_color_for_component (ECalModel *model, ECalModelComponent *comp_data)
 
 	g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL);
 
+	switch (e_cal_get_source_type (comp_data->client)) {
+		case E_CAL_SOURCE_TYPE_EVENT:
+			extension_name = E_SOURCE_EXTENSION_CALENDAR;
+			break;
+		case E_CAL_SOURCE_TYPE_TODO:
+			extension_name = E_SOURCE_EXTENSION_TASK_LIST;
+			break;
+		case E_CAL_SOURCE_TYPE_JOURNAL:
+			extension_name = E_SOURCE_EXTENSION_MEMO_LIST;
+			break;
+		default:
+			g_return_val_if_reached (NULL);
+	}
+
 	source = e_cal_get_source (comp_data->client);
-	color_spec = e_source_peek_color_spec (source);
+	extension = e_source_get_extension (source, extension_name);
+	color_spec = e_source_selectable_get_color (extension);
+
 	if (color_spec != NULL) {
 		g_free (comp_data->color);
 		comp_data->color = g_strdup (color_spec);
 		return comp_data->color;
 	}
 
+	uid = e_source_get_uid (source);
+
 	for (i = 0; i < G_N_ELEMENTS (assigned_colors); i++) {
 		GList *l;
 
-		if (assigned_colors[i].uris == NULL) {
+		if (assigned_colors[i].uids == NULL) {
 			first_empty = i;
 			continue;
 		}
 
-		for (l = assigned_colors[i].uris; l != NULL; l = l->next) {
-			if (!strcmp ((const gchar *) l->data,
-				     e_cal_get_uri (comp_data->client)))
-			{
+		for (l = assigned_colors[i].uids; l != NULL; l = l->next)
+			if (g_strcmp0 (l->data, uid) == 0)
 				return assigned_colors[i].color;
-			}
-		}
 	}
 
 	/* return the first unused color */
-	assigned_colors[first_empty].uris = g_list_append (assigned_colors[first_empty].uris,
-							   g_strdup (e_cal_get_uri (comp_data->client)));
+	assigned_colors[first_empty].uids = g_list_append (
+		assigned_colors[first_empty].uids, g_strdup (uid));
 
 	return assigned_colors[first_empty].color;
 }
@@ -1978,22 +1998,27 @@ e_cal_model_get_client_list (ECalModel *model)
 }
 
 /**
- * e_cal_model_get_client_for_uri:
- * @model: A calendar model.
- * @uri: Uri for the client to get.
+ * e_cal_model_get_client_for_source:
+ * @model: an #ECalModel
+ * @source: an #ESource
  */
 ECal *
-e_cal_model_get_client_for_uri (ECalModel *model, const gchar *uri)
+e_cal_model_get_client_for_source (ECalModel *model,
+                                   ESource *source)
 {
-	GList *l;
+	GList *link;
 
 	g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL);
-	g_return_val_if_fail (uri != NULL, NULL);
+	g_return_val_if_fail (E_IS_SOURCE (source), NULL);
 
-	for (l = model->priv->clients; l != NULL; l = l->next) {
-		ECalModelClient *client_data = (ECalModelClient *) l->data;
+	for (link = model->priv->clients; link != NULL; link = link->next) {
+		ECalModelClient *client_data;
+		ESource *client_source;
+
+		client_data = (ECalModelClient *) link->data;
+		client_source = e_cal_get_source (client_data->client);
 
-		if (!strcmp (uri, e_cal_get_uri (client_data->client)))
+		if (e_source_equal (source, client_source))
 			return client_data->client;
 	}
 
@@ -2645,9 +2670,13 @@ add_new_client (ECalModel *model, ECal *client, gboolean do_query)
 	if (e_cal_get_load_state (client) == E_CAL_LOAD_LOADED) {
 		update_e_cal_view_for_client (model, client_data);
 	} else {
+		ESource *source;
+		const gchar *display_name;
 		gchar *msg;
 
-		msg = g_strdup_printf (_("Opening %s"), e_cal_get_uri (client));
+		source = e_cal_get_source (client);
+		display_name = e_source_get_display_name (source);
+		msg = g_strdup_printf (_("Opening %s"), display_name);
 		e_cal_model_update_status_message (model, msg, -1.0);
 		g_free (msg);
 
diff --git a/calendar/gui/e-cal-model.h b/calendar/gui/e-cal-model.h
index db744d3..c5ba252 100644
--- a/calendar/gui/e-cal-model.h
+++ b/calendar/gui/e-cal-model.h
@@ -250,8 +250,9 @@ ECal *		e_cal_model_get_default_client	(ECalModel *model);
 void		e_cal_model_set_default_client	(ECalModel *model,
 						 ECal *client);
 GList *		e_cal_model_get_client_list	(ECalModel *model);
-ECal *		e_cal_model_get_client_for_uri	(ECalModel *model,
-						 const gchar *uri);
+ECal *		e_cal_model_get_client_for_source
+						(ECalModel *model,
+						 ESource *source);
 void		e_cal_model_add_client		(ECalModel *model,
 						 ECal *client);
 void		e_cal_model_remove_client	(ECalModel *model,
diff --git a/calendar/gui/e-calendar-selector.c b/calendar/gui/e-calendar-selector.c
index 915c970..fd58a50 100644
--- a/calendar/gui/e-calendar-selector.c
+++ b/calendar/gui/e-calendar-selector.c
@@ -21,6 +21,7 @@
 #include "e-calendar-selector.h"
 
 #include <libecal/e-cal.h>
+#include <libecal/e-source-calendar.h>
 #include "e-util/e-selection.h"
 #include "common/authentication.h"
 
@@ -32,7 +33,10 @@ struct _ECalendarSelectorPrivate {
 	gint dummy_value;
 };
 
-static gpointer parent_class;
+G_DEFINE_TYPE (
+	ECalendarSelector,
+	e_calendar_selector,
+	E_TYPE_SOURCE_SELECTOR)
 
 static gboolean
 calendar_selector_update_single_object (ECal *client,
@@ -148,11 +152,10 @@ exit:
 }
 
 static void
-calendar_selector_class_init (ECalendarSelectorClass *class)
+e_calendar_selector_class_init (ECalendarSelectorClass *class)
 {
 	ESourceSelectorClass *source_selector_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (ECalendarSelectorPrivate));
 
 	source_selector_class = E_SOURCE_SELECTOR_CLASS (class);
@@ -160,7 +163,7 @@ calendar_selector_class_init (ECalendarSelectorClass *class)
 }
 
 static void
-calendar_selector_init (ECalendarSelector *selector)
+e_calendar_selector_init (ECalendarSelector *selector)
 {
 	selector->priv = E_CALENDAR_SELECTOR_GET_PRIVATE (selector);
 
@@ -171,39 +174,13 @@ calendar_selector_init (ECalendarSelector *selector)
 	e_drag_dest_add_calendar_targets (GTK_WIDGET (selector));
 }
 
-GType
-e_calendar_selector_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0)) {
-		const GTypeInfo type_info = {
-			sizeof (ECalendarSelectorClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) calendar_selector_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,  /* class_data */
-			sizeof (ECalendarSelector),
-			0,     /* n_preallocs */
-			(GInstanceInitFunc) calendar_selector_init,
-			NULL   /* value_table */
-		};
-
-		type = g_type_register_static (
-			E_TYPE_SOURCE_SELECTOR, "ECalendarSelector",
-			&type_info, 0);
-	}
-
-	return type;
-}
-
 GtkWidget *
-e_calendar_selector_new (ESourceList *source_list)
+e_calendar_selector_new (ESourceRegistry *registry)
 {
-	g_return_val_if_fail (E_IS_SOURCE_LIST (source_list), NULL);
+	g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
 
 	return g_object_new (
 		E_TYPE_CALENDAR_SELECTOR,
-		"source-list", source_list, NULL);
+		"extension-name", E_SOURCE_EXTENSION_CALENDAR,
+		"registry", registry, NULL);
 }
diff --git a/calendar/gui/e-calendar-selector.h b/calendar/gui/e-calendar-selector.h
index 65d9a2f..d8aec73 100644
--- a/calendar/gui/e-calendar-selector.h
+++ b/calendar/gui/e-calendar-selector.h
@@ -21,7 +21,6 @@
 #ifndef E_CALENDAR_SELECTOR_H
 #define E_CALENDAR_SELECTOR_H
 
-#include <libedataserver/e-source-list.h>
 #include <libedataserverui/e-source-selector.h>
 
 /* Standard GObject macros */
@@ -59,7 +58,7 @@ struct _ECalendarSelectorClass {
 };
 
 GType		e_calendar_selector_get_type	(void);
-GtkWidget *	e_calendar_selector_new		(ESourceList *source_list);
+GtkWidget *	e_calendar_selector_new		(ESourceRegistry *registry);
 
 G_END_DECLS
 
diff --git a/calendar/gui/e-calendar-view.c b/calendar/gui/e-calendar-view.c
index 8134dd2..a2ba301 100644
--- a/calendar/gui/e-calendar-view.c
+++ b/calendar/gui/e-calendar-view.c
@@ -1438,7 +1438,11 @@ e_calendar_view_new_appointment_for (ECalendarView *cal_view,
 	if (e_cal_is_read_only (default_client, &readonly, NULL) && readonly) {
 		GtkWidget *widget;
 
-		widget = e_alert_dialog_new_for_args (parent, "calendar:prompt-read-only-cal", e_source_peek_name (e_cal_get_source (default_client)), NULL);
+		widget = e_alert_dialog_new_for_args (
+			parent, "calendar:prompt-read-only-cal",
+			e_source_get_display_name (
+			e_cal_get_source (default_client)),
+			NULL);
 
 		g_signal_connect ((GtkDialog *)widget, "response", G_CALLBACK (gtk_widget_destroy),
 				  widget);
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c
index b0a2683..27de62c 100644
--- a/calendar/gui/e-day-view.c
+++ b/calendar/gui/e-day-view.c
@@ -7802,7 +7802,7 @@ e_day_view_on_drag_data_get (GtkWidget          *widget,
 	comp_str = icalcomponent_as_ical_string_r (vcal);
 	if (comp_str) {
 		ESource *source = e_cal_get_source (event->comp_data->client);
-		const gchar *source_uid = e_source_peek_uid (source);
+		const gchar *source_uid = e_source_get_uid (source);
 		GdkAtom target;
 		gchar *tmp;
 
diff --git a/calendar/gui/e-meeting-list-view.c b/calendar/gui/e-meeting-list-view.c
index 532a061..e3239b9 100644
--- a/calendar/gui/e-meeting-list-view.c
+++ b/calendar/gui/e-meeting-list-view.c
@@ -767,7 +767,7 @@ process_section (EMeetingListView *view, GList *destinations, icalparameter_role
 				ENameSelectorModel *model;
 				EContactStore *c_store;
 				GList *books, *l;
-				gchar *uri = e_contact_get (contact, E_CONTACT_BOOK_URI);
+				gchar *uid = e_contact_get (contact, E_CONTACT_BOOK_URI);
 
 				dialog = e_name_selector_peek_dialog (view->priv->name_selector);
 				model = e_name_selector_dialog_peek_model (dialog);
@@ -775,9 +775,12 @@ process_section (EMeetingListView *view, GList *destinations, icalparameter_role
 				books = e_contact_store_get_books (c_store);
 
 				for (l = books; l; l = l->next) {
-					EBook *b = l->data;
-					if (g_str_equal (uri, e_book_get_uri (b))) {
-						book = b;
+					ESource *source;
+
+					source = e_book_get_source (l->data);
+
+					if (g_strcmp0 (uid, e_source_get_uid (source)) == 0) {
+						book = E_BOOK (l->data);
 						break;
 					}
 				}
diff --git a/calendar/gui/e-meeting-store.c b/calendar/gui/e-meeting-store.c
index ccf8fe2..67b6e8b 100644
--- a/calendar/gui/e-meeting-store.c
+++ b/calendar/gui/e-meeting-store.c
@@ -1713,15 +1713,20 @@ soup_authenticate (SoupSession *session,
                    SoupMessage *msg,
                    SoupAuth *auth,
                    gboolean retrying,
-                   gpointer data)
+                   EMeetingStoreQueueData *qdata)
 {
 	SoupURI *suri;
+	ECal *cal;
+	ESource *source;
 	const gchar *orig_uri;
 	gboolean tried = FALSE;
 
 	g_return_if_fail (msg != NULL);
 	g_return_if_fail (auth != NULL);
 
+	cal = e_meeting_store_get_client (qdata->store);
+	source = e_cal_get_source (cal);
+
 	orig_uri = g_object_get_data (G_OBJECT (msg), "orig-uri");
 	g_return_if_fail (orig_uri != NULL);
 
@@ -1741,7 +1746,7 @@ soup_authenticate (SoupSession *session,
 		} else {
 			gchar *password;
 
-			password = e_passwords_get_password ("Calendar", orig_uri);
+			password = e_passwords_get_password (source);
 			if (password) {
 				soup_auth_authenticate (auth, suri->user, password);
 				tried = TRUE;
@@ -1776,8 +1781,8 @@ soup_authenticate (SoupSession *session,
 		}
 
 		password = e_passwords_ask_password (
-			_("Enter password"), "Calendar", orig_uri,
-			description->str, E_PASSWORDS_REMEMBER_FOREVER |
+			source, "", description->str,
+			E_PASSWORDS_REMEMBER_FOREVER |
 			E_PASSWORDS_SECRET | E_PASSWORDS_ONLINE |
 			(retrying ? E_PASSWORDS_REPROMPT : 0),
 			&remember, NULL);
@@ -1868,7 +1873,9 @@ download_with_libsoup (const gchar *uri, EMeetingStoreQueueData *qdata)
 	g_object_set_data_full (G_OBJECT (msg), "orig-uri", g_strdup (uri), g_free);
 
 	session = soup_session_async_new ();
-	g_signal_connect (session, "authenticate", G_CALLBACK (soup_authenticate), NULL);
+	g_signal_connect (
+		session, "authenticate",
+		G_CALLBACK (soup_authenticate), qdata);
 
 	proxy = e_proxy_new ();
 	e_proxy_setup_proxy (proxy);
diff --git a/calendar/gui/e-memo-list-selector.c b/calendar/gui/e-memo-list-selector.c
index 8e0ae7c..d279b21 100644
--- a/calendar/gui/e-memo-list-selector.c
+++ b/calendar/gui/e-memo-list-selector.c
@@ -22,6 +22,7 @@
 
 #include <string.h>
 #include <libecal/e-cal.h>
+#include <libecal/e-source-calendar.h>
 #include "e-util/e-selection.h"
 #include "calendar/common/authentication.h"
 #include "calendar/gui/comp-util.h"
@@ -34,7 +35,10 @@ struct _EMemoListSelectorPrivate {
 	gint dummy_value;
 };
 
-static gpointer parent_class;
+G_DEFINE_TYPE (
+	EMemoListSelector,
+	e_memo_list_selector,
+	E_TYPE_SOURCE_SELECTOR)
 
 static gboolean
 memo_list_selector_update_single_object (ECal *client,
@@ -103,8 +107,8 @@ memo_list_selector_process_data (ESourceSelector *selector,
                                  icalcomponent *icalcomp,
                                  GdkDragAction action)
 {
-	ESourceList *source_list;
 	ESource *source;
+	ESourceRegistry *registry;
 	icalcomponent *tmp_icalcomp = NULL;
 	const gchar *uid;
 	gchar *old_uid = NULL;
@@ -142,10 +146,10 @@ memo_list_selector_process_data (ESourceSelector *selector,
 	if (!success || action != GDK_ACTION_MOVE)
 		goto exit;
 
-	source_list = e_source_selector_get_source_list (selector);
-	source = e_source_list_peek_source_by_uid (source_list, source_uid);
+	registry = e_source_selector_get_registry (selector);
+	source = e_source_registry_lookup_by_uid (registry, source_uid);
 
-	if (!E_IS_SOURCE (source) || e_source_get_readonly (source))
+	if (!E_IS_SOURCE (source))
 		goto exit;
 
 	client = e_auth_new_cal_from_source (source, E_CAL_SOURCE_TYPE_JOURNAL);
@@ -219,11 +223,10 @@ exit:
 }
 
 static void
-memo_list_selector_class_init (EMemoListSelectorClass *class)
+e_memo_list_selector_class_init (EMemoListSelectorClass *class)
 {
 	ESourceSelectorClass *source_selector_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (EMemoListSelectorPrivate));
 
 	source_selector_class = E_SOURCE_SELECTOR_CLASS (class);
@@ -231,7 +234,7 @@ memo_list_selector_class_init (EMemoListSelectorClass *class)
 }
 
 static void
-memo_list_selector_init (EMemoListSelector *selector)
+e_memo_list_selector_init (EMemoListSelector *selector)
 {
 	selector->priv = E_MEMO_LIST_SELECTOR_GET_PRIVATE (selector);
 
@@ -242,39 +245,13 @@ memo_list_selector_init (EMemoListSelector *selector)
 	e_drag_dest_add_calendar_targets (GTK_WIDGET (selector));
 }
 
-GType
-e_memo_list_selector_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0)) {
-		const GTypeInfo type_info = {
-			sizeof (EMemoListSelectorClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) memo_list_selector_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,  /* class_data */
-			sizeof (EMemoListSelector),
-			0,     /* n_preallocs */
-			(GInstanceInitFunc) memo_list_selector_init,
-			NULL   /* value_table */
-		};
-
-		type = g_type_register_static (
-			E_TYPE_SOURCE_SELECTOR, "EMemoListSelector",
-			&type_info, 0);
-	}
-
-	return type;
-}
-
 GtkWidget *
-e_memo_list_selector_new (ESourceList *source_list)
+e_memo_list_selector_new (ESourceRegistry *registry)
 {
-	g_return_val_if_fail (E_IS_SOURCE_LIST (source_list), NULL);
+	g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
 
 	return g_object_new (
 		E_TYPE_MEMO_LIST_SELECTOR,
-		"source-list", source_list, NULL);
+		"extension-name", E_SOURCE_EXTENSION_MEMO_LIST,
+		"registry", registry, NULL);
 }
diff --git a/calendar/gui/e-memo-list-selector.h b/calendar/gui/e-memo-list-selector.h
index c10cff2..62dc0e1 100644
--- a/calendar/gui/e-memo-list-selector.h
+++ b/calendar/gui/e-memo-list-selector.h
@@ -26,7 +26,6 @@
 #ifndef E_MEMO_LIST_SELECTOR_H
 #define E_MEMO_LIST_SELECTOR_H
 
-#include <libedataserver/e-source-list.h>
 #include <libedataserverui/e-source-selector.h>
 
 /* Standard GObject macros */
@@ -64,7 +63,7 @@ struct _EMemoListSelectorClass {
 };
 
 GType		e_memo_list_selector_get_type	(void);
-GtkWidget *	e_memo_list_selector_new	(ESourceList *source_list);
+GtkWidget *	e_memo_list_selector_new	(ESourceRegistry *registry);
 
 G_END_DECLS
 
diff --git a/calendar/gui/e-task-list-selector.c b/calendar/gui/e-task-list-selector.c
index 317d7ca..ebbbe8d 100644
--- a/calendar/gui/e-task-list-selector.c
+++ b/calendar/gui/e-task-list-selector.c
@@ -22,6 +22,7 @@
 
 #include <string.h>
 #include <libecal/e-cal.h>
+#include <libecal/e-source-calendar.h>
 #include "e-util/e-selection.h"
 #include "calendar/common/authentication.h"
 #include "calendar/gui/comp-util.h"
@@ -34,7 +35,10 @@ struct _ETaskListSelectorPrivate {
 	gint dummy_value;
 };
 
-static gpointer parent_class;
+G_DEFINE_TYPE (
+	ETaskListSelector,
+	e_task_list_selector,
+	E_TYPE_SOURCE_SELECTOR)
 
 static gboolean
 task_list_selector_update_single_object (ECal *client,
@@ -104,8 +108,8 @@ task_list_selector_process_data (ESourceSelector *selector,
                                  icalcomponent *icalcomp,
                                  GdkDragAction action)
 {
-	ESourceList *source_list;
 	ESource *source;
+	ESourceRegistry *registry;
 	icalcomponent *tmp_icalcomp = NULL;
 	const gchar *uid;
 	gchar *old_uid = NULL;
@@ -143,10 +147,10 @@ task_list_selector_process_data (ESourceSelector *selector,
 	if (!success || action != GDK_ACTION_MOVE)
 		goto exit;
 
-	source_list = e_source_selector_get_source_list (selector);
-	source = e_source_list_peek_source_by_uid (source_list, source_uid);
+	registry = e_source_selector_get_registry (selector);
+	source = e_source_registry_lookup_by_uid (registry, source_uid);
 
-	if (!E_IS_SOURCE (source) || e_source_get_readonly (source))
+	if (!E_IS_SOURCE (source))
 		goto exit;
 
 	client = e_auth_new_cal_from_source (source, E_CAL_SOURCE_TYPE_TODO);
@@ -220,11 +224,10 @@ exit:
 }
 
 static void
-task_list_selector_class_init (ETaskListSelectorClass *class)
+e_task_list_selector_class_init (ETaskListSelectorClass *class)
 {
 	ESourceSelectorClass *source_selector_class;
 
-	parent_class = g_type_class_peek_parent (class);
 	g_type_class_add_private (class, sizeof (ETaskListSelectorPrivate));
 
 	source_selector_class = E_SOURCE_SELECTOR_CLASS (class);
@@ -232,7 +235,7 @@ task_list_selector_class_init (ETaskListSelectorClass *class)
 }
 
 static void
-task_list_selector_init (ETaskListSelector *selector)
+e_task_list_selector_init (ETaskListSelector *selector)
 {
 	selector->priv = E_TASK_LIST_SELECTOR_GET_PRIVATE (selector);
 
@@ -243,39 +246,13 @@ task_list_selector_init (ETaskListSelector *selector)
 	e_drag_dest_add_calendar_targets (GTK_WIDGET (selector));
 }
 
-GType
-e_task_list_selector_get_type (void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY (type == 0)) {
-		const GTypeInfo type_info = {
-			sizeof (ETaskListSelectorClass),
-			(GBaseInitFunc) NULL,
-			(GBaseFinalizeFunc) NULL,
-			(GClassInitFunc) task_list_selector_class_init,
-			(GClassFinalizeFunc) NULL,
-			NULL,  /* class_data */
-			sizeof (ETaskListSelector),
-			0,     /* n_preallocs */
-			(GInstanceInitFunc) task_list_selector_init,
-			NULL   /* value_table */
-		};
-
-		type = g_type_register_static (
-			E_TYPE_SOURCE_SELECTOR, "ETaskListSelector",
-			&type_info, 0);
-	}
-
-	return type;
-}
-
 GtkWidget *
-e_task_list_selector_new (ESourceList *source_list)
+e_task_list_selector_new (ESourceRegistry *registry)
 {
-	g_return_val_if_fail (E_IS_SOURCE_LIST (source_list), NULL);
+	g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
 
 	return g_object_new (
 		E_TYPE_TASK_LIST_SELECTOR,
-		"source-list", source_list, NULL);
+		"extension-name", E_SOURCE_EXTENSION_TASK_LIST,
+		"registry", registry, NULL);
 }
diff --git a/calendar/gui/e-task-list-selector.h b/calendar/gui/e-task-list-selector.h
index 847a221..735611a 100644
--- a/calendar/gui/e-task-list-selector.h
+++ b/calendar/gui/e-task-list-selector.h
@@ -26,7 +26,6 @@
 #ifndef E_TASK_LIST_SELECTOR_H
 #define E_TASK_LIST_SELECTOR_H
 
-#include <libedataserver/e-source-list.h>
 #include <libedataserverui/e-source-selector.h>
 
 /* Standard GObject macros */
@@ -64,7 +63,7 @@ struct _ETaskListSelectorClass {
 };
 
 GType		e_task_list_selector_get_type	(void);
-GtkWidget *	e_task_list_selector_new	(ESourceList *source_list);
+GtkWidget *	e_task_list_selector_new	(ESourceRegistry *registry);
 
 G_END_DECLS
 



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