forked from enlightenment/enlightenment
Cleanups, Cleanups
* Fix minor mem corruption found while Valgrinding * Get selection for charset to work again * Only list basic locales which are supported by the system SVN revision: 26460
This commit is contained in:
parent
0f0e801dc2
commit
ce6e698871
|
@ -23,6 +23,7 @@ static int _lang_list_sort (void *data1, void *data2);
|
||||||
static void _lang_list_load (void *data);
|
static void _lang_list_load (void *data);
|
||||||
static int _region_list_sort (void *data1, void *data2);
|
static int _region_list_sort (void *data1, void *data2);
|
||||||
static void _region_list_load (void *data);
|
static void _region_list_load (void *data);
|
||||||
|
static int _basic_lang_list_sort (void *data1, void *data2);
|
||||||
|
|
||||||
/* Fill the clear lists, fill with language, select */
|
/* Fill the clear lists, fill with language, select */
|
||||||
/* Update lanague */
|
/* Update lanague */
|
||||||
|
@ -32,6 +33,7 @@ static Evas_Bool _region_hash_cb (Evas_Hash *hash, const char *key, v
|
||||||
static Evas_Bool _language_hash_free_cb (Evas_Hash *hash, const char *key, void *data, void *fdata);
|
static Evas_Bool _language_hash_free_cb (Evas_Hash *hash, const char *key, void *data, void *fdata);
|
||||||
static Evas_Bool _region_hash_free_cb (Evas_Hash *hash, const char *key, void *data, void *fdata);
|
static Evas_Bool _region_hash_free_cb (Evas_Hash *hash, const char *key, void *data, void *fdata);
|
||||||
static void _intl_current_locale_setup (E_Config_Dialog_Data *cfdata);
|
static void _intl_current_locale_setup (E_Config_Dialog_Data *cfdata);
|
||||||
|
static const char *_intl_charset_upper_get (const char *charset);
|
||||||
|
|
||||||
struct _E_Intl_Pair
|
struct _E_Intl_Pair
|
||||||
{
|
{
|
||||||
|
@ -82,6 +84,7 @@ struct _E_Config_Dialog_Data
|
||||||
Evas_Hash *locale_hash;
|
Evas_Hash *locale_hash;
|
||||||
Evas_List *lang_list;
|
Evas_List *lang_list;
|
||||||
Evas_List *region_list;
|
Evas_List *region_list;
|
||||||
|
Evas_List *blang_list;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
@ -606,6 +609,28 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
||||||
while (fscanf(output, "%[^\n]\n", line) == 1)
|
while (fscanf(output, "%[^\n]\n", line) == 1)
|
||||||
{
|
{
|
||||||
char *language;
|
char *language;
|
||||||
|
char *basic_language;
|
||||||
|
|
||||||
|
basic_language = e_intl_locale_canonic_get(line, E_INTL_LOC_LANG | E_INTL_LOC_REGION);
|
||||||
|
if (basic_language)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (basic_language_predefined_pairs[i].locale_key)
|
||||||
|
{
|
||||||
|
/* if basic language is supported by E and System*/
|
||||||
|
if (!strncmp(basic_language_predefined_pairs[i].locale_key,
|
||||||
|
basic_language, strlen(basic_language)))
|
||||||
|
{
|
||||||
|
if (!evas_list_find(cfdata->blang_list, &basic_language_predefined_pairs[i]))
|
||||||
|
cfdata->blang_list = evas_list_append(cfdata->blang_list, &basic_language_predefined_pairs[i]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
E_FREE(basic_language);
|
||||||
|
|
||||||
language = e_intl_locale_canonic_get(line, E_INTL_LOC_LANG);
|
language = e_intl_locale_canonic_get(line, E_INTL_LOC_LANG);
|
||||||
|
|
||||||
|
@ -700,24 +725,14 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
||||||
/* Add codeset to the region hash node if it exists */
|
/* Add codeset to the region hash node if it exists */
|
||||||
if (codeset)
|
if (codeset)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
const char * cs;
|
const char * cs;
|
||||||
|
const char * cs_trans;
|
||||||
|
|
||||||
/* get the charset UpperCase form */
|
cs_trans = _intl_charset_upper_get(codeset);
|
||||||
/* linear serach */
|
if (cs_trans == NULL)
|
||||||
i = 0;
|
cs = evas_stringshare_add(codeset);
|
||||||
cs = NULL;
|
else
|
||||||
while (charset_predefined_pairs[i].locale_key)
|
cs = evas_stringshare_add(cs_trans);
|
||||||
{
|
|
||||||
if (!strcmp(charset_predefined_pairs[i].locale_key, codeset))
|
|
||||||
{
|
|
||||||
cs = evas_stringshare_add(charset_predefined_pairs[i].locale_translation);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cs == NULL) cs = evas_stringshare_add(codeset);
|
|
||||||
/* Exclusive */
|
/* Exclusive */
|
||||||
/* Linear Search */
|
/* Linear Search */
|
||||||
if (!evas_list_find(region_node->available_codesets, cs))
|
if (!evas_list_find(region_node->available_codesets, cs))
|
||||||
|
@ -745,6 +760,11 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Sort basic languages */
|
||||||
|
cfdata->blang_list = evas_list_sort(cfdata->blang_list,
|
||||||
|
evas_list_count(cfdata->blang_list),
|
||||||
|
_basic_lang_list_sort);
|
||||||
|
|
||||||
while (e_lang_list)
|
while (e_lang_list)
|
||||||
{
|
{
|
||||||
free(e_lang_list->data);
|
free(e_lang_list->data);
|
||||||
|
@ -786,6 +806,7 @@ _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||||
|
|
||||||
cfdata->lang_list = evas_list_free(cfdata->lang_list);
|
cfdata->lang_list = evas_list_free(cfdata->lang_list);
|
||||||
cfdata->region_list = evas_list_free(cfdata->region_list);
|
cfdata->region_list = evas_list_free(cfdata->region_list);
|
||||||
|
cfdata->blang_list = evas_list_free(cfdata->blang_list);
|
||||||
|
|
||||||
free(cfdata);
|
free(cfdata);
|
||||||
}
|
}
|
||||||
|
@ -865,7 +886,8 @@ static Evas_Object *
|
||||||
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
||||||
{
|
{
|
||||||
Evas_Object *o, *of, *ob, *ot;
|
Evas_Object *o, *of, *ob, *ot;
|
||||||
const char *cur_sig_loc;
|
char *cur_sig_loc;
|
||||||
|
Evas_List *next;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
cfdata->evas = evas;
|
cfdata->evas = evas;
|
||||||
|
@ -889,19 +911,23 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
|
||||||
cur_sig_loc = NULL;
|
cur_sig_loc = NULL;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while (basic_language_predefined_pairs[i].locale_key)
|
for (next = cfdata->blang_list; next; next = next->next)
|
||||||
{
|
{
|
||||||
|
E_Intl_Pair *pair;
|
||||||
const char *key;
|
const char *key;
|
||||||
const char *trans;
|
const char *trans;
|
||||||
|
|
||||||
key = basic_language_predefined_pairs[i].locale_key;
|
pair = next->data;
|
||||||
trans = _(basic_language_predefined_pairs[i].locale_translation);
|
key = pair->locale_key;
|
||||||
|
trans = _(pair->locale_translation);
|
||||||
e_widget_ilist_append(cfdata->gui.blang_list, NULL, trans, NULL, NULL, key);
|
e_widget_ilist_append(cfdata->gui.blang_list, NULL, trans, NULL, NULL, key);
|
||||||
if (cur_sig_loc && !strncmp(key, cur_sig_loc, strlen(cur_sig_loc)))
|
if (cur_sig_loc && !strncmp(key, cur_sig_loc, strlen(cur_sig_loc)))
|
||||||
e_widget_ilist_selected_set(cfdata->gui.blang_list, i);
|
e_widget_ilist_selected_set(cfdata->gui.blang_list, i);
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
E_FREE(cur_sig_loc);
|
||||||
|
|
||||||
e_widget_ilist_go(ob);
|
e_widget_ilist_go(ob);
|
||||||
e_widget_frametable_object_append(of, ob, 0, 0, 2, 6, 1, 1, 1, 1);
|
e_widget_frametable_object_append(of, ob, 0, 0, 2, 6, 1, 1, 1, 1);
|
||||||
|
|
||||||
|
@ -936,7 +962,7 @@ static Evas_Object *
|
||||||
_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
|
||||||
{
|
{
|
||||||
Evas_Object *o, *of, *ob, *ot;
|
Evas_Object *o, *of, *ob, *ot;
|
||||||
|
const char *lang, *reg, *cs, *mod;
|
||||||
cfdata->evas = evas;
|
cfdata->evas = evas;
|
||||||
|
|
||||||
_intl_current_locale_setup(cfdata);
|
_intl_current_locale_setup(cfdata);
|
||||||
|
@ -1026,7 +1052,25 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
||||||
e_widget_framelist_content_align_set(of, 0.0, 0.0);
|
e_widget_framelist_content_align_set(of, 0.0, 0.0);
|
||||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||||
|
|
||||||
_cfdata_language_go(cfdata->cur_lang, cfdata->cur_reg, cfdata->cur_cs, cfdata->cur_mod, cfdata);
|
/* all these cur_* values are not guaranteed to be const so we need to
|
||||||
|
* copy them.
|
||||||
|
*/
|
||||||
|
lang = NULL;
|
||||||
|
reg = NULL;
|
||||||
|
cs = NULL;
|
||||||
|
mod = NULL;
|
||||||
|
|
||||||
|
if (cfdata->cur_lang) lang = evas_stringshare_add(cfdata->cur_lang);
|
||||||
|
if (cfdata->cur_reg) reg = evas_stringshare_add(cfdata->cur_reg);
|
||||||
|
if (cfdata->cur_cs) cs = evas_stringshare_add(cfdata->cur_cs);
|
||||||
|
if (cfdata->cur_mod) mod = evas_stringshare_add(cfdata->cur_mod);
|
||||||
|
|
||||||
|
_cfdata_language_go(lang, reg, cs, mod, cfdata);
|
||||||
|
|
||||||
|
if (lang) evas_stringshare_del(lang);
|
||||||
|
if (reg) evas_stringshare_del(reg);
|
||||||
|
if (cs) evas_stringshare_del(cs);
|
||||||
|
if (mod) evas_stringshare_del(mod);
|
||||||
|
|
||||||
e_widget_on_change_hook_set(cfdata->gui.lang_list, _ilist_language_cb_change, cfdata);
|
e_widget_on_change_hook_set(cfdata->gui.lang_list, _ilist_language_cb_change, cfdata);
|
||||||
e_widget_on_change_hook_set(cfdata->gui.reg_list, _ilist_region_cb_change, cfdata);
|
e_widget_on_change_hook_set(cfdata->gui.reg_list, _ilist_region_cb_change, cfdata);
|
||||||
|
@ -1269,7 +1313,12 @@ _intl_current_locale_setup(E_Config_Dialog_Data *cfdata)
|
||||||
if (region)
|
if (region)
|
||||||
cfdata->cur_reg = strdup(region);
|
cfdata->cur_reg = strdup(region);
|
||||||
if (codeset)
|
if (codeset)
|
||||||
cfdata->cur_cs = strdup(codeset);
|
{
|
||||||
|
const char *cs_trans;
|
||||||
|
|
||||||
|
cs_trans = _intl_charset_upper_get(codeset);
|
||||||
|
if (cs_trans) cfdata->cur_cs = strdup(cs_trans);
|
||||||
|
}
|
||||||
if (modifier)
|
if (modifier)
|
||||||
cfdata->cur_mod = strdup(modifier);
|
cfdata->cur_mod = strdup(modifier);
|
||||||
|
|
||||||
|
@ -1403,3 +1452,43 @@ _region_list_load(void *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_basic_lang_list_sort(void *data1, void *data2)
|
||||||
|
{
|
||||||
|
E_Intl_Pair *ln1, *ln2;
|
||||||
|
const char *trans1;
|
||||||
|
const char *trans2;
|
||||||
|
|
||||||
|
if (!data1) return 1;
|
||||||
|
if (!data2) return -1;
|
||||||
|
|
||||||
|
ln1 = data1;
|
||||||
|
ln2 = data2;
|
||||||
|
|
||||||
|
if (!ln1->locale_translation) return 1;
|
||||||
|
trans1 = ln1->locale_translation;
|
||||||
|
|
||||||
|
if (!ln2->locale_translation) return -1;
|
||||||
|
trans2 = ln2->locale_translation;
|
||||||
|
|
||||||
|
return (strcmp((const char *)trans1, (const char *)trans2));
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
_intl_charset_upper_get(const char *charset)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (charset_predefined_pairs[i].locale_key)
|
||||||
|
{
|
||||||
|
if (!strcmp(charset_predefined_pairs[i].locale_key, charset))
|
||||||
|
{
|
||||||
|
return charset_predefined_pairs[i].locale_translation;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue