/** * Based on the current locale, return the user desktop filename * to use. * The returned value must be freed */ gchar *get_user_desktop_file() { gchar **locale = g_strsplit_set(gc_locale_get(), ".", 2); gchar *filename = gc_file_find_absolute_writeable("%s/default-%s.desktop", gcomprisBoard->boarddir, locale[0]); g_strfreev(locale); return filename; }
void gc_wordlist_save(GcomprisWordlist *wordlist) { GSList *listlevel,*listword; LevelWordlist *level; gchar *filename, *tmp; xmlNodePtr wlnode, levelnode, node; xmlDocPtr doc; if(!wordlist) return; doc = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION); if(!doc) return; node = xmlNewNode(NULL, BAD_CAST "GCompris"); xmlDocSetRootElement(doc,node); wlnode = xmlNewChild(node, NULL, BAD_CAST "Wordlist", NULL); if(wordlist->name) xmlSetProp(wlnode, BAD_CAST "name", BAD_CAST wordlist->name); if(wordlist->description) xmlSetProp(wlnode, BAD_CAST "description", BAD_CAST wordlist->description); if(wordlist->locale) xmlSetProp(wlnode, BAD_CAST "locale", BAD_CAST wordlist->locale); for(listlevel = wordlist->levels_words; listlevel; listlevel = listlevel->next) { level = (LevelWordlist*)listlevel->data; levelnode = xmlNewChild(wlnode, NULL, BAD_CAST "level", NULL); if((tmp = g_strdup_printf("%d", level->level))) { xmlSetProp(levelnode, BAD_CAST "value", BAD_CAST tmp); g_free(tmp); } for(listword = level->words; listword; listword=listword->next) { xmlNodeAddContent(levelnode, BAD_CAST listword->data); xmlNodeAddContent(levelnode, BAD_CAST " "); } } filename = gc_file_find_absolute_writeable(wordlist->filename); if(filename) { if(xmlSaveFormatFileEnc(filename, doc, NULL, 1)<0) { g_warning("Fail to write %s", filename); g_free(filename); } g_free(filename); } xmlFreeDoc(doc); }
static void save_clicked(GtkButton *b, gpointer data) { _config_missing *u = (_config_missing*)data; GtkTreeModel *model; gchar *filename; xmlNodePtr root; xmlDocPtr doc; int level; level = gtk_combo_box_get_active(u->combo_level)+1; if(level==0) return; if(! u->changed) return; model = gtk_tree_view_get_model(u->view); doc = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION); root = xmlNewNode(NULL, BAD_CAST "missing_letter"); xmlDocSetRootElement(doc,root); gboolean has_error = FALSE; gtk_tree_model_foreach(model, _check_errors, &has_error); if (has_error) return; gtk_tree_model_foreach(model, _save, root); filename = gc_file_find_absolute_writeable("%s/board%d.xml", gcomprisBoard_missing->boarddir, level); if(xmlSaveFormatFileEnc(filename, doc, NULL, 1)<0) g_warning("Fail to write %s", filename); g_free(filename); xmlFreeDoc(doc); u->changed = FALSE; }