From 5c7711363f7562725ba382737a62489c7e6b1de1 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 13 Nov 2025 11:55:13 +0600 Subject: [PATCH 1/8] Added localisation configuration for users --- locale/ubl-settings-usergroups.pot | 12 ++++ locale/ubl-settings-usergroups_ru.po | 12 ++++ source/ubl-settings-usergroups-user.c | 49 +++++++++++++++ source/ubl-settings-usergroups.c | 15 +++-- source/ubl-settings-usergroups.h | 13 +++- source/ubl-strings.h | 5 +- ubl-settings-usergroups-user.glade | 85 +++++++++++++++++++++++++-- 7 files changed, 180 insertions(+), 11 deletions(-) diff --git a/locale/ubl-settings-usergroups.pot b/locale/ubl-settings-usergroups.pot index da8116e..4441e09 100644 --- a/locale/ubl-settings-usergroups.pot +++ b/locale/ubl-settings-usergroups.pot @@ -1042,4 +1042,16 @@ msgstr "" #: source/ubl-strings.h:302 msgid "The selected home directory is used by another user" +msgstr "" + +#: source/ubl-strings.h:302 +msgid "System language:" +msgstr "" + +#: source/ubl-strings.h:302 +msgid "Regional settings" +msgstr "" + +#: source/ubl-strings.h:302 +msgid "System" msgstr "" \ No newline at end of file diff --git a/locale/ubl-settings-usergroups_ru.po b/locale/ubl-settings-usergroups_ru.po index a9ba5b4..3cda365 100644 --- a/locale/ubl-settings-usergroups_ru.po +++ b/locale/ubl-settings-usergroups_ru.po @@ -1123,6 +1123,18 @@ msgstr "ММ-ДД-ГГГГ" msgid "The selected home directory is used by another user" msgstr "Указанный домашний каталог используется другим пользователем" +#: source/ubl-strings.h:302 +msgid "System language:" +msgstr "Язык системы:" + +#: source/ubl-strings.h:302 +msgid "Regional settings" +msgstr "Региональные настройки" + +#: source/ubl-strings.h:302 +msgid "System" +msgstr "Системный" + #~ msgid "User(-s)" #~ msgstr "Пользователь(-ли)" diff --git a/source/ubl-settings-usergroups-user.c b/source/ubl-settings-usergroups-user.c index fee32cc..104885a 100644 --- a/source/ubl-settings-usergroups-user.c +++ b/source/ubl-settings-usergroups-user.c @@ -83,6 +83,13 @@ void on_parameter_changed(GtkWidget *,ubl_settings_usergroups_user_window *windo return; } + char *user_lang = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->LanguageCombo)); + + if (!yon_char_is_empty(user_lang)){ + user_lang = yon_char_unite("--lang ",user_lang,NULL); + + } else user_lang=""; + int user_shell_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userShellCombo)); if (user_shell_active>0){ user_shell = yon_char_unite("--shell ",!strcmp(gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->userShellCombo)),"Set")?(char*)gtk_entry_get_text(GTK_ENTRY(window->userShellEntry)):(char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)),NULL); @@ -119,6 +126,8 @@ void on_parameter_changed(GtkWidget *,ubl_settings_usergroups_user_window *windo final_string = yon_char_unite(final_string,!yon_char_is_empty(final_string)?" ":"", yon_char_return_if_exist(user_shell,""), !yon_char_is_empty(user_shell)?" ":"", + yon_char_return_if_exist(user_lang,""), + !yon_char_is_empty(user_lang)?" ":"", yon_char_return_if_exist(create_system_user,""), !yon_char_is_empty(create_system_user)?" ":"", yon_char_return_if_exist(create_ununique,""), @@ -180,6 +189,41 @@ void on_home_changed(GtkWidget *self,ubl_settings_usergroups_user_window *window free(home_parameter); } +gboolean yon_user_set_locales(GtkWidget *target){ + char *languages_string = config(LOCALE_parameter); + int languages_size; + config_str languages = yon_char_parse(languages_string,&languages_size,","); + GHashTable *hash = g_object_get_data(G_OBJECT(target),"hash"); + char *config_lang = g_object_get_data(G_OBJECT(target),"value"); + for (int i=0;iuserWarningSpin=yon_gtk_builder_get_widget(builder,"userWarningSpin"); window->userActivitySpin=yon_gtk_builder_get_widget(builder,"userActivitySpin"); window->userForceChangeCheck=yon_gtk_builder_get_widget(builder,"userForceChangeCheck"); + window->LanguageCombo=yon_gtk_builder_get_widget(builder,"LanguageCombo"); window->userShellCombo=yon_gtk_builder_get_widget(builder,"userShellCombo"); window->userShellEntry=yon_gtk_builder_get_widget(builder,"userShellEntry"); window->userHomeCombo=yon_gtk_builder_get_widget(builder,"userHomeCombo"); @@ -229,6 +274,7 @@ ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){ window->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); window->expiration_unix=NULL; window->last_uid=NULL; + window->locale_thread=NULL; yon_gtk_entry_block_symbols(GTK_ENTRY(window->userUserNameEntry),"'\":\n"); yon_gtk_entry_block_symbols(GTK_ENTRY(window->userLoginEntry),"'\"=:\n"); @@ -251,6 +297,7 @@ ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){ } gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->userShellCombo),"Set",SET_LABEL); yon_char_parsed_free(shells,shell_size); + window->locale_thread=g_thread_new("locales",(GThreadFunc)yon_load_languages,window->LanguageCombo); gtk_combo_box_set_active(GTK_COMBO_BOX(window->userShellCombo),0); window->old_password=NULL; window->old_username=NULL; @@ -297,6 +344,7 @@ ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){ g_signal_connect(G_OBJECT(window->userHomeEntry),"changed",G_CALLBACK(on_home_changed),window); g_signal_connect(G_OBJECT(window->userHomeCombo),"changed",G_CALLBACK(on_parameter_changed),window); g_signal_connect(G_OBJECT(window->userShellCombo),"changed",G_CALLBACK(on_parameter_changed),window); + g_signal_connect(G_OBJECT(window->LanguageCombo),"changed",G_CALLBACK(on_parameter_changed),window); g_signal_connect(G_OBJECT(window->userShellEntry),"changed",G_CALLBACK(on_parameter_changed),window); g_signal_connect(G_OBJECT(window->userCreateSystemCheck),"toggled",G_CALLBACK(on_parameter_changed),window); g_signal_connect(G_OBJECT(window->userCreateUnuniqueCheck),"toggled",G_CALLBACK(on_parameter_changed),window); @@ -367,6 +415,7 @@ void on_user_login_update(GtkWidget *, ubl_settings_usergroups_user_window *wind void on_user_save(GtkWidget *self, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); ubl_settings_usergroups_user_window *window = yon_dictionary_get_data(dict->first->next,ubl_settings_usergroups_user_window*); + g_thread_join(window->locale_thread); yon_ubl_status_box_despawn(GTK_CONTAINER(window->StatusBox)); char *final_user=""; char *uid_string = NULL; diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 2e93e4f..277c249 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -1649,12 +1649,19 @@ void on_main_edit(GtkWidget *, main_window *widgets){ gtk_combo_box_set_active(GTK_COMBO_BOX(window->userHomeCombo),2); i++; } else if (!strcmp(parameters_substring[i],"--shell")||!strcmp(parameters_substring[i],"-s")){ - if (!gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->userShellCombo),parameters_substring[i+1])){ - gtk_entry_set_text(GTK_ENTRY(window->userShellEntry),parameters_substring[i+1]); - gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->userShellCombo),"Set"); + if (yon_char_is_empty(parameters_substring[i+1])){ + gtk_combo_box_set_active(GTK_COMBO_BOX(window->userShellCombo),0); + } else { + if (!gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->userShellCombo),parameters_substring[i+1])){ + gtk_entry_set_text(GTK_ENTRY(window->userShellEntry),parameters_substring[i+1]); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->userShellCombo),"Set"); + } } i++; - + } else if (!strcmp(parameters_substring[i],"--lang")){ + g_object_set_data(G_OBJECT(window->LanguageCombo),"value",parameters_substring[i+1]); + window->config_locale=yon_char_new(parameters_substring[i+1]); + }else if (!strcmp(parameters_substring[i],"--system")||!strcmp(parameters_substring[i],"-r")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck),1); }else if (!strcmp(parameters_substring[i],"--no-create-home")||!strcmp(parameters_substring[i],"-M")){ diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index 4a4285e..e46815e 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -59,6 +59,8 @@ #define get_system_shadow_command(target) yon_char_unite("/usr/lib/ublinux/functions get_conf_usershadow_from_system ",target,NULL) #define get_system_group_command(target) yon_char_unite("/usr/lib/ublinux/functions get_conf_groupadd_from_system ",target,NULL) +#define languages_command "while IFS= read -ru3 SELECT_LOCALE; do SELECT_LOCALE=\"${SELECT_LOCALE% *}\"; [[ $(< /usr/share/i18n/locales/${SELECT_LOCALE%.*}) =~ (\"language\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"territory\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"country_name\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"lang_name\"[[:blank:]]*\\\"([^\\\"]*)\\\")|(\"language\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"territory\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"lang_name\"[[:blank:]]*\\\"([^\\\"]*)\\\")|(\"language\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"territory\"[[:blank:]]*\\\"([^\\\"]*)\\\") ]] && echo \"${SELECT_LOCALE}|${BASH_REMATCH[2]}${BASH_REMATCH[7]}${BASH_REMATCH[11]}${BASH_REMATCH[5]:+ (${BASH_REMATCH[5]})}${BASH_REMATCH[9]:+ (${BASH_REMATCH[9]})}|${BASH_REMATCH[3]}${BASH_REMATCH[8]}${BASH_REMATCH[12]}${BASH_REMATCH[4]:+ (${BASH_REMATCH[4]})}\" || echo \"${SELECT_LOCALE}\"; done 3< \"/usr/share/i18n/SUPPORTED\"" + #define remove_user_from_system_command(target) yon_char_append("userdel ",target) #define remove_user_and_homedir_from_system_command(target) yon_char_append("userdel -r ",target) #define remove_group_from_system_command(target) yon_char_append("groupdel ",target) @@ -105,8 +107,8 @@ #define user_info_pdf_command(target,path) yon_char_unite("echo ",target,path,NULL) #define user_info_txt_command(target,path) yon_char_unite("echo ",target,path,NULL) -#define config_get_command(source) yon_char_unite("ubconfig --source ",source," -ea get [users] DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERADD_SYNC USERADD_SYNC[*] USERSHADOW[*] USERSHADOW_SYNC[*] GROUPADD[*] GROUPADD_SYNC[*] GROUPADD_SYNC"," -- [system] SYSTEMBOOT_STATEMODE"," -- [save] SAVE_ROOTCOPY_CHANGES",NULL) -#define config_get_default_command "ubconfig --source default -ea get users DEFAULTPASSWD DEFAULTROOTPASSWD USERGROUPS DEFAULTUSER HASHPASSWD ADDADM" +#define config_get_command(source) yon_char_unite("ubconfig --source ",source," -ea get [users] DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERADD_SYNC USERADD_SYNC[*] USERSHADOW[*] USERSHADOW_SYNC[*] GROUPADD[*] GROUPADD_SYNC[*] GROUPADD_SYNC"," -- [system] SYSTEMBOOT_STATEMODE"," -- [save] SAVE_ROOTCOPY_CHANGES", " -- [locale] LOCALE",NULL) +#define config_get_default_command "ubconfig --source default -ea get users DEFAULTPASSWD DEFAULTROOTPASSWD USERGROUPS DEFAULTUSER HASHPASSWD ADDADM -- get [locale] LOCALE" #define config_get_global_only_parameters "ubconfig --source global -ea get users DEFAULTPASSWD DEFAULTROOTPASSWD" #define config_get_local_only_parameters "" @@ -156,6 +158,8 @@ #define USERADD_SYNC_parameter "USERADD_SYNC" #define USERADD_SYNC_parameter_command "ubconfig --source system get users USERADD_SYNC" +#define LOCALE_parameter "LOCALE" +#define LOCALE_parameter_command "ubconfig --source system get [locale] LOCALE" #define USERADD_SEARCH_macro "USERADD[" #define USERADD_parameter_command yon_char_unite("ubconfig --source system get users USERADD[",target,"]",NULL) @@ -410,6 +414,7 @@ typedef struct{ GtkWidget *userWarningSpin; GtkWidget *userActivitySpin; GtkWidget *userForceChangeCheck; + GtkWidget *LanguageCombo; GtkWidget *userShellCombo; GtkWidget *userShellEntry; GtkWidget *userHomeCombo; @@ -438,6 +443,8 @@ typedef struct{ char *old_password; char *old_username; char *last_uid; + char *config_locale; + GThread *locale_thread; } ubl_settings_usergroups_user_window; typedef struct { @@ -627,4 +634,6 @@ int yon_system_user_sync(char *user); void on_homedir_changed(GtkComboBox *self, GtkWidget *target); int yon_config_check_valid(); void on_home_changed(GtkWidget *self,ubl_settings_usergroups_user_window *window); +gboolean yon_user_set_locales(GtkWidget *target); +void *yon_load_languages(void *target); #endif \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index f9b4b14..5582c0a 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -301,4 +301,7 @@ #define DMY_SLASH_FORMAT_LABEL _("DD/MM/YYYY") #define MDY_FORMAT_LABEL _("MM-DD-YYYY") -#define HOMEDIR_USED_LABEL _("The selected home directory is used by another user") \ No newline at end of file +#define HOMEDIR_USED_LABEL _("The selected home directory is used by another user") +#define SYSTEM_LANGUAGE_LABEL _("System language:") +#define REGIONAL_SETTINGS_LABEL _("Regional settings") +#define SYSTEM_LABEL _("System") \ No newline at end of file diff --git a/ubl-settings-usergroups-user.glade b/ubl-settings-usergroups-user.glade index c8bec76..f11aad6 100644 --- a/ubl-settings-usergroups-user.glade +++ b/ubl-settings-usergroups-user.glade @@ -1,5 +1,5 @@ - + @@ -582,6 +582,83 @@ 5 vertical 5 + + + True + False + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + + + True + False + vertical + 5 + + + True + False + 5 + + + True + False + System language: + + + False + True + 0 + + + + + True + False + 0 + + Default + System + + + + False + True + 1 + + + + + False + True + 0 + + + + + + + + + True + False + Regional settings + + + + + False + True + 0 + + True @@ -816,7 +893,7 @@ False True - 0 + 1 @@ -1099,7 +1176,7 @@ False True - 1 + 2 @@ -1135,7 +1212,7 @@ False True - 2 + 3 From 03c50647a3a898c8f8d85b5f930e27c8b5e2c26d Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 14 Nov 2025 11:22:29 +0600 Subject: [PATCH 2/8] Fixed localisation --- ...ttings-usergroups-additional-settings.glade | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/ubl-settings-usergroups-additional-settings.glade b/ubl-settings-usergroups-additional-settings.glade index 171249e..bf87594 100644 --- a/ubl-settings-usergroups-additional-settings.glade +++ b/ubl-settings-usergroups-additional-settings.glade @@ -76,8 +76,8 @@ False Group GID range - - + + True True False @@ -90,8 +90,8 @@ False Group GID in system - - + + True True False @@ -176,8 +176,8 @@ False Users UID range - - + + True True False @@ -190,8 +190,8 @@ False User UID in system - - + + True True False @@ -339,7 +339,7 @@ - user ID of 1000 is an administrator included in the wheel group + A user ID of 1000 is an administrator included in the wheel group True True False From 5cd6c25007f3e5551a1d8aabd83136fde9f13f6e Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 14 Nov 2025 11:32:19 +0600 Subject: [PATCH 3/8] Test fix for system language combo box --- source/ubl-settings-usergroups-user.c | 1 + ubl-settings-usergroups-user.glade | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/source/ubl-settings-usergroups-user.c b/source/ubl-settings-usergroups-user.c index 104885a..2186c85 100644 --- a/source/ubl-settings-usergroups-user.c +++ b/source/ubl-settings-usergroups-user.c @@ -206,6 +206,7 @@ gboolean yon_user_set_locales(GtkWidget *target){ if (!yon_char_is_empty(config_lang)){ gtk_combo_box_set_active_id(GTK_COMBO_BOX(target),config_lang); } + gtk_widget_set_sensitive(target,1); return G_SOURCE_REMOVE; } diff --git a/ubl-settings-usergroups-user.glade b/ubl-settings-usergroups-user.glade index f11aad6..e4cfeba 100644 --- a/ubl-settings-usergroups-user.glade +++ b/ubl-settings-usergroups-user.glade @@ -1,5 +1,5 @@ - + @@ -621,6 +621,7 @@ True + False False 0 From eea7f7037a617407a6a01887472f30ece15c0e02 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 14 Nov 2025 11:38:36 +0600 Subject: [PATCH 4/8] Rmoved user login check at parameter changing --- source/ubl-settings-usergroups-user.c | 28 +++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/source/ubl-settings-usergroups-user.c b/source/ubl-settings-usergroups-user.c index 2186c85..fef7338 100644 --- a/source/ubl-settings-usergroups-user.c +++ b/source/ubl-settings-usergroups-user.c @@ -58,7 +58,7 @@ void yon_gtk_login_block_symbols(GtkEntry *target){ void on_parameter_changed(GtkWidget *,ubl_settings_usergroups_user_window *window){ char *user_shell=NULL; char *user_home=NULL; - char *login=NULL; + // char *login=NULL; char *create_system_user=NULL; char *create_ununique=NULL; char *do_not_check=NULL; @@ -69,19 +69,19 @@ void on_parameter_changed(GtkWidget *,ubl_settings_usergroups_user_window *windo if (do_not_check_actve) do_not_check = "--badnames"; - login = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); - if (login[0]>'0'&&login[0]<'9'&&!do_not_check_actve){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),USER_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); - yon_ubl_status_highlight_incorrect(window->userLoginEntry); - return; - } - if (yon_char_is_empty(login)){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); - yon_ubl_status_highlight_incorrect(window->userLoginEntry); - return; - } + // login = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); + // if (login[0]>'0'&&login[0]<'9'&&!do_not_check_actve){ + // yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),USER_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + // gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + // yon_ubl_status_highlight_incorrect(window->userLoginEntry); + // return; + // } + // if (yon_char_is_empty(login)){ + // yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + // gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + // yon_ubl_status_highlight_incorrect(window->userLoginEntry); + // return; + // } char *user_lang = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->LanguageCombo)); From 368ae27920af3e1fbcf9729f153f08ed4071b03f Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 14 Nov 2025 16:35:59 +0600 Subject: [PATCH 5/8] Fixed locales loading --- sync_parameters.csv => csv/sync_parameters.csv | 0 source/CMakeLists.txt | 2 +- source/ubl-settings-usergroups-user.c | 13 +++---------- source/ubl-settings-usergroups.c | 5 +++++ source/ubl-settings-usergroups.h | 1 + ubl-settings-usergroups-user.glade | 1 - 6 files changed, 10 insertions(+), 12 deletions(-) rename sync_parameters.csv => csv/sync_parameters.csv (100%) diff --git a/sync_parameters.csv b/csv/sync_parameters.csv similarity index 100% rename from sync_parameters.csv rename to csv/sync_parameters.csv diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index e0daa2d..1758e4b 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -39,7 +39,7 @@ set(DEPENDFILES ../ubl-settings-usergroups-savesettings.glade ../ubl-settings-usergroups-confirmation.glade ../ubl-settings-usergroups-system-deletion-confirmation.glade - ../sync_parameters.csv + ../csv/sync_parameters.csv ../csv/hash_list.csv ../csv/shell_list.csv ../gresource.xml diff --git a/source/ubl-settings-usergroups-user.c b/source/ubl-settings-usergroups-user.c index fef7338..d4c025c 100644 --- a/source/ubl-settings-usergroups-user.c +++ b/source/ubl-settings-usergroups-user.c @@ -193,7 +193,7 @@ gboolean yon_user_set_locales(GtkWidget *target){ char *languages_string = config(LOCALE_parameter); int languages_size; config_str languages = yon_char_parse(languages_string,&languages_size,","); - GHashTable *hash = g_object_get_data(G_OBJECT(target),"hash"); + GHashTable *hash = main_config.locales_hash; char *config_lang = g_object_get_data(G_OBJECT(target),"value"); for (int i=0;iMainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); window->expiration_unix=NULL; window->last_uid=NULL; - window->locale_thread=NULL; yon_gtk_entry_block_symbols(GTK_ENTRY(window->userUserNameEntry),"'\":\n"); yon_gtk_entry_block_symbols(GTK_ENTRY(window->userLoginEntry),"'\"=:\n"); @@ -298,7 +293,6 @@ ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){ } gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->userShellCombo),"Set",SET_LABEL); yon_char_parsed_free(shells,shell_size); - window->locale_thread=g_thread_new("locales",(GThreadFunc)yon_load_languages,window->LanguageCombo); gtk_combo_box_set_active(GTK_COMBO_BOX(window->userShellCombo),0); window->old_password=NULL; window->old_username=NULL; @@ -416,7 +410,6 @@ void on_user_login_update(GtkWidget *, ubl_settings_usergroups_user_window *wind void on_user_save(GtkWidget *self, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); ubl_settings_usergroups_user_window *window = yon_dictionary_get_data(dict->first->next,ubl_settings_usergroups_user_window*); - g_thread_join(window->locale_thread); yon_ubl_status_box_despawn(GTK_CONTAINER(window->StatusBox)); char *final_user=""; char *uid_string = NULL; diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 277c249..2621550 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -1559,6 +1559,7 @@ void on_main_add(GtkWidget *, main_window *widgets){ g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_user_save),dict); gtk_window_set_transient_for(GTK_WINDOW(window->CreateUserWindow),GTK_WINDOW(widgets->Window)); + yon_user_set_locales(window->LanguageCombo); gtk_widget_show(window->CreateUserWindow); } else { gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree))); @@ -1756,6 +1757,7 @@ void on_main_edit(GtkWidget *, main_window *widgets){ } } } + yon_user_set_locales(window->LanguageCombo); } } else { @@ -2189,6 +2191,7 @@ void config_init(){ main_config.launch_arguments=NULL; main_config.launch_size=0; int login_size; + main_config.locales_hash = g_hash_table_new(g_str_hash,g_str_equal); config_str login_defs = yon_file_open(uid_path,&login_size); for (int i=0;iUsersList; main_config.groups_list = widgets->GroupsList; + g_thread_new("locales",(GThreadFunc)yon_load_languages,NULL); + /* Signal connection | Присоединение сигналов */ g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_main_add),widgets); diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index e46815e..2223431 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -206,6 +206,7 @@ typedef struct { int save_config; int launch_size; config_str launch_arguments; + GHashTable *locales_hash; } config; extern config main_config; diff --git a/ubl-settings-usergroups-user.glade b/ubl-settings-usergroups-user.glade index e4cfeba..2a85d8c 100644 --- a/ubl-settings-usergroups-user.glade +++ b/ubl-settings-usergroups-user.glade @@ -621,7 +621,6 @@ True - False False 0 From ca8836d7439c9702ac6098b4868f4f1359d2a85f Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 14 Nov 2025 16:39:45 +0600 Subject: [PATCH 6/8] Blocked user login changing --- source/ubl-settings-usergroups.c | 1 + 1 file changed, 1 insertion(+) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 2621550..bfa20ca 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -1584,6 +1584,7 @@ void on_main_edit(GtkWidget *, main_window *widgets){ model = GTK_TREE_MODEL(widgets->UsersList); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree)),&model,&iter)){ ubl_settings_usergroups_user_window *window = yon_ubl_settings_usergroups_user_new(); + gtk_widget_set_sensitive(window->userLoginEntry,0); gtk_window_set_title(GTK_WINDOW(window->CreateUserWindow),CONFIGURE_USER_TITLE_LABEL); gtk_label_set_text(GTK_LABEL(window->userTitleNameLabel),CONFIGURE_USER_TITLE_LABEL); dictionary *dict = NULL; From eeb46c237c7f04d559ab33d42b5d6e999fadbcf4 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 14 Nov 2025 16:42:50 +0600 Subject: [PATCH 7/8] Changed wiki link --- source/ubl-settings-usergroups.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index 2223431..d3f3476 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -19,7 +19,7 @@ #endif #include "ubl-strings.h" -#define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-usergroups" +#define WIKI_LINK "https://wiki.ublinux.ru/software/programs_and_utilities/all/ubl-settings-usergroups" #define _(String) gettext(String) From 9d9555d6e8907a5614aaf1cc5e92c07524178d4e Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 14 Nov 2025 18:19:38 +0600 Subject: [PATCH 8/8] Wheel highlight fix --- source/ubl-settings-usergroups.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index bfa20ca..1902ef0 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -157,11 +157,9 @@ void yon_interface_update(main_window *widgets){ } GdkRGBA rgba = {0}; - char *wheel = yon_char_parsed_check_exist_begins_with(main_config.shadow,main_config.shadow_size,"wheel"); - int wheel_size; - config_str wheel_parsed = yon_char_parse(wheel,&wheel_size,":"); + yon_char_check_element(parameters[3],"wheel",","); char *param = config(ADDADM_parameter); - if ((parameters_size>1&&atoi(parameters[1])==1000&&!yon_char_is_empty(param)&&!strcmp(param,"yes"))||yon_char_parsed_check_exist(wheel_parsed,wheel_size,login)>-1){ + if ((parameters_size>1&&atoi(parameters[1])==1000&&!yon_char_is_empty(param)&&!strcmp(param,"yes"))||yon_char_check_element(parameters[3],"wheel",",")){ rgba.red=253.0/255.0; rgba.green=251.0/255.0; rgba.blue=216.0/255.0;