diff options
Diffstat (limited to 'calendar/gui/dialogs/calendar-setup.c')
-rw-r--r-- | calendar/gui/dialogs/calendar-setup.c | 717 |
1 files changed, 0 insertions, 717 deletions
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); -} |