From 99c5d8776f27314ddf1864f2e744b7c72f6a4acd Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Fri, 16 Jan 2026 17:51:22 +0000 Subject: [PATCH] Language switching fix --- source/CMakeLists.txt | 1 + source/ubinstall-gtk-ui-lang.c | 204 ++++++++++++++++++++++++++ source/ubinstall-gtk.c | 255 ++------------------------------- source/ubinstall-gtk.h | 11 +- 4 files changed, 225 insertions(+), 246 deletions(-) create mode 100644 source/ubinstall-gtk-ui-lang.c diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index b017925..d4ce9e5 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -143,6 +143,7 @@ set(SOURCE_FILES ubinstall-gtk-language.c ubinstall-gtk-config-hub.c ubinstall-gtk-startup-apps.c + ubinstall-gtk-ui-lang.c ubinstall-gtk.h ubl-strings.h ) diff --git a/source/ubinstall-gtk-ui-lang.c b/source/ubinstall-gtk-ui-lang.c new file mode 100644 index 0000000..67fdcb4 --- /dev/null +++ b/source/ubinstall-gtk-ui-lang.c @@ -0,0 +1,204 @@ +#include "ubinstall-gtk.h" + +void on_locale_changed(GtkWidget *,main_window *widgets){ + GtkTreeIter iter; + GtkTreeModel *model; + if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LanguagesTree)),&model,&iter)) return; + gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter)); + char *config_code = config(installer_locale_parameter); + if (yon_char_is_empty(config_code)){ + config_code = setlocale(LC_ALL,NULL); + } + GtkTreeIter itar; + for_iter(widgets->InstallerCountryFilter,&iter){ + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter),&itar,&iter); + char *target; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->InstallerCountryList),&itar,2,&target,-1); + if (!strcmp(config_code,target)){ + gtk_tree_model_filter_convert_child_iter_to_iter(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter),&iter,&itar); + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->CountryLanguagesTree)),&iter); + GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(widgets->InstallerCountryFilter),&iter); + gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(widgets->CountryLanguagesTree),path,0,0,0,0); + gtk_tree_path_free(path); + break; + } + } + +} + +void on_installer_language_changed(GtkWidget *self,GtkTreePath*,GtkTreeViewColumn*, main_window *widgets){ + char *window_language; + GtkTreeIter iter; + GtkTreeModel *model; + if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->CountryLanguagesTree)),&model,&iter)) return; + gtk_tree_model_get(model,&iter,2,&window_language,-1); + if (!yon_char_is_empty(window_language)){ + char *prev_lang = config(installer_locale_parameter); + if (!yon_char_is_empty(prev_lang)&&!strcmp(prev_lang,window_language)) return; + yon_config_register(installer_locale_parameter,installer_locale_parameter_command,(char*)window_language); + } + char *active_lang_id = gtk_tree_model_get_string_from_iter(model,&iter); + int size; + config_str parameters = yon_config_get_save_parameters_by_key(&size,installer_locale_parameter,NULL); + char *command_parameters = yon_char_parsed_to_string(parameters,size," "); + 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_startup_language_init(){ + char *source = yon_config_get_type_path(main_config.load_mode); + if (!source){ + source = main_config.custom_load_path; + } + char *command =yon_config_parameter_prepare_command(get_localisation_command,source,NULL,NULL); + int size; + config_str parsed = yon_config_load(command,&size); + { + if (!yon_char_is_empty(parsed[0])&&strcmp(parsed[0],"(null)\n")){ + yon_char_remove_last_symbol(parsed[0],'\n'); + free(yon_char_divide_search(parsed[0],"=",-1)); + yon_config_register(installer_locale_parameter,installer_locale_parameter_command,parsed[0]); + } + if (!yon_char_is_empty(parsed[1])&&strcmp(parsed[1],"(null)\n")){ + yon_char_remove_last_symbol(parsed[1],'\n'); + free(yon_char_divide_search(parsed[1],"=",-1)); + yon_config_register(lang_parameter,lang_parameter_command,parsed[1]); + } + if (!yon_char_is_empty(parsed[2])&&strcmp(parsed[2],"(null)\n")){ + yon_char_remove_last_symbol(parsed[2],'\n'); + free(yon_char_divide_search(parsed[2],"=",-1)); + yon_config_register(SYSTEM_LANG_parameter,SYSTEM_LANG_parameter_command,parsed[2]); + } + } +} + +void yon_main_window_update_locale(main_window *widgets){ + char *locale = config(installer_locale_parameter); + if (yon_char_is_empty(locale)){ + char *sys_locale = config(lang_parameter); + + if (!yon_char_is_empty(sys_locale)){ + locale = sys_locale; + } else { + char *lang = config("LANG"); + if (!yon_char_is_empty(lang)){ + locale = lang; + } + } + } + locale = setlocale(LC_ALL,locale); + + gtk_widget_destroy(widgets->MainWindow); + bind_textdomain_codeset(LocaleName,"UTF-8"); + 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); +} + +typedef struct{ + char *locale_name; + char *code; + char *localised_name; + char *code_full; +} locale_struct; + +int yon_char_parsed_compare(const void *a, const void *b){ + const config_str str_a = (const config_str)a; + const config_str str_b = (const config_str)b; + + return strcmp(*str_a,*str_b); +} + +void set_locales_list(main_window *widgets){ + gtk_list_store_clear(widgets->InstallerLanguageList); + gtk_list_store_clear(widgets->InstallerCountryList); + + char *config_code = yon_char_new(config(installer_locale_parameter)); + int size; + config_str locales = yon_locale_get_all_codes(&size); + qsort(locales,size,sizeof(char*),yon_char_parsed_compare); + GtkTreeIter iter,itar; + GHashTable *added = g_hash_table_new(g_str_hash,g_str_equal); + bind_textdomain_codeset(LOCALES_DOMAIN_NAME,"UTF-8"); + textdomain(LOCALES_DOMAIN_NAME); + for (int i=0;iInstallerLanguageList,&iter); + gtk_list_store_set(widgets->InstallerLanguageList,&iter, + 0,lang_ab, + 1,_(language), + 2,lang_name, + 3,locales[i], + -1); + } + + gtk_list_store_append(widgets->InstallerCountryList,&itar); + gtk_list_store_set(widgets->InstallerCountryList,&itar, + 0,lang_ab, + 1,_(country), + 2,code, + 3,_(title), + -1); + if (yon_char_is_empty(config_code)){ + config_code=yon_char_new(setlocale(LC_ALL,NULL)); + } + char *temp = strstr(config_code,"."); + if (temp) temp[0]='\0'; + if (!strcmp(config_code,locales[i])){ + 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); + } + } + bind_textdomain_codeset(LocaleName,"UTF-8"); + +} + +gboolean on_country_filter(GtkTreeModel *self, GtkTreeIter *iter, main_window *widgets){ + GtkTreeIter itar; + GtkTreeModel *model; + if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LanguagesTree)),&model,&itar)) return 0; + char *cur_code,*country; + gtk_tree_model_get(self,iter,0,&cur_code,1,&country,-1); + if (yon_char_is_empty(cur_code)) return 0; + + char *code; + gtk_tree_model_get(model,&itar,0,&code,-1); + if (!strcmp(code,cur_code)){ + char *config_lang = config(installer_locale_parameter); + if (!yon_char_is_empty(config_lang)&&!strcmp(cur_code,config_lang)){ + if (gtk_tree_model_filter_convert_child_iter_to_iter(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter),iter,&itar)){ + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->CountryLanguagesTree)),&itar); + } + } + return 1; + } + return 0; + +} \ No newline at end of file diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index efdc1f1..245b519 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -100,68 +100,6 @@ void yon_on_about(GtkWidget *, main_window *){ //functions - -// int yon_confirmation_dialog_call(GtkWidget *self,dialog_confirmation_data *data){ -// textdomain(template_ui_LocaleName); -// GtkWindow *parent = self?GTK_WINDOW(gtk_widget_get_toplevel(self)):NULL; -// GtkWidget *dialog = gtk_dialog_new_with_buttons(TITLE_LABEL,parent,GTK_DIALOG_USE_HEADER_BAR,CANCEL_LABEL,GTK_RESPONSE_CANCEL,ACCEPT_LABEL,GTK_RESPONSE_ACCEPT,NULL); -// textdomain(LocaleName); -// gtk_window_set_modal(GTK_WINDOW(dialog),1); -// gtk_window_set_icon_name(GTK_WINDOW(dialog),yon_char_append("com.ublinux.",LocaleName)); -// gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL); -// gtk_widget_set_size_request(dialog,450,-1); -// GList *list = gtk_container_get_children(GTK_CONTAINER(gtk_dialog_get_header_bar(GTK_DIALOG(dialog)))); -// GtkWidget *image_cancel = gtk_image_new_from_icon_name("com.ublinux.libublsettingsui-gtk3.cancel-symbolic",GTK_ICON_SIZE_BUTTON); -// GtkWidget *image_accept = gtk_image_new_from_icon_name("com.ublinux.libublsettingsui-gtk3.accept-symbolic",GTK_ICON_SIZE_BUTTON); -// gtk_button_set_image((GtkButton*)g_list_nth_data(list,0),image_cancel); -// gtk_button_set_image((GtkButton*)g_list_nth_data(list,1),image_accept); -// gtk_style_context_add_class(gtk_widget_get_style_context((GtkWidget*)g_list_nth_data(list,0)),"marginright"); -// gtk_style_context_add_class(gtk_widget_get_style_context((GtkWidget*)g_list_nth_data(list,1)),"marginright"); - -// g_list_free(list); -// GtkWidget *header_label = gtk_label_new(yon_char_is_empty(data->title)?TITLE_LABEL:data->title); -// gtk_widget_show(header_label); -// PangoAttrList *attributes = pango_attr_list_new(); -// PangoAttribute *boldAttr = pango_attr_weight_new(PANGO_WEIGHT_BOLD); -// pango_attr_list_insert(attributes, boldAttr); -// gtk_label_set_attributes(GTK_LABEL(header_label),attributes); - -// GtkWidget *header = gtk_dialog_get_header_bar(GTK_DIALOG(dialog)); -// gtk_header_bar_set_custom_title(GTK_HEADER_BAR(header),header_label); -// gtk_widget_show(header); - -// GtkWidget *image = gtk_image_new_from_icon_name("dialog-question-symbolic",GTK_ICON_SIZE_DIALOG); -// gtk_widget_show(image); -// gtk_widget_set_margin_start(image,20); -// gtk_widget_set_margin_end(image,20); -// gtk_widget_set_margin_bottom(image,20); -// gtk_widget_set_margin_top(image,20); - -// GtkWidget *label = gtk_label_new(""); -// gtk_widget_set_margin_end(label,20); -// gtk_widget_show(label); -// gtk_label_set_line_wrap_mode(GTK_LABEL(label),PANGO_WRAP_WORD); -// gtk_label_set_line_wrap(GTK_LABEL(label),1); -// gtk_label_set_markup(GTK_LABEL(label),data->action_text); - -// GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); -// gtk_widget_show(box); -// gtk_box_pack_start(GTK_BOX(box),image,0,0,5); -// gtk_box_pack_start(GTK_BOX(box),label,0,0,5); -// gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),box,1,1,5); - -// gtk_window_set_default_size(GTK_WINDOW(dialog),450,-1); - -// int resp = gtk_dialog_run(GTK_DIALOG(dialog)); -// if (resp == GTK_RESPONSE_ACCEPT){ -// if (data->function){ -// data->function(NULL,data->data); -// } -// } else resp=0; -// gtk_widget_destroy(dialog); -// return resp; -// } - // //functions // void yon_encryption_type_setup(GtkComboBoxText *target){ // int size; @@ -356,7 +294,7 @@ void config_init(){ main_config.save_done=0; main_config.save_configured=0; main_config.configure_mode=0; - main_config.load_mode=YON_CONFIG_LOCAL; + main_config.load_mode=YON_CONFIG_GLOBAL; main_config.log_progress_buzy=0; main_config.log_end=0; main_config.exit_accepted=0; @@ -415,7 +353,7 @@ void on_reboot_accepted(main_window *widgets){ dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); data->action_text=WARNING_REBOOT_TEXT_LABEL; data->title=WARNING_TITLE_LABEL; - if (yon_confirmation_dialog_call(widgets->MainWindow,data)==GTK_RESPONSE_ACCEPT ){ + if (yon_confirmation_dialog_call(widgets->MainWindow,data)==GTK_RESPONSE_ACCEPT){ g_mutex_lock(&main_config.install_mutex); if (main_config.install_thread){ pthread_cancel((pthread_t)main_config.install_thread); @@ -460,181 +398,6 @@ gboolean on_yon_exit(GtkWidget *,GdkEvent*, main_window *widgets){ return 1; } -void on_locale_changed(GtkWidget *,main_window *widgets){ - GtkTreeIter iter; - GtkTreeModel *model; - if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LanguagesTree)),&model,&iter)) return; - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter)); - char *config_code = config(installer_locale_parameter); - if (yon_char_is_empty(config_code)){ - config_code = setlocale(LC_ALL,NULL); - } - GtkTreeIter itar; - for_iter(widgets->InstallerCountryFilter,&iter){ - gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter),&itar,&iter); - char *target; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->InstallerCountryList),&itar,2,&target,-1); - if (!strcmp(config_code,target)){ - gtk_tree_model_filter_convert_child_iter_to_iter(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter),&iter,&itar); - gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->CountryLanguagesTree)),&iter); - GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(widgets->InstallerCountryFilter),&iter); - gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(widgets->CountryLanguagesTree),path,0,0,0,0); - gtk_tree_path_free(path); - break; - } - } - -} - -void on_installer_language_changed(GtkWidget *self,GtkTreePath*,GtkTreeViewColumn*, main_window *widgets){ - char *window_language; - GtkTreeIter iter; - GtkTreeModel *model; - if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->CountryLanguagesTree)),&model,&iter)) return; - gtk_tree_model_get(model,&iter,2,&window_language,-1); - if (!yon_char_is_empty(window_language)){ - char *prev_lang = config(installer_locale_parameter); - if (!yon_char_is_empty(prev_lang)&&!strcmp(prev_lang,window_language)) return; - yon_config_register(installer_locale_parameter,installer_locale_parameter_command,(char*)window_language); - } - char *active_lang_id = gtk_tree_model_get_string_from_iter(model,&iter); - int size; - config_str parameters = yon_config_get_save_parameters_by_key(&size,installer_locale_parameter,NULL); - char *command_parameters = yon_char_parsed_to_string(parameters,size," "); - 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(yon_debug_output("%s\n",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); - bind_textdomain_codeset(LocaleName,"UTF-8"); - 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); -} - -typedef struct{ - char *locale_name; - char *code; - char *localised_name; - char *code_full; -} locale_struct; - -int yon_char_parsed_compare(const void *a, const void *b){ - const config_str str_a = (const config_str)a; - const config_str str_b = (const config_str)b; - - return strcmp(*str_a,*str_b); -} - -void set_locales_list(main_window *widgets){ - gtk_list_store_clear(widgets->InstallerLanguageList); - gtk_list_store_clear(widgets->InstallerCountryList); - - char *config_code = yon_char_new(config(installer_locale_parameter)); - int size; - config_str locales = yon_locale_get_all_codes(&size); - qsort(locales,size,sizeof(char*),yon_char_parsed_compare); - GtkTreeIter iter,itar; - GHashTable *added = g_hash_table_new(g_str_hash,g_str_equal); - bind_textdomain_codeset(LOCALES_DOMAIN_NAME,"UTF-8"); - for (int i=0;iInstallerLanguageList,&iter); - gtk_list_store_set(widgets->InstallerLanguageList,&iter, - 0,lang_ab, - 1,_(language), - 2,lang_name, - 3,locales[i], - -1); - } - gtk_list_store_append(widgets->InstallerCountryList,&itar); - gtk_list_store_set(widgets->InstallerCountryList,&itar, - 0,lang_ab, - 1,_(country), - 2,code, - 3,title, - -1); - if (yon_char_is_empty(config_code)){ - config_code=yon_char_new(setlocale(LC_ALL,NULL)); - } - char *temp = strstr(config_code,"."); - if (temp) temp[0]='\0'; - if (!strcmp(config_code,locales[i])){ - 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); - } - } - bind_textdomain_codeset(LocaleName,"UTF-8"); - -} - -gboolean on_country_filter(GtkTreeModel *self, GtkTreeIter *iter, main_window *widgets){ - GtkTreeIter itar; - GtkTreeModel *model; - if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LanguagesTree)),&model,&itar)) return 0; - char *cur_code,*country; - gtk_tree_model_get(self,iter,0,&cur_code,1,&country,-1); - if (yon_char_is_empty(cur_code)) return 0; - - char *code; - gtk_tree_model_get(model,&itar,0,&code,-1); - if (!strcmp(code,cur_code)){ - char *config_lang = config(installer_locale_parameter); - if (!yon_char_is_empty(config_lang)&&!strcmp(cur_code,config_lang)){ - if (gtk_tree_model_filter_convert_child_iter_to_iter(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter),iter,&itar)){ - gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->CountryLanguagesTree)),&itar); - } - } - return 1; - } - return 0; - -} void yon_main_window_create(main_window *widgets){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); @@ -1166,7 +929,8 @@ void yon_main_window_create(main_window *widgets){ char *licence = yon_char_parsed_to_string(parsed,size,""); gtk_label_set_text(GTK_LABEL(widgets->LicenceLabel),_(licence)); free(licence); - yon_char_parsed_free(parsed,size);bind_textdomain_codeset(LocaleName,"UTF-8"); + yon_char_parsed_free(parsed,size); + bind_textdomain_codeset(LocaleName,"UTF-8"); } } gtk_builder_connect_signals(builder,NULL); @@ -1180,7 +944,6 @@ void yon_main_window_create(main_window *widgets){ } if (main_config.force_ini){ if (yon_configuration_path_check(main_config.config_save_path)){ - main_config.configure_mode=1; GList *box = gtk_container_get_children(GTK_CONTAINER(widgets->ConfigurationModeMenuItem)); GList *children = gtk_container_get_children(GTK_CONTAINER(box->data)); @@ -1215,9 +978,17 @@ void *yon_maximize(main_window *widgets){ * Функция настройки основного окна приложения. [widgets] - структура со стандартным интерфейсом. */ main_window *yon_main_window_complete(){ + if (main_config.force_ini){ + if (yon_configuration_path_check(main_config.config_save_path)){ + { + main_config.configure_mode=1; + } + } + } main_window *widgets=NULL; widgets = yon_remalloc(widgets,sizeof(main_window)); memset(widgets,0,sizeof(main_window)); + yon_startup_language_init(); yon_main_window_create(widgets); yon_window_config_setup(GTK_WINDOW(widgets->MainWindow)); // yon_window_config_custom_window_setup(GTK_WINDOW(widgets->MainWindow),"MainWindow"); @@ -1227,10 +998,10 @@ main_window *yon_main_window_complete(){ int main(int argc, char *argv[]){ __attribute__((unused)) char *locale = setlocale(LC_ALL, ""); bind_textdomain_codeset(LocaleName,"UTF-8"); + yon_ubl_connect_config((_template_config*)&main_config); config_init(); config_str unfound = NULL; int size=0; - yon_ubl_connect_config((_template_config*)&main_config); opterr=0; yon_ubl_window_init(TITLE_LABEL,"",LocaleName,CssPath,LocaleName,version_application,WIKI_LINK); yon_ubl_setup_arguments(argc,argv,&unfound,&size,ADDITIONAL_ARGS); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 897dce7..4315069 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -259,7 +259,9 @@ layout && /description:/ {\ #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 SYSTEM_LANG_parameter "AUTOINSTALL['ubconfig set [locale] LANG']" +#define SYSTEM_LANG_parameter_command "ubconfig --source global get autoinstall AUTOINSTALL['ubconfig set [locale] LANG']" +#define get_localisation_command "ubconfig -ea --source global get [autoinstall] AUTOINSTALL[installer_locale] AUTOINSTALL['ubconfig set [locale] LANG'] -- 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) @@ -282,9 +284,9 @@ layout && /description:/ {\ #define full_log_path "/var/log/ubinstall.log" -#define config_get_command(target) yon_char_unite("ubconfig --source ", target, " --conarg get [autoinstall] AUTOINSTALL[*]", NULL) +#define config_get_command(target) yon_char_unite("ubconfig -ea --conarg --source ", target, " get [autoinstall] AUTOINSTALL[*] -- get [locale] LANG", NULL) -#define config_get_default_command "ubconfig --source default --conarg get [autoinstall] AUTOINSTALL[*]" +#define config_get_default_command "ubconfig -ea --conarg --source default get [autoinstall] AUTOINSTALL[*] -- get [locale] LANG" #define config_get_global_only_parameters "" #define config_get_local_only_parameters "" @@ -1456,4 +1458,5 @@ double yon_password_check_func(yon_password_window *window, const char *password void yon_source_update(source_window *window); void yon_main_window_update_locale(main_window *widgets); gboolean yon_progress_bar_start(main_window *widgets); -void *yon_progress_file_buzyfy(void*); \ No newline at end of file +void *yon_progress_file_buzyfy(void*); +void yon_startup_language_init(); \ No newline at end of file