From 44680cfe5917702c4ddd7c246bee3630b3f402d9 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Fri, 23 Jan 2026 17:07:30 +0000 Subject: [PATCH] New application language switching applied --- source/ubinstall-gtk-bootloader.c | 1 + source/ubinstall-gtk-keyboard.c | 5 +++ source/ubinstall-gtk-network.c | 9 +++++ source/ubinstall-gtk-packages.c | 1 + source/ubinstall-gtk-page-switch.c | 3 +- source/ubinstall-gtk-region.c | 9 ++++- source/ubinstall-gtk-saving.c | 2 +- source/ubinstall-gtk-startup-apps.c | 4 +- source/ubinstall-gtk-startup-services.c | 4 +- source/ubinstall-gtk-ui-lang.c | 49 +++++++++++++++++-------- source/ubinstall-gtk-users.c | 3 ++ source/ubinstall-gtk.c | 30 +++++++-------- source/ubinstall-gtk.h | 7 ++-- source/ubl-strings.h | 6 +-- ubinstall-gtk.glade | 5 --- 15 files changed, 89 insertions(+), 49 deletions(-) diff --git a/source/ubinstall-gtk-bootloader.c b/source/ubinstall-gtk-bootloader.c index 65f7229..b1f10c5 100644 --- a/source/ubinstall-gtk-bootloader.c +++ b/source/ubinstall-gtk-bootloader.c @@ -435,6 +435,7 @@ void yon_bootloader_init(main_window *widgets){ gtk_entry_set_text(GTK_ENTRY(widgets->BootloadDefaultOSEntry),DEFAULT_BOOTLOAD_MENU_ITEM_LABEL); } if (!yon_char_is_empty(autologin)&&(!strcmp(autologin,"yes")||!strcmp(autologin,"enable"))){ + gtk_list_store_clear(widgets->BootloadUsersList); gtk_switch_set_active(GTK_SWITCH(widgets->BootloadNoPasswordSwitch),1); int admins_size; config_str admins_parsed = yon_char_parse(admins,&admins_size,","); diff --git a/source/ubinstall-gtk-keyboard.c b/source/ubinstall-gtk-keyboard.c index 659fa74..9e1c7f1 100644 --- a/source/ubinstall-gtk-keyboard.c +++ b/source/ubinstall-gtk-keyboard.c @@ -51,6 +51,11 @@ void yon_keyboard_init(main_window *widgets){ g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardModelCombo),G_CALLBACK(on_model_changed),widgets); g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardDefaultLayoutsSwitch),G_CALLBACK(on_layout_default_toggled),widgets); gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->KeyboardModelCombo)); + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->KeyboardNumLockCombo)); + + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->KeyboardNumLockCombo),NULL,DEFAULT_LABEL); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->KeyboardNumLockCombo),NULL,ON_LABEL); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->KeyboardNumLockCombo),NULL,OFF_LABEL); int size; gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->KeyboardModelCombo),DEFAULT_LABEL); config_str models = yon_config_load(get_keyboard_models_command,&size); diff --git a/source/ubinstall-gtk-network.c b/source/ubinstall-gtk-network.c index 9908e2c..75ea523 100644 --- a/source/ubinstall-gtk-network.c +++ b/source/ubinstall-gtk-network.c @@ -322,6 +322,15 @@ void yon_network_init(main_window *widgets){ gtk_entry_set_text(GTK_ENTRY(widgets->NetworkDomainPasswordEntry),domain_password); } } + { + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->NetworkNTPCombo)); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->NetworkNTPCombo),NULL,DEFAULT_LABEL); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->NetworkNTPCombo),NULL,"DHCP"); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->NetworkNTPCombo),NULL,"NTP (ntp.org)"); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->NetworkNTPCombo),NULL,"NTP (vniiftri.ru)"); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->NetworkNTPCombo),NULL,MANUAL_LABEL); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->NetworkNTPCombo),NULL,DO_NOT_CONFIGURE_LABEL); + } if (!yon_char_is_empty(ntp)){ gtk_switch_set_active(GTK_SWITCH(widgets->NetworkNTPServerSwitch),1); gtk_widget_set_sensitive(widgets->NetworkNTPEntry,0); diff --git a/source/ubinstall-gtk-packages.c b/source/ubinstall-gtk-packages.c index 0ac87d0..18cff6b 100644 --- a/source/ubinstall-gtk-packages.c +++ b/source/ubinstall-gtk-packages.c @@ -53,6 +53,7 @@ GtkTreeIter *yon_subcategory_check(GtkTreeStore *target, GtkTreeIter *parent_ite } void yon_packages_tab_init(main_window *widgets){ + gtk_tree_store_clear(widgets->PackagesList); int size; config_str packages = yon_resource_open_file(groups_list_path,&size); for (int i=1;iSourceButton); + gtk_widget_show(widgets->BackButton); gtk_widget_set_sensitive(widgets->BackButton,1); gtk_widget_set_sensitive(widgets->NextButton,1); gtk_widget_set_sensitive(widgets->CancelInstallButton,1); @@ -418,7 +419,7 @@ 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); + yon_set_locales_list(widgets); break; case YON_PAGE_CONFIG_HUB: yon_configuration_hub_init(widgets); diff --git a/source/ubinstall-gtk-region.c b/source/ubinstall-gtk-region.c index cbb8b4c..92d2d26 100644 --- a/source/ubinstall-gtk-region.c +++ b/source/ubinstall-gtk-region.c @@ -28,8 +28,11 @@ void on_zone_changed(GtkWidget *, main_window *widgets){ const char *region = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->RegionCombo)); const char *zone = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->ZoneCombo)); - char *timezone = yon_char_unite(region,"/",zone,NULL); - cc_timezone_map_set_timezone(CC_TIMEZONE_MAP(widgets->RegionMapTarget),timezone); + if (!yon_char_is_empty(region)&&!yon_char_is_empty(zone)){ + char *timezone = yon_char_unite(region,"/",zone,NULL); + cc_timezone_map_set_timezone(CC_TIMEZONE_MAP(widgets->RegionMapTarget),timezone); + free(timezone); + } g_signal_handlers_unblock_by_func(G_OBJECT(widgets->RegionMapTarget),G_CALLBACK(on_map_selection_changed),widgets); } #endif @@ -65,6 +68,8 @@ void on_map_selection_changed(GtkWidget *,CcTimezoneLocation *location,main_wind #endif void yon_region_init(main_window *widgets){ + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->RegionCombo)); + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->KeyboardNumLockCombo)); #ifdef TIMEZONEMAP_INCLUDE yon_debug_output("%s\n","TIMEZONEMAP enabled"); GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->RegionMapBox)); diff --git a/source/ubinstall-gtk-saving.c b/source/ubinstall-gtk-saving.c index 10bf6dd..aa13879 100644 --- a/source/ubinstall-gtk-saving.c +++ b/source/ubinstall-gtk-saving.c @@ -52,7 +52,7 @@ void on_config_global_load(GtkWidget *,main_window *widgets){ main_config.config_load_path = yon_char_new("global"); yon_load_proceed(YON_CONFIG_GLOBAL); main_config.load_mode=YON_CONFIG_GLOBAL; - // yon_main_window_update_locale(widgets); + yon_main_window_update_locale(widgets); yon_page_init(widgets,gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook))); } diff --git a/source/ubinstall-gtk-startup-apps.c b/source/ubinstall-gtk-startup-apps.c index 3ae0a4a..3014f1e 100644 --- a/source/ubinstall-gtk-startup-apps.c +++ b/source/ubinstall-gtk-startup-apps.c @@ -43,7 +43,7 @@ void on_startup_apps_remove(GtkWidget *self,main_window *widgets){ void yon_startup_apps_setup(main_window *widgets){ GtkTreeIter iter; - if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->StartupAppsList),&iter)){ + gtk_list_store_clear(widgets->StartupAppsList); int size; config_str apps = yon_resource_open_file(apps_list_path,&size); for (int i=1;iStartupAppsList,&iter,0,1,1,parsed[0],2,yon_char_return_if_exist(parsed[1],""),3,yon_char_return_if_exist(_(parsed[2]),""),-1); } } - } + char *startup = config(SERVICES_ENABLE_parameter); if (!yon_char_is_empty(startup)){ if (!strcmp(startup,"auto")){ diff --git a/source/ubinstall-gtk-startup-services.c b/source/ubinstall-gtk-startup-services.c index 4bfb3ca..b99a166 100644 --- a/source/ubinstall-gtk-startup-services.c +++ b/source/ubinstall-gtk-startup-services.c @@ -51,7 +51,7 @@ void on_startup_services_remove(GtkWidget *self,main_window *widgets){ void yon_startup_services_setup(main_window *widgets){ GtkTreeIter iter; - if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->StartupList),&iter)){ + gtk_list_store_clear(widgets->StartupList); int size; config_str services = yon_resource_open_file(services_list_path,&size); for (int i=1;iStartupList,&iter,0,1,1,parsed[0],2,yon_char_return_if_exist(parsed[1],""),3,yon_char_return_if_exist(_(parsed[2]),""),-1); } } - } + char *startup = config(SERVICES_ENABLE_parameter); if (!yon_char_is_empty(startup)){ if (!strcmp(startup,"auto")){ diff --git a/source/ubinstall-gtk-ui-lang.c b/source/ubinstall-gtk-ui-lang.c index 0333a4f..a14c223 100644 --- a/source/ubinstall-gtk-ui-lang.c +++ b/source/ubinstall-gtk-ui-lang.c @@ -4,11 +4,11 @@ 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; - { - 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); - } + // { + // 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_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter)); char *config_code = config(installer_locale_parameter); if (yon_char_is_empty(config_code)){ @@ -47,7 +47,6 @@ void on_installer_language_changed(GtkWidget *self,GtkTreePath*,GtkTreeViewColum 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); @@ -104,11 +103,12 @@ void yon_main_window_update_locale(main_window *widgets){ } } locale = setlocale(LC_ALL,locale); + yon_config_register(installer_locale_parameter,installer_locale_parameter_command,(char*)locale); // gtk_widget_destroy(widgets->MainWindow); textdomain(LocaleName); g_setenv("LANGUAGE",locale,1); - yon_update_translation(widgets->builder); + yon_update_translation(widgets); // 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)); @@ -145,7 +145,7 @@ gboolean on_languages_search_func(GtkTreeModel *model, gint ,const char *key, Gt return !(g_str_has_prefix(target_normalized,string_normalized) || g_str_has_prefix(loc_target_normalized,string_normalized)); } -void set_locales_list(main_window *widgets){ +void yon_set_locales_list(main_window *widgets){ gtk_list_store_clear(widgets->InstallerLanguageList); gtk_list_store_clear(widgets->InstallerCountryList); @@ -189,14 +189,20 @@ void set_locales_list(main_window *widgets){ 2,code, 3,_(title), -1); + } + for_iter (GTK_TREE_MODEL(widgets->InstallerLanguageList), &iter){ + char *compare_target; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->InstallerLanguageList),&iter, 3, &compare_target, -1); if (!yon_char_is_empty(config_code)){ char *temp = strstr(config_code,"."); if (temp) temp[0]='\0'; - if (!strcmp(config_code,locales[i])){ + if (!strcmp(config_code,compare_target)){ + gtk_widget_realize(widgets->LanguagesTree); 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); } } } @@ -232,25 +238,31 @@ void yon_translation_init(GtkBuilder *builder){ GSList *list = gtk_builder_get_objects(builder); GSList *iter; for (iter = list; iter; iter = iter->next){ - GtkWidget *cur_widget = NULL; + GObject *cur_widget = NULL; const char *widget_text = NULL; if (GTK_IS_BUTTON(iter->data)){ - cur_widget = GTK_WIDGET(iter->data); + cur_widget = G_OBJECT(iter->data); widget_text = yon_char_new(gtk_button_get_label(GTK_BUTTON(cur_widget))); } else if (GTK_IS_LABEL(iter->data)){ - cur_widget = GTK_WIDGET(iter->data); + cur_widget = G_OBJECT(iter->data); widget_text = yon_char_new(gtk_label_get_text(GTK_LABEL(cur_widget))); + } else if (GTK_IS_TREE_VIEW_COLUMN(iter->data)){ + cur_widget = G_OBJECT(iter->data); + widget_text = yon_char_new(gtk_tree_view_column_get_title(GTK_TREE_VIEW_COLUMN(cur_widget))); } else continue; g_object_set_data(G_OBJECT(cur_widget),"original_label",(void*)widget_text); } } -void yon_update_translation(GtkBuilder *builder){ +void yon_update_translation(main_window *widgets){ + GtkBuilder *builder = widgets->builder; GSList *list = gtk_builder_get_objects(builder); GSList *iter; for (iter = list; iter; iter = iter->next){ - if (GTK_IS_BUTTON(iter->data)){ + if (iter->data == widgets->LicenceLabel){ + yon_licence_load(widgets); + } else if (GTK_IS_BUTTON(iter->data)){ GtkWidget *cur_button = GTK_WIDGET(iter->data); char *source_label = g_object_get_data(G_OBJECT(cur_button),"original_label"); if (!yon_char_is_empty(source_label)){ @@ -263,7 +275,14 @@ void yon_update_translation(GtkBuilder *builder){ if (!yon_char_is_empty(source_label)){ gtk_label_set_text(GTK_LABEL(cur_label),_(source_label)); } - + } else if (GTK_IS_TREE_VIEW_COLUMN(iter->data)){ + GObject *cur_column = G_OBJECT(iter->data); + char *source_label = g_object_get_data(G_OBJECT(cur_column),"original_label"); + if (!yon_char_is_empty(source_label)){ + gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(cur_column),_(source_label)); + } + } else if (iter->data == widgets->LanguagesTree){ + yon_set_locales_list(widgets); } } } \ No newline at end of file diff --git a/source/ubinstall-gtk-users.c b/source/ubinstall-gtk-users.c index 850f300..681e23a 100644 --- a/source/ubinstall-gtk-users.c +++ b/source/ubinstall-gtk-users.c @@ -106,6 +106,9 @@ yon_user_struct *yon_user_struct_new(){ } void yon_user_init(main_window *widgets){ + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->UserRootPasswordCombo)); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->UserRootPasswordCombo),NULL,DEFAULT_LABEL); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->UserRootPasswordCombo),NULL,SET_PASSWORD_LABEL); yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(widgets->UserRootPasswordEntry)); char *root_password = config(root_password_parameter); char *autologin = config(autologin_parameter); diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index 1e297e3..ab48f19 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -399,6 +399,20 @@ gboolean on_yon_exit(GtkWidget *,GdkEvent*, main_window *widgets){ return 1; } +void yon_licence_load(main_window *widgets){ + int size; + config_str parsed = NULL; + parsed = yon_file_open(licence_path,&size); + if (size){ + bind_textdomain_codeset("ublinux-init-eula","UTF-8"); + textdomain("ublinux-init-eula"); + 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); + textdomain(LocaleName); + } +} void yon_main_window_create(main_window *widgets){ __attribute__((unused)) char *locale = setlocale(LC_ALL, "en_US.UTF-8"); @@ -931,20 +945,6 @@ void yon_main_window_create(main_window *widgets){ gtk_window_set_title(GTK_WINDOW(widgets->MainWindow),TITLE_LABEL); gtk_window_set_icon_name(GTK_WINDOW(widgets->MainWindow),icon_path); } - { - int size; - config_str parsed = NULL; - parsed = yon_file_open(licence_path,&size); - if (size){ - bind_textdomain_codeset("ublinux-init-eula","UTF-8"); - textdomain("ublinux-init-eula"); - 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); - textdomain(LocaleName); - } - } gtk_builder_connect_signals(builder,NULL); if (!yon_char_is_empty(config(AUTOINSTALL_TYPE_INSTALL))){ gtk_widget_show(widgets->StartScenarioButton); @@ -1009,7 +1009,7 @@ main_window *yon_main_window_complete(){ yon_startup_language_init(); yon_locale_init(); - set_locales_list(widgets); + // yon_set_locales_list(widgets); // yon_main_window_update_locale(widgets); // // yon_window_config_custom_window_setup(GTK_WINDOW(widgets->MainWindow),"MainWindow"); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 5f244ba..5908614 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -1350,7 +1350,7 @@ source_element *yon_source_element_new(); void on_rdp_toggled(GtkWidget *self, main_window *); void on_vnc_toggled(GtkWidget *self, main_window *widgets); void yon_main_window_create(main_window *widgets); -void set_locales_list(main_window *widgets); +void yon_set_locales_list(main_window *widgets); void on_installer_language_changed(GtkWidget *self, GtkTreePath *, GtkTreeViewColumn *, main_window *widgets); gboolean on_country_filter(GtkTreeModel *self, GtkTreeIter *iter, main_window *widgets); int yon_char_parsed_compare(const void *a, const void *b); @@ -1469,5 +1469,6 @@ gboolean yon_progress_bar_start(main_window *widgets); void *yon_progress_file_buzyfy(void*); void yon_startup_language_init(); gboolean on_languages_search_func(GtkTreeModel *model, gint col,const char *key, GtkTreeIter *iter, main_window *widgets); -void yon_update_translation(GtkBuilder *builder); -void yon_translation_init(GtkBuilder *builder); \ No newline at end of file +void yon_update_translation(main_window *widgets); +void yon_translation_init(GtkBuilder *builder); +void yon_licence_load(main_window *widgets); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 0b67ee3..3b214dd 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -272,6 +272,9 @@ NULL) #define GROUP_LABEL _("Group:") #define APP_TABLE_LABEL _("Application") #define GROUP_TABLE_LABEL _("Group") +#define ON_LABEL _("On") +#define OFF_LABEL _("Off") +#define DO_NOT_CONFIGURE_LABEL _("Do not configure") // #define _LABEL _("Select your language:") // #define _LABEL _("Selecting additional system kernel components") @@ -285,7 +288,6 @@ NULL) // #define _LABEL _("File system type:") // #define _LABEL _("File system label:") // #define _LABEL _("Encryption:") -// #define _LABEL _("Off") // #define _LABEL _("Encryption password:") // #define _LABEL _("User name:") // #define _LABEL _("User password:") @@ -368,7 +370,6 @@ NULL) // #define _LABEL _("Domain administrator:") // #define _LABEL _("NTP Server:") // #define _LABEL _("Manual") -// #define _LABEL _("Do not configure") // #define _LABEL _("auto") // #define _LABEL _("Net interfaces") // #define _LABEL _("Installation process") @@ -414,7 +415,6 @@ NULL) // #define _LABEL _("Selecting software packages to install from the repository. Internet access is required") // #define _LABEL _("Selecting software modules to install from the repository. Internet access is required") // #define _LABEL _("Language") -// #define _LABEL _("On") // #define _LABEL _("Selecting the software group to install from the repository. Internet access is required") // #define _LABEL _("Recovery configuration has ended") // #define _LABEL _("System recovery is about to begin") diff --git a/ubinstall-gtk.glade b/ubinstall-gtk.glade index 1b7b8cb..7791b7e 100644 --- a/ubinstall-gtk.glade +++ b/ubinstall-gtk.glade @@ -4668,11 +4668,6 @@ agreement True False 0 - - Default - On - Off - True