[evolution/account-mgmt: 20/54] Adapt calendar/gui to the new ESource API.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/account-mgmt: 20/54] Adapt calendar/gui to the new ESource API.
- Date: Tue, 24 Apr 2012 23:46:34 +0000 (UTC)
commit d5dc2ecd263100f68a8c9cef913e90f988b1fe25
Author: Matthew Barnes <mbarnes redhat com>
Date: Mon Dec 13 16:05:32 2010 -0500
Adapt calendar/gui to the new ESource API.
calendar/alarm-notify/config-data.h | 1 -
calendar/gui/dialogs/Makefile.am | 3 -
calendar/gui/dialogs/alarm-dialog.c | 7 +-
calendar/gui/dialogs/alarm-dialog.h | 2 +
calendar/gui/dialogs/alarm-list-dialog.c | 13 +-
calendar/gui/dialogs/alarm-list-dialog.h | 5 +-
calendar/gui/dialogs/calendar-setup.c | 717 ---------------------------
calendar/gui/dialogs/calendar-setup.h | 44 --
calendar/gui/dialogs/comp-editor.c | 36 +-
calendar/gui/dialogs/copy-source-dialog.c | 10 +-
calendar/gui/dialogs/copy-source-dialog.h | 3 +-
calendar/gui/dialogs/e-delegate-dialog.c | 11 +-
calendar/gui/dialogs/e-delegate-dialog.h | 5 +-
calendar/gui/dialogs/e-send-options-utils.c | 60 ++-
calendar/gui/dialogs/e-send-options-utils.h | 2 +-
calendar/gui/dialogs/event-editor.c | 19 +-
calendar/gui/dialogs/event-page.c | 147 +++---
calendar/gui/dialogs/event-page.ui | 2 +
calendar/gui/dialogs/memo-page.c | 148 +++---
calendar/gui/dialogs/memo-page.ui | 2 +
calendar/gui/dialogs/select-source-dialog.c | 52 +--
calendar/gui/dialogs/select-source-dialog.h | 3 +-
calendar/gui/dialogs/task-editor.c | 89 ++--
calendar/gui/dialogs/task-page.c | 146 +++---
calendar/gui/dialogs/task-page.ui | 4 +-
calendar/gui/e-cal-config.c | 2 +
calendar/gui/e-cal-event.c | 4 -
calendar/gui/e-cal-event.h | 4 -
calendar/gui/e-cal-model-calendar.c | 16 +-
calendar/gui/e-cal-model-calendar.h | 2 +-
calendar/gui/e-cal-model-memos.c | 9 +-
calendar/gui/e-cal-model-memos.h | 2 +-
calendar/gui/e-cal-model-tasks.c | 8 +-
calendar/gui/e-cal-model-tasks.h | 2 +-
calendar/gui/e-cal-model.c | 134 ++++--
calendar/gui/e-cal-model.h | 8 +-
calendar/gui/e-cal-source-config.c | 16 +-
calendar/gui/e-calendar-selector.c | 33 +-
calendar/gui/e-calendar-selector.h | 3 +-
calendar/gui/e-calendar-view.c | 63 ++-
calendar/gui/e-day-view.c | 75 +++-
calendar/gui/e-meeting-list-view.c | 17 +-
calendar/gui/e-meeting-store.c | 37 +-
calendar/gui/e-memo-list-selector.c | 57 ++-
calendar/gui/e-memo-list-selector.h | 3 +-
calendar/gui/e-task-list-selector.c | 57 ++-
calendar/gui/e-task-list-selector.h | 3 +-
calendar/gui/e-task-table.c | 4 +-
calendar/gui/e-week-view.c | 16 +-
calendar/gui/gnome-cal.c | 63 +++-
calendar/gui/gnome-cal.h | 5 +-
calendar/gui/itip-utils.c | 285 ++++++++----
calendar/gui/itip-utils.h | 27 +-
53 files changed, 1101 insertions(+), 1385 deletions(-)
---
diff --git a/calendar/alarm-notify/config-data.h b/calendar/alarm-notify/config-data.h
index 421ced5..8eb0cf8 100644
--- a/calendar/alarm-notify/config-data.h
+++ b/calendar/alarm-notify/config-data.h
@@ -28,7 +28,6 @@
#include <libical/ical.h>
#include <libecal/e-cal-client.h>
-#include <libedataserver/e-source-list.h>
icaltimezone * config_data_get_timezone (void);
gboolean config_data_get_24_hour_format (void);
diff --git a/calendar/gui/dialogs/Makefile.am b/calendar/gui/dialogs/Makefile.am
index b7235ed..02af20b 100644
--- a/calendar/gui/dialogs/Makefile.am
+++ b/calendar/gui/dialogs/Makefile.am
@@ -24,7 +24,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/alarm-dialog.c b/calendar/gui/dialogs/alarm-dialog.c
index 065d11b..c8670d2 100644
--- a/calendar/gui/dialogs/alarm-dialog.c
+++ b/calendar/gui/dialogs/alarm-dialog.c
@@ -53,6 +53,8 @@ typedef struct {
/* The client */
ECalClient *cal_client;
+ ESourceRegistry *registry;
+
/* Toplevel */
GtkWidget *toplevel;
@@ -911,7 +913,7 @@ setup_select_names (Dialog *dialog)
ENameSelectorModel *name_selector_model;
ENameSelectorDialog *name_selector_dialog;
- dialog->name_selector = e_name_selector_new ();
+ dialog->name_selector = e_name_selector_new (dialog->registry);
e_name_selector_load_books (dialog->name_selector);
name_selector_model = e_name_selector_peek_model (dialog->name_selector);
@@ -1216,6 +1218,7 @@ init_widgets (Dialog *dialog)
gboolean
alarm_dialog_run (GtkWidget *parent,
+ ESourceRegistry *registry,
ECalClient *cal_client,
ECalComponentAlarm *alarm)
{
@@ -1223,10 +1226,12 @@ alarm_dialog_run (GtkWidget *parent,
GtkWidget *container;
gint response_id;
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), FALSE);
g_return_val_if_fail (alarm != NULL, FALSE);
dialog.alarm = alarm;
dialog.cal_client = cal_client;
+ dialog.registry = registry;
dialog.builder = gtk_builder_new ();
e_load_ui_builder_definition (dialog.builder, "alarm-dialog.ui");
diff --git a/calendar/gui/dialogs/alarm-dialog.h b/calendar/gui/dialogs/alarm-dialog.h
index 42c72d6..6e6d658 100644
--- a/calendar/gui/dialogs/alarm-dialog.h
+++ b/calendar/gui/dialogs/alarm-dialog.h
@@ -32,10 +32,12 @@
#include <libecal/e-cal-client.h>
#include <libecal/e-cal-component.h>
+#include <libedataserver/e-source-registry.h>
G_BEGIN_DECLS
gboolean alarm_dialog_run (GtkWidget *parent,
+ ESourceRegistry *registry,
ECalClient *cal_client,
ECalComponentAlarm *alarm);
diff --git a/calendar/gui/dialogs/alarm-list-dialog.c b/calendar/gui/dialogs/alarm-list-dialog.c
index 997f85a..5c318c0 100644
--- a/calendar/gui/dialogs/alarm-list-dialog.c
+++ b/calendar/gui/dialogs/alarm-list-dialog.c
@@ -43,6 +43,7 @@
typedef struct {
GtkBuilder *builder;
+ ESourceRegistry *registry;
/* The client */
ECalClient *cal_client;
@@ -126,7 +127,7 @@ add_clicked_cb (GtkButton *button,
icalproperty_set_x_name (icalprop, "X-EVOLUTION-NEEDS-DESCRIPTION");
icalcomponent_add_property (icalcomp, icalprop);
- if (alarm_dialog_run (dialog->toplevel, dialog->cal_client, alarm)) {
+ if (alarm_dialog_run (dialog->toplevel, dialog->registry, dialog->cal_client, alarm)) {
e_alarm_list_append (dialog->list_store, &iter, alarm);
gtk_tree_selection_select_iter (gtk_tree_view_get_selection (view), &iter);
} else {
@@ -159,7 +160,7 @@ edit_clicked_cb (GtkButton *button,
alarm = (ECalComponentAlarm *) e_alarm_list_get_alarm (dialog->list_store, &iter);
path = gtk_tree_model_get_path (GTK_TREE_MODEL (dialog->list_store), &iter);
- if (alarm_dialog_run (dialog->toplevel, dialog->cal_client, alarm)) {
+ if (alarm_dialog_run (dialog->toplevel, dialog->registry, dialog->cal_client, alarm)) {
gtk_tree_selection_select_iter (gtk_tree_view_get_selection (view), &iter);
gtk_tree_model_row_changed (GTK_TREE_MODEL (dialog->list_store), path, &iter);
}
@@ -265,6 +266,7 @@ init_widgets (Dialog *dialog)
gboolean
alarm_list_dialog_run (GtkWidget *parent,
+ ESourceRegistry *registry,
ECalClient *cal_client,
EAlarmList *list_store)
{
@@ -272,6 +274,9 @@ alarm_list_dialog_run (GtkWidget *parent,
GtkWidget *container;
gint response_id;
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), FALSE);
+
+ dialog.registry = registry;
dialog.cal_client = cal_client;
dialog.list_store = list_store;
@@ -312,12 +317,14 @@ alarm_list_dialog_run (GtkWidget *parent,
}
GtkWidget *
-alarm_list_dialog_peek (ECalClient *cal_client,
+alarm_list_dialog_peek (ESourceRegistry *registry,
+ ECalClient *cal_client,
EAlarmList *list_store)
{
Dialog *dialog;
dialog = (Dialog *) g_new (Dialog, 1);
+ dialog->registry = registry;
dialog->cal_client = cal_client;
dialog->list_store = list_store;
diff --git a/calendar/gui/dialogs/alarm-list-dialog.h b/calendar/gui/dialogs/alarm-list-dialog.h
index 5746664..1717d12 100644
--- a/calendar/gui/dialogs/alarm-list-dialog.h
+++ b/calendar/gui/dialogs/alarm-list-dialog.h
@@ -32,14 +32,17 @@
#include <libecal/e-cal-client.h>
#include <libecal/e-cal-component.h>
+#include <libedataserver/e-source-registry.h>
#include "../e-alarm-list.h"
G_BEGIN_DECLS
gboolean alarm_list_dialog_run (GtkWidget *parent,
+ ESourceRegistry *registry,
ECalClient *cal_client,
EAlarmList *list_store);
-GtkWidget * alarm_list_dialog_peek (ECalClient *cal_client,
+GtkWidget * alarm_list_dialog_peek (ESourceRegistry *registry,
+ ECalClient *cal_client,
EAlarmList *list_store);
void alarm_list_dialog_set_client (GtkWidget *dlg_box,
ECalClient *cal_client);
diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c
index 033d80a..fd12108 100644
--- a/calendar/gui/dialogs/comp-editor.c
+++ b/calendar/gui/dialogs/comp-editor.c
@@ -479,6 +479,8 @@ save_comp (CompEditor *editor)
CompEditorPrivate *priv;
CompEditorFlags flags;
ECalComponent *clone;
+ ESourceRegistry *registry;
+ EShell *shell;
GList *l;
gboolean result;
GError *error = NULL;
@@ -493,6 +495,9 @@ save_comp (CompEditor *editor)
return TRUE;
flags = comp_editor_get_flags (editor);
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
/* Stop listening because we are about to change things */
if (priv->view) {
@@ -526,8 +531,8 @@ save_comp (CompEditor *editor)
/* If we are not the organizer, we don't update the sequence number */
if (!e_cal_component_has_organizer (clone) ||
- itip_organizer_is_user (clone, priv->cal_client) ||
- itip_sentby_is_user (clone, priv->cal_client))
+ itip_organizer_is_user (registry, clone, priv->cal_client) ||
+ itip_sentby_is_user (registry, clone, priv->cal_client))
e_cal_component_commit_sequence (clone);
else
e_cal_component_abort_sequence (clone);
@@ -581,8 +586,8 @@ save_comp (CompEditor *editor)
if (priv->mod == CALOBJ_MOD_THIS) {
if (result && ((flags & COMP_EDITOR_DELEGATE) ||
!e_cal_component_has_organizer (clone) ||
- itip_organizer_is_user (clone, priv->cal_client) ||
- itip_sentby_is_user (clone, priv->cal_client)))
+ itip_organizer_is_user (registry, clone, priv->cal_client) ||
+ itip_sentby_is_user (registry, clone, priv->cal_client)))
e_cal_component_commit_sequence (clone);
else
e_cal_component_abort_sequence (clone);
@@ -679,6 +684,8 @@ save_comp_with_send (CompEditor *editor)
{
CompEditorPrivate *priv;
CompEditorFlags flags;
+ ESourceRegistry *registry;
+ EShell *shell;
gboolean send, delegated, only_new_attendees = FALSE;
gboolean delegate;
gboolean strip_alarms = TRUE;
@@ -686,6 +693,10 @@ save_comp_with_send (CompEditor *editor)
priv = editor->priv;
flags = comp_editor_get_flags (editor);
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
+
send = priv->changed && priv->needs_send;
delegate = flags & COMP_EDITOR_DELEGATE;
@@ -715,8 +726,8 @@ save_comp_with_send (CompEditor *editor)
(only_new_attendees ?
COMP_EDITOR_SEND_TO_NEW_ATTENDEES_ONLY : 0));
- if ((itip_organizer_is_user (priv->comp, priv->cal_client) ||
- itip_sentby_is_user (priv->comp, priv->cal_client))) {
+ if ((itip_organizer_is_user (registry, priv->comp, priv->cal_client) ||
+ itip_sentby_is_user (registry, priv->comp, priv->cal_client))) {
if (e_cal_component_get_vtype (priv->comp) == E_CAL_COMPONENT_JOURNAL)
return comp_editor_send_comp (
editor, E_CAL_COMPONENT_METHOD_PUBLISH,
@@ -1332,6 +1343,7 @@ static void
comp_editor_set_shell (CompEditor *editor,
EShell *shell)
{
+ g_return_if_fail (E_IS_SHELL (shell));
g_return_if_fail (editor->priv->shell == NULL);
editor->priv->shell = shell;
@@ -3203,6 +3215,8 @@ real_send_comp (CompEditor *editor,
{
CompEditorPrivate *priv;
CompEditorFlags flags;
+ EShell *shell;
+ ESourceRegistry *registry;
ECalComponent *send_comp = NULL;
gchar *address = NULL;
GSList *users = NULL;
@@ -3212,6 +3226,9 @@ real_send_comp (CompEditor *editor,
priv = editor->priv;
flags = comp_editor_get_flags (editor);
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
if (priv->mod == CALOBJ_MOD_ALL && e_cal_component_is_instance (priv->comp)) {
/* Ensure we send the master object, not the instance only */
@@ -3240,7 +3257,8 @@ real_send_comp (CompEditor *editor,
/* The user updates the delegated status to the Organizer,
* so remove all other attendees. */
if (flags & COMP_EDITOR_DELEGATE) {
- address = itip_get_comp_attendee (send_comp, priv->cal_client);
+ address = itip_get_comp_attendee (
+ registry, send_comp, priv->cal_client);
if (address)
set_attendees_for_delegation (send_comp, address, method);
@@ -3250,7 +3268,7 @@ real_send_comp (CompEditor *editor,
e_client_check_capability (E_CLIENT (priv->cal_client),
CAL_STATIC_CAPABILITY_CREATE_MESSAGES)) {
if (itip_send_comp (
- method, send_comp, priv->cal_client,
+ registry, method, send_comp, priv->cal_client,
NULL, NULL, users, strip_alarms,
priv->flags & COMP_EDITOR_SEND_TO_NEW_ATTENDEES_ONLY)) {
g_object_unref (send_comp);
@@ -3280,7 +3298,7 @@ real_send_comp (CompEditor *editor,
}
if (itip_send_comp (
- method, send_comp, priv->cal_client,
+ registry, method, send_comp, priv->cal_client,
NULL, mime_attach_list, users, strip_alarms,
priv->flags & COMP_EDITOR_SEND_TO_NEW_ATTENDEES_ONLY)) {
gboolean saved = save_comp (editor);
diff --git a/calendar/gui/dialogs/copy-source-dialog.c b/calendar/gui/dialogs/copy-source-dialog.c
index 4b483db..21b8608 100644
--- a/calendar/gui/dialogs/copy-source-dialog.c
+++ b/calendar/gui/dialogs/copy-source-dialog.c
@@ -198,7 +198,6 @@ orig_source_opened_cb (GObject *source_object,
e_client_utils_open_new (
csdd->selected_source, csdd->obj_type, FALSE, NULL,
- e_client_utils_authenticate_handler, csdd->parent,
dest_source_opened_cb, csdd);
}
@@ -218,8 +217,8 @@ copy_source (const CopySourceDialogData *const_csdd)
csdd->obj_type = const_csdd->obj_type;
csdd->selected_source = g_object_ref (const_csdd->selected_source);
- e_client_utils_open_new (csdd->orig_source, csdd->obj_type, FALSE, NULL,
- e_client_utils_authenticate_handler, csdd->parent,
+ e_client_utils_open_new (
+ csdd->orig_source, csdd->obj_type, FALSE, NULL,
orig_source_opened_cb, csdd);
}
@@ -231,11 +230,13 @@ copy_source (const CopySourceDialogData *const_csdd)
*/
void
copy_source_dialog (GtkWindow *parent,
+ ESourceRegistry *registry,
ESource *source,
ECalClientSourceType obj_type)
{
CopySourceDialogData csdd;
+ g_return_if_fail (E_IS_SOURCE_REGISTRY (registry));
g_return_if_fail (E_IS_SOURCE (source));
g_return_if_fail (obj_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS ||
obj_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS ||
@@ -249,7 +250,8 @@ copy_source_dialog (GtkWindow *parent,
obj_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS ? E_CLIENT_SOURCE_TYPE_MEMOS :
E_CLIENT_SOURCE_TYPE_LAST;
- csdd.selected_source = select_source_dialog (parent, obj_type, source);
+ csdd.selected_source = select_source_dialog (
+ parent, registry, obj_type, source);
if (csdd.selected_source) {
copy_source (&csdd);
diff --git a/calendar/gui/dialogs/copy-source-dialog.h b/calendar/gui/dialogs/copy-source-dialog.h
index 5ac5140..01124d4 100644
--- a/calendar/gui/dialogs/copy-source-dialog.h
+++ b/calendar/gui/dialogs/copy-source-dialog.h
@@ -29,9 +29,10 @@
#include <gtk/gtk.h>
#include <libecal/e-cal-util.h>
#include <libecal/e-cal-client.h>
-#include <libedataserver/e-source.h>
+#include <libedataserver/e-source-registry.h>
void copy_source_dialog (GtkWindow *parent,
+ ESourceRegistry *registry,
ESource *source,
ECalClientSourceType type);
diff --git a/calendar/gui/dialogs/e-delegate-dialog.c b/calendar/gui/dialogs/e-delegate-dialog.c
index 9b9d7b4..ca253ca 100644
--- a/calendar/gui/dialogs/e-delegate-dialog.c
+++ b/calendar/gui/dialogs/e-delegate-dialog.c
@@ -101,6 +101,7 @@ e_delegate_dialog_init (EDelegateDialog *edd)
EDelegateDialog *
e_delegate_dialog_construct (EDelegateDialog *edd,
+ ESourceRegistry *registry,
const gchar *name,
const gchar *address)
{
@@ -111,6 +112,7 @@ e_delegate_dialog_construct (EDelegateDialog *edd,
ENameSelectorDialog *name_selector_dialog;
g_return_val_if_fail (E_IS_DELEGATE_DIALOG (edd), NULL);
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
priv = edd->priv;
@@ -124,7 +126,7 @@ e_delegate_dialog_construct (EDelegateDialog *edd,
goto error;
}
- priv->name_selector = e_name_selector_new ();
+ priv->name_selector = e_name_selector_new (registry);
e_name_selector_load_books (priv->name_selector);
name_selector_model = e_name_selector_peek_model (priv->name_selector);
e_name_selector_model_add_section (name_selector_model, section_name, section_name, NULL);
@@ -211,15 +213,18 @@ addressbook_response_cb (GtkWidget *widget,
* editor could not be created.
**/
EDelegateDialog *
-e_delegate_dialog_new (const gchar *name,
+e_delegate_dialog_new (ESourceRegistry *registry,
+ const gchar *name,
const gchar *address)
{
EDelegateDialog *edd;
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
+
edd = g_object_new (E_TYPE_DELEGATE_DIALOG, NULL);
return e_delegate_dialog_construct (
- E_DELEGATE_DIALOG (edd), name, address);
+ E_DELEGATE_DIALOG (edd), registry, name, address);
}
gchar *
diff --git a/calendar/gui/dialogs/e-delegate-dialog.h b/calendar/gui/dialogs/e-delegate-dialog.h
index 5fb672b..85a0613 100644
--- a/calendar/gui/dialogs/e-delegate-dialog.h
+++ b/calendar/gui/dialogs/e-delegate-dialog.h
@@ -25,6 +25,7 @@
#define E_DELEGATE_DIALOG_H
#include <gtk/gtk.h>
+#include <libedataserver/e-source-registry.h>
/* Standard GObject macros */
#define E_TYPE_DELEGATE_DIALOG \
@@ -63,10 +64,12 @@ struct _EDelegateDialogClass {
GType e_delegate_dialog_get_type (void);
EDelegateDialog *
e_delegate_dialog_construct (EDelegateDialog *etd,
+ ESourceRegistry *registry,
const gchar *name,
const gchar *address);
EDelegateDialog *
- e_delegate_dialog_new (const gchar *name,
+ e_delegate_dialog_new (ESourceRegistry *registry,
+ const gchar *name,
const gchar *address);
gchar * e_delegate_dialog_get_delegate (EDelegateDialog *etd);
gchar * e_delegate_dialog_get_delegate_name
diff --git a/calendar/gui/dialogs/e-send-options-utils.c b/calendar/gui/dialogs/e-send-options-utils.c
index e42bbc7..d438f16 100644
--- a/calendar/gui/dialogs/e-send-options-utils.c
+++ b/calendar/gui/dialogs/e-send-options-utils.c
@@ -31,6 +31,8 @@
#include <stdlib.h>
#include <string.h>
+#include <libedataserver/e-source-extension.h>
+
void
e_send_options_utils_set_default_data (ESendOptionsDialog *sod,
ESource *source,
@@ -38,24 +40,25 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod,
{
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";
- uid = e_source_get_uid (source);
- source = e_source_list_peek_source_by_uid (source_list, uid);
+ if (!e_source_has_extension (source, extension_name))
+ return;
+
+ extension = e_source_get_extension (source, extension_name);
+
+ 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;
@@ -66,8 +69,10 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod,
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;
@@ -79,8 +84,10 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod,
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;
@@ -89,8 +96,10 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod,
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;
@@ -103,8 +112,10 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod,
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;
@@ -118,42 +129,45 @@ e_send_options_utils_set_default_data (ESendOptionsDialog *sod,
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-editor.c b/calendar/gui/dialogs/event-editor.c
index 7d679e6..1460ff4 100644
--- a/calendar/gui/dialogs/event-editor.c
+++ b/calendar/gui/dialogs/event-editor.c
@@ -609,6 +609,8 @@ event_editor_edit_comp (CompEditor *editor,
ECalComponentDateTime dtstart, dtend;
ECalClient *client;
GSList *attendees = NULL;
+ ESourceRegistry *registry;
+ EShell *shell;
priv = EVENT_EDITOR_GET_PRIVATE (editor);
@@ -628,8 +630,11 @@ event_editor_edit_comp (CompEditor *editor,
if (COMP_EDITOR_CLASS (event_editor_parent_class)->edit_comp)
COMP_EDITOR_CLASS (event_editor_parent_class)->edit_comp (editor, comp);
+ shell = comp_editor_get_shell (editor);
client = comp_editor_get_client (editor);
+ registry = e_shell_get_registry (shell);
+
/* Get meeting related stuff */
e_cal_component_get_organizer (comp, &organizer);
e_cal_component_get_attendee_list (comp, &attendees);
@@ -639,7 +644,9 @@ event_editor_edit_comp (CompEditor *editor,
GSList *l;
gint row;
gchar *user_email;
- user_email = itip_get_comp_attendee (comp, client);
+
+ user_email = itip_get_comp_attendee (
+ registry, comp, client);
if (!priv->meeting_shown) {
GtkAction *action;
@@ -707,7 +714,8 @@ event_editor_edit_comp (CompEditor *editor,
comp_editor_set_needs_send (
editor, priv->meeting_shown && (itip_organizer_is_user (
- comp, client) || itip_sentby_is_user (comp, client)));
+ registry, comp, client) || itip_sentby_is_user (registry,
+ comp, client)));
priv->updating = FALSE;
}
@@ -718,6 +726,8 @@ event_editor_send_comp (CompEditor *editor,
gboolean strip_alarms)
{
EventEditorPrivate *priv;
+ EShell *shell;
+ ESourceRegistry *registry;
ECalComponent *comp = NULL;
priv = EVENT_EDITOR_GET_PRIVATE (editor);
@@ -727,6 +737,9 @@ event_editor_send_comp (CompEditor *editor,
method == E_CAL_COMPONENT_METHOD_CANCEL)
goto parent;
+ shell = comp_editor_get_shell (editor);
+ registry = e_shell_get_registry (shell);
+
comp = event_page_get_cancel_comp (priv->event_page);
if (comp != NULL) {
ECalClient *client;
@@ -734,7 +747,7 @@ event_editor_send_comp (CompEditor *editor,
client = e_meeting_store_get_client (priv->model);
result = itip_send_comp (
- E_CAL_COMPONENT_METHOD_CANCEL, comp,
+ registry, E_CAL_COMPONENT_METHOD_CANCEL, comp,
client, NULL, NULL, NULL, strip_alarms, FALSE);
g_object_unref (comp);
diff --git a/calendar/gui/dialogs/event-page.c b/calendar/gui/dialogs/event-page.c
index 6c72add..5b7e024 100644
--- a/calendar/gui/dialogs/event-page.c
+++ b/calendar/gui/dialogs/event-page.c
@@ -36,6 +36,8 @@
#include <gdk/gdkkeysyms.h>
#include <libecal/e-cal-time-util.h>
+#include <libedataserver/e-source-mail-identity.h>
+#include <libedataserver/e-source-registry.h>
#include <libedataserverui/e-category-completion.h>
#include <libedataserverui/e-client-utils.h>
#include <libedataserverui/e-source-combo-box.h>
@@ -46,8 +48,6 @@
#include <e-util/e-dialog-widgets.h>
#include <e-util/e-util-private.h>
-#include <libemail-utils/e-account-utils.h>
-
#include <misc/e-dateedit.h>
#include <misc/e-send-options.h>
#include <misc/e-buffer-tagger.h>
@@ -111,7 +111,6 @@ struct _EventPagePrivate {
GtkWidget *info_hbox;
GtkWidget *info_icon;
GtkWidget *info_string;
- gchar *subscriber_info_text;
GtkWidget *summary;
GtkWidget *summary_label;
@@ -159,7 +158,7 @@ struct _EventPagePrivate {
GtkWidget *categories_btn;
GtkWidget *categories;
- GtkWidget *source_selector;
+ GtkWidget *source_combo_box;
/* Meeting related items */
GtkWidget *list_box;
@@ -223,9 +222,12 @@ get_current_identity (EventPage *page,
gchar **name,
gchar **mailto)
{
- EAccountList *account_list;
- EIterator *iterator;
+ EShell *shell;
+ CompEditor *editor;
+ ESourceRegistry *registry;
+ GList *list, *iter;
GtkWidget *entry;
+ const gchar *extension_name;
const gchar *text;
gboolean match = FALSE;
@@ -235,28 +237,29 @@ get_current_identity (EventPage *page,
if (text == NULL || *text == '\0')
return FALSE;
- account_list = e_get_account_list ();
- iterator = e_list_get_iterator (E_LIST (account_list));
+ editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (page));
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
- while (!match && e_iterator_is_valid (iterator)) {
- EAccount *account;
+ list = e_source_registry_list_sources (registry, extension_name);
+
+ for (iter = list; !match && iter != NULL; iter = g_list_next (iter)) {
+ ESource *source = E_SOURCE (iter->data);
+ ESourceMailIdentity *extension;
const gchar *id_name;
const gchar *id_address;
gchar *identity;
- /* XXX EIterator misuses const. */
- account = (EAccount *) e_iterator_get (iterator);
-<<<<<<< HEAD
-
- id_name = account->id->name;
- id_address = account->id->address;
+ extension = e_source_get_extension (source, extension_name);
-=======
+ id_name = e_source_mail_identity_get_name (extension);
+ id_address = e_source_mail_identity_get_address (extension);
- id_name = account->id->name;
- id_address = account->id->address;
+ if (id_name == NULL || id_address == NULL)
+ continue;
->>>>>>> Refactor CompEditor pages to isolate EAccount usage.
identity = g_strdup_printf ("%s <%s>", id_name, id_address);
match = (g_ascii_strcasecmp (text, identity) == 0);
g_free (identity);
@@ -266,11 +269,9 @@ get_current_identity (EventPage *page,
if (match && mailto != NULL)
*mailto = g_strdup_printf ("MAILTO:%s", id_address);
-
- e_iterator_next (iterator);
}
- g_object_unref (iterator);
+ g_list_free_full (list, (GDestroyNotify) g_object_unref);
return match;
}
@@ -655,7 +656,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;
@@ -697,7 +698,7 @@ sensitize_widgets (EventPage *epage)
gtk_editable_set_editable (GTK_EDITABLE (priv->categories), !read_only);
if (delegate) {
- gtk_widget_set_sensitive (priv->source_selector, FALSE);
+ gtk_widget_set_sensitive (priv->source_combo_box, FALSE);
}
gtk_widget_set_sensitive (priv->organizer, !read_only);
@@ -723,7 +724,7 @@ sensitize_widgets (EventPage *epage)
gtk_widget_hide (priv->attendee_box);
gtk_widget_hide (priv->organizer);
gtk_label_set_text_with_mnemonic ((GtkLabel *) priv->org_cal_label, _("_Calendar:"));
- gtk_label_set_mnemonic_widget ((GtkLabel *) priv->org_cal_label, priv->source_selector);
+ gtk_label_set_mnemonic_widget ((GtkLabel *) priv->org_cal_label, priv->source_combo_box);
} else {
gtk_widget_show (priv->calendar_label);
gtk_widget_show (priv->list_box);
@@ -1105,6 +1106,8 @@ event_page_fill_widgets (CompEditorPage *page,
ECalComponentClassification cl;
ECalComponentTransparency transparency;
ECalComponentDateTime start_date, end_date;
+ ESourceRegistry *registry;
+ EShell *shell;
const gchar *location, *uid = NULL;
const gchar *categories;
gchar *backend_addr = NULL;
@@ -1117,6 +1120,9 @@ event_page_fill_widgets (CompEditorPage *page,
editor = comp_editor_page_get_editor (page);
client = comp_editor_get_client (editor);
flags = comp_editor_get_flags (editor);
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
if (!e_cal_component_has_organizer (comp)) {
flags |= COMP_EDITOR_USER_ORG;
@@ -1177,7 +1183,8 @@ event_page_fill_widgets (CompEditorPage *page,
gchar *name = NULL;
gchar *mailto = NULL;
- priv->user_add = itip_get_comp_attendee (comp, client);
+ priv->user_add = itip_get_comp_attendee (
+ registry, comp, client);
/* Organizer strings */
event_page_select_organizer (epage, backend_addr);
@@ -1189,7 +1196,8 @@ event_page_fill_widgets (CompEditorPage *page,
const gchar *strip = itip_strip_mailto (organizer.value);
gchar *string;
- if (itip_organizer_is_user (comp, client) || itip_sentby_is_user (comp, client)) {
+ if (itip_organizer_is_user (registry, comp, client) ||
+ itip_sentby_is_user (registry, comp, client)) {
if (e_client_check_capability (
E_CLIENT (client),
CAL_STATIC_CAPABILITY_ORGANIZER_NOT_EMAIL_ADDRESS))
@@ -1362,7 +1370,7 @@ event_page_fill_widgets (CompEditorPage *page,
/* Source */
e_source_combo_box_set_active (
- E_SOURCE_COMBO_BOX (priv->source_selector),
+ E_SOURCE_COMBO_BOX (priv->source_combo_box),
e_client_get_source (E_CLIENT (client)));
e_cal_component_get_uid (comp, &uid);
@@ -2484,6 +2492,7 @@ static gboolean
get_widgets (EventPage *epage)
{
EShell *shell;
+ ESourceRegistry *registry;
CompEditor *editor;
CompEditorPage *page = COMP_EDITOR_PAGE (epage);
GtkEntryCompletion *completion;
@@ -2500,6 +2509,7 @@ get_widgets (EventPage *epage)
editor = comp_editor_page_get_editor (page);
shell = comp_editor_get_shell (editor);
+ registry = e_shell_get_registry (shell);
priv->main = GW ("event-page");
if (!priv->main)
@@ -2592,9 +2602,9 @@ get_widgets (EventPage *epage)
priv->description = GW ("description");
- priv->source_selector = GW ("source");
-
- e_util_set_source_combo_box_list (priv->source_selector, "/apps/evolution/calendar/sources");
+ priv->source_combo_box = GW ("source");
+ e_source_combo_box_set_registry (
+ E_SOURCE_COMBO_BOX (priv->source_combo_box), registry);
completion = e_category_completion_new ();
gtk_entry_set_completion (GTK_ENTRY (priv->categories), completion);
@@ -2897,7 +2907,7 @@ event_page_send_options_clicked_cb (EventPage *epage)
if (!priv->sod) {
priv->sod = e_send_options_dialog_new ();
source = e_source_combo_box_ref_active (
- E_SOURCE_COMBO_BOX (priv->source_selector));
+ E_SOURCE_COMBO_BOX (priv->source_combo_box));
e_send_options_utils_set_default_data (
priv->sod, source, "calendar");
priv->sod->data->initialized = TRUE;
@@ -2942,7 +2952,7 @@ epage_client_opened_cb (GObject *source_object,
old_client = comp_editor_get_client (editor);
e_source_combo_box_set_active (
- E_SOURCE_COMBO_BOX (priv->source_selector),
+ E_SOURCE_COMBO_BOX (priv->source_combo_box),
e_client_get_source (E_CLIENT (old_client)));
dialog = gtk_message_dialog_new (
@@ -3008,7 +3018,6 @@ source_changed_cb (ESourceComboBox *source_combo_box,
e_client_utils_open_new (
source, E_CLIENT_SOURCE_TYPE_EVENTS,
FALSE, priv->open_cancellable,
- e_client_utils_authenticate_handler, NULL,
epage_client_opened_cb, epage);
g_object_unref (source);
@@ -3018,26 +3027,8 @@ static void
set_subscriber_info_string (EventPage *epage,
const gchar *backend_address)
{
- CompEditor *editor;
- ECalClient *client;
- ESource *source;
-
- editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
- client = comp_editor_get_client (editor);
- source = e_client_get_source (E_CLIENT (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
@@ -3182,7 +3173,9 @@ static gboolean
init_widgets (EventPage *epage)
{
EventPagePrivate *priv = epage->priv;
+ EShell *shell;
CompEditor *editor;
+ ESourceRegistry *registry;
GtkTextBuffer *text_buffer;
icaltimezone *zone;
gchar *combo_label = NULL;
@@ -3194,8 +3187,12 @@ init_widgets (EventPage *epage)
GtkListStore *store;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
+
+ shell = comp_editor_get_shell (editor);
client = comp_editor_get_client (editor);
+ registry = e_shell_get_registry (shell);
+
/* Make sure the EDateEdit widgets use our timezones to get the
* current time. */
e_date_edit_set_get_time_callback (
@@ -3239,7 +3236,7 @@ init_widgets (EventPage *epage)
/* Source selector */
g_signal_connect (
- priv->source_selector, "changed",
+ priv->source_combo_box, "changed",
G_CALLBACK (source_changed_cb), epage);
/* Alarms */
@@ -3320,7 +3317,7 @@ init_widgets (EventPage *epage)
priv->alarm_dialog, "delete-event",
G_CALLBACK (gtk_widget_hide), priv->alarm_dialog);
priv->alarm_list_dlg_widget = alarm_list_dialog_peek (
- client, priv->alarm_list_store);
+ registry, client, priv->alarm_list_store);
gtk_widget_reparent (priv->alarm_list_dlg_widget, priv->alarm_box);
gtk_widget_show_all (priv->alarm_list_dlg_widget);
gtk_widget_hide (priv->alarm_dialog);
@@ -3440,7 +3437,7 @@ init_widgets (EventPage *epage)
priv->categories, "changed",
G_CALLBACK (comp_editor_page_changed), epage);
g_signal_connect_swapped (
- priv->source_selector, "changed",
+ priv->source_combo_box, "changed",
G_CALLBACK (comp_editor_page_changed), epage);
g_signal_connect_swapped (
priv->start_timezone, "changed",
@@ -3463,32 +3460,18 @@ event_page_select_organizer (EventPage *epage,
const gchar *backend_address)
{
EventPagePrivate *priv = epage->priv;
- CompEditor *editor;
- ECalClient *client;
const gchar *default_address;
- gboolean subscribed_cal = FALSE;
- ESource *source = NULL;
- const gchar *user_addr = NULL;
gint ii;
- editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
- client = comp_editor_get_client (editor);
-
- if (client)
- source = e_client_get_source (E_CLIENT (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;
+ /* Treat an empty backend address as NULL. */
+ if (backend_address != NULL && *backend_address == '\0')
+ backend_address = NULL;
default_address = priv->fallback_address;
- if (user_addr) {
+ if (backend_address != NULL) {
for (ii = 0; priv->address_strings[ii] != NULL; ii++) {
- if (g_strrstr (priv->address_strings[ii], user_addr) != NULL) {
+ if (g_strrstr (priv->address_strings[ii], backend_address) != NULL) {
default_address = priv->address_strings[ii];
break;
}
@@ -3501,7 +3484,6 @@ event_page_select_organizer (EventPage *epage,
g_signal_handlers_block_by_func (entry, organizer_changed_cb, epage);
gtk_entry_set_text (entry, default_address);
- gtk_widget_set_sensitive (priv->organizer, !subscribed_cal);
g_signal_handlers_unblock_by_func (entry, organizer_changed_cb, epage);
}
} else
@@ -3522,12 +3504,18 @@ event_page_construct (EventPage *epage,
EMeetingStore *meeting_store)
{
EventPagePrivate *priv;
+ EShell *shell;
+ CompEditor *editor;
+ ESourceRegistry *registry;
GtkComboBox *combo_box;
GtkListStore *list_store;
GtkTreeModel *model;
GtkTreeIter iter;
gint ii;
+ editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (epage));
+ shell = comp_editor_get_shell (editor);
+
priv = epage->priv;
priv->meeting_store = g_object_ref (meeting_store);
@@ -3560,8 +3548,9 @@ event_page_construct (EventPage *epage,
model = gtk_combo_box_get_model (combo_box);
list_store = GTK_LIST_STORE (model);
- priv->address_strings = itip_get_user_identities ();
- priv->fallback_address = itip_get_fallback_identity ();
+ registry = e_shell_get_registry (shell);
+ priv->address_strings = itip_get_user_identities (registry);
+ priv->fallback_address = itip_get_fallback_identity (registry);
/* FIXME Could we just use a GtkComboBoxText? */
for (ii = 0; priv->address_strings[ii] != NULL; ii++) {
diff --git a/calendar/gui/dialogs/event-page.ui b/calendar/gui/dialogs/event-page.ui
index 9377c83..9218d2e 100644
--- a/calendar/gui/dialogs/event-page.ui
+++ b/calendar/gui/dialogs/event-page.ui
@@ -779,6 +779,8 @@
</child>
<child>
<object class="ESourceComboBox" type-func="e_source_combo_box_get_type" id="source">
+ <property name="extension-name">Calendar</property>
+ <property name="show-colors">True</property>
<property name="visible">True</property>
</object>
<packing>
diff --git a/calendar/gui/dialogs/memo-page.c b/calendar/gui/dialogs/memo-page.c
index 00bf1cc..790972a 100644
--- a/calendar/gui/dialogs/memo-page.c
+++ b/calendar/gui/dialogs/memo-page.c
@@ -34,6 +34,8 @@
#include <gtk/gtk.h>
#include <glib/gi18n.h>
+#include <libedataserver/e-source-mail-identity.h>
+#include <libedataserver/e-source-registry.h>
#include <libedataserverui/e-category-completion.h>
#include <libedataserverui/e-client-utils.h>
#include <libedataserverui/e-source-combo-box.h>
@@ -49,8 +51,6 @@
#include <misc/e-dateedit.h>
#include <misc/e-buffer-tagger.h>
-#include <libemail-utils/e-account-utils.h>
-
#include "../calendar-config.h"
#include "comp-editor.h"
#include "comp-editor-util.h"
@@ -74,7 +74,6 @@ struct _MemoPagePrivate {
GtkWidget *info_hbox;
GtkWidget *info_icon;
GtkWidget *info_string;
- gchar *subscriber_info_text;
/* Organizer */
GtkWidget *org_label;
@@ -96,7 +95,7 @@ struct _MemoPagePrivate {
GtkWidget *categories_btn;
GtkWidget *categories;
- GtkWidget *source_selector;
+ GtkWidget *source_combo_box;
gchar **address_strings;
gchar *fallback_address;
@@ -119,32 +118,43 @@ get_current_identity (MemoPage *page,
gchar **name,
gchar **mailto)
{
- EAccountList *account_list;
- EIterator *iterator;
+ EShell *shell;
+ CompEditor *editor;
+ ESourceRegistry *registry;
+ GList *list, *iter;
GtkWidget *entry;
+ const gchar *extension_name;
const gchar *text;
gboolean match = FALSE;
+ editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (page));
+ shell = comp_editor_get_shell (editor);
+
entry = gtk_bin_get_child (GTK_BIN (page->priv->org_combo));
text = gtk_entry_get_text (GTK_ENTRY (entry));
if (text == NULL || *text == '\0')
return FALSE;
- account_list = e_get_account_list ();
- iterator = e_list_get_iterator (E_LIST (account_list));
+ registry = e_shell_get_registry (shell);
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
- while (!match && e_iterator_is_valid (iterator)) {
- EAccount *account;
+ list = e_source_registry_list_sources (registry, extension_name);
+
+ for (iter = list; !match && iter != NULL; iter = g_list_next (iter)) {
+ ESource *source = E_SOURCE (iter->data);
+ ESourceMailIdentity *extension;
const gchar *id_name;
const gchar *id_address;
gchar *identity;
- /* XXX EIterator misuses const. */
- account = (EAccount *) e_iterator_get (iterator);
+ extension = e_source_get_extension (source, extension_name);
+
+ id_name = e_source_mail_identity_get_name (extension);
+ id_address = e_source_mail_identity_get_address (extension);
- id_name = account->id->name;
- id_address = account->id->address;
+ if (id_name == NULL || id_address == NULL)
+ continue;
identity = g_strdup_printf ("%s <%s>", id_name, id_address);
match = (g_ascii_strcasecmp (text, identity) == 0);
@@ -155,11 +165,9 @@ get_current_identity (MemoPage *page,
if (match && mailto != NULL)
*mailto = g_strdup_printf ("MAILTO:%s", id_address);
-
- e_iterator_next (iterator);
}
- g_object_unref (iterator);
+ g_list_free_full (list, (GDestroyNotify) g_object_unref);
return match;
}
@@ -235,8 +243,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);
}
@@ -269,6 +275,8 @@ memo_page_fill_widgets (CompEditorPage *page,
ECalComponentClassification cl;
ECalComponentText text;
ECalComponentDateTime d;
+ ESourceRegistry *registry;
+ EShell *shell;
GSList *l;
const gchar *categories;
gchar *backend_addr = NULL;
@@ -279,6 +287,9 @@ memo_page_fill_widgets (CompEditorPage *page,
editor = comp_editor_page_get_editor (page);
client = comp_editor_get_client (editor);
flags = comp_editor_get_flags (editor);
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
/* Clean the screen */
clear_widgets (mpage);
@@ -342,7 +353,8 @@ memo_page_fill_widgets (CompEditorPage *page,
else
string = g_strdup (strip);
- if (itip_organizer_is_user (comp, client) || itip_sentby_is_user (comp, client)) {
+ if (itip_organizer_is_user (registry, comp, client) ||
+ itip_sentby_is_user (registry, comp, client)) {
gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->org_combo))), string);
} else {
GtkComboBox *combo_box;
@@ -369,7 +381,7 @@ memo_page_fill_widgets (CompEditorPage *page,
/* Source */
e_source_combo_box_set_active (
- E_SOURCE_COMBO_BOX (priv->source_selector),
+ E_SOURCE_COMBO_BOX (priv->source_combo_box),
e_client_get_source (E_CLIENT (client)));
if (priv->to_entry && (flags & COMP_EDITOR_IS_SHARED) && !(flags & COMP_EDITOR_NEW_ITEM))
@@ -420,12 +432,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;
@@ -465,7 +476,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
@@ -552,7 +563,7 @@ fill_comp_with_recipients (ENameSelector *name_selector,
ENameSelectorModel *model;
EContactStore *c_store;
GSList *clients, *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);
@@ -561,7 +572,11 @@ fill_comp_with_recipients (ENameSelector *name_selector,
for (l = clients; l; l = l->next) {
EBookClient *b = l->data;
- if (g_str_equal (uri, e_client_get_uri (E_CLIENT (b)))) {
+ ESource *source;
+
+ source = e_client_get_source (E_CLIENT (b));
+
+ if (g_strcmp0 (uid, e_source_get_uid (source)) == 0) {
book_client = b;
break;
}
@@ -833,6 +848,9 @@ memo_page_set_info_string (MemoPage *mpage,
static gboolean
get_widgets (MemoPage *mpage)
{
+ EShell *shell;
+ ESourceRegistry *registry;
+ CompEditor *editor;
CompEditorPage *page = COMP_EDITOR_PAGE (mpage);
GtkEntryCompletion *completion;
MemoPagePrivate *priv;
@@ -844,6 +862,10 @@ get_widgets (MemoPage *mpage)
#define GW(name) e_builder_get_widget (priv->builder, name)
+ editor = comp_editor_page_get_editor (page);
+ shell = comp_editor_get_shell (editor);
+ registry = e_shell_get_registry (shell);
+
priv->main = GW ("memo-page");
if (!priv->main) {
g_warning("couldn't find memo-page!");
@@ -884,11 +906,11 @@ get_widgets (MemoPage *mpage)
priv->categories_btn = GW ("categories-button");
priv->categories = GW ("categories");
- priv->source_selector = GW ("source");
+ priv->source_combo_box = GW ("source");
+ e_source_combo_box_set_registry (
+ E_SOURCE_COMBO_BOX (priv->source_combo_box), registry);
#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);
@@ -942,7 +964,7 @@ mpage_client_opened_cb (GObject *source_object,
old_client = comp_editor_get_client (editor);
e_source_combo_box_set_active (
- E_SOURCE_COMBO_BOX (priv->source_selector),
+ E_SOURCE_COMBO_BOX (priv->source_combo_box),
e_client_get_source (E_CLIENT (old_client)));
dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
@@ -1005,7 +1027,6 @@ source_changed_cb (ESourceComboBox *source_combo_box,
e_client_utils_open_new (
source, E_CLIENT_SOURCE_TYPE_MEMOS,
FALSE, priv->open_cancellable,
- e_client_utils_authenticate_handler, NULL,
mpage_client_opened_cb, mpage);
g_object_unref (source);
@@ -1015,26 +1036,8 @@ static void
set_subscriber_info_string (MemoPage *mpage,
const gchar *backend_address)
{
- CompEditor *editor;
- ECalClient *client;
- ESource *source;
-
- editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (mpage));
- client = comp_editor_get_client (editor);
- source = e_client_get_source (E_CLIENT (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
@@ -1101,7 +1104,7 @@ init_widgets (MemoPage *mpage)
/* Source selector */
g_signal_connect (
- priv->source_selector, "changed",
+ priv->source_combo_box, "changed",
G_CALLBACK (source_changed_cb), mpage);
/* Connect the default signal handler to use to make sure the "changed"
@@ -1121,7 +1124,7 @@ init_widgets (MemoPage *mpage)
G_CALLBACK (comp_editor_page_changed), mpage);
g_signal_connect_swapped (
- priv->source_selector, "changed",
+ priv->source_combo_box, "changed",
G_CALLBACK (comp_editor_page_changed), mpage);
g_signal_connect_swapped (
@@ -1168,36 +1171,24 @@ static void
memo_page_select_organizer (MemoPage *mpage,
const gchar *backend_address)
{
- MemoPagePrivate *priv;
+ MemoPagePrivate *priv = mpage->priv;
CompEditor *editor;
CompEditorFlags flags;
- ECalClient *client;
const gchar *default_address;
- gboolean subscribed_cal = FALSE;
- ESource *source = NULL;
- const gchar *user_addr = NULL;
gint ii;
- priv = mpage->priv;
+ /* Treat an empty backend address as NULL. */
+ if (backend_address != NULL && *backend_address == '\0')
+ backend_address = NULL;
+
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_client_get_source (E_CLIENT (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;
-
default_address = priv->fallback_address;
- if (user_addr) {
+ if (backend_address != NULL) {
for (ii = 0; priv->address_strings[ii] != NULL; ii++) {
- if (g_strrstr (priv->address_strings[ii], user_addr) != NULL) {
+ if (g_strrstr (priv->address_strings[ii], backend_address) != NULL) {
default_address = priv->address_strings[ii];
break;
}
@@ -1207,7 +1198,6 @@ memo_page_select_organizer (MemoPage *mpage,
if (default_address != NULL) {
if (flags & COMP_EDITOR_NEW_ITEM) {
gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->org_combo))), default_address);
- gtk_widget_set_sensitive (priv->org_combo, !subscribed_cal);
}
} else
g_warning ("No potential organizers!");
@@ -1226,13 +1216,19 @@ MemoPage *
memo_page_construct (MemoPage *mpage)
{
MemoPagePrivate *priv;
+ EShell *shell;
CompEditor *editor;
CompEditorFlags flags;
+ ESourceRegistry *registry;
priv = mpage->priv;
editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (mpage));
+
flags = comp_editor_get_flags (editor);
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
priv->builder = gtk_builder_new ();
e_load_ui_builder_definition (priv->builder, "memo-page.ui");
@@ -1254,8 +1250,8 @@ memo_page_construct (MemoPage *mpage)
model = gtk_combo_box_get_model (combo_box);
list_store = GTK_LIST_STORE (model);
- priv->address_strings = itip_get_user_identities ();
- priv->fallback_address = itip_get_fallback_identity ();
+ priv->address_strings = itip_get_user_identities (registry);
+ priv->fallback_address = itip_get_fallback_identity (registry);
/* FIXME Could we just use a GtkComboBoxText? */
for (ii = 0; priv->address_strings[ii] != NULL; ii++) {
@@ -1270,7 +1266,7 @@ memo_page_construct (MemoPage *mpage)
gtk_widget_show (priv->org_label);
gtk_widget_show (priv->org_combo);
- priv->name_selector = e_name_selector_new ();
+ priv->name_selector = e_name_selector_new (registry);
priv->to_entry = get_to_entry (priv->name_selector);
gtk_container_add ((GtkContainer *) priv->to_hbox, priv->to_entry);
gtk_widget_show (priv->to_hbox);
diff --git a/calendar/gui/dialogs/memo-page.ui b/calendar/gui/dialogs/memo-page.ui
index f10dec4..adc8ee8 100644
--- a/calendar/gui/dialogs/memo-page.ui
+++ b/calendar/gui/dialogs/memo-page.ui
@@ -184,6 +184,8 @@
<property name="spacing">0</property>
<child>
<object class="ESourceComboBox" type-func="e_source_combo_box_get_type" id="source">
+ <property name="extension-name">Memo List</property>
+ <property name="show-colors">True</property>
<property name="visible">True</property>
</object>
<packing>
diff --git a/calendar/gui/dialogs/select-source-dialog.c b/calendar/gui/dialogs/select-source-dialog.c
index 740428a..8ea35e2 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 <libedataserver/e-source-calendar.h>
#include <libedataserverui/e-source-selector-dialog.h>
#include "select-source-dialog.h"
@@ -36,37 +37,31 @@
*/
ESource *
select_source_dialog (GtkWindow *parent,
+ ESourceRegistry *registry,
ECalClientSourceType obj_type,
ESource *except_source)
{
GtkWidget *dialog;
- ESourceList *source_list;
ESource *selected_source = NULL;
- const gchar *gconf_key;
- GConfClient *conf_client;
- const gchar *icon_name = NULL;
+ const gchar *extension_name;
+ const gchar *icon_name;
- if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS)
- gconf_key = "/apps/evolution/calendar/sources";
- else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS)
- gconf_key = "/apps/evolution/tasks/sources";
- else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS)
- gconf_key = "/apps/evolution/memos/sources";
- else
- return NULL;
-
- conf_client = gconf_client_get_default ();
- source_list = e_source_list_new_for_gconf (conf_client, gconf_key);
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
- /* create the dialog */
- dialog = e_source_selector_dialog_new (parent, source_list);
-
- if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS)
+ if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS) {
+ extension_name = E_SOURCE_EXTENSION_CALENDAR;
icon_name = "x-office-calendar";
- else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS)
+ } else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS) {
+ extension_name = E_SOURCE_EXTENSION_TASK_LIST;
icon_name = "stock_todo";
- else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS)
+ } else if (obj_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS) {
+ extension_name = E_SOURCE_EXTENSION_MEMO_LIST;
icon_name = "stock_journal";
+ } else
+ return NULL;
+
+ /* create the dialog */
+ dialog = e_source_selector_dialog_new (parent, registry, extension_name);
if (icon_name)
gtk_window_set_icon_name (GTK_WINDOW (dialog), icon_name);
@@ -74,16 +69,15 @@ select_source_dialog (GtkWindow *parent,
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 (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_OK)
+ goto exit;
- if (selected_source)
- g_object_ref (selected_source);
- } 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/select-source-dialog.h b/calendar/gui/dialogs/select-source-dialog.h
index 2ef8e0e..77864e8 100644
--- a/calendar/gui/dialogs/select-source-dialog.h
+++ b/calendar/gui/dialogs/select-source-dialog.h
@@ -27,10 +27,11 @@
#define SELECT_SOURCE_DIALOG_H
#include <gtk/gtk.h>
-#include <libedataserver/e-source.h>
#include <libecal/e-cal-client.h>
+#include <libedataserver/e-source-registry.h>
ESource * select_source_dialog (GtkWindow *parent,
+ ESourceRegistry *registry,
ECalClientSourceType type,
ESource *except_source);
diff --git a/calendar/gui/dialogs/task-editor.c b/calendar/gui/dialogs/task-editor.c
index 927913c..0c81d3e 100644
--- a/calendar/gui/dialogs/task-editor.c
+++ b/calendar/gui/dialogs/task-editor.c
@@ -138,46 +138,6 @@ task_editor_model_changed_cb (TaskEditor *te)
}
}
-static GObject *
-task_editor_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_properties)
-{
- GObject *object;
- CompEditor *editor;
- CompEditorFlags flags;
- TaskEditorPrivate *priv;
- GtkActionGroup *action_group;
- ECalClient *client;
- gboolean is_assigned;
-
- /* Chain up to parent's constructor() method. */
- object = G_OBJECT_CLASS (task_editor_parent_class)->constructor (
- type, n_construct_properties, construct_properties);
-
- editor = COMP_EDITOR (object);
- priv = TASK_EDITOR_GET_PRIVATE (object);
-
- client = comp_editor_get_client (editor);
- flags = comp_editor_get_flags (editor);
- action_group = comp_editor_get_action_group (editor, "coordinated");
-
- is_assigned = flags & COMP_EDITOR_IS_ASSIGNED;
-
- task_page_set_assignment (priv->task_page, is_assigned);
- gtk_action_group_set_visible (action_group, is_assigned);
-
- if (is_assigned) {
- if (e_client_check_capability (
- E_CLIENT (client),
- CAL_STATIC_CAPABILITY_REQ_SEND_OPTIONS))
- task_page_show_options (priv->task_page);
- comp_editor_set_group_item (editor, TRUE);
- }
-
- return object;
-}
-
static void
task_editor_dispose (GObject *object)
{
@@ -208,8 +168,37 @@ static void
task_editor_constructed (GObject *object)
{
TaskEditorPrivate *priv;
+ CompEditor *editor;
+ CompEditorFlags flags;
+ GtkActionGroup *action_group;
+ gboolean is_assigned;
priv = TASK_EDITOR_GET_PRIVATE (object);
+ editor = COMP_EDITOR (object);
+
+ flags = comp_editor_get_flags (editor);
+ is_assigned = flags & COMP_EDITOR_IS_ASSIGNED;
+
+ priv->task_page = task_page_new (priv->model, editor);
+ task_page_set_assignment (priv->task_page, is_assigned);
+ comp_editor_append_page (
+ editor, COMP_EDITOR_PAGE (priv->task_page),
+ _("Task"), TRUE);
+
+ action_group = comp_editor_get_action_group (editor, "coordinated");
+ gtk_action_group_set_visible (action_group, is_assigned);
+
+ if (is_assigned) {
+ ECalClient *client;
+
+ client = comp_editor_get_client (editor);
+
+ if (e_client_check_capability (
+ E_CLIENT (client),
+ CAL_STATIC_CAPABILITY_REQ_SEND_OPTIONS))
+ task_page_show_options (priv->task_page);
+ comp_editor_set_group_item (editor, TRUE);
+ }
g_object_bind_property (
object, "client",
@@ -283,7 +272,6 @@ task_editor_class_init (TaskEditorClass *class)
g_type_class_add_private (class, sizeof (TaskEditorPrivate));
object_class = G_OBJECT_CLASS (class);
- object_class->constructor = task_editor_constructor;
object_class->dispose = task_editor_dispose;
object_class->constructed = task_editor_constructed;
@@ -315,11 +303,6 @@ task_editor_init (TaskEditor *te)
te->priv->assignment_shown = TRUE;
te->priv->updating = FALSE;
- te->priv->task_page = task_page_new (te->priv->model, editor);
- comp_editor_append_page (
- editor, COMP_EDITOR_PAGE (te->priv->task_page),
- _("Task"), TRUE);
-
te->priv->task_details_window = gtk_dialog_new_with_buttons (
_("Task Details"), GTK_WINDOW (te), GTK_DIALOG_MODAL,
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
@@ -386,6 +369,8 @@ task_editor_edit_comp (CompEditor *editor,
ECalComponentOrganizer organizer;
ECalClient *client;
GSList *attendees = NULL;
+ ESourceRegistry *registry;
+ EShell *shell;
priv = TASK_EDITOR_GET_PRIVATE (editor);
@@ -394,8 +379,11 @@ task_editor_edit_comp (CompEditor *editor,
if (COMP_EDITOR_CLASS (task_editor_parent_class)->edit_comp)
COMP_EDITOR_CLASS (task_editor_parent_class)->edit_comp (editor, comp);
+ shell = comp_editor_get_shell (editor);
client = comp_editor_get_client (editor);
+ registry = e_shell_get_registry (shell);
+
/* Get meeting related stuff */
e_cal_component_get_organizer (comp, &organizer);
e_cal_component_get_attendee_list (comp, &attendees);
@@ -450,7 +438,7 @@ task_editor_edit_comp (CompEditor *editor,
comp_editor_set_needs_send (
editor, priv->assignment_shown &&
- itip_organizer_is_user (comp, client));
+ itip_organizer_is_user (registry, comp, client));
priv->updating = FALSE;
}
@@ -461,6 +449,8 @@ task_editor_send_comp (CompEditor *editor,
gboolean strip_alarms)
{
TaskEditorPrivate *priv;
+ EShell *shell;
+ ESourceRegistry *registry;
ECalComponent *comp = NULL;
priv = TASK_EDITOR_GET_PRIVATE (editor);
@@ -470,6 +460,9 @@ task_editor_send_comp (CompEditor *editor,
method == E_CAL_COMPONENT_METHOD_CANCEL)
goto parent;
+ shell = comp_editor_get_shell (editor);
+ registry = e_shell_get_registry (shell);
+
comp = task_page_get_cancel_comp (priv->task_page);
if (comp != NULL) {
ECalClient *client;
@@ -477,7 +470,7 @@ task_editor_send_comp (CompEditor *editor,
client = e_meeting_store_get_client (priv->model);
result = itip_send_comp (
- E_CAL_COMPONENT_METHOD_CANCEL, comp,
+ registry, E_CAL_COMPONENT_METHOD_CANCEL, comp,
client, NULL, NULL, NULL, strip_alarms, FALSE);
g_object_unref (comp);
diff --git a/calendar/gui/dialogs/task-page.c b/calendar/gui/dialogs/task-page.c
index 27be3bd..72592b7 100644
--- a/calendar/gui/dialogs/task-page.c
+++ b/calendar/gui/dialogs/task-page.c
@@ -34,6 +34,8 @@
#include <glib/gi18n.h>
#include <gdk/gdkkeysyms.h>
+#include <libedataserver/e-source-mail-identity.h>
+#include <libedataserver/e-source-registry.h>
#include <libedataserverui/e-category-completion.h>
#include <libedataserverui/e-client-utils.h>
#include <libedataserverui/e-source-combo-box.h>
@@ -46,8 +48,6 @@
#include <e-util/e-util-private.h>
#include <e-util/e-util.h>
-#include <libemail-utils/e-account-utils.h>
-
#include "../e-meeting-attendee.h"
#include "../e-meeting-list-view.h"
#include "../e-meeting-store.h"
@@ -86,7 +86,6 @@ struct _TaskPagePrivate {
GtkWidget *info_hbox;
GtkWidget *info_icon;
GtkWidget *info_string;
- gchar *subscriber_info_text;
GtkWidget *summary;
GtkWidget *summary_label;
@@ -101,7 +100,7 @@ struct _TaskPagePrivate {
GtkWidget *categories_btn;
GtkWidget *categories;
- GtkWidget *source_selector;
+ GtkWidget *source_combo_box;
/* Meeting related items */
GtkWidget *list_box;
@@ -149,32 +148,43 @@ get_current_identity (TaskPage *page,
gchar **name,
gchar **mailto)
{
- EAccountList *account_list;
- EIterator *iterator;
+ EShell *shell;
+ CompEditor *editor;
+ ESourceRegistry *registry;
+ GList *list, *iter;
GtkWidget *entry;
+ const gchar *extension_name;
const gchar *text;
gboolean match = FALSE;
+ editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (page));
+ shell = comp_editor_get_shell (editor);
+
entry = gtk_bin_get_child (GTK_BIN (page->priv->organizer));
text = gtk_entry_get_text (GTK_ENTRY (entry));
if (text == NULL || *text == '\0')
return FALSE;
- account_list = e_get_account_list ();
- iterator = e_list_get_iterator (E_LIST (account_list));
+ registry = e_shell_get_registry (shell);
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
- while (!match && e_iterator_is_valid (iterator)) {
- EAccount *account;
+ list = e_source_registry_list_sources (registry, extension_name);
+
+ for (iter = list; !match && iter != NULL; iter = g_list_next (iter)) {
+ ESource *source = E_SOURCE (iter->data);
+ ESourceMailIdentity *extension;
const gchar *id_name;
const gchar *id_address;
gchar *identity;
- /* XXX EIterator misuses const. */
- account = (EAccount *) e_iterator_get (iterator);
+ extension = e_source_get_extension (source, extension_name);
+
+ id_name = e_source_mail_identity_get_name (extension);
+ id_address = e_source_mail_identity_get_address (extension);
- id_name = account->id->name;
- id_address = account->id->address;
+ if (id_name == NULL || id_address == NULL)
+ continue;
identity = g_strdup_printf ("%s <%s>", id_name, id_address);
match = (g_ascii_strcasecmp (text, identity) == 0);
@@ -185,11 +195,9 @@ get_current_identity (TaskPage *page,
if (match && mailto != NULL)
*mailto = g_strdup_printf ("MAILTO:%s", id_address);
-
- e_iterator_next (iterator);
}
- g_object_unref (iterator);
+ g_list_free_full (list, (GDestroyNotify) g_object_unref);
return match;
}
@@ -252,12 +260,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;
@@ -300,7 +307,7 @@ sensitize_widgets (TaskPage *tpage)
sens = FALSE;
read_only = TRUE;
} 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
@@ -340,7 +347,7 @@ sensitize_widgets (TaskPage *tpage)
gtk_widget_hide (priv->organizer);
gtk_widget_hide (priv->invite);
gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->org_cal_label), _("_List:"));
- gtk_label_set_mnemonic_widget (GTK_LABEL (priv->org_cal_label), priv->source_selector);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (priv->org_cal_label), priv->source_combo_box);
} else {
gtk_widget_show (priv->invite);
gtk_widget_show (priv->calendar_label);
@@ -486,10 +493,12 @@ task_page_fill_widgets (CompEditorPage *page,
ECalComponentText text;
ECalComponentDateTime d;
ECalComponentClassification cl;
+ ESourceRegistry *registry;
CompEditor *editor;
CompEditorFlags flags;
GtkAction *action;
ECalClient *client;
+ EShell *shell;
GSList *l;
icalcomponent *icalcomp;
const gchar *categories, *uid;
@@ -503,6 +512,9 @@ task_page_fill_widgets (CompEditorPage *page,
editor = comp_editor_page_get_editor (page);
client = comp_editor_get_client (editor);
flags = comp_editor_get_flags (editor);
+ shell = comp_editor_get_shell (editor);
+
+ registry = e_shell_get_registry (shell);
/* Clean out old data */
if (priv->comp != NULL)
@@ -520,7 +532,8 @@ task_page_fill_widgets (CompEditorPage *page,
/* Clean the screen */
clear_widgets (tpage);
- priv->user_add = itip_get_comp_attendee (comp, client);
+ priv->user_add = itip_get_comp_attendee (
+ registry, comp, client);
/* Summary, description(s) */
e_cal_component_get_summary (comp, &text);
@@ -627,7 +640,7 @@ task_page_fill_widgets (CompEditorPage *page,
/* Source */
e_source_combo_box_set_active (
- E_SOURCE_COMBO_BOX (priv->source_selector),
+ E_SOURCE_COMBO_BOX (priv->source_combo_box),
e_client_get_source (E_CLIENT (client)));
e_client_get_backend_property_sync (E_CLIENT (client), CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS, &backend_addr, NULL, NULL);
@@ -638,7 +651,8 @@ task_page_fill_widgets (CompEditorPage *page,
gchar *name = NULL;
gchar *mailto = NULL;
- priv->user_add = itip_get_comp_attendee (comp, client);
+ priv->user_add = itip_get_comp_attendee (
+ registry, comp, client);
/* Organizer strings */
task_page_select_organizer (tpage, backend_addr);
@@ -650,7 +664,8 @@ task_page_fill_widgets (CompEditorPage *page,
const gchar *strip = itip_strip_mailto (organizer.value);
gchar *string;
- if (itip_organizer_is_user (comp, client) || itip_sentby_is_user (comp, client)) {
+ if (itip_organizer_is_user (registry, comp, client) ||
+ itip_sentby_is_user (registry, comp, client)) {
if (e_client_check_capability (E_CLIENT (client), CAL_STATIC_CAPABILITY_ORGANIZER_NOT_EMAIL_ADDRESS))
priv->user_org = TRUE;
} else {
@@ -1435,6 +1450,9 @@ task_page_set_info_string (TaskPage *tpage,
static gboolean
get_widgets (TaskPage *tpage)
{
+ EShell *shell;
+ ESourceRegistry *registry;
+ CompEditor *editor;
CompEditorPage *page = COMP_EDITOR_PAGE (tpage);
GtkEntryCompletion *completion;
TaskPagePrivate *priv;
@@ -1446,6 +1464,10 @@ get_widgets (TaskPage *tpage)
priv = tpage->priv;
+ editor = comp_editor_page_get_editor (page);
+ shell = comp_editor_get_shell (editor);
+ registry = e_shell_get_registry (shell);
+
priv->main = e_builder_get_widget (priv->builder, "task-page");
if (!priv->main)
return FALSE;
@@ -1507,10 +1529,11 @@ get_widgets (TaskPage *tpage)
gtk_container_add (GTK_CONTAINER (sw), GTK_WIDGET (priv->list_view));
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");
+ priv->source_combo_box = e_builder_get_widget (priv->builder, "source");
+ e_source_combo_box_set_registry (
+ E_SOURCE_COMBO_BOX (priv->source_combo_box), registry);
- gtk_label_set_mnemonic_widget (GTK_LABEL (priv->calendar_label), priv->source_selector);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (priv->calendar_label), priv->source_combo_box);
completion = e_category_completion_new ();
gtk_entry_set_completion (GTK_ENTRY (priv->categories), completion);
@@ -1769,7 +1792,7 @@ tpage_client_opened_cb (GObject *source_object,
old_client = comp_editor_get_client (editor);
e_source_combo_box_set_active (
- E_SOURCE_COMBO_BOX (priv->source_selector),
+ E_SOURCE_COMBO_BOX (priv->source_combo_box),
e_client_get_source (E_CLIENT (old_client)));
dialog = gtk_message_dialog_new (
@@ -1836,7 +1859,6 @@ source_changed_cb (ESourceComboBox *source_combo_box,
e_client_utils_open_new (
source, E_CLIENT_SOURCE_TYPE_TASKS,
FALSE, priv->open_cancellable,
- e_client_utils_authenticate_handler, NULL,
tpage_client_opened_cb, tpage);
g_object_unref (source);
@@ -1846,26 +1868,8 @@ static void
set_subscriber_info_string (TaskPage *tpage,
const gchar *backend_address)
{
- CompEditor *editor;
- ECalClient *client;
- ESource *source;
-
- editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (tpage));
- client = comp_editor_get_client (editor);
- source = e_client_get_source (E_CLIENT (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
@@ -1884,7 +1888,7 @@ task_page_send_options_clicked_cb (TaskPage *tpage)
priv->sod = e_send_options_dialog_new ();
priv->sod->data->initialized = TRUE;
source = e_source_combo_box_ref_active (
- E_SOURCE_COMBO_BOX (priv->source_selector));
+ E_SOURCE_COMBO_BOX (priv->source_combo_box));
e_send_options_utils_set_default_data (
priv->sod, source, "task");
g_object_unref (source);
@@ -1961,7 +1965,7 @@ init_widgets (TaskPage *tpage)
/* Source selector */
g_signal_connect (
- priv->source_selector, "changed",
+ priv->source_combo_box, "changed",
G_CALLBACK (source_changed_cb), tpage);
/* Connect the default signal handler to use to make sure the "changed"
@@ -2068,45 +2072,30 @@ task_page_select_organizer (TaskPage *tpage,
const gchar *backend_address)
{
TaskPagePrivate *priv = tpage->priv;
- CompEditor *editor;
const gchar *default_address;
- gboolean subscribed_cal = FALSE;
- ESource *source = NULL;
- ECalClient *client;
- const gchar *user_addr = NULL;
gint ii;
- editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (tpage));
- client = comp_editor_get_client (editor);
-
- if (client)
- source = e_client_get_source (E_CLIENT (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;
+ /* Treat an empty backend address as NULL. */
+ if (backend_address == NULL && *backend_address == '\0')
+ backend_address = NULL;
default_address = priv->fallback_address;
- if (user_addr) {
+ if (backend_address != NULL) {
for (ii = 0; priv->address_strings[ii] != NULL; ii++) {
- if (g_strrstr (priv->address_strings[ii], user_addr) != NULL) {
+ if (g_strrstr (priv->address_strings[ii], backend_address) != NULL) {
default_address = priv->address_strings[ii];
break;
}
}
}
- if (default_address) {
+ if (default_address != NULL) {
if (!priv->comp || !e_cal_component_has_organizer (priv->comp)) {
GtkEntry *entry = GTK_ENTRY (gtk_bin_get_child (GTK_BIN (priv->organizer)));
g_signal_handlers_block_by_func (entry, organizer_changed_cb, tpage);
gtk_entry_set_text (entry, default_address);
- gtk_widget_set_sensitive (priv->organizer, !subscribed_cal);
g_signal_handlers_unblock_by_func (entry, organizer_changed_cb, tpage);
}
} else
@@ -2127,6 +2116,9 @@ task_page_construct (TaskPage *tpage,
EMeetingStore *meeting_store,
ECalClient *client)
{
+ EShell *shell;
+ CompEditor *editor;
+ ESourceRegistry *registry;
TaskPagePrivate *priv;
GtkComboBox *combo_box;
GtkListStore *list_store;
@@ -2134,6 +2126,9 @@ task_page_construct (TaskPage *tpage,
GtkTreeIter iter;
gint ii;
+ editor = comp_editor_page_get_editor (COMP_EDITOR_PAGE (tpage));
+ shell = comp_editor_get_shell (editor);
+
priv = tpage->priv;
priv->meeting_store = g_object_ref (meeting_store);
priv->client = client;
@@ -2157,8 +2152,9 @@ task_page_construct (TaskPage *tpage,
model = gtk_combo_box_get_model (combo_box);
list_store = GTK_LIST_STORE (model);
- priv->address_strings = itip_get_user_identities ();
- priv->fallback_address = itip_get_fallback_identity ();
+ registry = e_shell_get_registry (shell);
+ priv->address_strings = itip_get_user_identities (registry);
+ priv->fallback_address = itip_get_fallback_identity (registry);
/* FIXME Could we just use a GtkComboBoxText? */
for (ii = 0; priv->address_strings[ii] != NULL; ii++) {
diff --git a/calendar/gui/dialogs/task-page.ui b/calendar/gui/dialogs/task-page.ui
index 32faa1f..eb806c2 100644
--- a/calendar/gui/dialogs/task-page.ui
+++ b/calendar/gui/dialogs/task-page.ui
@@ -438,7 +438,9 @@
</packing>
</child>
<child>
- <object class="ESourceComboBox" id="source">
+ <object class="ESourceComboBox" type-func="e_source_combo_box_get_type" id="source">
+ <property name="extension-name">Task List</property>
+ <property name="show-colors">True</property>
<property name="visible">True</property>
</object>
<packing>
diff --git a/calendar/gui/e-cal-config.c b/calendar/gui/e-cal-config.c
index 0e6f697..afef57d 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"
#define E_CAL_CONFIG_GET_PRIVATE(obj) \
diff --git a/calendar/gui/e-cal-event.c b/calendar/gui/e-cal-event.c
index 9683dde..d94a071 100644
--- a/calendar/gui/e-cal-event.c
+++ b/calendar/gui/e-cal-event.c
@@ -37,8 +37,6 @@ ece_target_free (EEvent *ev,
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; }
}
@@ -75,7 +73,6 @@ e_cal_event_peek (void)
ECalEventTargetBackend *
e_cal_event_target_new_module (ECalEvent *ece,
EShellBackend *shell_backend,
- ESourceList *source_list,
guint32 flags)
{
ECalEventTargetBackend *t;
@@ -84,7 +81,6 @@ e_cal_event_target_new_module (ECalEvent *ece,
&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 d67342e..447f1fd 100644
--- a/calendar/gui/e-cal-event.h
+++ b/calendar/gui/e-cal-event.h
@@ -24,8 +24,6 @@
#ifndef __E_CAL_EVENT_H__
#define __E_CAL_EVENT_H__
-#include <libedataserver/e-source-list.h>
-
#include "e-util/e-event.h"
#include "shell/e-shell-backend.h"
@@ -48,7 +46,6 @@ typedef struct _ECalEventTargetBackend ECalEventTargetBackend;
struct _ECalEventTargetBackend {
EEventTarget target;
EShellBackend *shell_backend;
- ESourceList *source_list;
};
struct _ECalEvent {
@@ -66,7 +63,6 @@ ECalEvent * e_cal_event_peek (void);
ECalEventTargetBackend *
e_cal_event_target_new_module (ECalEvent *ece,
EShellBackend *shell_backend,
- ESourceList *source_list,
guint32 flags);
G_END_DECLS
diff --git a/calendar/gui/e-cal-model-calendar.c b/calendar/gui/e-cal-model-calendar.c
index 0c59a12..dc72e1c 100644
--- a/calendar/gui/e-cal-model-calendar.c
+++ b/calendar/gui/e-cal-model-calendar.c
@@ -274,12 +274,15 @@ ecmc_set_value_at (ETableModel *etm,
CalObjModType mod = CALOBJ_MOD_ALL;
ECalComponent *comp;
ECalModelCalendar *model = (ECalModelCalendar *) etm;
+ ESourceRegistry *registry;
GError *error = NULL;
g_return_if_fail (E_IS_CAL_MODEL_CALENDAR (model));
g_return_if_fail (col >= 0 && col < E_CAL_MODEL_CALENDAR_FIELD_LAST);
g_return_if_fail (row >= 0 && row < e_table_model_row_count (etm));
+ registry = e_cal_model_get_registry (E_CAL_MODEL (model));
+
if (col < E_CAL_MODEL_FIELD_LAST) {
E_TABLE_MODEL_CLASS (e_cal_model_calendar_parent_class)->set_value_at (etm, col, row, value);
return;
@@ -318,7 +321,7 @@ ecmc_set_value_at (ETableModel *etm,
if (e_cal_client_modify_object_sync (comp_data->client, comp_data->icalcomp, mod, NULL, &error)) {
gboolean strip_alarms = TRUE;
- if (itip_organizer_is_user (comp, comp_data->client) &&
+ if (itip_organizer_is_user (registry, comp, comp_data->client) &&
send_component_dialog (NULL, comp_data->client, comp, FALSE, &strip_alarms, NULL)) {
ECalComponent *send_comp = NULL;
@@ -339,7 +342,7 @@ ecmc_set_value_at (ETableModel *etm,
}
itip_send_comp (
- E_CAL_COMPONENT_METHOD_REQUEST,
+ registry, E_CAL_COMPONENT_METHOD_REQUEST,
send_comp ? send_comp : comp, comp_data->client,
NULL, NULL, NULL, strip_alarms, FALSE);
@@ -522,7 +525,12 @@ ecmc_fill_component_from_model (ECalModel *model,
* e_cal_model_calendar_new
*/
ECalModel *
-e_cal_model_calendar_new (void)
+e_cal_model_calendar_new (ESourceRegistry *registry)
{
- return g_object_new (E_TYPE_CAL_MODEL_CALENDAR, NULL);
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
+
+ return g_object_new (
+ E_TYPE_CAL_MODEL_CALENDAR,
+ "registry", registry, NULL);
}
+
diff --git a/calendar/gui/e-cal-model-calendar.h b/calendar/gui/e-cal-model-calendar.h
index f29d7d4..9dd9aee 100644
--- a/calendar/gui/e-cal-model-calendar.h
+++ b/calendar/gui/e-cal-model-calendar.h
@@ -72,7 +72,7 @@ struct _ECalModelCalendarClass {
};
GType e_cal_model_calendar_get_type (void);
-ECalModel * e_cal_model_calendar_new (void);
+ECalModel * e_cal_model_calendar_new (ESourceRegistry *registry);
G_END_DECLS
diff --git a/calendar/gui/e-cal-model-memos.c b/calendar/gui/e-cal-model-memos.c
index e95cd15..7ce31d2 100644
--- a/calendar/gui/e-cal-model-memos.c
+++ b/calendar/gui/e-cal-model-memos.c
@@ -250,7 +250,12 @@ ecmm_fill_component_from_model (ECalModel *model,
* e_cal_model_memos_new
*/
ECalModel *
-e_cal_model_memos_new (void)
+e_cal_model_memos_new (ESourceRegistry *registry)
{
- return g_object_new (E_TYPE_CAL_MODEL_MEMOS, NULL);
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
+
+ return g_object_new (
+ E_TYPE_CAL_MODEL_MEMOS,
+ "registry", registry, NULL);
}
+
diff --git a/calendar/gui/e-cal-model-memos.h b/calendar/gui/e-cal-model-memos.h
index 2be1e4d..4490d0b 100644
--- a/calendar/gui/e-cal-model-memos.h
+++ b/calendar/gui/e-cal-model-memos.h
@@ -71,7 +71,7 @@ struct _ECalModelMemosClass {
};
GType e_cal_model_memos_get_type (void);
-ECalModel * e_cal_model_memos_new (void);
+ECalModel * e_cal_model_memos_new (ESourceRegistry *registry);
G_END_DECLS
diff --git a/calendar/gui/e-cal-model-tasks.c b/calendar/gui/e-cal-model-tasks.c
index feacc6d..ca87150 100644
--- a/calendar/gui/e-cal-model-tasks.c
+++ b/calendar/gui/e-cal-model-tasks.c
@@ -1224,9 +1224,13 @@ ecmt_fill_component_from_model (ECalModel *model,
}
ECalModel *
-e_cal_model_tasks_new (void)
+e_cal_model_tasks_new (ESourceRegistry *registry)
{
- return g_object_new (E_TYPE_CAL_MODEL_TASKS, NULL);
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
+
+ return g_object_new (
+ E_TYPE_CAL_MODEL_TASKS,
+ "registry", registry, NULL);
}
gboolean
diff --git a/calendar/gui/e-cal-model-tasks.h b/calendar/gui/e-cal-model-tasks.h
index 54d31cb..04c3f68 100644
--- a/calendar/gui/e-cal-model-tasks.h
+++ b/calendar/gui/e-cal-model-tasks.h
@@ -79,7 +79,7 @@ struct _ECalModelTasksClass {
};
GType e_cal_model_tasks_get_type (void);
-ECalModel * e_cal_model_tasks_new (void);
+ECalModel * e_cal_model_tasks_new (ESourceRegistry *registry);
gboolean e_cal_model_tasks_get_highlight_due_today
(ECalModelTasks *model);
void e_cal_model_tasks_set_highlight_due_today
diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c
index d1ab22c..9536a40 100644
--- a/calendar/gui/e-cal-model.c
+++ b/calendar/gui/e-cal-model.c
@@ -32,14 +32,13 @@
#include <libebackend/e-extensible.h>
#include <libedataserver/e-flag.h>
#include <libedataserver/e-time-utils.h>
+#include <libedataserver/e-source-calendar.h>
#include <libecal/e-cal-client-view.h>
#include <libecal/e-cal-time-util.h>
#include <e-util/e-util.h>
#include <e-util/e-util-enumtypes.h>
-#include <libemail-utils/e-account-utils.h>
-
#include "comp-util.h"
#include "e-cal-model.h"
#include "itip-utils.h"
@@ -66,6 +65,8 @@ typedef struct {
} ECalModelClient;
struct _ECalModelPrivate {
+ ESourceRegistry *registry;
+
/* The list of clients we are managing. Each element is of type ECalModelClient */
GList *clients;
@@ -92,9 +93,6 @@ struct _ECalModelPrivate {
/* The default category */
gchar *default_category;
- /* Addresses for determining icons */
- EAccountList *accounts;
-
/* Whether we display dates in 24-hour format. */
gboolean use_24_hour_format;
@@ -162,6 +160,7 @@ enum {
PROP_DEFAULT_CLIENT,
PROP_DEFAULT_REMINDER_INTERVAL,
PROP_DEFAULT_REMINDER_UNITS,
+ PROP_REGISTRY,
PROP_TIMEZONE,
PROP_USE_24_HOUR_FORMAT,
PROP_USE_DEFAULT_REMINDER,
@@ -196,6 +195,16 @@ G_DEFINE_TYPE (
G_TYPE_OBJECT)
static void
+cal_model_set_registry (ECalModel *model,
+ ESourceRegistry *registry)
+{
+ g_return_if_fail (E_IS_SOURCE_REGISTRY (registry));
+ g_return_if_fail (model->priv->registry == NULL);
+
+ model->priv->registry = g_object_ref (registry);
+}
+
+static void
cal_model_set_property (GObject *object,
guint property_id,
const GValue *value,
@@ -232,6 +241,12 @@ cal_model_set_property (GObject *object,
g_value_get_enum (value));
return;
+ case PROP_REGISTRY:
+ cal_model_set_registry (
+ E_CAL_MODEL (object),
+ g_value_get_object (value));
+ return;
+
case PROP_TIMEZONE:
e_cal_model_set_timezone (
E_CAL_MODEL (object),
@@ -326,6 +341,13 @@ cal_model_get_property (GObject *object,
E_CAL_MODEL (object)));
return;
+ case PROP_REGISTRY:
+ g_value_set_object (
+ value,
+ e_cal_model_get_registry (
+ E_CAL_MODEL (object)));
+ return;
+
case PROP_TIMEZONE:
g_value_set_pointer (
value,
@@ -402,6 +424,11 @@ cal_model_dispose (GObject *object)
priv = E_CAL_MODEL_GET_PRIVATE (object);
+ if (priv->registry != NULL) {
+ g_object_unref (priv->registry);
+ priv->registry = NULL;
+ }
+
if (priv->loading_clients) {
g_cancellable_cancel (priv->loading_clients);
g_object_unref (priv->loading_clients);
@@ -560,6 +587,17 @@ e_cal_model_class_init (ECalModelClass *class)
g_object_class_install_property (
object_class,
+ PROP_REGISTRY,
+ g_param_spec_object (
+ "registry",
+ "Registry",
+ "Data source registry",
+ E_TYPE_SOURCE_REGISTRY,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+
+ g_object_class_install_property (
+ object_class,
PROP_TIMEZONE,
g_param_spec_pointer (
"timezone",
@@ -728,8 +766,6 @@ e_cal_model_init (ECalModel *model)
model->priv->kind = ICAL_NO_COMPONENT;
model->priv->flags = 0;
- model->priv->accounts = e_get_account_list ();
-
model->priv->use_24_hour_format = TRUE;
model->priv->in_added = FALSE;
@@ -963,11 +999,14 @@ ecm_value_at (ETableModel *etm,
ECalModelPrivate *priv;
ECalModelComponent *comp_data;
ECalModel *model = (ECalModel *) etm;
+ ESourceRegistry *registry;
g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL);
priv = model->priv;
+ registry = e_cal_model_get_registry (model);
+
g_return_val_if_fail (col >= 0 && col < E_CAL_MODEL_FIELD_LAST, NULL);
g_return_val_if_fail (row >= 0 && row < priv->objects->len, NULL);
@@ -1011,7 +1050,7 @@ ecm_value_at (ETableModel *etm,
if (e_cal_component_has_recurrences (comp))
retval = 1;
- else if (itip_organizer_is_user (comp, comp_data->client))
+ else if (itip_organizer_is_user (registry, comp, comp_data->client))
retval = 3;
else {
GSList *attendees = NULL, *sl;
@@ -1022,7 +1061,7 @@ ecm_value_at (ETableModel *etm,
const gchar *text;
text = itip_strip_mailto (ca->value);
- if (itip_address_is_user (text)) {
+ if (itip_address_is_user (registry, text)) {
if (ca->delto != NULL)
retval = 3;
else
@@ -1639,7 +1678,7 @@ ecm_value_to_string (ETableModel *etm,
typedef struct {
const gchar *color;
- GList *uris;
+ GList *uids;
} AssignedColorData;
static const gchar *
@@ -1647,7 +1686,10 @@ 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[] = {
@@ -1665,35 +1707,48 @@ ecm_get_color_for_component (ECalModel *model,
g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL);
+ switch (e_cal_client_get_source_type (comp_data->client)) {
+ case E_CAL_CLIENT_SOURCE_TYPE_EVENTS:
+ extension_name = E_SOURCE_EXTENSION_CALENDAR;
+ break;
+ case E_CAL_CLIENT_SOURCE_TYPE_TASKS:
+ extension_name = E_SOURCE_EXTENSION_TASK_LIST;
+ break;
+ case E_CAL_CLIENT_SOURCE_TYPE_MEMOS:
+ extension_name = E_SOURCE_EXTENSION_MEMO_LIST;
+ break;
+ default:
+ g_return_val_if_reached (NULL);
+ }
+
source = e_client_get_source (E_CLIENT (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_client_get_uri (E_CLIENT (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_client_get_uri (E_CLIENT (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;
}
@@ -1751,6 +1806,14 @@ e_cal_model_set_flags (ECalModel *model,
model->priv->flags = flags;
}
+ESourceRegistry *
+e_cal_model_get_registry (ECalModel *model)
+{
+ g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL);
+
+ return model->priv->registry;
+}
+
icaltimezone *
e_cal_model_get_timezone (ECalModel *model)
{
@@ -2080,23 +2143,29 @@ e_cal_model_get_client_list (ECalModel *model)
}
/**
- * e_cal_model_get_client_for_uri:
+ * e_cal_model_get_client_for_source:
* @model: an #ECalModel
- * @uri: Uri for the client to get.
+ * @source: an #ESource
*/
ECalClient *
-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;
+ EClient *client;
- if (!strcmp (uri, e_client_get_uri (E_CLIENT (client_data->client))))
+ client_data = (ECalModelClient *) link->data;
+ client = E_CLIENT (client_data->client);
+ client_source = e_client_get_source (client);
+
+ if (e_source_equal (source, client_source))
return client_data->client;
}
@@ -3473,6 +3542,7 @@ e_cal_model_get_attendees_status_info (ECalModel *model,
{ ICAL_PARTSTAT_X, NULL, -1 }
};
+ ESourceRegistry *registry;
GSList *attendees = NULL, *a;
gboolean have = FALSE;
gchar *res = NULL;
@@ -3480,8 +3550,10 @@ e_cal_model_get_attendees_status_info (ECalModel *model,
g_return_val_if_fail (E_IS_CAL_MODEL (model), NULL);
+ registry = e_cal_model_get_registry (model);
+
if (!comp || !e_cal_component_has_attendees (comp) ||
- !itip_organizer_is_user_ex (comp, cal_client, TRUE))
+ !itip_organizer_is_user_ex (registry, comp, cal_client, TRUE))
return NULL;
e_cal_component_get_attendee_list (comp, &attendees);
diff --git a/calendar/gui/e-cal-model.h b/calendar/gui/e-cal-model.h
index 3b4089b..68a6235 100644
--- a/calendar/gui/e-cal-model.h
+++ b/calendar/gui/e-cal-model.h
@@ -29,6 +29,7 @@
#include <e-util/e-util-enums.h>
#include <table/e-table-model.h>
#include <libecal/e-cal-client.h>
+#include <libedataserver/e-source-registry.h>
#include "e-cell-date-edit-text.h"
/* Standard GObject macros */
@@ -186,6 +187,8 @@ void e_cal_model_set_confirm_delete (ECalModel *model,
ECalModelFlags e_cal_model_get_flags (ECalModel *model);
void e_cal_model_set_flags (ECalModel *model,
ECalModelFlags flags);
+ESourceRegistry *
+ e_cal_model_get_registry (ECalModel *model);
icaltimezone * e_cal_model_get_timezone (ECalModel *model);
void e_cal_model_set_timezone (ECalModel *model,
icaltimezone *zone);
@@ -244,8 +247,9 @@ ECalClient * e_cal_model_get_default_client (ECalModel *model);
void e_cal_model_set_default_client (ECalModel *model,
ECalClient *client);
GList * e_cal_model_get_client_list (ECalModel *model);
-ECalClient * e_cal_model_get_client_for_uri (ECalModel *model,
- const gchar *uri);
+ECalClient * e_cal_model_get_client_for_source
+ (ECalModel *model,
+ ESource *source);
void e_cal_model_add_client (ECalModel *model,
ECalClient *cal_client);
void e_cal_model_remove_client (ECalModel *model,
diff --git a/calendar/gui/e-cal-source-config.c b/calendar/gui/e-cal-source-config.c
index 4710fa5..4b462a7 100644
--- a/calendar/gui/e-cal-source-config.c
+++ b/calendar/gui/e-cal-source-config.c
@@ -47,7 +47,7 @@ G_DEFINE_TYPE (
E_TYPE_SOURCE_CONFIG)
static ESource *
-cal_source_config_get_default (ESourceConfig *config)
+cal_source_config_ref_default (ESourceConfig *config)
{
ECalSourceConfigPrivate *priv;
ESourceRegistry *registry;
@@ -56,11 +56,11 @@ cal_source_config_get_default (ESourceConfig *config)
registry = e_source_config_get_registry (config);
if (priv->source_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS)
- return e_source_registry_get_default_calendar (registry);
+ return e_source_registry_ref_default_calendar (registry);
else if (priv->source_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS)
- return e_source_registry_get_default_memo_list (registry);
+ return e_source_registry_ref_default_memo_list (registry);
else if (priv->source_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS)
- return e_source_registry_get_default_task_list (registry);
+ return e_source_registry_ref_default_task_list (registry);
g_return_val_if_reached (NULL);
}
@@ -188,7 +188,7 @@ cal_source_config_constructed (GObject *object)
priv->default_button = g_object_ref_sink (widget);
gtk_widget_show (widget);
- default_source = cal_source_config_get_default (config);
+ default_source = cal_source_config_ref_default (config);
original_source = e_source_config_get_original_source (config);
if (original_source != NULL) {
@@ -198,6 +198,8 @@ cal_source_config_constructed (GObject *object)
g_object_set (priv->default_button, "active", active, NULL);
}
+ g_object_unref (default_source);
+
e_source_config_insert_widget (
config, NULL, _("Color:"), priv->color_button);
@@ -274,7 +276,7 @@ cal_source_config_commit_changes (ESourceConfig *config,
class = E_SOURCE_CONFIG_CLASS (e_cal_source_config_parent_class);
class->commit_changes (config, scratch_source);
- default_source = cal_source_config_get_default (config);
+ default_source = cal_source_config_ref_default (config);
/* The default setting is a little tricky to get right. If
* the toggle button is active, this ESource is now the default.
@@ -286,6 +288,8 @@ cal_source_config_commit_changes (ESourceConfig *config,
cal_source_config_set_default (config, scratch_source);
else if (e_source_equal (scratch_source, default_source))
cal_source_config_set_default (config, NULL);
+
+ g_object_unref (default_source);
}
static void
diff --git a/calendar/gui/e-calendar-selector.c b/calendar/gui/e-calendar-selector.c
index 4add4a3..92f0ffd 100644
--- a/calendar/gui/e-calendar-selector.c
+++ b/calendar/gui/e-calendar-selector.c
@@ -18,13 +18,12 @@
* Boston, MA 02110-1301, USA.
*/
-#ifdef HAVE_CONFIG_H
#include <config.h>
-#endif
#include "e-calendar-selector.h"
#include <libecal/e-cal-client.h>
+#include <libedataserver/e-source-calendar.h>
#include <libedataserverui/e-client-utils.h>
#include "e-util/e-selection.h"
@@ -151,6 +150,24 @@ client_opened_cb (GObject *source_object,
icalcomponent_free (icalcomp);
}
+static void
+calendar_selector_constructed (GObject *object)
+{
+ ESourceSelector *selector;
+ ESourceRegistry *registry;
+ ESource *source;
+
+ selector = E_SOURCE_SELECTOR (object);
+ registry = e_source_selector_get_registry (selector);
+ source = e_source_registry_ref_default_calendar (registry);
+ e_source_selector_set_primary_selection (selector, source);
+ g_object_unref (source);
+
+ /* Chain up to parent's constructed() method. */
+ G_OBJECT_CLASS (e_calendar_selector_parent_class)->
+ constructed (object);
+}
+
static gboolean
calendar_selector_data_dropped (ESourceSelector *selector,
GtkSelectionData *selection_data,
@@ -180,7 +197,6 @@ calendar_selector_data_dropped (ESourceSelector *selector,
e_client_utils_open_new (
destination, E_CLIENT_SOURCE_TYPE_EVENTS, FALSE, NULL,
- e_client_utils_authenticate_handler, NULL,
client_opened_cb, icalcomp);
success = TRUE;
@@ -198,10 +214,14 @@ exit:
static void
e_calendar_selector_class_init (ECalendarSelectorClass *class)
{
+ GObjectClass *object_class;
ESourceSelectorClass *source_selector_class;
g_type_class_add_private (class, sizeof (ECalendarSelectorPrivate));
+ object_class = G_OBJECT_CLASS (class);
+ object_class->constructed = calendar_selector_constructed;
+
source_selector_class = E_SOURCE_SELECTOR_CLASS (class);
source_selector_class->data_dropped = calendar_selector_data_dropped;
}
@@ -219,11 +239,12 @@ e_calendar_selector_init (ECalendarSelector *selector)
}
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 736bda3..3ad69e3 100644
--- a/calendar/gui/e-calendar-view.c
+++ b/calendar/gui/e-calendar-view.c
@@ -169,6 +169,7 @@ calendar_view_delete_event (ECalendarView *cal_view,
ECalModel *model;
ECalComponent *comp;
ECalComponentVType vtype;
+ ESourceRegistry *registry;
gboolean delete = TRUE;
GError *error = NULL;
@@ -176,6 +177,7 @@ calendar_view_delete_event (ECalendarView *cal_view,
return;
model = e_calendar_view_get_model (cal_view);
+ registry = e_cal_model_get_registry (model);
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
@@ -223,13 +225,13 @@ calendar_view_delete_event (ECalendarView *cal_view,
const gchar *uid;
gchar *rid = NULL;
- if ((itip_organizer_is_user (comp, event->comp_data->client) ||
- itip_sentby_is_user (comp, event->comp_data->client))
+ if ((itip_organizer_is_user (registry, comp, event->comp_data->client) ||
+ itip_sentby_is_user (registry, comp, event->comp_data->client))
&& cancel_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (cal_view)),
event->comp_data->client,
comp, TRUE))
itip_send_comp (
- E_CAL_COMPONENT_METHOD_CANCEL,
+ registry, E_CAL_COMPONENT_METHOD_CANCEL,
comp, event->comp_data->client, NULL, NULL,
NULL, TRUE, FALSE);
@@ -694,13 +696,18 @@ clipboard_get_calendar_data (ECalendarView *cal_view,
static void
calendar_view_paste_clipboard (ESelectable *selectable)
{
+ ECalModel *model;
ECalendarView *cal_view;
ECalendarViewPrivate *priv;
+ ESourceRegistry *registry;
GtkClipboard *clipboard;
cal_view = E_CALENDAR_VIEW (selectable);
priv = cal_view->priv;
+ model = e_calendar_view_get_model (cal_view);
+ registry = e_cal_model_get_registry (model);
+
clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
/* Paste text into an event being edited. */
@@ -743,14 +750,15 @@ calendar_view_paste_clipboard (ESelectable *selectable)
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (comp_data->icalcomp));
- if ((itip_organizer_is_user (comp, comp_data->client) ||
- itip_sentby_is_user (comp, comp_data->client))
+ if ((itip_organizer_is_user (registry, comp, comp_data->client) ||
+ itip_sentby_is_user (registry, comp, comp_data->client))
&& cancel_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (cal_view)),
comp_data->client, comp, TRUE))
itip_send_comp (
- E_CAL_COMPONENT_METHOD_CANCEL,
- comp, comp_data->client, NULL, NULL,
- NULL, TRUE, FALSE);
+ registry,
+ E_CAL_COMPONENT_METHOD_CANCEL,
+ comp, comp_data->client,
+ NULL, NULL, NULL, TRUE, FALSE);
e_cal_component_get_uid (comp, &uid);
if (e_cal_component_is_instance (comp)) {
@@ -1007,7 +1015,9 @@ e_calendar_view_add_event (ECalendarView *cal_view,
icalcomponent *icalcomp,
gboolean in_top_canvas)
{
+ ECalModel *model;
ECalComponent *comp;
+ ESourceRegistry *registry;
struct icaltimetype itime, old_dtstart, old_dtend;
time_t tt_start, tt_end, new_dtstart = 0;
struct icaldurationtype ic_dur, ic_oneday;
@@ -1018,6 +1028,9 @@ e_calendar_view_add_event (ECalendarView *cal_view,
gboolean ret = TRUE;
GError *error = NULL;
+ model = e_calendar_view_get_model (cal_view);
+ registry = e_cal_model_get_registry (model);
+
start_offset = 0;
end_offset = 0;
@@ -1113,14 +1126,14 @@ e_calendar_view_add_event (ECalendarView *cal_view,
g_free (uid);
}
- if ((itip_organizer_is_user (comp, client) ||
- itip_sentby_is_user (comp, client)) &&
+ if ((itip_organizer_is_user (registry, comp, client) ||
+ itip_sentby_is_user (registry, comp, client)) &&
send_component_dialog (
(GtkWindow *) gtk_widget_get_toplevel (
GTK_WIDGET (cal_view)),
client, comp, TRUE, &strip_alarms, NULL)) {
itip_send_comp (
- E_CAL_COMPONENT_METHOD_REQUEST,
+ registry, E_CAL_COMPONENT_METHOD_REQUEST,
comp, client, NULL, NULL, NULL, strip_alarms,
FALSE);
}
@@ -1326,10 +1339,12 @@ e_calendar_view_delete_selected_occurrence (ECalendarView *cal_view)
ECalComponent *comp;
ECalendarViewEvent *event;
ECalComponentVType vtype;
+ ESourceRegistry *registry;
gboolean delete = TRUE;
GError *error = NULL;
model = e_calendar_view_get_model (cal_view);
+ registry = e_cal_model_get_registry (model);
selected = e_calendar_view_get_selected_events (cal_view);
if (!selected)
@@ -1401,8 +1416,8 @@ e_calendar_view_delete_selected_occurrence (ECalendarView *cal_view)
e_cal_component_free_datetime (&dt);
- if ((itip_organizer_is_user (comp, event->comp_data->client) ||
- itip_sentby_is_user (comp, event->comp_data->client))
+ if ((itip_organizer_is_user (registry, comp, event->comp_data->client) ||
+ itip_sentby_is_user (registry, comp, event->comp_data->client))
&& cancel_component_dialog ((GtkWindow *) gtk_widget_get_toplevel (GTK_WIDGET (cal_view)),
event->comp_data->client,
comp, TRUE) && !e_cal_client_check_save_schedules (event->comp_data->client)) {
@@ -1419,7 +1434,7 @@ e_calendar_view_delete_selected_occurrence (ECalendarView *cal_view)
}
itip_send_comp (
- E_CAL_COMPONENT_METHOD_CANCEL,
+ registry, E_CAL_COMPONENT_METHOD_CANCEL,
comp, event->comp_data->client, NULL, NULL,
NULL, TRUE, FALSE);
}
@@ -1718,19 +1733,24 @@ e_calendar_view_edit_appointment (ECalendarView *cal_view,
icalcomponent *icalcomp,
EEditEventMode mode)
{
+ ECalModel *model;
+ ESourceRegistry *registry;
guint32 flags = 0;
g_return_if_fail (E_IS_CALENDAR_VIEW (cal_view));
g_return_if_fail (E_IS_CAL_CLIENT (client));
g_return_if_fail (icalcomp != NULL);
+ model = e_calendar_view_get_model (cal_view);
+ registry = e_cal_model_get_registry (model);
+
if ((mode == EDIT_EVENT_AUTODETECT && icalcomponent_get_first_property (icalcomp, ICAL_ATTENDEE_PROPERTY) != NULL)
|| mode == EDIT_EVENT_FORCE_MEETING) {
ECalComponent *comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (icalcomp));
flags |= COMP_EDITOR_MEETING;
- if (itip_organizer_is_user (comp, client) ||
- itip_sentby_is_user (comp, client) ||
+ if (itip_organizer_is_user (registry, comp, client) ||
+ itip_sentby_is_user (registry, comp, client) ||
!e_cal_component_has_attendees (comp))
flags |= COMP_EDITOR_USER_ORG;
g_object_unref (comp);
@@ -1747,18 +1767,23 @@ e_calendar_view_modify_and_send (ECalendarView *cal_view,
GtkWindow *toplevel,
gboolean new)
{
+ ECalModel *model;
+ ESourceRegistry *registry;
gboolean only_new_attendees = FALSE;
GError *error = NULL;
g_return_if_fail (E_IS_CALENDAR_VIEW (cal_view));
+ model = e_calendar_view_get_model (cal_view);
+ registry = e_cal_model_get_registry (model);
+
e_cal_component_commit_sequence (comp);
if (e_cal_client_modify_object_sync (client, e_cal_component_get_icalcomponent (comp), mod, NULL, &error)) {
gboolean strip_alarms = TRUE;
- if ((itip_organizer_is_user (comp, client) ||
- itip_sentby_is_user (comp, client)) &&
+ if ((itip_organizer_is_user (registry, comp, client) ||
+ itip_sentby_is_user (registry, comp, client)) &&
send_component_dialog (toplevel, client, comp, new, &strip_alarms, &only_new_attendees)) {
ECalComponent *send_comp = NULL;
@@ -1782,7 +1807,7 @@ e_calendar_view_modify_and_send (ECalendarView *cal_view,
}
itip_send_comp (
- E_CAL_COMPONENT_METHOD_REQUEST,
+ registry, E_CAL_COMPONENT_METHOD_REQUEST,
send_comp ? send_comp : comp, client, NULL,
NULL, NULL, strip_alarms, only_new_attendees);
diff --git a/calendar/gui/e-day-view.c b/calendar/gui/e-day-view.c
index ad7fd78..cc1bdc8 100644
--- a/calendar/gui/e-day-view.c
+++ b/calendar/gui/e-day-view.c
@@ -296,7 +296,8 @@ static void e_day_view_foreach_event_with_uid (EDayView *day_view,
static void e_day_view_free_events (EDayView *day_view);
static void e_day_view_free_event_array (EDayView *day_view,
GArray *array);
-static gint e_day_view_add_event (ECalComponent *comp,
+static gint e_day_view_add_event (ESourceRegistry *registry,
+ ECalComponent *comp,
time_t start,
time_t end,
gpointer data);
@@ -715,9 +716,14 @@ process_component (EDayView *day_view,
{
const gchar *uid;
gchar *rid = NULL;
+ ECalModel *model;
ECalComponent *comp;
+ ESourceRegistry *registry;
AddEventData add_event_data;
+ model = e_calendar_view_get_model (E_CALENDAR_VIEW (day_view));
+ registry = e_cal_model_get_registry (model);
+
/* If our time hasn't been set yet, just return. */
if (day_view->lower == 0 && day_view->upper == 0)
return;
@@ -741,7 +747,7 @@ process_component (EDayView *day_view,
add_event_data.day_view = day_view;
add_event_data.comp_data = comp_data;
e_day_view_add_event (
- comp, comp_data->instance_start,
+ registry, comp, comp_data->instance_start,
comp_data->instance_end, &add_event_data);
g_object_unref (comp);
@@ -2081,7 +2087,8 @@ e_day_view_remove_event_cb (EDayView *day_view,
/* Checks if the users participation status is NEEDS-ACTION and shows the summary as bold text */
static void
-set_text_as_bold (EDayViewEvent *event)
+set_text_as_bold (EDayViewEvent *event,
+ ESourceRegistry *registry)
{
ECalComponent *comp;
GSList *attendees = NULL, *l;
@@ -2093,7 +2100,8 @@ set_text_as_bold (EDayViewEvent *event)
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
- address = itip_get_comp_attendee (comp, event->comp_data->client);
+ address = itip_get_comp_attendee (
+ registry, comp, event->comp_data->client);
e_cal_component_get_attendee_list (comp, &attendees);
for (l = attendees; l; l = l->next) {
ECalComponentAttendee *attendee = l->data;
@@ -2125,6 +2133,8 @@ e_day_view_update_event_label (EDayView *day_view,
{
EDayViewEvent *event;
ECalendarView *cal_view;
+ ESourceRegistry *registry;
+ ECalModel *model;
gboolean free_text = FALSE, editing_event = FALSE, short_event = FALSE;
const gchar *summary;
gchar *text;
@@ -2150,8 +2160,11 @@ e_day_view_update_event_label (EDayView *day_view,
interval = event->end_minute - event->start_minute;
cal_view = E_CALENDAR_VIEW (day_view);
+ model = e_calendar_view_get_model (cal_view);
time_divisions = e_calendar_view_get_time_divisions (cal_view);
+ registry = e_cal_model_get_registry (model);
+
if ((interval / time_divisions) >= 2)
short_event = FALSE;
else if ((interval % time_divisions) == 0) {
@@ -2181,7 +2194,7 @@ e_day_view_update_event_label (EDayView *day_view,
if (e_client_check_capability (E_CLIENT (event->comp_data->client), CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
&& e_cal_util_component_has_attendee (event->comp_data->icalcomp))
- set_text_as_bold (event);
+ set_text_as_bold (event, registry);
if (free_text)
g_free (text);
@@ -2192,9 +2205,17 @@ e_day_view_update_long_event_label (EDayView *day_view,
gint event_num)
{
EDayViewEvent *event;
+ ECalendarView *cal_view;
+ ECalModel *model;
+ ESourceRegistry *registry;
const gchar *summary;
gboolean free_text = FALSE;
+ cal_view = E_CALENDAR_VIEW (day_view);
+ model = e_calendar_view_get_model (cal_view);
+
+ registry = e_cal_model_get_registry (model);
+
if (!is_array_index_in_bounds (day_view->long_events, event_num))
return;
@@ -2216,7 +2237,7 @@ e_day_view_update_long_event_label (EDayView *day_view,
if (e_client_check_capability (E_CLIENT (event->comp_data->client), CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
&& e_cal_util_component_has_attendee (event->comp_data->icalcomp))
- set_text_as_bold (event);
+ set_text_as_bold (event, registry);
}
/* Finds the day and index of the event with the given canvas item.
@@ -4219,11 +4240,16 @@ e_day_view_finish_long_event_resize (EDayView *day_view)
ECalComponentDateTime date;
struct icaltimetype itt;
time_t dt;
+ ECalModel *model;
ECalClient *client;
+ ESourceRegistry *registry;
CalObjModType mod = CALOBJ_MOD_ALL;
GtkWindow *toplevel;
gint is_date;
+ model = e_calendar_view_get_model (E_CALENDAR_VIEW (day_view));
+ registry = e_cal_model_get_registry (model);
+
event_num = day_view->resize_event_num;
if (!is_array_index_in_bounds (day_view->long_events, event_num))
@@ -4244,7 +4270,7 @@ e_day_view_finish_long_event_resize (EDayView *day_view)
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
if (e_cal_component_has_attendees (comp) &&
- !itip_organizer_is_user (comp, client)) {
+ !itip_organizer_is_user (registry, comp, client)) {
g_object_unref (comp);
e_day_view_abort_resize (day_view);
return;
@@ -4338,10 +4364,15 @@ e_day_view_finish_resize (EDayView *day_view)
ECalComponentDateTime date;
struct icaltimetype itt;
time_t dt;
+ ECalModel *model;
ECalClient *client;
+ ESourceRegistry *registry;
CalObjModType mod = CALOBJ_MOD_ALL;
GtkWindow *toplevel;
+ model = e_calendar_view_get_model (E_CALENDAR_VIEW (day_view));
+ registry = e_cal_model_get_registry (model);
+
if (day_view->resize_event_num == -1)
return;
@@ -4366,7 +4397,7 @@ e_day_view_finish_resize (EDayView *day_view)
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
if (e_cal_component_has_attendees (comp) &&
- !itip_organizer_is_user (comp, client)) {
+ !itip_organizer_is_user (registry, comp, client)) {
g_object_unref (comp);
e_day_view_abort_resize (day_view);
return;
@@ -4519,7 +4550,8 @@ e_day_view_free_event_array (EDayView *day_view,
/* This adds one event to the view, adding it to the appropriate array. */
static gboolean
-e_day_view_add_event (ECalComponent *comp,
+e_day_view_add_event (ESourceRegistry *registry,
+ ECalComponent *comp,
time_t start,
time_t end,
gpointer data)
@@ -4586,8 +4618,8 @@ e_day_view_add_event (ECalComponent *comp,
event.different_timezone = TRUE;
if (!e_cal_component_has_attendees (comp) ||
- itip_organizer_is_user (comp, event.comp_data->client) ||
- itip_sentby_is_user (comp, event.comp_data->client))
+ itip_organizer_is_user (registry, comp, event.comp_data->client) ||
+ itip_sentby_is_user (registry, comp, event.comp_data->client))
event.is_editable = TRUE;
else
event.is_editable = FALSE;
@@ -5129,9 +5161,11 @@ e_day_view_add_new_event_in_selected_range (EDayView *day_view,
struct icaltimetype start_tt, end_tt;
const gchar *uid;
AddEventData add_event_data;
+ ESourceRegistry *registry;
model = e_calendar_view_get_model (E_CALENDAR_VIEW (day_view));
+ registry = e_cal_model_get_registry (model);
client = e_cal_model_get_default_client (model);
/* Check if the client is read only */
@@ -5182,7 +5216,7 @@ e_day_view_add_new_event_in_selected_range (EDayView *day_view,
* to the server until the user finishes editing it. */
add_event_data.day_view = day_view;
add_event_data.comp_data = NULL;
- e_day_view_add_event (comp, dtstart, dtend, &add_event_data);
+ e_day_view_add_event (registry, comp, dtstart, dtend, &add_event_data);
e_day_view_check_layout (day_view);
gtk_widget_queue_draw (day_view->top_canvas);
gtk_widget_queue_draw (day_view->main_canvas);
@@ -6497,13 +6531,18 @@ e_day_view_change_event_time (EDayView *day_view,
ECalComponent *comp;
ECalComponentDateTime date;
struct icaltimetype itt;
+ ECalModel *model;
ECalClient *client;
+ ESourceRegistry *registry;
CalObjModType mod = CALOBJ_MOD_ALL;
GtkWindow *toplevel;
day = day_view->editing_event_day;
event_num = day_view->editing_event_num;
+ model = e_calendar_view_get_model (E_CALENDAR_VIEW (day_view));
+ registry = e_cal_model_get_registry (model);
+
if (!is_array_index_in_bounds (day_view->events[day], event_num))
return;
@@ -6522,7 +6561,7 @@ e_day_view_change_event_time (EDayView *day_view,
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
if (e_cal_component_has_attendees (comp) &&
- !itip_organizer_is_user (comp, client)) {
+ !itip_organizer_is_user (registry, comp, client)) {
g_object_unref (comp);
return;
}
@@ -7940,6 +7979,7 @@ e_day_view_on_top_canvas_drag_data_received (GtkWidget *widget,
gint start_offset, end_offset;
ECalComponent *comp;
ECalComponentDateTime date;
+ ESourceRegistry *registry;
struct icaltimetype itt;
time_t dt;
gboolean all_day_event;
@@ -7961,6 +8001,8 @@ e_day_view_on_top_canvas_drag_data_received (GtkWidget *widget,
cal_view = E_CALENDAR_VIEW (day_view);
model = e_calendar_view_get_model (cal_view);
+
+ registry = e_cal_model_get_registry (model);
client = e_cal_model_get_default_client (model);
/* Note that we only support DnD within the EDayView at present. */
@@ -8025,7 +8067,7 @@ e_day_view_on_top_canvas_drag_data_received (GtkWidget *widget,
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
if (e_cal_component_has_attendees (comp) &&
- !itip_organizer_is_user (comp, client)) {
+ !itip_organizer_is_user (registry, comp, client)) {
g_object_unref (comp);
return;
}
@@ -8191,6 +8233,7 @@ e_day_view_on_main_canvas_drag_data_received (GtkWidget *widget,
ECalModel *model;
ECalComponent *comp;
ECalComponentDateTime date;
+ ESourceRegistry *registry;
struct icaltimetype itt;
time_t dt;
ECalClient *client;
@@ -8202,6 +8245,8 @@ e_day_view_on_main_canvas_drag_data_received (GtkWidget *widget,
model = e_calendar_view_get_model (cal_view);
time_divisions = e_calendar_view_get_time_divisions (cal_view);
+ registry = e_cal_model_get_registry (model);
+
data = gtk_selection_data_get_data (selection_data);
format = gtk_selection_data_get_format (selection_data);
length = gtk_selection_data_get_length (selection_data);
@@ -8279,7 +8324,7 @@ e_day_view_on_main_canvas_drag_data_received (GtkWidget *widget,
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
if (e_cal_component_has_attendees (comp) &&
- !itip_organizer_is_user (comp, client)) {
+ !itip_organizer_is_user (registry, comp, client)) {
g_object_unref (comp);
return;
}
diff --git a/calendar/gui/e-meeting-list-view.c b/calendar/gui/e-meeting-list-view.c
index 76d20d2..6368063 100644
--- a/calendar/gui/e-meeting-list-view.c
+++ b/calendar/gui/e-meeting-list-view.c
@@ -38,6 +38,7 @@
#include "e-meeting-list-view.h"
#include "itip-utils.h"
#include <libebook/e-destination.h>
+#include <shell/e-shell.h>
#include "e-select-names-renderer.h"
#define E_MEETING_LIST_VIEW_GET_PRIVATE(obj) \
@@ -146,13 +147,19 @@ static void
e_meeting_list_view_init (EMeetingListView *view)
{
ENameSelectorDialog *name_selector_dialog;
+ ESourceRegistry *registry;
+ EShell *shell;
gint i;
view->priv = E_MEETING_LIST_VIEW_GET_PRIVATE (view);
view->priv->renderers = g_hash_table_new (g_direct_hash, g_int_equal);
- view->priv->name_selector = e_name_selector_new ();
+ /* FIXME Refactor this so we don't need e_shell_get_default(). */
+ shell = e_shell_get_default ();
+ registry = e_shell_get_registry (shell);
+
+ view->priv->name_selector = e_name_selector_new (registry);
for (i = 0; sections[i]; i++)
add_section (view->priv->name_selector, sections[i]);
@@ -875,7 +882,7 @@ process_section (EMeetingListView *view,
ENameSelectorModel *model;
EContactStore *c_store;
GSList *clients, *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);
@@ -884,7 +891,11 @@ process_section (EMeetingListView *view,
for (l = clients; l; l = l->next) {
EBookClient *b = l->data;
- if (g_str_equal (uri, e_client_get_uri (E_CLIENT (b)))) {
+ ESource *source;
+
+ source = e_client_get_source (E_CLIENT (b));
+
+ if (g_strcmp0 (uid, e_source_get_uid (source)) == 0) {
book_client = b;
break;
}
diff --git a/calendar/gui/e-meeting-store.c b/calendar/gui/e-meeting-store.c
index 0fbf327..3b2590c 100644
--- a/calendar/gui/e-meeting-store.c
+++ b/calendar/gui/e-meeting-store.c
@@ -35,12 +35,13 @@
#include <libebackend/e-extensible.h>
#include <libedataserver/e-data-server-util.h>
#include <libedataserver/e-proxy.h>
+#include <libedataserver/e-source-mail-identity.h>
+#include <libedataserver/e-source-registry.h>
#include <libedataserverui/e-passwords.h>
+#include <shell/e-shell.h>
#include <e-util/e-util-enumtypes.h>
-#include <libemail-utils/e-account-utils.h>
-
#include "itip-utils.h"
#include "e-meeting-utils.h"
#include "e-meeting-attendee.h"
@@ -1145,31 +1146,37 @@ e_meeting_store_find_self (EMeetingStore *store,
gint *row)
{
EMeetingAttendee *attendee = NULL;
- EAccountList *account_list;
- EIterator *iterator;
+ ESourceRegistry *registry;
+ EShell *shell;
+ GList *list, *iter;
+ const gchar *extension_name;
g_return_val_if_fail (E_IS_MEETING_STORE (store), NULL);
- account_list = e_get_account_list ();
+ /* FIXME Refactor this so we don't need e_shell_get_default(). */
+ shell = e_shell_get_default ();
+ registry = e_shell_get_registry (shell);
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
- iterator = e_list_get_iterator (E_LIST (account_list));
+ list = e_source_registry_list_sources (registry, extension_name);
- while (e_iterator_is_valid (iterator)) {
- EAccount *account;
+ for (iter = list; iter != NULL; iter = g_list_next (iter)) {
+ ESource *source = E_SOURCE (iter->data);
+ ESourceMailIdentity *extension;
+ const gchar *address;
- /* XXX EIterator misuses const. */
- account = (EAccount *) e_iterator_get (iterator);
+ extension = e_source_get_extension (source, extension_name);
+ address = e_source_mail_identity_get_address (extension);
- attendee = e_meeting_store_find_attendee (
- store, account->id->address, row);
+ if (address != NULL)
+ attendee = e_meeting_store_find_attendee (
+ store, address, row);
if (attendee != NULL)
break;
-
- e_iterator_next (iterator);
}
- g_object_unref (iterator);
+ g_list_free_full (list, (GDestroyNotify) g_object_unref);
return attendee;
}
diff --git a/calendar/gui/e-memo-list-selector.c b/calendar/gui/e-memo-list-selector.c
index 51466da..119913c 100644
--- a/calendar/gui/e-memo-list-selector.c
+++ b/calendar/gui/e-memo-list-selector.c
@@ -18,14 +18,14 @@
* Boston, MA 02110-1301, USA.
*/
-#ifdef HAVE_CONFIG_H
#include <config.h>
-#endif
+#include <gconf/gconf-client.h>
#include "e-memo-list-selector.h"
#include <string.h>
#include <libecal/e-cal-client.h>
+#include <libedataserver/e-source-calendar.h>
#include <libedataserverui/e-client-utils.h>
#include "e-util/e-selection.h"
#include "calendar/gui/comp-util.h"
@@ -163,8 +163,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;
@@ -204,17 +204,17 @@ 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_ref_source (registry, source_uid);
- if (!E_IS_SOURCE (source) || e_source_get_readonly (source))
- goto exit;
-
- e_client_utils_open_new (source, E_CLIENT_SOURCE_TYPE_MEMOS, TRUE, NULL,
- e_client_utils_authenticate_handler, NULL,
- client_opened_cb, g_strdup (old_uid));
+ if (source != NULL) {
+ e_client_utils_open_new (
+ source, E_CLIENT_SOURCE_TYPE_MEMOS, TRUE, NULL,
+ client_opened_cb, g_strdup (old_uid));
+ g_object_unref (source);
+ }
- exit:
+exit:
g_free (old_uid);
return success;
@@ -287,6 +287,24 @@ exit:
g_free (dd);
}
+static void
+memo_list_selector_constructed (GObject *object)
+{
+ ESourceSelector *selector;
+ ESourceRegistry *registry;
+ ESource *source;
+
+ selector = E_SOURCE_SELECTOR (object);
+ registry = e_source_selector_get_registry (selector);
+ source = e_source_registry_ref_default_memo_list (registry);
+ e_source_selector_set_primary_selection (selector, source);
+ g_object_unref (source);
+
+ /* Chain up to parent's constructed() method. */
+ G_OBJECT_CLASS (e_memo_list_selector_parent_class)->
+ constructed (object);
+}
+
static gboolean
memo_list_selector_data_dropped (ESourceSelector *selector,
GtkSelectionData *selection_data,
@@ -301,8 +319,8 @@ memo_list_selector_data_dropped (ESourceSelector *selector,
dd->action = action;
dd->list = cal_comp_selection_get_string_list (selection_data);
- e_client_utils_open_new (destination, E_CLIENT_SOURCE_TYPE_MEMOS, TRUE, NULL,
- e_client_utils_authenticate_handler, NULL,
+ e_client_utils_open_new (
+ destination, E_CLIENT_SOURCE_TYPE_MEMOS, TRUE, NULL,
client_opened_for_drop_cb, dd);
return TRUE;
@@ -311,10 +329,14 @@ memo_list_selector_data_dropped (ESourceSelector *selector,
static void
e_memo_list_selector_class_init (EMemoListSelectorClass *class)
{
+ GObjectClass *object_class;
ESourceSelectorClass *source_selector_class;
g_type_class_add_private (class, sizeof (EMemoListSelectorPrivate));
+ object_class = G_OBJECT_CLASS (class);
+ object_class->constructed = memo_list_selector_constructed;
+
source_selector_class = E_SOURCE_SELECTOR_CLASS (class);
source_selector_class->data_dropped = memo_list_selector_data_dropped;
}
@@ -332,11 +354,12 @@ e_memo_list_selector_init (EMemoListSelector *selector)
}
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 fd6a791..9df2fd3 100644
--- a/calendar/gui/e-task-list-selector.c
+++ b/calendar/gui/e-task-list-selector.c
@@ -18,14 +18,14 @@
* Boston, MA 02110-1301, USA.
*/
-#ifdef HAVE_CONFIG_H
#include <config.h>
-#endif
+#include <gconf/gconf-client.h>
#include "e-task-list-selector.h"
#include <string.h>
#include <libecal/e-cal-client.h>
+#include <libedataserver/e-source-calendar.h>
#include <libedataserverui/e-client-utils.h>
#include "e-util/e-selection.h"
#include "calendar/gui/comp-util.h"
@@ -164,8 +164,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;
@@ -206,17 +206,17 @@ 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_ref_source (registry, source_uid);
- if (!E_IS_SOURCE (source) || e_source_get_readonly (source))
- goto exit;
-
- e_client_utils_open_new (source, E_CLIENT_SOURCE_TYPE_MEMOS, TRUE, NULL,
- e_client_utils_authenticate_handler, NULL,
- client_opened_cb, g_strdup (old_uid));
+ if (source != NULL) {
+ e_client_utils_open_new (
+ source, E_CLIENT_SOURCE_TYPE_MEMOS, TRUE, NULL,
+ client_opened_cb, g_strdup (old_uid));
+ g_object_unref (source);
+ }
- exit:
+exit:
g_free (old_uid);
return success;
@@ -289,6 +289,24 @@ exit:
g_free (dd);
}
+static void
+task_list_selector_constructed (GObject *object)
+{
+ ESourceSelector *selector;
+ ESourceRegistry *registry;
+ ESource *source;
+
+ selector = E_SOURCE_SELECTOR (object);
+ registry = e_source_selector_get_registry (selector);
+ source = e_source_registry_ref_default_task_list (registry);
+ e_source_selector_set_primary_selection (selector, source);
+ g_object_unref (source);
+
+ /* Chain up to parent's constructed() method. */
+ G_OBJECT_CLASS (e_task_list_selector_parent_class)->
+ constructed (object);
+}
+
static gboolean
task_list_selector_data_dropped (ESourceSelector *selector,
GtkSelectionData *selection_data,
@@ -303,8 +321,8 @@ task_list_selector_data_dropped (ESourceSelector *selector,
dd->action = action;
dd->list = cal_comp_selection_get_string_list (selection_data);
- e_client_utils_open_new (destination, E_CLIENT_SOURCE_TYPE_TASKS, TRUE, NULL,
- e_client_utils_authenticate_handler, NULL,
+ e_client_utils_open_new (
+ destination, E_CLIENT_SOURCE_TYPE_TASKS, TRUE, NULL,
client_opened_for_drop_cb, dd);
return TRUE;
@@ -313,10 +331,14 @@ task_list_selector_data_dropped (ESourceSelector *selector,
static void
e_task_list_selector_class_init (ETaskListSelectorClass *class)
{
+ GObjectClass *object_class;
ESourceSelectorClass *source_selector_class;
g_type_class_add_private (class, sizeof (ETaskListSelectorPrivate));
+ object_class = G_OBJECT_CLASS (class);
+ object_class->constructed = task_list_selector_constructed;
+
source_selector_class = E_SOURCE_SELECTOR_CLASS (class);
source_selector_class->data_dropped = task_list_selector_data_dropped;
}
@@ -334,11 +356,12 @@ e_task_list_selector_init (ETaskListSelector *selector)
}
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
diff --git a/calendar/gui/e-task-table.c b/calendar/gui/e-task-table.c
index 651ef83..4073973 100644
--- a/calendar/gui/e-task-table.c
+++ b/calendar/gui/e-task-table.c
@@ -1692,7 +1692,7 @@ hide_completed_rows_ready (GObject *source_object,
g_debug ("%s: Could not get the objects from '%s': %s",
G_STRFUNC,
- source ? e_source_get_display_name (source) : "???",
+ e_source_get_display_name (source),
error ? error->message : "Uknown error");
}
g_clear_error (&error);
@@ -1754,7 +1754,7 @@ show_completed_rows_ready (GObject *source_object,
g_debug ("%s: Could not get the objects from '%s': %s",
G_STRFUNC,
- source ? e_source_get_display_name (source) : "???",
+ e_source_get_display_name (source),
error ? error->message : "Uknown error");
}
g_clear_error (&error);
diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c
index 3feaccc..56f57ea 100644
--- a/calendar/gui/e-week-view.c
+++ b/calendar/gui/e-week-view.c
@@ -2124,7 +2124,8 @@ e_week_view_recalc_display_start_day (EWeekView *week_view)
/* Checks if the users participation status is NEEDS-ACTION and shows the summary as bold text */
static void
set_text_as_bold (EWeekViewEvent *event,
- EWeekViewEventSpan *span)
+ EWeekViewEventSpan *span,
+ ESourceRegistry *registry)
{
ECalComponent *comp;
GSList *attendees = NULL, *l;
@@ -2136,7 +2137,8 @@ set_text_as_bold (EWeekViewEvent *event,
comp = e_cal_component_new ();
e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
- address = itip_get_comp_attendee (comp, event->comp_data->client);
+ address = itip_get_comp_attendee (
+ registry, comp, event->comp_data->client);
e_cal_component_get_attendee_list (comp, &attendees);
for (l = attendees; l; l = l->next) {
ECalComponentAttendee *attendee = l->data;
@@ -3064,6 +3066,9 @@ e_week_view_reshape_event_span (EWeekView *week_view,
gint event_num,
gint span_num)
{
+ ECalendarView *cal_view;
+ ECalModel *model;
+ ESourceRegistry *registry;
EWeekViewEvent *event;
EWeekViewEventSpan *span;
gint span_x, span_y, span_w, num_icons, icons_width, time_width;
@@ -3079,6 +3084,11 @@ e_week_view_reshape_event_span (EWeekView *week_view,
PangoFontMetrics *font_metrics;
PangoLayout *layout;
+ cal_view = E_CALENDAR_VIEW (week_view);
+ model = e_calendar_view_get_model (cal_view);
+
+ registry = e_cal_model_get_registry (model);
+
if (!is_array_index_in_bounds (week_view->events, event_num))
return;
@@ -3190,7 +3200,7 @@ e_week_view_reshape_event_span (EWeekView *week_view,
if (e_client_check_capability (E_CLIENT (event->comp_data->client), CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)
&& e_cal_util_component_has_attendee (event->comp_data->icalcomp)) {
- set_text_as_bold (event, span);
+ set_text_as_bold (event, span, registry);
}
g_object_set_data (G_OBJECT (span->text_item), "event-num", GINT_TO_POINTER (event_num));
g_signal_connect (
diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c
index fd807fd..f482e06 100644
--- a/calendar/gui/gnome-cal.c
+++ b/calendar/gui/gnome-cal.c
@@ -37,7 +37,6 @@
#include <glib/gi18n.h>
#include <libedataserver/e-categories.h>
#include <libedataserver/e-url.h>
-#include <libedataserverui/e-passwords.h>
#include <libedataserverui/e-client-utils.h>
#include <libecal/e-cal-client-view.h>
@@ -76,6 +75,7 @@
/* Private part of the GnomeCalendar structure */
struct _GnomeCalendarPrivate {
+ ESourceRegistry *registry;
ECalModel *model;
/*
@@ -142,6 +142,7 @@ enum {
PROP_0,
PROP_DATE_NAVIGATOR,
PROP_MEMO_TABLE,
+ PROP_REGISTRY,
PROP_TASK_TABLE,
PROP_VIEW
};
@@ -332,6 +333,16 @@ gnome_calendar_update_time_range (GnomeCalendar *gcal)
}
static void
+gnome_calendar_set_registry (GnomeCalendar *gcal,
+ ESourceRegistry *registry)
+{
+ g_return_if_fail (E_IS_SOURCE_REGISTRY (registry));
+ g_return_if_fail (gcal->priv->registry == NULL);
+
+ gcal->priv->registry = g_object_ref (registry);
+}
+
+static void
gnome_calendar_set_property (GObject *object,
guint property_id,
const GValue *value,
@@ -350,6 +361,12 @@ gnome_calendar_set_property (GObject *object,
g_value_get_object (value));
return;
+ case PROP_REGISTRY:
+ gnome_calendar_set_registry (
+ GNOME_CALENDAR (object),
+ g_value_get_object (value));
+ return;
+
case PROP_TASK_TABLE:
gnome_calendar_set_task_table (
GNOME_CALENDAR (object),
@@ -385,6 +402,12 @@ gnome_calendar_get_property (GObject *object,
GNOME_CALENDAR (object)));
return;
+ case PROP_REGISTRY:
+ g_value_set_object (
+ value, gnome_calendar_get_registry (
+ GNOME_CALENDAR (object)));
+ return;
+
case PROP_TASK_TABLE:
g_value_set_object (
value, gnome_calendar_get_task_table (
@@ -406,11 +429,14 @@ gnome_calendar_constructed (GObject *object)
{
GnomeCalendar *gcal = GNOME_CALENDAR (object);
ECalendarView *calendar_view;
+ ESourceRegistry *registry;
ECalModel *model;
GtkAdjustment *adjustment;
+ registry = gnome_calendar_get_registry (gcal);
+
/* Create the model for the views. */
- model = e_cal_model_calendar_new ();
+ model = e_cal_model_calendar_new (registry);
e_cal_model_set_flags (model, E_CAL_MODEL_FLAGS_EXPAND_RECURRENCES);
gcal->priv->model = model;
@@ -543,6 +569,18 @@ gnome_calendar_class_init (GnomeCalendarClass *class)
g_object_class_install_property (
object_class,
+ PROP_REGISTRY,
+ g_param_spec_object (
+ "registry",
+ "Registry",
+ "Data source registry",
+ E_TYPE_SOURCE_REGISTRY,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_property (
+ object_class,
PROP_TASK_TABLE,
g_param_spec_object (
"task-table",
@@ -1488,6 +1526,11 @@ gnome_calendar_do_dispose (GObject *object)
priv = GNOME_CALENDAR_GET_PRIVATE (object);
+ if (priv->registry != NULL) {
+ g_object_unref (priv->registry);
+ priv->registry = NULL;
+ }
+
if (priv->model != NULL) {
g_signal_handlers_disconnect_by_func (
priv->model, view_progress_cb, object);
@@ -1901,9 +1944,21 @@ gnome_calendar_display_view (GnomeCalendar *gcal,
}
GtkWidget *
-gnome_calendar_new (void)
+gnome_calendar_new (ESourceRegistry *registry)
{
- return g_object_new (GNOME_TYPE_CALENDAR, NULL);
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
+
+ return g_object_new (
+ GNOME_TYPE_CALENDAR,
+ "registry", registry, NULL);
+}
+
+ESourceRegistry *
+gnome_calendar_get_registry (GnomeCalendar *gcal)
+{
+ g_return_val_if_fail (GNOME_IS_CALENDAR (gcal), NULL);
+
+ return gcal->priv->registry;
}
ECalendar *
diff --git a/calendar/gui/gnome-cal.h b/calendar/gui/gnome-cal.h
index bc65fe2..c8cb5e8 100644
--- a/calendar/gui/gnome-cal.h
+++ b/calendar/gui/gnome-cal.h
@@ -31,6 +31,7 @@
#include <gtk/gtk.h>
#include <misc/e-calendar.h>
#include <libecal/e-cal-client.h>
+#include <libedataserver/e-source-registry.h>
#include "e-cal-model.h"
@@ -112,7 +113,9 @@ struct _GnomeCalendarClass {
};
GType gnome_calendar_get_type (void);
-GtkWidget * gnome_calendar_new (void);
+GtkWidget * gnome_calendar_new (ESourceRegistry *registry);
+ESourceRegistry *
+ gnome_calendar_get_registry (GnomeCalendar *gcal);
ECalendar * gnome_calendar_get_date_navigator
(GnomeCalendar *gcal);
void gnome_calendar_set_date_navigator
diff --git a/calendar/gui/itip-utils.c b/calendar/gui/itip-utils.c
index ba2c174..1e06202 100644
--- a/calendar/gui/itip-utils.c
+++ b/calendar/gui/itip-utils.c
@@ -32,11 +32,12 @@
#include <libecal/e-cal-time-util.h>
#include <libecal/e-cal-util.h>
#include <libedataserver/e-time-utils.h>
+#include <libedataserver/e-source-mail-account.h>
+#include <libedataserver/e-source-mail-identity.h>
+#include <libedataserver/e-source-registry.h>
#include <e-util/e-dialog-utils.h>
-#include <libemail-utils/e-account-utils.h>
-
#include <composer/e-msg-composer.h>
#include "itip-utils.h"
@@ -68,6 +69,7 @@ static icalproperty_method itip_methods_enum[] = {
/**
* itip_get_user_identities:
+ * @registry: an #ESourceRegistry
*
* Returns a %NULL-terminated array of name + address strings based on
* registered mail identities. Free the returned array with g_strfreev().
@@ -75,41 +77,45 @@ static icalproperty_method itip_methods_enum[] = {
* Returns: an %NULL-terminated array of mail identity strings
**/
gchar **
-itip_get_user_identities (void)
+itip_get_user_identities (ESourceRegistry *registry)
{
- EAccountList *account_list;
- EIterator *iterator;
+ GList *list, *iter;
+ const gchar *extension_name;
gchar **identities;
- gint length, ii = 0;
+ guint ii = 0;
+
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
- account_list = e_get_account_list ();
- length = e_list_length (E_LIST (account_list));
- iterator = e_list_get_iterator (E_LIST (account_list));
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
- identities = g_new0 (gchar *, length + 1);
+ list = e_source_registry_list_sources (registry, extension_name);
- while (e_iterator_is_valid (iterator)) {
- EAccount *account;
+ identities = g_new0 (gchar *, g_list_length (list) + 1);
- /* XXX EIterator misuses const. */
- account = (EAccount *) e_iterator_get (iterator);
+ for (iter = list; iter != NULL; iter = g_list_next (iter)) {
+ ESource *source = E_SOURCE (iter->data);
+ ESourceMailIdentity *extension;
+ const gchar *name, *address;
- if (account->enabled)
- identities[ii++] = g_strdup_printf (
- "%s <%s>",
- account->id->name,
- account->id->address);
+ extension = e_source_get_extension (source, extension_name);
- e_iterator_next (iterator);
+ name = e_source_mail_identity_get_name (extension);
+ address = e_source_mail_identity_get_address (extension);
+
+ if (name == NULL || address == NULL)
+ continue;
+
+ identities[ii++] = g_strdup_printf ("%s <%s>", name, address);
}
- g_object_unref (iterator);
+ g_list_free_full (list, (GDestroyNotify) g_object_unref);
return identities;
}
/**
* itip_get_fallback_identity:
+ * @registry: an #ESourceRegistry
*
* Returns a name + address string taken from the default mail identity,
* but only if the corresponding account is enabled. If the account is
@@ -120,23 +126,64 @@ itip_get_user_identities (void)
* Returns: a fallback mail identity, or %NULL
**/
gchar *
-itip_get_fallback_identity (void)
+itip_get_fallback_identity (ESourceRegistry *registry)
{
- EAccount *account;
+ ESource *source;
+ ESourceMailAccount *mail_account;
+ ESourceMailIdentity *mail_identity;
+ const gchar *extension_name;
+ const gchar *address;
+ const gchar *name;
gchar *identity = NULL;
+ gchar *uid;
+
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), NULL);
+
+ source = e_source_registry_ref_default_mail_account (registry);
+
+ if (!e_source_get_enabled (source)) {
+ g_object_unref (source);
+ return NULL;
+ }
+
+ extension_name = E_SOURCE_EXTENSION_MAIL_ACCOUNT;
+ mail_account = e_source_get_extension (source, extension_name);
+ uid = e_source_mail_account_dup_identity_uid (mail_account);
+
+ g_object_unref (source);
+
+ if (uid == NULL)
+ return NULL;
+
+ source = e_source_registry_ref_source (registry, uid);
+
+ g_free (uid);
+
+ if (source == NULL)
+ return NULL;
+
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
+ if (!e_source_has_extension (source, extension_name)) {
+ g_object_unref (source);
+ return NULL;
+ }
+
+ mail_identity = e_source_get_extension (source, extension_name);
+
+ name = e_source_mail_identity_get_name (mail_identity);
+ address = e_source_mail_identity_get_address (mail_identity);
+
+ if (name != NULL && address != NULL)
+ identity = g_strdup_printf ("%s <%s>", name, address);
- account = e_get_default_account ();
- if (account != NULL && account->enabled)
- identity = g_strdup_printf (
- "%s <%s>",
- account->id->name,
- account->id->address);
+ g_object_unref (source);
return identity;
}
/**
* itip_address_is_user:
+ * @registry: an #ESourceRegistry
* @address: an email address
*
* Looks for a registered mail identity with a matching email address.
@@ -144,31 +191,53 @@ itip_get_fallback_identity (void)
* Returns: %TRUE if a match was found, %FALSE if not
**/
gboolean
-itip_address_is_user (const gchar *address)
+itip_address_is_user (ESourceRegistry *registry,
+ const gchar *address)
{
- EAccountList *account_list;
- EAccount *account;
+ GList *list, *iter;
+ const gchar *extension_name;
+ gboolean match = FALSE;
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), FALSE);
g_return_val_if_fail (address != NULL, FALSE);
- account_list = e_get_account_list ();
+ extension_name = E_SOURCE_EXTENSION_MAIL_IDENTITY;
+
+ list = e_source_registry_list_sources (registry, extension_name);
+
+ for (iter = list; iter != NULL; iter = g_list_next (iter)) {
+ ESource *source = E_SOURCE (iter->data);
+ ESourceMailIdentity *extension;
+ const gchar *id_address;
+
+ extension = e_source_get_extension (source, extension_name);
+ id_address = e_source_mail_identity_get_address (extension);
- /* XXX EAccountList misuses const. */
- account = (EAccount *) e_account_list_find (
- account_list, E_ACCOUNT_FIND_ID_ADDRESS, address);
+ if (id_address == NULL)
+ continue;
- return (account != NULL);
+ if (g_ascii_strcasecmp (address, id_address) == 0) {
+ match = TRUE;
+ break;
+ }
+ }
+
+ g_list_free_full (list, (GDestroyNotify) g_object_unref);
+
+ return match;
}
gboolean
-itip_organizer_is_user (ECalComponent *comp,
+itip_organizer_is_user (ESourceRegistry *registry,
+ ECalComponent *comp,
ECalClient *cal_client)
{
- return itip_organizer_is_user_ex (comp, cal_client, FALSE);
+ return itip_organizer_is_user_ex (registry, comp, cal_client, FALSE);
}
gboolean
-itip_organizer_is_user_ex (ECalComponent *comp,
+itip_organizer_is_user_ex (ESourceRegistry *registry,
+ ECalComponent *comp,
ECalClient *cal_client,
gboolean skip_cap_test)
{
@@ -176,6 +245,8 @@ itip_organizer_is_user_ex (ECalComponent *comp,
const gchar *strip;
gboolean user_org = FALSE;
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), FALSE);
+
if (!e_cal_component_has_organizer (comp) ||
(!skip_cap_test && e_client_check_capability (
E_CLIENT (cal_client), CAL_STATIC_CAPABILITY_NO_ORGANIZER)))
@@ -200,20 +271,23 @@ itip_organizer_is_user_ex (ECalComponent *comp,
return FALSE;
}
- user_org = itip_address_is_user (strip);
+ user_org = itip_address_is_user (registry, strip);
}
return user_org;
}
gboolean
-itip_sentby_is_user (ECalComponent *comp,
+itip_sentby_is_user (ESourceRegistry *registry,
+ ECalComponent *comp,
ECalClient *cal_client)
{
ECalComponentOrganizer organizer;
const gchar *strip;
gboolean user_sentby = FALSE;
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), FALSE);
+
if (!e_cal_component_has_organizer (comp) ||
e_client_check_capability (
E_CLIENT (cal_client), CAL_STATIC_CAPABILITY_NO_ORGANIZER))
@@ -222,7 +296,7 @@ itip_sentby_is_user (ECalComponent *comp,
e_cal_component_get_organizer (comp, &organizer);
if (organizer.sentby != NULL) {
strip = itip_strip_mailto (organizer.sentby);
- user_sentby = itip_address_is_user (strip);
+ user_sentby = itip_address_is_user (registry, strip);
}
return user_sentby;
@@ -280,9 +354,11 @@ html_new_lines_for (const gchar *string)
}
gchar *
-itip_get_comp_attendee (ECalComponent *comp,
+itip_get_comp_attendee (ESourceRegistry *registry,
+ ECalComponent *comp,
ECalClient *cal_client)
{
+#if 0 /* ACCOUNT_MGMT */
GSList *attendees;
EAccountList *al;
EAccount *a;
@@ -299,28 +375,31 @@ itip_get_comp_attendee (ECalComponent *comp,
CAL_BACKEND_PROPERTY_CAL_EMAIL_ADDRESS,
&address, NULL, NULL);
- if (address && *address) {
+ if (address != NULL && *address != '\0') {
attendee = get_attendee (attendees, address);
if (attendee) {
gchar *user_email;
- user_email = g_strdup (itip_strip_mailto (attendee->value));
-
+ user_email = g_strdup (
+ itip_strip_mailto (attendee->value));
e_cal_component_free_attendee_list (attendees);
g_free (address);
+
return user_email;
}
- attendee = get_attendee_if_attendee_sentby_is_user (attendees, address);
+ attendee = get_attendee_if_attendee_sentby_is_user (
+ attendees, address);
- if (attendee) {
+ if (attendee != NULL) {
gchar *user_email;
- user_email = g_strdup (itip_strip_mailto (attendee->sentby));
-
+ user_email = g_strdup (
+ itip_strip_mailto (attendee->sentby));
e_cal_component_free_attendee_list (attendees);
g_free (address);
+
return user_email;
}
@@ -337,21 +416,28 @@ itip_get_comp_attendee (ECalComponent *comp,
continue;
attendee = get_attendee (attendees, a->id->address);
- if (attendee) {
- gchar *user_email = g_strdup (itip_strip_mailto (attendee->value));
+ if (attendee != NULL) {
+ gchar *user_email;
+ user_email = g_strdup (
+ itip_strip_mailto (attendee->value));
e_cal_component_free_attendee_list (attendees);
+
return user_email;
}
/* If the account was not found in the attendees list, then
* let's check the 'sentby' fields of the attendees if we can
* find the account. */
- attendee = get_attendee_if_attendee_sentby_is_user (attendees, a->id->address);
+ attendee = get_attendee_if_attendee_sentby_is_user (
+ attendees, a->id->address);
if (attendee) {
- gchar *user_email = g_strdup (itip_strip_mailto (attendee->sentby));
+ gchar *user_email;
+ user_email = g_strdup (
+ itip_strip_mailto (attendee->sentby));
e_cal_component_free_attendee_list (attendees);
+
return user_email;
}
}
@@ -364,7 +450,11 @@ itip_get_comp_attendee (ECalComponent *comp,
address = g_strdup ((a != NULL) ? a->id->address : "");
e_cal_component_free_attendee_list (attendees);
+
return address;
+#endif /* ACCOUNT_MGMT */
+
+ return NULL;
}
const gchar *
@@ -484,7 +574,8 @@ users_has_attendee (const GSList *users,
static gchar *
comp_from (ECalComponentItipMethod method,
- ECalComponent *comp)
+ ECalComponent *comp,
+ ESourceRegistry *registry)
{
ECalComponentOrganizer organizer;
ECalComponentAttendee *attendee;
@@ -497,10 +588,10 @@ comp_from (ECalComponentItipMethod method,
return NULL;
case E_CAL_COMPONENT_METHOD_REQUEST:
- return itip_get_comp_attendee (comp, NULL);
+ return itip_get_comp_attendee (registry, comp, NULL);
case E_CAL_COMPONENT_METHOD_REPLY:
- sender = itip_get_comp_attendee (comp, NULL);
+ sender = itip_get_comp_attendee (registry, comp, NULL);
if (sender != NULL)
return sender;
if (!e_cal_component_has_attendees (comp))
@@ -535,7 +626,8 @@ comp_from (ECalComponentItipMethod method,
}
static EDestination **
-comp_to_list (ECalComponentItipMethod method,
+comp_to_list (ESourceRegistry *registry,
+ ECalComponentItipMethod method,
ECalComponent *comp,
const GSList *users,
gboolean reply_all,
@@ -574,7 +666,7 @@ comp_to_list (ECalComponentItipMethod method,
array = g_ptr_array_new ();
- sender = itip_get_comp_attendee (comp, NULL);
+ sender = itip_get_comp_attendee (registry, comp, NULL);
for (l = attendees; l != NULL; l = l->next) {
ECalComponentAttendee *att = l->data;
@@ -638,7 +730,7 @@ comp_to_list (ECalComponentItipMethod method,
array = g_ptr_array_new ();
e_cal_component_get_organizer (comp, &organizer);
- sender = itip_get_comp_attendee (comp, NULL);
+ sender = itip_get_comp_attendee (registry, comp, NULL);
for (l = attendees; l != NULL; l = l->next) {
ECalComponentAttendee *att = l->data;
@@ -696,7 +788,7 @@ comp_to_list (ECalComponentItipMethod method,
/* send the status to delegatee to the delegate also*/
e_cal_component_get_attendee_list (comp, &attendees);
- sender = itip_get_comp_attendee (comp, NULL);
+ sender = itip_get_comp_attendee (registry, comp, NULL);
for (l = attendees; l != NULL; l = l->next) {
ECalComponentAttendee *att = l->data;
@@ -751,7 +843,8 @@ comp_to_list (ECalComponentItipMethod method,
}
static gchar *
-comp_subject (ECalComponentItipMethod method,
+comp_subject (ESourceRegistry *registry,
+ ECalComponentItipMethod method,
ECalComponent *comp)
{
ECalComponentText caltext;
@@ -794,7 +887,7 @@ comp_subject (ECalComponentItipMethod method,
case E_CAL_COMPONENT_METHOD_REPLY:
e_cal_component_get_attendee_list (comp, &alist);
- sender = itip_get_comp_attendee (comp, NULL);
+ sender = itip_get_comp_attendee (registry, comp, NULL);
if (sender) {
for (l = alist; l != NULL; l = l->next) {
@@ -1010,7 +1103,8 @@ comp_server_send (ECalComponentItipMethod method,
}
static gboolean
-comp_limit_attendees (ECalComponent *comp)
+comp_limit_attendees (ESourceRegistry *registry,
+ ECalComponent *comp)
{
icalcomponent *icomp;
icalproperty *prop;
@@ -1042,7 +1136,7 @@ comp_limit_attendees (ECalComponent *comp)
attendee_text = g_strdup (itip_strip_mailto (attendee));
g_free (attendee);
attendee_text = g_strstrip (attendee_text);
- found = match = itip_address_is_user (attendee_text);
+ found = match = itip_address_is_user (registry, attendee_text);
if (!found) {
param = icalproperty_get_first_parameter (prop, ICAL_SENTBY_PARAMETER);
@@ -1054,7 +1148,7 @@ comp_limit_attendees (ECalComponent *comp)
attendee_sentby_text =
g_strstrip (g_strdup (attendee_sentby));
found = match = itip_address_is_user (
- attendee_sentby_text);
+ registry, attendee_sentby_text);
}
}
@@ -1078,13 +1172,15 @@ comp_limit_attendees (ECalComponent *comp)
static void
comp_sentby (ECalComponent *comp,
- ECalClient *cal_client)
+ ECalClient *cal_client,
+ ESourceRegistry *registry)
{
ECalComponentOrganizer organizer;
GSList * attendees, *l;
gchar *user = NULL;
e_cal_component_get_organizer (comp, &organizer);
+#if 0 /* ACCOUNT_MGMT */
if (!organizer.value) {
EAccount *a = e_get_default_account ();
@@ -1098,9 +1194,10 @@ comp_sentby (ECalComponent *comp,
return;
}
+#endif /* ACCOUNT_MGMT */
e_cal_component_get_attendee_list (comp, &attendees);
- user = itip_get_comp_attendee (comp, cal_client);
+ user = itip_get_comp_attendee (registry, comp, cal_client);
for (l = attendees; l; l = l->next) {
ECalComponentAttendee *a = l->data;
@@ -1113,6 +1210,7 @@ comp_sentby (ECalComponent *comp,
}
}
+#if 0 /* ACCOUNT_MGMT */
if (!itip_organizer_is_user (comp, cal_client) && !itip_sentby_is_user (comp, cal_client)) {
EAccount *a = e_get_default_account ();
@@ -1128,9 +1226,12 @@ comp_sentby (ECalComponent *comp,
g_free ((gchar *) organizer.cn);
g_free ((gchar *) organizer.language);
}
+#endif /* ACCOUNT_MGMT */
}
+
static ECalComponent *
-comp_minimal (ECalComponent *comp,
+comp_minimal (ESourceRegistry *registry,
+ ECalComponent *comp,
gboolean attendee)
{
ECalComponent *clone;
@@ -1151,7 +1252,7 @@ comp_minimal (ECalComponent *comp,
e_cal_component_get_attendee_list (comp, &attendees);
e_cal_component_set_attendee_list (clone, attendees);
- if (!comp_limit_attendees (clone)) {
+ if (!comp_limit_attendees (registry, clone)) {
e_notice (NULL, GTK_MESSAGE_ERROR,
_("You must be an attendee of the event."));
goto error;
@@ -1238,7 +1339,8 @@ strip_x_microsoft_props (ECalComponent *comp)
}
static ECalComponent *
-comp_compliant (ECalComponentItipMethod method,
+comp_compliant (ESourceRegistry *registry,
+ ECalComponentItipMethod method,
ECalComponent *comp,
ECalClient *client,
icalcomponent *zones,
@@ -1336,14 +1438,14 @@ comp_compliant (ECalComponentItipMethod method,
/* Comply with itip spec */
switch (method) {
case E_CAL_COMPONENT_METHOD_PUBLISH:
- comp_sentby (clone, client);
+ comp_sentby (clone, client, registry);
e_cal_component_set_attendee_list (clone, NULL);
break;
case E_CAL_COMPONENT_METHOD_REQUEST:
- comp_sentby (clone, client);
+ comp_sentby (clone, client, registry);
break;
case E_CAL_COMPONENT_METHOD_CANCEL:
- comp_sentby (clone, client);
+ comp_sentby (clone, client, registry);
break;
case E_CAL_COMPONENT_METHOD_REPLY:
break;
@@ -1351,7 +1453,7 @@ comp_compliant (ECalComponentItipMethod method,
break;
case E_CAL_COMPONENT_METHOD_REFRESH:
/* Need to remove almost everything */
- temp_clone = comp_minimal (clone, TRUE);
+ temp_clone = comp_minimal (registry, clone, TRUE);
g_object_unref (clone);
clone = temp_clone;
break;
@@ -1359,7 +1461,7 @@ comp_compliant (ECalComponentItipMethod method,
break;
case E_CAL_COMPONENT_METHOD_DECLINECOUNTER:
/* Need to remove almost everything */
- temp_clone = comp_minimal (clone, FALSE);
+ temp_clone = comp_minimal (registry, clone, FALSE);
g_object_unref (clone);
clone = temp_clone;
break;
@@ -1416,6 +1518,7 @@ append_cal_attachments (EMsgComposer *composer,
g_slist_free (attach_list);
}
+#if 0 /* ACCOUNT_MGMT */
static EAccount *
find_enabled_account (EAccountList *accounts,
const gchar *id_address)
@@ -1445,6 +1548,7 @@ find_enabled_account (EAccountList *accounts,
return account;
}
+#endif /* ACCOUNT_MGMT */
static void
setup_from (ECalComponentItipMethod method,
@@ -1452,6 +1556,7 @@ setup_from (ECalComponentItipMethod method,
ECalClient *cal_client,
EComposerHeaderTable *table)
{
+#if 0 /* ACCOUNT_MGMT */
EAccountList *accounts;
accounts = e_composer_header_table_get_account_list (table);
@@ -1482,10 +1587,12 @@ setup_from (ECalComponentItipMethod method,
if (account)
e_composer_header_table_set_account (table, account);
}
+#endif /* ACCOUNT_MGMT */
}
gboolean
-itip_send_comp (ECalComponentItipMethod method,
+itip_send_comp (ESourceRegistry *registry,
+ ECalComponentItipMethod method,
ECalComponent *send_comp,
ECalClient *cal_client,
icalcomponent *zones,
@@ -1508,6 +1615,8 @@ itip_send_comp (ECalComponentItipMethod method,
gboolean use_24_hour_format;
gboolean retval = FALSE;
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), FALSE);
+
/* FIXME Pass this in. */
shell = e_shell_get_default ();
shell_settings = e_shell_get_shell_settings (shell);
@@ -1542,14 +1651,15 @@ itip_send_comp (ECalComponentItipMethod method,
/* Tidy up the comp */
comp = comp_compliant (
- method, send_comp, cal_client, zones, default_zone, strip_alarms);
+ registry, method, send_comp, cal_client,
+ zones, default_zone, strip_alarms);
if (comp == NULL)
goto cleanup;
/* Recipients */
destinations = comp_to_list (
- method, comp, users, FALSE,
+ registry, method, comp, users, FALSE,
only_new_attendees ? g_object_get_data (
G_OBJECT (send_comp), "new-attendees") : NULL);
if (method != E_CAL_COMPONENT_METHOD_PUBLISH) {
@@ -1561,7 +1671,7 @@ itip_send_comp (ECalComponentItipMethod method,
}
/* Subject information */
- subject = comp_subject (method, comp);
+ subject = comp_subject (registry, method, comp);
composer = e_msg_composer_new (shell);
table = e_msg_composer_get_header_table (composer);
@@ -1637,7 +1747,8 @@ cleanup:
}
gboolean
-reply_to_calendar_comp (ECalComponentItipMethod method,
+reply_to_calendar_comp (ESourceRegistry *registry,
+ ECalComponentItipMethod method,
ECalComponent *send_comp,
ECalClient *cal_client,
gboolean reply_all,
@@ -1657,6 +1768,8 @@ reply_to_calendar_comp (ECalComponentItipMethod method,
gchar *ical_string = NULL;
gboolean retval = FALSE;
+ g_return_val_if_fail (E_IS_SOURCE_REGISTRY (registry), FALSE);
+
/* FIXME Pass this in. */
shell = e_shell_get_default ();
shell_settings = e_shell_get_shell_settings (shell);
@@ -1666,15 +1779,17 @@ reply_to_calendar_comp (ECalComponentItipMethod method,
/* Tidy up the comp */
comp = comp_compliant (
- method, send_comp, cal_client, zones, default_zone, TRUE);
+ registry, method, send_comp, cal_client,
+ zones, default_zone, TRUE);
if (comp == NULL)
goto cleanup;
/* Recipients */
- destinations = comp_to_list (method, comp, users, reply_all, NULL);
+ destinations = comp_to_list (
+ registry, method, comp, users, reply_all, NULL);
/* Subject information */
- subject = comp_subject (method, comp);
+ subject = comp_subject (registry, method, comp);
composer = e_msg_composer_new (shell);
table = e_msg_composer_get_header_table (composer);
diff --git a/calendar/gui/itip-utils.h b/calendar/gui/itip-utils.h
index 6da2519..c24acb8 100644
--- a/calendar/gui/itip-utils.h
+++ b/calendar/gui/itip-utils.h
@@ -24,7 +24,7 @@
#include <string.h>
#include <libecal/e-cal-client.h>
#include <libecal/e-cal-component.h>
-#include <libedataserver/e-account-list.h>
+#include <libedataserver/e-source-registry.h>
G_BEGIN_DECLS
@@ -49,20 +49,26 @@ struct CalMimeAttach {
guint length;
};
-gchar ** itip_get_user_identities (void);
-gchar * itip_get_fallback_identity (void);
-gboolean itip_address_is_user (const gchar *address);
-gboolean itip_organizer_is_user (ECalComponent *comp,
+gchar ** itip_get_user_identities (ESourceRegistry *registry);
+gchar * itip_get_fallback_identity (ESourceRegistry *registry);
+gboolean itip_address_is_user (ESourceRegistry *registry,
+ const gchar *address);
+gboolean itip_organizer_is_user (ESourceRegistry *registry,
+ ECalComponent *comp,
ECalClient *cal_client);
-gboolean itip_organizer_is_user_ex (ECalComponent *comp,
+gboolean itip_organizer_is_user_ex (ESourceRegistry *registry,
+ ECalComponent *comp,
ECalClient *cal_client,
gboolean skip_cap_test);
-gboolean itip_sentby_is_user (ECalComponent *comp,
+gboolean itip_sentby_is_user (ESourceRegistry *registry,
+ ECalComponent *comp,
ECalClient *cal_client);
const gchar * itip_strip_mailto (const gchar *address);
-gchar * itip_get_comp_attendee (ECalComponent *comp,
+gchar * itip_get_comp_attendee (ESourceRegistry *registry,
+ ECalComponent *comp,
ECalClient *cal_client);
-gboolean itip_send_comp (ECalComponentItipMethod method,
+gboolean itip_send_comp (ESourceRegistry *registry,
+ ECalComponentItipMethod method,
ECalComponent *comp,
ECalClient *cal_client,
icalcomponent *zones,
@@ -79,7 +85,8 @@ gboolean itip_publish_begin (ECalComponent *pub_comp,
ECalClient *cal_client,
gboolean cloned,
ECalComponent **clone);
-gboolean reply_to_calendar_comp (ECalComponentItipMethod method,
+gboolean reply_to_calendar_comp (ESourceRegistry *registry,
+ ECalComponentItipMethod method,
ECalComponent *send_comp,
ECalClient *cal_client,
gboolean reply_all,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]