00001 /* 00002 * This file is part of settings. 00003 * 00004 * settings is free software: you can redistribute it and/or modify 00005 * it under the terms of the GNU General Public License as published by 00006 * the Free Software Foundation, either version 2 of the License, or 00007 * (at your option) any later version. 00008 * 00009 * settings is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU General Public License 00015 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00016 */ 00017 00031 #include <stdio.h> 00032 #include <string.h> 00033 00034 #include <gtk/gtk.h> 00035 00036 #include <liberregxml/erregapi.h> 00037 00038 #include "setupLog.h" 00039 #include "iLiadLanguageData.h" 00040 #include "languages.h" 00041 #include "settings.h" 00042 00043 static regUserSetting_t* g_settings = NULL; 00044 00045 static char *g_cur_language = NULL; 00046 static char *g_stored_language = NULL; 00047 00048 void iLiad_language_data_init(void) 00049 { 00050 ST_LOGPRINTF("entry"); 00051 00052 // get settings from registry 00053 iLiad_language_data_destroy(); 00054 g_settings = erRegGetUserSetting(); 00055 00056 if (g_settings == NULL) 00057 { 00058 ST_WARNPRINTF("use default values"); 00059 00060 g_settings = g_new0(regUserSetting_t, 1); 00061 g_settings->language = strdup(DEFAULT_LOCALE); 00062 g_settings->volume = 75; 00063 g_settings->keyBuffering = 0; 00064 g_settings->longkeypressTimeout = 500; 00065 g_settings->flipbarLeftIsDown = TRUE; 00066 00067 g_cur_language = g_strdup(g_settings->language); 00068 } 00069 else 00070 { 00071 g_cur_language = g_strdup(g_settings->language); 00072 g_stored_language = g_strdup(g_cur_language); 00073 } 00074 00075 ST_LOGPRINTF("current language is %s", g_cur_language); 00076 } 00077 00078 void iLiad_language_data_destroy(void) 00079 { 00080 ST_LOGPRINTF("entry"); 00081 00082 if (g_settings) 00083 { 00084 erRegFreeUserSetting(g_settings); 00085 g_settings = NULL; 00086 } 00087 00088 if (g_cur_language) 00089 { 00090 g_free(g_cur_language); 00091 g_cur_language = NULL; 00092 } 00093 00094 if (g_stored_language) 00095 { 00096 g_free(g_stored_language); 00097 g_stored_language = NULL; 00098 } 00099 } 00100 00101 void iLiad_language_data_store(void) 00102 { 00103 ST_LOGPRINTF("entry"); 00104 00105 gboolean bNeedSave = FALSE; 00106 00107 g_return_if_fail(g_cur_language); 00108 00109 if ( (NULL == g_stored_language) || strcmp(g_cur_language, g_stored_language)) 00110 { 00111 bNeedSave = TRUE; 00112 } 00113 00114 ST_LOGPRINTF("Need save? %s.", bNeedSave ? "Yes":"No"); 00115 00116 if (bNeedSave) 00117 { 00118 prepare_registry_write(); 00119 00120 // prepare g_settings 00121 g_free(g_settings->language); 00122 g_settings->language = g_strdup(g_cur_language); 00123 00124 // store g_settings to registry 00125 ST_STOREPRINTF("calling erRegSetUserSetting"); 00126 erRegSetUserSetting(g_settings); 00127 00128 // update g_stored_language 00129 g_free(g_stored_language); 00130 g_stored_language = g_strdup(g_cur_language); 00131 00132 do_registry_write(); 00133 } 00134 } 00135 00136 void iLiad_language_data_set(const char* language) 00137 { 00138 ST_LOGPRINTF("entry, change language from '%s' to be '%s'", 00139 g_cur_language, language); 00140 00141 g_free(g_cur_language); 00142 g_cur_language = strdup(language); 00143 } 00144 00145 char* iLiad_language_data_get(void) 00146 { 00147 ST_LOGPRINTF("entry"); 00148 00149 return g_cur_language; 00150 } 00151
1.5.6