diff --git a/source/ubinstall-gtk-language.c b/source/ubinstall-gtk-language.c index a21942d..38e752b 100644 --- a/source/ubinstall-gtk-language.c +++ b/source/ubinstall-gtk-language.c @@ -66,30 +66,27 @@ void on_locale_accept(GtkWidget *self, language_window *window){ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(NOTHING_CHOSEN_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE); return; } - char *locale_str = config(locale_parameter); - GtkTreeIter iter,itar; + GtkTreeIter iter; + char *sys_locale = NULL; + for_iter(widgets->LanguageList,&iter){ + char *target; + int status; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->LanguageList),&iter,0,&status,3,&target,-1); + if (status){ + sys_locale = target; + } + } + gtk_list_store_clear(widgets->LanguageList); int size; config_str parsed = yon_char_parse(final,&size,","); for (int i=0;iLanguageList),&itar){ - char *checktarget; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->LanguageList),&itar,3,&checktarget,-1); - if (!strcmp(checktarget,parsed[i])){ - found = 1; - break; - } - } - if (found) continue; char *locale_str = g_hash_table_lookup(main_config.languages,parsed[i]); if (yon_char_is_empty(locale_str)) continue; int parameter_size; config_str parameter_parsed = yon_char_parse(locale_str,¶meter_size,"|"); - gtk_list_store_append(widgets->LanguageList,&iter); - gtk_list_store_set(widgets->LanguageList,&iter,1,parameter_parsed[1],2,parameter_parsed[2],3,parameter_parsed[0],-1); - } - if (yon_char_is_empty(locale_str)){ - if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->LanguageList),&iter)){ + gtk_list_store_append(widgets->LanguageList,&iter); + gtk_list_store_set(widgets->LanguageList,&iter,1,parameter_parsed[1],2,parameter_parsed[2],3,parameter_parsed[0],-1); + if (!yon_char_is_empty(sys_locale)&&!strcmp(parameter_parsed[0],sys_locale)){ gtk_list_store_set(widgets->LanguageList,&iter,0,1,-1); } } @@ -137,13 +134,8 @@ gboolean yon_locale_window_load(language_window *window){ } void *yon_locales_load_func(language_window *window){ - char *config_value = config(lang_parameter); int config_parsed_size; - config_str config_parsed = NULL; - if (config_value){ - gtk_entry_set_text(GTK_ENTRY(window->ManualEntry),config_value); - config_parsed = yon_char_parse(config_value,&config_parsed_size,","); - } + config_str config_parsed = yon_char_parse(window->languages,&config_parsed_size,","); int size; config_str languages = yon_config_load(languages_command,&size); @@ -171,7 +163,7 @@ void *yon_locales_load_func(language_window *window){ g_thread_exit(NULL); } -language_window *yon_language_window_new(){ +language_window *yon_language_window_new(char *chosen_languages){ language_window *window = malloc(sizeof(language_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_locales_path); window->Window = yon_gtk_builder_get_widget(builder,"Window"); @@ -184,12 +176,15 @@ language_window *yon_language_window_new(){ window->LoadingSpinner = yon_gtk_builder_get_widget(builder,"LoadingSpinner"); window->ToggleCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ToggleCell")); window->LanguagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LanguagesList")); + window->languages = yon_char_new(chosen_languages); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_locale_accept),window); g_signal_connect(G_OBJECT(window->ToggleCell),"toggled",G_CALLBACK(on_locale_toggle),window); yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(window->LanguagesTree)); + gtk_entry_set_text(GTK_ENTRY(window->ManualEntry),chosen_languages); + gtk_overlay_add_overlay(GTK_OVERLAY(window->LoadingOverlay),window->LoadingSpinner); g_thread_new("locales-thread",(GThreadFunc)yon_locales_load_func,window); @@ -197,11 +192,21 @@ language_window *yon_language_window_new(){ } void on_language_open(GtkWidget *, main_window *widgets){ - language_window *window = yon_language_window_new(); + GtkTreeIter iter; + char *languages = NULL; + for_iter(GTK_TREE_MODEL(widgets->LanguageList),&iter){ + char *target; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->LanguageList),&iter,3,&target,-1); + char *temp = yon_char_append_element(languages,target,","); + if (!yon_char_is_empty(languages)) free(languages); + languages = temp; + } + language_window *window = yon_language_window_new(languages); g_object_set_data(G_OBJECT(window->Window),"widgets",widgets); yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->MainWindow),ADD_LANGUAGE_TITLE_LABEL,icon_path,"LocalesWindow"); + gtk_widget_show(window->Window); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index e726dc7..dddbf33 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -1093,6 +1093,8 @@ typedef struct GtkCellRenderer *ToggleCell; GtkListStore *LanguagesList; + + char *languages; } language_window; struct locales_struct