diff options
author | Matthew Barnes <mbarnes@redhat.com> | 2010-12-14 05:05:32 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@redhat.com> | 2012-06-03 11:00:40 +0800 |
commit | 68c35c4bedc4cd36cf2396121921f2e781b631fb (patch) | |
tree | 3a705b4c5776881d1d3899de674fdacea2440133 /calendar/gui/dialogs | |
parent | ebed1366e5d62a4fd0912abe2c725f31e8901444 (diff) | |
download | gsoc2013-evolution-68c35c4bedc4cd36cf2396121921f2e781b631fb.tar gsoc2013-evolution-68c35c4bedc4cd36cf2396121921f2e781b631fb.tar.gz gsoc2013-evolution-68c35c4bedc4cd36cf2396121921f2e781b631fb.tar.bz2 gsoc2013-evolution-68c35c4bedc4cd36cf2396121921f2e781b631fb.tar.lz gsoc2013-evolution-68c35c4bedc4cd36cf2396121921f2e781b631fb.tar.xz gsoc2013-evolution-68c35c4bedc4cd36cf2396121921f2e781b631fb.tar.zst gsoc2013-evolution-68c35c4bedc4cd36cf2396121921f2e781b631fb.zip |
Adapt calendar/gui to the new ESource API.
Diffstat (limited to 'calendar/gui/dialogs')
24 files changed, 428 insertions, 1145 deletions
diff --git a/calendar/gui/dialogs/Makefile.am b/calendar/gui/dialogs/Makefile.am index b7235ede2a..02af20b87b 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 065d11b9b5..c8670d2500 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 42c72d685a..6e6d65827c 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 997f85a664..5c318c0a90 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 5746664c1f..1717d12f22 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/calendar-setup.c b/calendar/gui/dialogs/calendar-setup.c deleted file mode 100644 index 0d0da2244a..0000000000 --- a/calendar/gui/dialogs/calendar-setup.c +++ /dev/null @@ -1,717 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * David Trowbridge <trowbrds@cs.colorado.edu> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <string.h> - -#include <gtk/gtk.h> - -#include <libedataserver/e-source.h> -#include <libedataserver/e-source-list.h> -#include <shell/e-shell.h> -#include <glib/gi18n.h> -#include <libecal/e-cal-client.h> -#include "calendar-setup.h" -#include "../e-cal-config.h" - -typedef struct _CalendarSourceDialog CalendarSourceDialog; - -struct _CalendarSourceDialog { - ECalConfig *config; /* the config manager */ - - GtkWidget *window; - - /* Source selection (creation only) */ - ESourceList *source_list; - GSList *menu_source_groups; - GtkWidget *group_optionmenu; - - /* ESource we're currently editing */ - ESource *source; - /* The original source in edit mode. Also used to flag when we are in edit mode. */ - ESource *original_source; - - /* Source group we're creating/editing a source in */ - ESourceGroup *source_group; - ECalClientSourceType source_type; -}; - -static gboolean -eccp_check_complete (EConfig *ec, - const gchar *pageid, - gpointer data) -{ - CalendarSourceDialog *sdialog = data; - gboolean valid = TRUE; - const gchar *tmp; - ESource *source; - - tmp = e_source_get_display_name (sdialog->source); - valid = tmp && tmp[0] && ((source = e_source_group_peek_source_by_name (sdialog->source_group, tmp)) == NULL || source == sdialog->original_source); - - return valid; -} - -static void -eccp_commit (EConfig *ec, - CalendarSourceDialog *sdialog) -{ - xmlNodePtr xml; - GtkWindow *window; - - if (sdialog->original_source) { - const gchar *color_spec; - - xml = xmlNewNode (NULL, (const guchar *)"dummy"); - e_source_dump_to_xml_node (sdialog->source, xml); - e_source_update_from_xml_node (sdialog->original_source, xml->children, NULL); - xmlFreeNode (xml); - - color_spec = e_source_peek_color_spec (sdialog->source); - if (color_spec != NULL) - e_source_set_color_spec (sdialog->original_source, color_spec); - } else { - e_source_group_add_source (sdialog->source_group, sdialog->source, -1); - e_source_list_sync (sdialog->source_list, NULL); - } - - window = e_shell_get_active_window (e_shell_get_default ()); - if (window) - gtk_widget_queue_draw (GTK_WIDGET (window)); -} - -static void -eccp_free (EConfig *ec, - GSList *items, - gpointer data) -{ - CalendarSourceDialog *sdialog = data; - - g_slist_free (items); - - g_object_unref (sdialog->source); - if (sdialog->original_source) - g_object_unref (sdialog->original_source); - if (sdialog->source_list) - g_object_unref (sdialog->source_list); - g_slist_free (sdialog->menu_source_groups); - g_free (sdialog); -} - -static void -eccp_type_changed (GtkComboBox *dropdown, - CalendarSourceDialog *sdialog) -{ - gint id = gtk_combo_box_get_active (dropdown); - GtkTreeModel *model; - GtkTreeIter iter; - - model = gtk_combo_box_get_model (dropdown); - if (id == -1 || !gtk_tree_model_iter_nth_child (model, &iter, NULL, id)) - return; - - /* TODO: when we change the group type, we lose all of the pre-filled dialog info */ - - gtk_tree_model_get (model, &iter, 1, &sdialog->source_group, -1); - /* HACK: doesn't work if you don't do this */ - e_source_set_absolute_uri (sdialog->source, NULL); - e_source_set_group (sdialog->source, sdialog->source_group); - - e_source_set_relative_uri (sdialog->source, ""); - - e_config_target_changed ((EConfig *) sdialog->config, E_CONFIG_TARGET_CHANGED_REBUILD); -} - -static GtkWidget * -eccp_get_source_type (EConfig *ec, - EConfigItem *item, - GtkWidget *parent, - GtkWidget *old, - gint position, - gpointer data) -{ - static GtkWidget *label, *type; - guint row; - CalendarSourceDialog *sdialog = data; - ECalConfigTargetSource *t = (ECalConfigTargetSource *) ec->target; - ESource *source = t->source; - ESourceGroup *group = e_source_peek_group (source); - gchar *markup; - - if (old) - gtk_widget_destroy (label); - - g_object_get (parent, "n-rows", &row, NULL); - - if (sdialog->original_source) { - label = gtk_label_new (_("Type:")); - - type = gtk_label_new (""); - gtk_widget_show (type); - markup = g_strdup_printf ("<span weight=\"bold\">%s</span>", e_source_group_peek_name (group)); - gtk_label_set_markup (GTK_LABEL (type), markup); - gtk_misc_set_alignment (GTK_MISC (type), 0.0, 0.5); - g_free (markup); - gtk_table_attach (GTK_TABLE (parent), type, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); - } else { - GtkCellRenderer *cell; - GtkListStore *store; - GtkTreeIter iter; - GSList *l; - gint active = 0, i = 0; - - label = gtk_label_new_with_mnemonic(_("_Type:")); - - type = gtk_combo_box_new (); - cell = gtk_cell_renderer_text_new (); - store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER); - for (l = sdialog->menu_source_groups; l; l = g_slist_next (l)) { - /* Reuse previously defined *group here? */ - ESourceGroup *group = l->data; - gchar *create_source = e_source_group_get_property (group, "create_source"); - - if ( !(create_source && !strcmp (create_source, "no"))) { - gtk_list_store_append (store, &iter); - gtk_list_store_set (store, &iter, 0, e_source_group_peek_name (group), 1, group, -1); - if (!strcmp (e_source_group_peek_uid (sdialog->source_group), e_source_group_peek_uid (group))) - active = i; - i++; - } - g_free (create_source); - } - - gtk_cell_layout_pack_start ((GtkCellLayout *) type, cell, TRUE); - gtk_cell_layout_set_attributes ((GtkCellLayout *) type, cell, "text", 0, NULL); - gtk_combo_box_set_model ((GtkComboBox *) type, (GtkTreeModel *) store); - gtk_combo_box_set_active ((GtkComboBox *) type, active); - g_signal_connect ( - type, "changed", - G_CALLBACK (eccp_type_changed), sdialog); - gtk_widget_show (type); - gtk_table_attach (GTK_TABLE (parent), type, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), type); - } - - gtk_widget_show (label); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach (GTK_TABLE (parent), label, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); - - return type; -} - -static void -name_changed (GtkEntry *entry, - ECalConfigTargetSource *t) -{ - ESource *source = t->source; - ESourceGroup *group; - gboolean is_birthdays = FALSE; - gboolean changed; - const gchar *name; - - name = gtk_entry_get_text (GTK_ENTRY (entry)); - - changed = g_strcmp0 (name, e_source_get_display_name (source)) != 0; - e_source_set_name (source, name); - - group = e_source_peek_group (source); - is_birthdays = group && g_strcmp0 (e_source_group_peek_base_uri (group), "contacts://") == 0; - - if (changed && (g_strcmp0 ("system", e_source_peek_relative_uri (source)) == 0 || is_birthdays)) - e_source_set_property (source, "name-changed", "true"); -} - -static GtkWidget * -eccp_get_source_name (EConfig *ec, - EConfigItem *item, - GtkWidget *parent, - GtkWidget *old, - gint position, - gpointer data) -{ - static GtkWidget *label, *entry; - guint row; - ECalConfigTargetSource *t = (ECalConfigTargetSource *) ec->target; - ESource *source = t->source; - - if (old) - gtk_widget_destroy (label); - - g_object_get (parent, "n-rows", &row, NULL); - - label = gtk_label_new_with_mnemonic (_("_Name:")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_widget_show (label); - gtk_table_attach (GTK_TABLE (parent), label, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); - - entry = gtk_entry_new (); - gtk_widget_show (entry); - gtk_table_attach (GTK_TABLE (parent), entry, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry); - g_signal_connect ( - entry, "changed", - G_CALLBACK (name_changed), (gpointer) t); - - if (source) - gtk_entry_set_text (GTK_ENTRY (entry), e_source_get_display_name (source)); - - return entry; -} - -static void -offline_status_changed_cb (GtkWidget *widget, - CalendarSourceDialog *sdialog) -{ - - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) - e_source_set_property (sdialog->source, "offline_sync", "1"); - else - e_source_set_property (sdialog->source, "offline_sync", "0"); - -} - -static GtkWidget * -eccp_general_offline (EConfig *ec, - EConfigItem *item, - GtkWidget *parent, - GtkWidget *old, - gint position, - gpointer data) -{ - CalendarSourceDialog *sdialog = data; - GtkWidget *offline_setting = NULL; - const gchar *offline_sync; - guint row; - const gchar *base_uri = e_source_group_peek_base_uri (sdialog->source_group); - gboolean is_local = base_uri && (g_str_has_prefix (base_uri, "local:") || g_str_has_prefix (base_uri, "contacts://")); - offline_sync = e_source_get_property (sdialog->source, "offline_sync"); - if (old) - return old; - else { - g_object_get (parent, "n-rows", &row, NULL); - - if (sdialog->source_type == E_CAL_CLIENT_SOURCE_TYPE_EVENTS) - offline_setting = gtk_check_button_new_with_mnemonic (_("Cop_y calendar contents locally for offline operation")); - else if (sdialog->source_type == E_CAL_CLIENT_SOURCE_TYPE_TASKS) - offline_setting = gtk_check_button_new_with_mnemonic (_("Cop_y task list contents locally for offline operation")); - else if (sdialog->source_type == E_CAL_CLIENT_SOURCE_TYPE_MEMOS) - offline_setting = gtk_check_button_new_with_mnemonic (_("Cop_y memo list contents locally for offline operation")); - - gtk_widget_show (offline_setting); - g_signal_connect ( - offline_setting, "toggled", - G_CALLBACK (offline_status_changed_cb), sdialog); - gtk_table_attach (GTK_TABLE (parent), offline_setting, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); - - } - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (offline_setting), (offline_sync && g_str_equal (offline_sync, "1")) ? TRUE : FALSE); - if (is_local) - gtk_widget_hide (offline_setting); - return offline_setting; -} - -static void -alarm_status_changed_cb (GtkWidget *widget, - CalendarSourceDialog *sdialog) -{ - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) - e_source_set_property (sdialog->source, "alarm", "true"); - else - e_source_set_property (sdialog->source, "alarm", "false"); -} - -static GtkWidget * -eccp_notify_reminders (EConfig *ec, - EConfigItem *item, - GtkWidget *parent, - GtkWidget *old, - gint position, - gpointer data) -{ - CalendarSourceDialog *sdialog = data; - GtkWidget *reminder_setting = NULL; - guint row; - const gchar *alarm; - - if (old) - return old; - - alarm = e_source_get_property (sdialog->source, "alarm"); - if (alarm && !g_ascii_strcasecmp (alarm, "never")) - return NULL; - - g_object_get (parent, "n-rows", &row, NULL); - - reminder_setting = gtk_check_button_new_with_mnemonic (_("Sh_ow reminder notifications")); - - gtk_widget_show (reminder_setting); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (reminder_setting), alarm && g_str_equal (alarm, "true")); - g_signal_connect ( - reminder_setting, "toggled", - G_CALLBACK (alarm_status_changed_cb), sdialog); - gtk_table_attach (GTK_TABLE (parent), reminder_setting, 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); - - return reminder_setting; -} - -static void -color_changed (GtkColorButton *color_button, - ECalConfigTargetSource *target) -{ - ESource *source = target->source; - gchar color_spec[16]; - GdkColor color; - - gtk_color_button_get_color (color_button, &color); - g_snprintf ( - color_spec, sizeof (color_spec), "#%04x%04x%04x", - color.red, color.green, color.blue); - e_source_set_color_spec (source, color_spec); -} - -static const gchar * -choose_initial_color (void) -{ - static const gchar *colors[] = { - "#BECEDD", /* 190 206 221 Blue */ - "#E2F0EF", /* 226 240 239 Light Blue */ - "#C6E2B7", /* 198 226 183 Green */ - "#E2F0D3", /* 226 240 211 Light Green */ - "#E2D4B7", /* 226 212 183 Khaki */ - "#EAEAC1", /* 234 234 193 Light Khaki */ - "#F0B8B7", /* 240 184 183 Pink */ - "#FED4D3", /* 254 212 211 Light Pink */ - "#E2C6E1", /* 226 198 225 Purple */ - "#F0E2EF" /* 240 226 239 Light Purple */ - }; - - return colors[g_random_int_range (0, G_N_ELEMENTS (colors))]; -} - -static GtkWidget * -eccp_get_source_color (EConfig *ec, - EConfigItem *item, - GtkWidget *parent, - GtkWidget *old, - gint position, - gpointer data) -{ - CalendarSourceDialog *sdialog = data; - static GtkWidget *label, *color_button; - guint row; - const gchar *color_spec = NULL; - GdkColor color; - - g_object_get (parent, "n-rows", &row, NULL); - - if (old) - gtk_widget_destroy (label); - - if (sdialog->original_source) - color_spec = e_source_peek_color_spec (sdialog->original_source); - - if (color_spec == NULL) { - color_spec = choose_initial_color (); - e_source_set_color_spec (sdialog->source, color_spec); - } - - if (!gdk_color_parse (color_spec, &color)) - g_warning ("Unknown color \"%s\" in calendar \"%s\"", - color_spec, e_source_get_display_name (sdialog->source)); - - label = gtk_label_new_with_mnemonic (_("Colo_r:")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_table_attach ( - GTK_TABLE (parent), label, - 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); - gtk_widget_show (label); - - color_button = gtk_color_button_new_with_color (&color); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), color_button); - gtk_table_attach ( - GTK_TABLE (parent), color_button, - 1, 2, row, row + 1, GTK_EXPAND | GTK_FILL, 0, 0, 0); - gtk_widget_show (color_button); - - g_signal_connect ( - G_OBJECT (color_button), "color-set", - G_CALLBACK (color_changed), ec->target); - - return color_button; -} - -static ECalConfigItem eccp_items[] = { - { E_CONFIG_BOOK, (gchar *) "", NULL }, - { E_CONFIG_PAGE, (gchar *) "00.general", (gchar *) N_("General") }, - { E_CONFIG_SECTION_TABLE, (gchar *) "00.general/00.source", (gchar *) N_("Calendar") }, - { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/00.type", NULL, eccp_get_source_type }, - { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/10.name", NULL, eccp_get_source_name }, - { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/20.color", NULL, eccp_get_source_color }, - { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/30.offline", NULL, eccp_general_offline }, - { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/31.alarm", NULL, eccp_notify_reminders }, - { 0 }, -}; - -static ECalConfigItem ectp_items[] = { - { E_CONFIG_BOOK, (gchar *) "", NULL }, - { E_CONFIG_PAGE, (gchar *) "00.general", (gchar *) N_("General") }, - { E_CONFIG_SECTION_TABLE, (gchar *) "00.general/00.source", (gchar *) N_("Task List") }, - { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/00.type", NULL, eccp_get_source_type }, - { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/10.name", NULL, eccp_get_source_name }, - { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/20.color", NULL, eccp_get_source_color }, - { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/30.offline", NULL, eccp_general_offline }, - { 0 }, -}; - -static ECalConfigItem ecmp_items[] = { - { E_CONFIG_BOOK, (gchar *) "", NULL }, - { E_CONFIG_PAGE, (gchar *) "00.general", (gchar *) N_("General") }, - { E_CONFIG_SECTION_TABLE, (gchar *) "00.general/00.source", (gchar *) N_("Memo List") }, - { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/00.type", NULL, eccp_get_source_type }, - { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/10.name", NULL, eccp_get_source_name }, - { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/20.color", NULL, eccp_get_source_color }, - { E_CONFIG_ITEM_TABLE, (gchar *) "00.general/00.source/30.offline", NULL, eccp_general_offline }, - { 0 }, -}; - -/** - * cs_load_sources: - * @sdialog: dialog where to load sources list - * @conf_key: configuration key where to get sources' list - * @group: can be NULL - * - * Loads list of sources from @conf_key. - */ - -static void -cs_load_sources (CalendarSourceDialog *sdialog, - const gchar *conf_key, - ESourceGroup *group) -{ - GConfClient *gconf; - - g_return_if_fail (sdialog != NULL && conf_key != NULL); - - sdialog->source = e_source_new ("", ""); - gconf = gconf_client_get_default (); - sdialog->source_list = e_source_list_new_for_gconf (gconf, conf_key); - sdialog->menu_source_groups = g_slist_copy (e_source_list_peek_groups (sdialog->source_list)); - sdialog->source_group = (ESourceGroup *) sdialog->menu_source_groups->data; - - g_object_unref (gconf); - - if (group) - sdialog->source_group = (ESourceGroup *) group; -} - -/** - * calendar_setup_edit_calendar: - * @parent: parent window for dialog (current unused) - * @source: the ESource corresponding to the calendar - * - * Show calendar properties for @source. - **/ -void -calendar_setup_edit_calendar (GtkWindow *parent, - ESource *source, - ESourceGroup *group) -{ - CalendarSourceDialog *sdialog = g_new0 (CalendarSourceDialog, 1); - gchar *xml; - ECalConfig *ec; - gint i; - GSList *items = NULL; - ECalConfigTargetSource *target; - - if (source) { - const gchar *color_spec; - - sdialog->original_source = source; - g_object_ref (source); - sdialog->source_group = e_source_peek_group (source); - xml = e_source_to_standalone_xml (source); - sdialog->source = e_source_new_from_standalone_xml (xml); - g_free (xml); - - color_spec = e_source_peek_color_spec (source); - if (color_spec != NULL) - e_source_set_color_spec (sdialog->source, color_spec); - } else { - cs_load_sources (sdialog, "/apps/evolution/calendar/sources", group); - } - - /* HACK: doesn't work if you don't do this */ - e_source_set_absolute_uri (sdialog->source, NULL); - e_source_set_group (sdialog->source, sdialog->source_group); - - sdialog->source_type = E_CAL_CLIENT_SOURCE_TYPE_EVENTS; - sdialog->config = ec = e_cal_config_new (E_CONFIG_BOOK, "org.gnome.evolution.calendar.calendarProperties"); - for (i = 0; eccp_items[i].path; i++) - items = g_slist_prepend (items, &eccp_items[i]); - e_config_add_items ((EConfig *) ec, items, eccp_free, sdialog); - e_config_add_page_check ((EConfig *) ec, NULL, eccp_check_complete, sdialog); - g_signal_connect_after ( - ec, "commit", - G_CALLBACK (eccp_commit), sdialog); - - target = e_cal_config_target_new_source (ec, sdialog->source); - target->source_type = E_CAL_CLIENT_SOURCE_TYPE_EVENTS; - e_config_set_target ((EConfig *) ec, (EConfigTarget *) target); - - sdialog->window = e_config_create_window ((EConfig *)ec, NULL, source ? _("Calendar Properties") : _("New Calendar")); - - /* forces initial validation */ - if (!sdialog->original_source) - e_config_target_changed ((EConfig *) ec, E_CONFIG_TARGET_CHANGED_STATE); - - return; -} - -void -calendar_setup_new_calendar (GtkWindow *parent) -{ - calendar_setup_edit_calendar (parent, NULL, NULL); -} - -void -calendar_setup_edit_task_list (GtkWindow *parent, - ESource *source) -{ - CalendarSourceDialog *sdialog = g_new0 (CalendarSourceDialog, 1); - gchar *xml; - ECalConfig *ec; - gint i; - GSList *items = NULL; - ECalConfigTargetSource *target; - - if (source) { - const gchar *color_spec; - - sdialog->original_source = source; - g_object_ref (source); - sdialog->source_group = e_source_peek_group (source); - xml = e_source_to_standalone_xml (source); - sdialog->source = e_source_new_from_standalone_xml (xml); - g_free (xml); - - color_spec = e_source_peek_color_spec (source); - e_source_set_color_spec (sdialog->source, color_spec); - } else { - cs_load_sources (sdialog, "/apps/evolution/tasks/sources", NULL); - } - - /* HACK: doesn't work if you don't do this */ - e_source_set_absolute_uri (sdialog->source, NULL); - e_source_set_group (sdialog->source, sdialog->source_group); - - sdialog->source_type = E_CAL_CLIENT_SOURCE_TYPE_TASKS; - sdialog->config = ec = e_cal_config_new (E_CONFIG_BOOK, "org.gnome.evolution.calendar.calendarProperties"); - for (i = 0; ectp_items[i].path; i++) - items = g_slist_prepend (items, &ectp_items[i]); - e_config_add_items ((EConfig *) ec, items, eccp_free, sdialog); - e_config_add_page_check ((EConfig *) ec, NULL, eccp_check_complete, sdialog); - g_signal_connect_after ( - ec, "commit", - G_CALLBACK (eccp_commit), sdialog); - - target = e_cal_config_target_new_source (ec, sdialog->source); - target->source_type = E_CAL_CLIENT_SOURCE_TYPE_TASKS; - e_config_set_target ((EConfig *) ec, (EConfigTarget *) target); - - sdialog->window = e_config_create_window ((EConfig *)ec, NULL, source ? _("Task List Properties") : _("New Task List")); - - /* forces initial validation */ - if (!sdialog->original_source) - e_config_target_changed ((EConfig *) ec, E_CONFIG_TARGET_CHANGED_STATE); - - return; -} - -void -calendar_setup_new_task_list (GtkWindow *parent) -{ - calendar_setup_edit_task_list (parent, NULL); -} - -void -calendar_setup_edit_memo_list (GtkWindow *parent, - ESource *source) -{ - CalendarSourceDialog *sdialog = g_new0 (CalendarSourceDialog, 1); - gchar *xml; - ECalConfig *ec; - gint i; - GSList *items = NULL; - ECalConfigTargetSource *target; - - if (source) { - const gchar *color_spec; - - sdialog->original_source = source; - g_object_ref (source); - sdialog->source_group = e_source_peek_group (source); - xml = e_source_to_standalone_xml (source); - sdialog->source = e_source_new_from_standalone_xml (xml); - g_free (xml); - - color_spec = e_source_peek_color_spec (source); - e_source_set_color_spec (sdialog->source, color_spec); - } else { - cs_load_sources (sdialog, "/apps/evolution/memos/sources", NULL); - } - - /* HACK: doesn't work if you don't do this */ - e_source_set_absolute_uri (sdialog->source, NULL); - e_source_set_group (sdialog->source, sdialog->source_group); - - sdialog->source_type = E_CAL_CLIENT_SOURCE_TYPE_MEMOS; - sdialog->config = ec = e_cal_config_new (E_CONFIG_BOOK, "org.gnome.evolution.calendar.calendarProperties"); - for (i = 0; ecmp_items[i].path; i++) - items = g_slist_prepend (items, &ecmp_items[i]); - e_config_add_items ((EConfig *) ec, items, eccp_free, sdialog); - e_config_add_page_check ((EConfig *) ec, NULL, eccp_check_complete, sdialog); - g_signal_connect_after ( - ec, "commit", - G_CALLBACK (eccp_commit), sdialog); - - target = e_cal_config_target_new_source (ec, sdialog->source); - target->source_type = E_CAL_CLIENT_SOURCE_TYPE_MEMOS; - e_config_set_target ((EConfig *) ec, (EConfigTarget *) target); - - sdialog->window = e_config_create_window ((EConfig *)ec, NULL, source ? _("Memo List Properties") : _("New Memo List")); - - /* forces initial validation */ - if (!sdialog->original_source) - e_config_target_changed ((EConfig *) ec, E_CONFIG_TARGET_CHANGED_STATE); - - return; -} - -void -calendar_setup_new_memo_list (GtkWindow *parent) -{ - calendar_setup_edit_memo_list (parent, NULL); -} diff --git a/calendar/gui/dialogs/calendar-setup.h b/calendar/gui/dialogs/calendar-setup.h deleted file mode 100644 index 18dc042848..0000000000 --- a/calendar/gui/dialogs/calendar-setup.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * David Trowbridge <trowbrds@cs.colorado.edu> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifndef __CALENDAR_SETUP_H__ -#define __CALENDAR_SETUP_H__ - -#include <gtk/gtk.h> -#include <libedataserver/e-source.h> -#include <libedataserver/e-source-group.h> - -G_BEGIN_DECLS - -void calendar_setup_edit_calendar (GtkWindow *parent, ESource *source, ESourceGroup *group); -void calendar_setup_new_calendar (GtkWindow *parent); - -void calendar_setup_edit_task_list (GtkWindow *parent, ESource *source); -void calendar_setup_new_task_list (GtkWindow *parent); - -void calendar_setup_edit_memo_list (GtkWindow *parent, ESource *source); -void calendar_setup_new_memo_list (GtkWindow *parent); - -G_END_DECLS - -#endif /* __CALENDAR_SETUP_H__ */ diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c index 55a602c8dc..5e447e76c4 100644 --- a/calendar/gui/dialogs/comp-editor.c +++ b/calendar/gui/dialogs/comp-editor.c @@ -481,6 +481,8 @@ save_comp (CompEditor *editor) CompEditorPrivate *priv; CompEditorFlags flags; ECalComponent *clone; + ESourceRegistry *registry; + EShell *shell; GList *l; gboolean result; GError *error = NULL; @@ -495,6 +497,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) { @@ -528,8 +533,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); @@ -583,8 +588,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); @@ -681,6 +686,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; @@ -688,6 +695,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; @@ -717,8 +728,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, @@ -1359,6 +1370,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; @@ -3257,6 +3269,8 @@ real_send_comp (CompEditor *editor, { CompEditorPrivate *priv; CompEditorFlags flags; + EShell *shell; + ESourceRegistry *registry; ECalComponent *send_comp = NULL; gchar *address = NULL; GSList *users = NULL; @@ -3266,6 +3280,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 */ @@ -3294,7 +3311,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); @@ -3304,7 +3322,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); @@ -3334,7 +3352,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 cfc8521927..21b86087fb 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); } @@ -220,7 +219,6 @@ copy_source (const CopySourceDialogData *const_csdd) e_client_utils_open_new ( csdd->orig_source, csdd->obj_type, FALSE, NULL, - e_client_utils_authenticate_handler, csdd->parent, orig_source_opened_cb, csdd); } @@ -232,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 || @@ -250,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 5ac51406de..01124d4a76 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 9b9d7b4bbd..ca253ca430 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 5fb672bd5e..85a0613532 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 e42bbc73d4..d438f16473 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 c1a63a291a..3ec75426e4 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 7d679e6bbf..1460ff47db 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 2797bcd9ec..44e36c6e58 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-spell-entry.h> @@ -112,7 +112,6 @@ struct _EventPagePrivate { GtkWidget *info_hbox; GtkWidget *info_icon; GtkWidget *info_string; - gchar *subscriber_info_text; GtkWidget *summary; GtkWidget *summary_label; @@ -160,7 +159,7 @@ struct _EventPagePrivate { GtkWidget *categories_btn; GtkWidget *categories; - GtkWidget *source_selector; + GtkWidget *source_combo_box; /* Meeting related items */ GtkWidget *list_box; @@ -224,9 +223,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; @@ -236,28 +238,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); @@ -267,11 +270,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; } @@ -656,7 +657,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; @@ -698,7 +699,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); @@ -724,7 +725,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); @@ -1106,6 +1107,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; @@ -1118,6 +1121,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; @@ -1178,7 +1184,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); @@ -1190,7 +1197,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)) @@ -1363,7 +1371,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); @@ -2510,6 +2518,7 @@ static gboolean get_widgets (EventPage *epage) { EShell *shell; + ESourceRegistry *registry; CompEditor *editor; CompEditorPage *page = COMP_EDITOR_PAGE (epage); GtkEntryCompletion *completion; @@ -2526,6 +2535,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) @@ -2618,9 +2628,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); @@ -2934,7 +2944,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; @@ -2979,7 +2989,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 ( @@ -3045,7 +3055,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); @@ -3055,26 +3064,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 @@ -3219,7 +3210,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; @@ -3231,8 +3224,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 ( @@ -3276,7 +3273,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 */ @@ -3357,7 +3354,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); @@ -3481,7 +3478,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", @@ -3504,32 +3501,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; } @@ -3542,7 +3525,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 @@ -3563,12 +3545,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); @@ -3602,8 +3590,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 c2e291f558..ee9c3e51b9 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 715681445c..4e054d2a5b 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> @@ -50,8 +52,6 @@ #include <misc/e-spell-entry.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" @@ -75,7 +75,6 @@ struct _MemoPagePrivate { GtkWidget *info_hbox; GtkWidget *info_icon; GtkWidget *info_string; - gchar *subscriber_info_text; /* Organizer */ GtkWidget *org_label; @@ -97,7 +96,7 @@ struct _MemoPagePrivate { GtkWidget *categories_btn; GtkWidget *categories; - GtkWidget *source_selector; + GtkWidget *source_combo_box; gchar **address_strings; gchar *fallback_address; @@ -120,32 +119,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); @@ -156,11 +166,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; } @@ -236,8 +244,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); } @@ -270,6 +276,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; @@ -280,6 +288,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); @@ -343,7 +354,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; @@ -370,7 +382,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)) @@ -421,12 +433,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; @@ -466,7 +477,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 @@ -553,7 +564,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); @@ -562,7 +573,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; } @@ -834,6 +849,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; @@ -845,6 +863,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!"); @@ -885,11 +907,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); @@ -958,7 +980,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, @@ -1021,7 +1043,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); @@ -1031,26 +1052,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 @@ -1117,7 +1120,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" @@ -1137,7 +1140,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 ( @@ -1184,36 +1187,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; } @@ -1223,7 +1214,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!"); @@ -1242,13 +1232,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); /* Make sure our custom widget classes are registered with * GType before we load the GtkBuilder definition file. */ @@ -1275,8 +1271,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++) { @@ -1291,7 +1287,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 d30aecf0d5..fe63f1e009 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 740428ae49..8ea35e2c00 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 2ef8e0e625..77864e8c97 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 378aea593a..0c81d3ea47 100644 --- a/calendar/gui/dialogs/task-editor.c +++ b/calendar/gui/dialogs/task-editor.c @@ -138,74 +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; - GtkWidget *content_area; - 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); - - priv->task_page = task_page_new (priv->model, editor); - comp_editor_append_page ( - editor, COMP_EDITOR_PAGE (priv->task_page), - _("Task"), TRUE); - - priv->task_details_window = gtk_dialog_new_with_buttons ( - _("Task Details"), GTK_WINDOW (object), GTK_DIALOG_MODAL, - GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL); - g_signal_connect ( - priv->task_details_window, "response", - G_CALLBACK (gtk_widget_hide), NULL); - g_signal_connect ( - priv->task_details_window, "delete-event", - G_CALLBACK (gtk_widget_hide), NULL); - - priv->task_details_page = task_details_page_new (editor); - content_area = gtk_dialog_get_content_area ( - GTK_DIALOG (priv->task_details_window)); - gtk_container_add ( - GTK_CONTAINER (content_area), - comp_editor_page_get_widget ( - (CompEditorPage *) priv->task_details_page)); - gtk_widget_show_all ( - gtk_bin_get_child (GTK_BIN (priv->task_details_window))); - comp_editor_append_page ( - editor, COMP_EDITOR_PAGE (priv->task_details_page), NULL, FALSE); - - is_assigned = flags & COMP_EDITOR_IS_ASSIGNED; - - action_group = comp_editor_get_action_group (editor, "coordinated"); - 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) { @@ -236,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", @@ -311,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; @@ -333,6 +293,7 @@ task_editor_init (TaskEditor *te) CompEditor *editor = COMP_EDITOR (te); GtkUIManager *ui_manager; GtkActionGroup *action_group; + GtkWidget *content_area; GtkAction *action; const gchar *id; GError *error = NULL; @@ -342,6 +303,28 @@ task_editor_init (TaskEditor *te) te->priv->assignment_shown = TRUE; te->priv->updating = FALSE; + 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); + g_signal_connect ( + te->priv->task_details_window, "response", + G_CALLBACK (gtk_widget_hide), NULL); + g_signal_connect ( + te->priv->task_details_window, "delete-event", + G_CALLBACK (gtk_widget_hide), NULL); + + te->priv->task_details_page = task_details_page_new (editor); + content_area = gtk_dialog_get_content_area ( + GTK_DIALOG (te->priv->task_details_window)); + gtk_container_add ( + GTK_CONTAINER (content_area), + comp_editor_page_get_widget ( + (CompEditorPage *) te->priv->task_details_page)); + gtk_widget_show_all ( + gtk_bin_get_child (GTK_BIN (te->priv->task_details_window))); + comp_editor_append_page ( + editor, COMP_EDITOR_PAGE (te->priv->task_details_page), NULL, FALSE); + action_group = comp_editor_get_action_group (editor, "individual"); gtk_action_group_add_actions ( action_group, task_entries, @@ -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 8b2bd1f98c..665e03eb30 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> @@ -47,8 +49,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" @@ -87,7 +87,6 @@ struct _TaskPagePrivate { GtkWidget *info_hbox; GtkWidget *info_icon; GtkWidget *info_string; - gchar *subscriber_info_text; GtkWidget *summary; GtkWidget *summary_label; @@ -102,7 +101,7 @@ struct _TaskPagePrivate { GtkWidget *categories_btn; GtkWidget *categories; - GtkWidget *source_selector; + GtkWidget *source_combo_box; /* Meeting related items */ GtkWidget *list_box; @@ -150,32 +149,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); @@ -186,11 +196,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; } @@ -253,12 +261,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; @@ -301,7 +308,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 @@ -341,7 +348,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); @@ -487,10 +494,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; @@ -504,6 +513,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) @@ -521,7 +533,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); @@ -628,7 +641,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); @@ -639,7 +652,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); @@ -651,7 +665,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 { @@ -1436,6 +1451,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; @@ -1447,6 +1465,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; @@ -1508,10 +1530,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); @@ -1785,7 +1808,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 ( @@ -1852,7 +1875,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); @@ -1862,26 +1884,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 @@ -1900,7 +1904,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); @@ -1977,7 +1981,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" @@ -2084,45 +2088,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 @@ -2143,6 +2132,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; @@ -2150,6 +2142,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; @@ -2174,8 +2169,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 f3f85f5177..0603f44de4 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> |