From 30580d227441d5dece38710ba4b0c743c29cfc45 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Thu, 15 Jan 2026 11:12:40 +0000 Subject: [PATCH] Test fix for language loading --- source/ubinstall-gtk-page-switch.c | 9 +++---- source/ubinstall-gtk-saving.c | 13 +++++---- source/ubinstall-gtk.c | 42 ++++++++++++++++++++++-------- source/ubinstall-gtk.h | 7 +++-- 4 files changed, 47 insertions(+), 24 deletions(-) diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index 3e85e92..f6cc33d 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -384,6 +384,9 @@ enum YON_PAGES yon_recovery_get_next(main_window *widgets){ void yon_page_init(main_window *widgets, enum YON_PAGES page){ switch(page){ + case YON_PAGE_WELCOME: + set_locales_list(widgets); + break; case YON_PAGE_CONFIG_HUB: yon_configuration_hub_init(widgets); break; @@ -459,18 +462,12 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){ void on_page_next_clicked(GtkWidget *, main_window *widgets){ enum YON_PAGES page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook)); - printf("2\n"); page = yon_page_get_next(widgets,page); - printf("3\n"); if ((int)page!=-1){ gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),page); - printf("4\n"); yon_page_init(widgets,page); - printf("5\n"); } - printf("6\n"); yon_page_update(widgets); - printf("7\n"); } void on_page_prev_clicked(GtkWidget *, main_window *widgets){ diff --git a/source/ubinstall-gtk-saving.c b/source/ubinstall-gtk-saving.c index c687017..055fa25 100644 --- a/source/ubinstall-gtk-saving.c +++ b/source/ubinstall-gtk-saving.c @@ -38,8 +38,9 @@ void on_config_local_load(GtkWidget *,main_window *widgets){ if (!yon_char_is_empty(main_config.config_load_path)) free(main_config.config_load_path); main_config.config_load_path = yon_char_new("system"); yon_load_proceed(YON_CONFIG_LOCAL); - // yon_page_init(widgets,gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook))); main_config.load_mode=YON_CONFIG_LOCAL; + yon_main_window_update_locale(widgets); + yon_page_init(widgets,gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook))); } void on_config_global_load(GtkWidget *,main_window *widgets){ @@ -50,17 +51,19 @@ void on_config_global_load(GtkWidget *,main_window *widgets){ if (!yon_char_is_empty(main_config.config_load_path)) free(main_config.config_load_path); main_config.config_load_path = yon_char_new("global"); yon_load_proceed(YON_CONFIG_GLOBAL); - // yon_page_init(widgets,gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook))); main_config.load_mode=YON_CONFIG_GLOBAL; + yon_main_window_update_locale(widgets); + yon_page_init(widgets,gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook))); } -void on_config_custom_load(GtkWidget *,main_window *){ +void on_config_custom_load(GtkWidget *,main_window *widgets){ yon_load_proceed(YON_CONFIG_CUSTOM); // yon_page_init(widgets,gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook))); main_config.load_mode=YON_CONFIG_CUSTOM; + yon_main_window_update_locale(widgets); } -void on_config_custom_load_last(GtkWidget *,main_window *){ +void on_config_custom_load_last(GtkWidget *,main_window *widgets){ yon_config_clean(); if (!yon_char_is_empty(config_get_default_command)) yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); @@ -68,6 +71,7 @@ void on_config_custom_load_last(GtkWidget *,main_window *){ yon_config_load_config(YON_CONFIG_CUSTOM,command,NULL); // yon_page_init(widgets,gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook))); main_config.load_mode=YON_CONFIG_CUSTOM; + yon_main_window_update_locale(widgets); } void on_config_global_local_save(GtkWidget *,main_window *widgets){ @@ -188,7 +192,6 @@ void *on_config_save(void *data){ char *command = yon_debug_output("%s\n",save_config_command(yon_char_parsed_to_string(parameters,size," "))); yon_char_parsed_free(parameters,size); yon_debug_output("%s\n","Entered installation"); - printf("1\n"); if (system(yon_debug_output("%s\n",command))){ gdk_threads_add_idle((GSourceFunc)on_install_error,widgets); diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index 09f67cf..8bbf85a 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -444,7 +444,7 @@ void on_exit_accepted(main_window *){ gboolean on_yon_exit(GtkWidget *,GdkEvent*, main_window *widgets){ if (!main_config.exit_accepted||(main_config.save_done&&main_config.install_complete)){ - if (!main_config.install_complete&&!main_config.save_configured){ + if (!main_config.install_complete||!main_config.save_configured){ dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); data->action_text=INTERRUPT_TEXT_LABEL; data->title=WARNING_TITLE_LABEL; @@ -504,20 +504,41 @@ void on_installer_language_changed(GtkWidget *self,GtkTreePath*,GtkTreeViewColum char *command = yon_char_unite(ubconfig_dull_command,"--target system ",command_parameters,NULL); g_signal_handlers_block_by_func(G_OBJECT(widgets->MainWindow),G_CALLBACK(on_yon_exit),widgets); if (!system(command)){}; + yon_main_window_update_locale(widgets); + g_signal_handlers_block_by_func(G_OBJECT(self),G_CALLBACK(on_locale_changed),widgets); + model = GTK_TREE_MODEL(widgets->InstallerLanguageList); + gtk_tree_model_get_iter_from_string(model,&iter,active_lang_id); + g_signal_handlers_unblock_by_func(G_OBJECT(self),G_CALLBACK(on_locale_changed),widgets); + +} + +void yon_main_window_update_locale(main_window *widgets){ + int size; + char *command = yon_config_parameter_prepare_command(get_localisation_command,main_config.config_load_path,NULL,NULL); + config_str locale_output = yon_config_load(command,&size); + char *locale = NULL; + if (size&&strcmp(locale_output[0],"(null)\n")){ + yon_char_remove_last_symbol(locale_output[0],'\n'); + free(yon_char_divide_search(locale_output[0],"=",-1)); + yon_char_remove_brackets(locale_output[0]); + locale = locale_output[0]; + } else if (size>1&&strcmp(locale_output[1],"(null)\n")){ + yon_char_remove_last_symbol(locale_output[1],'\n'); + free(yon_char_divide_search(locale_output[1],"=",-1)); + yon_char_remove_brackets(locale_output[1]); + locale = locale_output[1]; + } + locale = setlocale(LC_ALL,locale); + yon_char_parsed_free(locale_output,size); + gtk_widget_destroy(widgets->MainWindow); - setlocale(LC_ALL, window_language); textdomain(LocaleName); - g_setenv("LANGUAGE",window_language,1); + g_setenv("LANGUAGE",locale,1); yon_main_window_create(widgets); char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); yon_window_config_setup(GTK_WINDOW(widgets->MainWindow)); yon_window_config_load(path); - g_signal_handlers_block_by_func(G_OBJECT(self),G_CALLBACK(on_locale_changed),widgets); - model = GTK_TREE_MODEL(widgets->InstallerLanguageList); - gtk_tree_model_get_iter_from_string(model,&iter,active_lang_id); - g_signal_handlers_unblock_by_func(G_OBJECT(self),G_CALLBACK(on_locale_changed),widgets); - } typedef struct{ @@ -581,13 +602,11 @@ void set_locales_list(main_window *widgets){ char *temp = strstr(config_code,"."); if (temp) temp[0]='\0'; if (!strcmp(config_code,locales[i])){ - g_signal_handlers_block_by_func(G_OBJECT(widgets->CountryLanguagesTree),G_CALLBACK(on_installer_language_changed),widgets); GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(widgets->InstallerLanguageList),&iter); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(widgets->LanguagesTree),path,0,0,0,0); gtk_tree_path_free(path); gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LanguagesTree)),&iter); on_locale_changed(NULL,widgets); - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->CountryLanguagesTree),G_CALLBACK(on_installer_language_changed),widgets); } } textdomain(LocaleName); @@ -1206,7 +1225,7 @@ main_window *yon_main_window_complete(){ return widgets; } -int main(int argc, char *argv[]){ +int main(int argc, char *argv[]){ __attribute__((unused)) char *locale = setlocale(LC_ALL, ""); textdomain (LocaleName); config_init(); @@ -1239,6 +1258,7 @@ int main(int argc, char *argv[]){ } } gtk_init(&argc,&argv); + bind_textdomain_codeset(LocaleName,"UTF-8"); main_window *widgets = NULL; if (widgets){}; int fullscreen = 0; diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 0acc53a..2e0890a 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -255,10 +255,12 @@ layout && /description:/ {\ #define NETWORK_devdown_parameter_command(target) yon_char_unite("ubconfig get autoinstall AUTOINSTALL['ubconfig set [network] NETWORK[", target, "@devdown]']", NULL) #define NETWORK(target) yon_char_unite("NETWORK[", target, "@connmod]", NULL) #define installer_locale_parameter "AUTOINSTALL[installer_locale]" -#define installer_locale_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[installer_lang]" +#define installer_locale_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[installer_locale]" #define source_parameter "AUTOINSTALL[source]" #define source_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[source]" +#define get_localisation_command "ubconfig -ea --source global get [autoinstall] AUTOINSTALL[installer_locale] -- get [locale] LANG" + #define save_config_command(parameters) yon_char_unite("ubconfig --target system set [autoinstall] AUTOINSTALL[log]=yes ", parameters, "; nice ubinstall2 --debug autoinstall", NULL) #define set_user_config_command(parameters) yon_char_unite("ubconfig --target system set [autoinstall] ", parameters, ";nice ubinstall2 autoconfig", NULL) @@ -1451,4 +1453,5 @@ gboolean yon_locale_window_load(language_window *window); void yon_os_password_open(GtkWidget *, main_window *widgets); void yon_userdata_password_open(GtkWidget *, main_window *widgets); double yon_password_check_func(yon_password_window *window, const char *password_string); -void yon_source_update(source_window *window); \ No newline at end of file +void yon_source_update(source_window *window); +void yon_main_window_update_locale(main_window *widgets); \ No newline at end of file