void org_gnome_exchange_check_address_book_subscribed (EPlugin *ep, EABPopupTargetSource *target) { GSList *menus = NULL; int i = 0; ESource *source = NULL; gchar *uri = NULL; gchar *path = NULL; char *sub_folder = NULL; const char *base_uri; ExchangeAccount *account = NULL; ESourceGroup *group; account = exchange_operations_get_exchange_account (); if (!account) return; source = e_source_selector_peek_primary_selection (E_SOURCE_SELECTOR (target->selector)); group = e_source_peek_group (source); base_uri = e_source_group_peek_base_uri (group); if (!base_uri || strcmp (base_uri, "exchange://")) return; uri = e_source_get_uri (source); path = g_strdup (uri + strlen ("exchange://") + strlen (account->account_filename) + strlen ("/;")); g_free (uri); sub_folder = strchr (path, '@'); if (!sub_folder) { g_free (path); return; } for (i = 0; i < sizeof (popup_ab_items) / sizeof (popup_ab_items[0]); i++) menus = g_slist_prepend (menus, &popup_ab_items[i]); e_popup_add_items (target->target.popup, menus, NULL, popup_ab_free, target); g_free (path); }
ESourceGroup * e_source_list_peek_group_by_base_uri (ESourceList *list, const gchar *base_uri) { GSList *p; gint len; g_return_val_if_fail (E_IS_SOURCE_LIST (list), NULL); g_return_val_if_fail (base_uri != NULL, NULL); len = strlen (base_uri); for (p = e_source_list_peek_groups (list); p != NULL; p = p->next) { ESourceGroup *group = E_SOURCE_GROUP (p->data); const gchar *buri = e_source_group_peek_base_uri (group); if (buri && g_ascii_strncasecmp (buri, base_uri, len) == 0) return group; } return NULL; }
static void dump_group (ESourceGroup *group) { GSList *sources, *p; g_print ("Group %s\n", e_source_group_peek_uid (group)); g_print ("\tname: %s\n", e_source_group_peek_name (group)); g_print ("\tbase_uri: %s\n", e_source_group_peek_base_uri (group)); sources = e_source_group_peek_sources (group); for (p = sources; p != NULL; p = p->next) { ESource *source = E_SOURCE (p->data); dump_source (source); if (e_source_peek_group (source) != group) g_warning ("\t\t** ERROR ** parent pointer is %p, should be %p", (gpointer) e_source_peek_group (source), (gpointer) group); } }
GtkWidget * plugin_couchdb_calendar (EPlugin *epl, EConfigHookItemFactoryData *data) { ESource *source; ESourceGroup *group; const gchar *base_uri; ECalConfigTargetSource *t = (ECalConfigTargetSource *) data->target; source = t->source; group = e_source_peek_group (source); base_uri = e_source_group_peek_base_uri (group); g_object_set_data (G_OBJECT (epl), "cwidget", NULL); if (strcmp (base_uri, COUCHDB_BASE_URI) != 0) return NULL; build_couchdb_settings (epl, source, data->parent); return NULL; }
gpointer check_username_filled (ESource *source) { gboolean res = TRUE; g_return_val_if_fail (source != NULL, NULL); if (g_ascii_strncasecmp ( GOOGLE_BASE_URI, e_source_group_peek_base_uri ( e_source_peek_group (source)), strlen (GOOGLE_BASE_URI)) == 0) { gchar *username; username = g_strdup (e_source_get_property (source, "username")); if (username) username = g_strstrip (username); res = username && *username; g_free (username); } return GINT_TO_POINTER (res ? 1 : 0); }
GtkWidget * plugin_google_contacts (EPlugin *epl, EConfigHookItemFactoryData *data) { EABConfigTargetSource *t = (EABConfigTargetSource *) data->target; ESource *source; ESourceGroup *group; const gchar *base_uri; const gchar *username; const gchar *refresh_interval_str; guint refresh_interval; const gchar *use_ssl_str; gchar *buff; gboolean use_ssl; GtkWidget *parent; GtkWidget *vbox; GtkWidget *section; GtkWidget *vbox2; GtkWidget *hbox; GtkWidget *spacer; GtkWidget *label; GtkWidget *username_entry; GtkWidget *interval_sb; GtkWidget *interval_combo; IntervalType type; gint time; GtkWidget *ssl_cb; struct ui_data *ui; source = t->source; group = e_source_peek_group (source); base_uri = e_source_group_peek_base_uri (group); g_object_set_data (G_OBJECT (epl), "gwidget", NULL); if (g_ascii_strncasecmp (GOOGLE_BASE_URI, base_uri, 9) != 0) return NULL; /* Build up the UI */ parent = data->parent; vbox = gtk_widget_get_ancestor ( gtk_widget_get_parent (parent), GTK_TYPE_VBOX); vbox2 = gtk_vbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (vbox), vbox2, FALSE, FALSE, 0); section = gtk_label_new (NULL); buff = g_strconcat ("<b>", _("Server"), "</b>", NULL); gtk_label_set_markup (GTK_LABEL (section), buff); g_free (buff); gtk_misc_set_alignment (GTK_MISC (section), 0.0, 0.0); gtk_box_pack_start (GTK_BOX (vbox2), section, FALSE, FALSE, 0); hbox = gtk_hbox_new (FALSE, 10); gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, TRUE, 0); spacer = gtk_label_new (" "); gtk_box_pack_start (GTK_BOX (hbox), spacer, FALSE, FALSE, 0); label = gtk_label_new_with_mnemonic (_("User_name:")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); username_entry = gtk_entry_new (); username = e_source_get_property (source, "username"); if (username) gtk_entry_set_text (GTK_ENTRY (username_entry), username); gtk_box_pack_start (GTK_BOX (hbox), username_entry, TRUE, TRUE, 0); hbox = gtk_hbox_new (FALSE, 10); gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, TRUE, 0); spacer = gtk_label_new (" "); gtk_box_pack_start (GTK_BOX (hbox), spacer, FALSE, FALSE, 0); use_ssl_str = e_source_get_property (source, "use-ssl"); if (use_ssl_str && ('1' == use_ssl_str[0] || 0 == g_ascii_strcasecmp (use_ssl_str, "true"))) { use_ssl = 1; } else { use_ssl = 0; } ssl_cb = gtk_check_button_new_with_mnemonic (_("Use _secure connection")); gtk_box_pack_start (GTK_BOX (hbox), ssl_cb, FALSE, FALSE, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ssl_cb), use_ssl); hbox = gtk_hbox_new (FALSE, 10); gtk_box_pack_start (GTK_BOX (vbox2), hbox, TRUE, TRUE, 0); spacer = gtk_label_new (" "); gtk_box_pack_start (GTK_BOX (hbox), spacer, FALSE, FALSE, 0); refresh_interval_str = e_source_get_property (source, "refresh-interval"); if (refresh_interval_str && (1 == sscanf (refresh_interval_str, "%u", &refresh_interval))) { } else { refresh_interval = -1; } seconds_to_interval (refresh_interval, &type, &time); label = gtk_label_new_with_mnemonic (_("Re_fresh:")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); interval_sb = gtk_spin_button_new_with_range (1, 100, 1); gtk_spin_button_set_value (GTK_SPIN_BUTTON (interval_sb), time); gtk_box_pack_start (GTK_BOX (hbox), interval_sb, FALSE, FALSE, 0); interval_combo = gtk_combo_box_text_new (); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (interval_combo), _("minutes")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (interval_combo), _("hours")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (interval_combo), _("days")); gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (interval_combo), _("weeks")); gtk_combo_box_set_active (GTK_COMBO_BOX (interval_combo), type); gtk_box_pack_start (GTK_BOX (hbox), interval_combo, FALSE, FALSE, 0); gtk_widget_show_all (vbox2); g_object_set_data (G_OBJECT (interval_sb), "interval-combo", interval_combo); g_object_set_data (G_OBJECT (interval_combo), "interval-sb", interval_sb); ui = g_malloc0 (sizeof (struct ui_data)); ui->widget = vbox2; g_object_set_data_full(G_OBJECT(epl), "gwidget", ui, destroy_ui_data); g_signal_connect ( ui->widget, "destroy", G_CALLBACK (gtk_widget_destroyed), &ui->widget); g_signal_connect ( username_entry, "changed", G_CALLBACK (on_username_entry_changed), source); g_signal_connect ( interval_combo, "changed", G_CALLBACK (on_interval_combo_changed), source); g_signal_connect ( ssl_cb, "toggled", G_CALLBACK (on_ssl_cb_toggled), source); g_signal_connect ( interval_sb, "value-changed", G_CALLBACK (on_interval_sb_value_changed), source); return NULL; }
GtkWidget * plugin_couchdb_contacts (EPlugin *epl, EConfigHookItemFactoryData *data) { ESource *source; ESourceGroup *group; const gchar *base_uri; GtkWidget *parent; GtkWidget *table, *label, *parent_vbox; UIData *ui; const gchar *property; EABConfigTargetSource *t = (EABConfigTargetSource *) data->target; source = t->source; group = e_source_peek_group (source); base_uri = e_source_group_peek_base_uri (group); g_object_set_data (G_OBJECT (epl), "cwidget", NULL); if (strcmp (base_uri, COUCHDB_BASE_URI) != 0) return NULL; /* Build up the UI */ ui = g_new0 (UIData, 1); ui->source = t->source; parent = data->parent; parent_vbox = gtk_widget_get_ancestor (gtk_widget_get_parent (parent), GTK_TYPE_VBOX); ui->vbox = gtk_vbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (parent_vbox), ui->vbox, FALSE, FALSE, 0); label = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (label), _("<b>Server</b>")); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0); gtk_box_pack_start (GTK_BOX (ui->vbox), label, FALSE, FALSE, 0); table = gtk_table_new (3, 3, FALSE); gtk_box_pack_start (GTK_BOX (ui->vbox), table, TRUE, TRUE, 0); label = gtk_label_new (" "); gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); ui->user_db_button = gtk_radio_button_new_with_label (NULL, _("Desktop CouchDB")); gtk_table_attach (GTK_TABLE (table), ui->user_db_button, 1, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 3, 3); ui->system_db_button = gtk_radio_button_new_with_label ( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ui->user_db_button)), _("System-wide CouchDB")); gtk_table_attach (GTK_TABLE (table), ui->system_db_button, 1, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_FILL, 3, 3); ui->remote_db_button = gtk_radio_button_new_with_label ( gtk_radio_button_get_group (GTK_RADIO_BUTTON (ui->user_db_button)), _("Remote CouchDB server")); gtk_table_attach (GTK_TABLE (table), ui->remote_db_button, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 3, 3); ui->remote_db_entry = gtk_entry_new (); gtk_table_attach (GTK_TABLE (table), ui->remote_db_entry, 2, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_FILL, 3, 3); gtk_widget_show_all (ui->vbox); /* Set values from the source */ property = e_source_get_property (ui->source, "couchdb_instance"); if (g_strcmp0 (property, "system") == 0) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ui->system_db_button), TRUE); gtk_widget_set_sensitive (ui->remote_db_entry, FALSE); } else if (g_strcmp0 (property, "remote") == 0) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ui->remote_db_button), TRUE); gtk_widget_set_sensitive (ui->remote_db_entry, TRUE); gtk_entry_set_text (GTK_ENTRY (ui->remote_db_entry), e_source_get_property (ui->source, "couchdb_remote_server")); } else { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ui->user_db_button), TRUE); if (!property) e_source_set_property (ui->source, "couchdb_instance", "user"); gtk_widget_set_sensitive (ui->remote_db_entry, FALSE); } g_object_set_data_full (G_OBJECT (epl), "cwidget", ui, destroy_ui_data); g_signal_connect (ui->vbox, "destroy", G_CALLBACK (gtk_widget_destroyed), &ui->vbox); /* Signals */ g_signal_connect (G_OBJECT (ui->user_db_button), "toggled", G_CALLBACK (on_user_db_toggled), ui); g_signal_connect (G_OBJECT (ui->system_db_button), "toggled", G_CALLBACK (on_system_db_toggled), ui); g_signal_connect (G_OBJECT (ui->remote_db_button), "toggled", G_CALLBACK (on_remote_db_toggled), ui); g_signal_connect (G_OBJECT (ui->remote_db_entry), "changed", G_CALLBACK (on_remote_db_changed), ui); return NULL; }
void dates_update_calendars (ESourceList *cal_list, DatesData *d) { GSList *groups, *g; /* TODO: Don't reload *all* calendars on update */ d->dcal = NULL; gtk_list_store_clear (d->cal_list_store); dates_view_remove_all_calendars (d->view); groups = e_source_list_peek_groups (cal_list); #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("Updating Calendars"); #endif /* Disable creating of calendars until we know there's a valid * calendar to add events to. */ d->cal_loaded = FALSE; if (d->TBNew) { #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("*** Setting TBNew button insensitive ***"); #endif gtk_widget_set_sensitive (d->TBNew, FALSE); } for (g = groups; g; g = g->next) { GSList *sources, *s; #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("Group %s (%s)", e_source_group_peek_name ( E_SOURCE_GROUP (g->data)), e_source_group_peek_base_uri ( E_SOURCE_GROUP (g->data))); #endif sources = e_source_group_peek_sources ( E_SOURCE_GROUP (g->data)); for (s = sources; s; s = s->next) { ESource *source = E_SOURCE (s->data); ECal *ecal; ecal = dates_load_esource (source, E_CAL_SOURCE_TYPE_EVENT, NULL, d); if (!ecal) { #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("No EVENTS in this source"); #endif continue; } #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("Found EVENTS in this source"); #endif g_signal_connect (G_OBJECT (ecal), "cal_opened", G_CALLBACK (dates_cal_open_cb), d); e_cal_open_async (ecal, FALSE); /* * Set the calendar mode to CAL_MODE_REMOTE. This is necessary to get the * remote (webcal) calendars to work. It doesn't seem to have any effect * on the file backend. */ e_cal_set_mode (ecal, CAL_MODE_REMOTE); } } }
void dates_cal_open_cb (ECal *ecal, ECalendarStatus status, DatesData *d) { gboolean read_only; GError *error = NULL; const char *ecal_name; ESource *source; ESourceGroup *group; GtkTreeIter iter; gchar *primary_uid; GSList *selected_list; gboolean selected; gchar * cal_name; #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("Calendar opened, setting up..."); #endif if (status != E_CALENDAR_STATUS_OK) { g_warning ("Error '%d' opening ecal", status); g_object_unref (ecal); if (d->first_load) { GtkWidget *dialog = gtk_message_dialog_new ( GTK_WINDOW (d->main_window), GTK_DIALOG_MODAL | GTK_DIALOG_NO_SEPARATOR, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Dates failed to open the system calendar. " "You will not be able to view or create " "events; this may be remedied by restarting.")); gtk_dialog_run (GTK_DIALOG (dialog)); } return; } source = e_cal_get_source (ecal); ecal_name = e_source_peek_name (source); if (!e_cal_is_read_only (ecal, &read_only, &error)) { g_warning ("Error querying calendar's read-only status: %s", error->message); g_error_free (error); g_object_unref (ecal); return; } /* * Work around the fact that eds-dbus seems to be returning the wrong * value for e_cal_is_read_only on the calendar itself for the http * backend. But on the events themselves it is fine */ group = e_source_peek_group (source); if (strncmp (e_source_group_peek_base_uri (group), "webcal://", 9) == 0) read_only = TRUE; selected_list = gconf_client_get_list (gconf_client_get_default (), CALENDAR_GCONF_SELECTED, GCONF_VALUE_STRING, NULL); #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("selected_list %p: is in uids %d", selected_list, is_in_uids (selected_list, source)); #endif if (selected_list && is_in_uids (selected_list, source)) { dates_view_add_calendar (d->view, ecal); g_signal_connect (G_OBJECT (ecal), "backend_died", G_CALLBACK (dates_backend_died_cb), d); selected = TRUE; } else { selected = FALSE; } if ((!read_only) && (selected)) { if (!d->dcal) d->dcal = ecal; else { /* Find out if it's the default calendar */ primary_uid = gconf_client_get_string ( gconf_client_get_default (), CALENDAR_GCONF_PRIMARY, NULL); if (primary_uid) { if (strcmp (e_source_peek_uid (source), primary_uid) == 0) d->dcal = ecal; g_free (primary_uid); } } d->cal_loaded = TRUE; if (d->TBNew) { #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("*** Setting TBNew button sensitive ***"); #endif gtk_widget_set_sensitive (d->TBNew, TRUE); } } else { #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("*** RO %d, Selected %d ***", read_only, selected); #endif } if (ecal_name && !read_only) cal_name = g_strdup (ecal_name); else if (ecal_name) cal_name = g_strconcat (ecal_name, _(" (Read Only)"), NULL); else if (!read_only) cal_name = g_strdup (_("Unknown")); else cal_name = g_strconcat (_("Unknown"), _(" (Read Only)"), NULL); gtk_list_store_insert_with_values (d->cal_list_store, &iter, G_MAXINT, COL_CALNAME, cal_name, COL_CALPTR, ecal, COL_NOTREADONLY, !read_only, COL_SELECTED, selected, -1); g_free (cal_name); #ifdef DEBUG if (d->debug & DATES_DEBUG_CALENDAR) g_debug ("Calendar added."); #endif dates_platform_cal_open (d); }
static void ensure_sources (MemosComponent *component) { GSList *groups; ESourceList *source_list; ESourceGroup *group; ESourceGroup *on_this_computer; ESourceGroup *on_the_web; ESource *personal_source; char *base_uri, *base_uri_proto; const gchar *base_dir; on_this_computer = NULL; on_the_web = NULL; personal_source = NULL; if (!e_cal_get_sources (&source_list, E_CAL_SOURCE_TYPE_JOURNAL, NULL)) { g_warning ("Could not get memo source list from GConf!"); return; } base_dir = memos_component_peek_base_directory (component); base_uri = g_build_filename (base_dir, "local", NULL); base_uri_proto = g_filename_to_uri (base_uri, NULL, NULL); groups = e_source_list_peek_groups (source_list); if (groups) { /* groups are already there, we need to search for things... */ GSList *g; for (g = groups; g; g = g->next) { group = E_SOURCE_GROUP (g->data); /* compare only file:// part. If user home dir name changes we do not want to create one more group */ if (!on_this_computer && !strncmp (base_uri_proto, e_source_group_peek_base_uri (group), 7)) on_this_computer = group; else if (!on_the_web && !strcmp (WEB_BASE_URI, e_source_group_peek_base_uri (group))) on_the_web = group; } } if (on_this_computer) { /* make sure "Personal" shows up as a source under this group */ GSList *sources = e_source_group_peek_sources (on_this_computer); GSList *s; for (s = sources; s; s = s->next) { ESource *source = E_SOURCE (s->data); const gchar *relative_uri; relative_uri = e_source_peek_relative_uri (source); if (relative_uri == NULL) continue; if (!strcmp (PERSONAL_RELATIVE_URI, relative_uri)) { personal_source = source; break; } } /* Make sure we have the correct base uri. This can change when user's homedir name changes */ if (strcmp (base_uri_proto, e_source_group_peek_base_uri (on_this_computer))) { e_source_group_set_base_uri (on_this_computer, base_uri_proto); /* *sigh* . We shouldn't need this sync call here as set_base_uri call results in synching to gconf, but that happens in idle loop and too late to prevent user seeing "Can not Open ... because of invalid uri" error.*/ e_source_list_sync (source_list,NULL); } } else { /* create the local source group */ group = e_source_group_new (_("On This Computer"), base_uri_proto); e_source_list_add_group (source_list, group, -1); on_this_computer = group; } if (!personal_source) { GSList *memos_selected; /* Create the default Person addressbook */ ESource *source = e_source_new (_("Personal"), PERSONAL_RELATIVE_URI); e_source_group_add_source (on_this_computer, source, -1); memos_selected = calendar_config_get_memos_selected (); if (!calendar_config_get_primary_memos () && !memos_selected) { GSList selected; calendar_config_set_primary_memos (e_source_peek_uid (source)); selected.data = (gpointer)e_source_peek_uid (source); selected.next = NULL; calendar_config_set_memos_selected (&selected); } if (memos_selected) { g_slist_foreach (memos_selected, (GFunc) g_free, NULL); g_slist_free (memos_selected); } e_source_set_color_spec (source, "#BECEDD"); personal_source = source; } if (!on_the_web) { /* Create the LDAP source group */ group = e_source_group_new (_("On The Web"), WEB_BASE_URI); e_source_list_add_group (source_list, group, -1); on_the_web = group; } component->priv->source_list = source_list; g_free (base_uri_proto); g_free (base_uri); }
static void create_memo_sources (EShellBackend *shell_backend, ESourceList *source_list, ESourceGroup **on_this_computer, ESourceGroup **on_the_web, ESource **personal_source) { EShell *shell; EShellSettings *shell_settings; GSList *groups; ESourceGroup *group; *on_this_computer = NULL; *on_the_web = NULL; *personal_source = NULL; shell = e_shell_backend_get_shell (shell_backend); shell_settings = e_shell_get_shell_settings (shell); groups = e_source_list_peek_groups (source_list); if (groups) { /* groups are already there, we need to search for things... */ GSList *g; gchar *base_dir, *base_uri; base_dir = g_build_filename (e_shell_backend_get_data_dir (shell_backend), "local", NULL); base_uri = g_filename_to_uri (base_dir, NULL, NULL); for (g = groups; g; g = g->next) { group = E_SOURCE_GROUP (g->data); if (strcmp (base_uri, e_source_group_peek_base_uri (group)) == 0) e_source_group_set_base_uri (group, LOCAL_BASE_URI); if (!*on_this_computer && !strcmp (LOCAL_BASE_URI, e_source_group_peek_base_uri (group))) *on_this_computer = g_object_ref (group); else if (!*on_the_web && !strcmp (WEBCAL_BASE_URI, e_source_group_peek_base_uri (group))) *on_the_web = g_object_ref (group); } g_free (base_dir); g_free (base_uri); } if (*on_this_computer) { /* make sure "Personal" shows up as a source under * this group */ GSList *sources = e_source_group_peek_sources (*on_this_computer); GSList *s; for (s = sources; s; s = s->next) { ESource *source = E_SOURCE (s->data); const gchar *relative_uri; relative_uri = e_source_peek_relative_uri (source); if (relative_uri == NULL) continue; if (!strcmp (PERSONAL_RELATIVE_URI, relative_uri)) { *personal_source = g_object_ref (source); break; } } } else { /* create the local source group */ group = e_source_group_new (_("On This Computer"), LOCAL_BASE_URI); e_source_list_add_group (source_list, group, -1); *on_this_computer = group; } if (!*personal_source) { GSList *selected; gchar *primary_memo_list; /* Create the default Person memo list */ ESource *source = e_source_new (_("Personal"), PERSONAL_RELATIVE_URI); e_source_group_add_source (*on_this_computer, source, -1); primary_memo_list = e_shell_settings_get_string ( shell_settings, "cal-primary-memo-list"); selected = e_memo_shell_backend_get_selected_memo_lists ( E_MEMO_SHELL_BACKEND (shell_backend)); if (primary_memo_list == NULL && selected == NULL) { GSList link; e_shell_settings_set_string ( shell_settings, "cal-primary-memo-list", e_source_peek_uid (source)); link.data = (gpointer) e_source_peek_uid (source); link.next = NULL; e_memo_shell_backend_set_selected_memo_lists ( E_MEMO_SHELL_BACKEND (shell_backend), &link); } g_slist_foreach (selected, (GFunc) g_free, NULL); g_slist_free (selected); e_source_set_color_spec (source, "#BECEDD"); *personal_source = source; } if (!*on_the_web) { /* Create the Webcal source group */ group = e_source_group_new (_("On The Web"), WEBCAL_BASE_URI); e_source_list_add_group (source_list, group, -1); *on_the_web = group; } }