static void calendar_sources_selected_sources_notify (GConfClient *client, guint cnx_id, GConfEntry *entry, CalendarSourceData *source_data) { GSList *l; if (!entry->value || entry->value->type != GCONF_VALUE_LIST || gconf_value_get_list_type (entry->value) != GCONF_VALUE_STRING) return; dprintf ("Selected sources key (%s) changed, reloading\n", entry->key); for (l = source_data->selected_sources; l; l = l->next) g_free (l->data); source_data->selected_sources = NULL; for (l = gconf_value_get_list (entry->value); l; l = l->next) { const char *source = gconf_value_get_string (l->data); source_data->selected_sources = g_slist_prepend (source_data->selected_sources, g_strdup (source)); } source_data->selected_sources = g_slist_reverse (source_data->selected_sources); calendar_sources_load_esource_list (source_data); }
static void calendar_sources_esource_list_changed (ESourceList *source_list, CalendarSourceData *source_data) { dprintf ("ESourceList changed, reloading\n"); calendar_sources_load_esource_list (source_data); }
static void ensure_task_sources (CalendarSources *sources) { if (!sources->priv->task_sources.loaded) { calendar_sources_load_esource_list (sources->priv->registry, &sources->priv->task_sources); sources->priv->task_sources.loaded = TRUE; } }
static void calendar_sources_load_sources (CalendarSources *sources, CalendarSourceData *source_data, const char *sources_key, const char *selected_sources_key, const char *selected_sources_dir) { GConfClient *gconf_client; GError *error; dprintf ("---------------------------\n"); dprintf ("Loading sources:\n"); dprintf (" sources_key: %s\n", sources_key); dprintf (" selected_sources_key: %s\n", selected_sources_key); dprintf (" selected_sources_dir: %s\n", selected_sources_dir); gconf_client = sources->priv->gconf_client; error = NULL; source_data->selected_sources = gconf_client_get_list (gconf_client, selected_sources_key, GCONF_VALUE_STRING, &error); if (error) { g_warning ("Failed to get selected sources from '%s': %s\n", selected_sources_key, error->message); g_error_free (error); return; } gconf_client_add_dir (gconf_client, selected_sources_dir, GCONF_CLIENT_PRELOAD_NONE, NULL); source_data->selected_sources_dir = g_strdup (selected_sources_dir); source_data->selected_sources_listener = gconf_client_notify_add (gconf_client, selected_sources_dir, (GConfClientNotifyFunc) calendar_sources_selected_sources_notify, source_data, NULL, NULL); source_data->esource_list = e_source_list_new_for_gconf (gconf_client, sources_key); g_signal_connect (source_data->esource_list, "changed", G_CALLBACK (calendar_sources_esource_list_changed), source_data); calendar_sources_load_esource_list (source_data); source_data->loaded = TRUE; dprintf ("---------------------------\n"); }
static gboolean backend_restart (gpointer data) { CalendarSourceData *source_data = data; calendar_sources_load_esource_list (source_data); source_data->timeout_id = 0; return FALSE; }
static gboolean backend_restart (gpointer data) { CalendarSourceData *source_data = data; ESourceRegistry *registry; registry = source_data->sources->priv->registry; calendar_sources_load_esource_list (registry, source_data); g_signal_emit (source_data->sources, source_data->changed_signal, 0); source_data->timeout_id = 0; return FALSE; }
GList * calendar_sources_get_task_clients (CalendarSources *sources) { GList *list, *link; g_return_val_if_fail (CALENDAR_IS_SOURCES (sources), NULL); if (!sources->priv->task_sources.loaded) { calendar_sources_load_esource_list (sources->priv->registry, &sources->priv->task_sources); sources->priv->task_sources.loaded = TRUE; } list = g_hash_table_get_values (sources->priv->task_sources.clients); for (link = list; link != NULL; link = g_list_next (link)) link->data = ((ClientData *) link->data)->client; return list; }