master #87

Merged
asmeron merged 4 commits from YanTheKaller/ubl-settings-system:master into master 1 month ago

@ -6,6 +6,7 @@
<file>ubl-settings-system-domain.glade</file> <file>ubl-settings-system-domain.glade</file>
<file>ubl-settings-system-connection.glade</file> <file>ubl-settings-system-connection.glade</file>
<file>ubl-settings-system-domain-view.glade</file> <file>ubl-settings-system-domain-view.glade</file>
<file>ubl-settings-system-domain-options.glade</file>
</gresource> </gresource>
<gresource prefix="/com/ublinux/css"> <gresource prefix="/com/ublinux/css">
<file>ubl-settings-system.css</file> <file>ubl-settings-system.css</file>

@ -252,8 +252,12 @@ msgstr ""
msgid "Language" msgid "Language"
msgstr "" msgstr ""
#: source/ubl-strings.h:70
msgid "Regional settings"
msgstr ""
#: source/ubl-strings.h:71 #: source/ubl-strings.h:71
msgid "Available languages in the system:" msgid "Available locales in the system:"
msgstr "" msgstr ""
#: source/ubl-strings.h:72 #: source/ubl-strings.h:72
@ -277,9 +281,17 @@ msgid "Languages"
msgstr "" msgstr ""
#: source/ubl-strings.h:77 #: source/ubl-strings.h:77
msgid "Add anguages" msgid "Add locales"
msgstr ""
#: source/ubl-strings.h:77
msgid "Add locale"
msgstr "" msgstr ""
#: source/ubl-strings.h:78 #: source/ubl-strings.h:78
msgid "Remove language" msgid "Remove language"
msgstr "" msgstr ""
#: source/ubl-strings.h:78
msgid "Additional authentication profile options"
msgstr ""

@ -256,9 +256,13 @@ msgstr ""
msgid "Language" msgid "Language"
msgstr "Язык" msgstr "Язык"
#: source/ubl-strings.h:70
msgid "Regional settings"
msgstr "Региональные настройки"
#: source/ubl-strings.h:71 #: source/ubl-strings.h:71
msgid "Available languages in the system:" msgid "Available locales in the system:"
msgstr "Доступные языки для системы:" msgstr "Доступные языки в системе:"
#: source/ubl-strings.h:72 #: source/ubl-strings.h:72
msgid "System locale" msgid "System locale"
@ -281,7 +285,11 @@ msgid "Languages"
msgstr "Языки" msgstr "Языки"
#: source/ubl-strings.h:77 #: source/ubl-strings.h:77
msgid "Add anguages" msgid "Add locales"
msgstr "Добавление языков"
#: source/ubl-strings.h:77
msgid "Add locale"
msgstr "Добавить язык" msgstr "Добавить язык"
#: source/ubl-strings.h:78 #: source/ubl-strings.h:78
@ -290,3 +298,7 @@ msgstr "Удалить язык"
msgid "Domain connection" msgid "Domain connection"
msgstr "Соединение домена" msgstr "Соединение домена"
#: source/ubl-strings.h:78
msgid "Additional authentication profile options"
msgstr "Дополнительные опции профиля аутентификации"

@ -35,6 +35,7 @@ set(DEPENDFILES
../ubl-settings-system-domain.glade ../ubl-settings-system-domain.glade
../ubl-settings-system-connection.glade ../ubl-settings-system-connection.glade
../ubl-settings-system-domain-view.glade ../ubl-settings-system-domain-view.glade
../ubl-settings-system-domain-options.glade
../ubl-settings-system-layouts.glade ../ubl-settings-system-layouts.glade
../gresource.xml ../gresource.xml
../ubl-settings-system.css ../ubl-settings-system.css

@ -41,12 +41,13 @@ void on_domain_connect(GtkWidget *, dictionary *dict){
char *kerberos = (char*)gtk_entry_get_text(GTK_ENTRY(window->KerberosServerEntry)); char *kerberos = (char*)gtk_entry_get_text(GTK_ENTRY(window->KerberosServerEntry));
char *dns = (char*)gtk_entry_get_text(GTK_ENTRY(window->DNSEntry)); char *dns = (char*)gtk_entry_get_text(GTK_ENTRY(window->DNSEntry));
char *ou = (char*)gtk_entry_get_text(GTK_ENTRY(window->OuEntry)); char *ou = (char*)gtk_entry_get_text(GTK_ENTRY(window->OuEntry));
char *options = (char*)gtk_entry_get_text(GTK_ENTRY(window->AdditionalParametersEntry));
char *client = NULL; char *client = NULL;
if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ClientCombo))){ if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ClientCombo))){
client = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ClientCombo)); client = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ClientCombo));
} }
char *final = yon_char_unite(!yon_char_is_empty(kerberos)?kerberos_addition_command(kerberos):"",!yon_char_is_empty(kerberos)?" ":"",!yon_char_is_empty(dns)?dns_addition_command(dns):"",!yon_char_is_empty(dns)?" ":"",!yon_char_is_empty(client)?client_addition_command(client):"",!yon_char_is_empty(client)?" ":"",NULL); char *final = yon_char_unite(!yon_char_is_empty(kerberos)?kerberos_addition_command(kerberos):"",!yon_char_is_empty(kerberos)?" ":"",!yon_char_is_empty(dns)?dns_addition_command(dns):"",!yon_char_is_empty(dns)?" ":"",!yon_char_is_empty(client)?client_addition_command(client):"",!yon_char_is_empty(client)?" ":"",NULL);
char *command = domain_connect_command(adress,login,password,final,ou); char *command = domain_connect_command(adress,login,password,final,ou,options);
yon_debug_output("%s\n",command); yon_debug_output("%s\n",command);
domain_info_window *dialog = yon_information_window_new(); domain_info_window *dialog = yon_information_window_new();
gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),DOMAIN_CONNECTING_LABEL); gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),DOMAIN_CONNECTING_LABEL);
@ -131,6 +132,103 @@ gboolean on_main_window_domain_status_update(connection_window *window){
return 1; return 1;
} }
void yon_domain_client_changed(GtkWidget*,connection_window *window){
gtk_entry_set_text(GTK_ENTRY(window->AdditionalParametersEntry),"");
const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ClientCombo));
if (gtk_switch_get_active(GTK_SWITCH(window->AdditionalParametersDefaultSwitch))&&!yon_char_is_empty(id)&&strcmp(id,"none")){
gtk_widget_set_sensitive(window->EditButton,1);
gtk_widget_set_sensitive(window->AdditionalParametersEntry,1);
gtk_widget_set_sensitive(window->AdditionalParametersDefaultSwitch,1);
} else {
gtk_widget_set_sensitive(window->EditButton,0);
gtk_widget_set_sensitive(window->AdditionalParametersEntry,0);
gtk_widget_set_sensitive(window->AdditionalParametersDefaultSwitch,0);
}
}
void yon_domain_client_changed_switch(GtkWidget*,int ,connection_window *window){
yon_domain_client_changed(NULL,window);
}
void on_domain_options_accept(GtkWidget *,domain_options_window *dialog){
connection_window *window = g_object_get_data(G_OBJECT(dialog->Window),"connection_window");
const char *options = gtk_entry_get_text(GTK_ENTRY(dialog->OptionsEntry));
gtk_entry_set_text(GTK_ENTRY(window->AdditionalParametersEntry),options?options:"");
on_subwindow_close(dialog->Window);
}
void on_domain_options_cell_toggled(GtkCellRenderer*, gchar *path,domain_options_window *window){
char *options = (char*)gtk_entry_get_text(GTK_ENTRY(window->OptionsEntry));
GtkTreeModel *model = GTK_TREE_MODEL(window->List);
GtkTreeIter iter;
if (gtk_tree_model_get_iter_from_string(model,&iter,path)){
int status;
char *target;
gtk_tree_model_get(model,&iter,0,&status,1,&target,-1);
gtk_list_store_set(window->List,&iter,0,!status,-1);
if (!status){
char *temp = yon_char_append_element(options,target,",");
gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),temp);
if (!yon_char_is_empty(temp)) free(temp);
} else {
char *temp = yon_char_remove_element(options,target,",");
gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),temp);
if (!yon_char_is_empty(temp)) free(temp);
}
}
}
domain_options_window *yon_domain_options_window_new(){
domain_options_window *window = malloc(sizeof(domain_options_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_domain_options_path);
window->Window = yon_gtk_builder_get_widget(builder,"Window");
window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
window->TitleLabel = yon_gtk_builder_get_widget(builder,"TitleLabel");
window->OptionsTree = yon_gtk_builder_get_widget(builder,"OptionsTree");
window->OptionsEntry = yon_gtk_builder_get_widget(builder,"OptionsEntry");
window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
window->List = GTK_LIST_STORE(gtk_builder_get_object(builder,"List"));
window->ChooseCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ChooseCell"));
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_domain_options_accept),window);
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
g_signal_connect(G_OBJECT(window->ChooseCell),"toggled",G_CALLBACK(on_domain_options_cell_toggled),window);
return window;
}
void yon_domain_additional_options_open(GtkWidget *, connection_window *window){
char *command = NULL;
const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ClientCombo));
if (yon_char_is_empty(id)||!strcmp(id,"none")){
} else if (!strcmp(id,"realmd_sssd")){
command = sssd_client_parameters_command;
} else if (!strcmp(id,"realmd_winbind")){
command = windbind_client_parameters_command;
} else if (!strcmp(id,"samba")){
command = samba_client_parameters_command;
}
if (yon_char_is_empty(command)){
return;
} else {
GtkTreeIter iter;
domain_options_window *dialog = yon_domain_options_window_new();
yon_gtk_window_setup(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->Window),ADDITIONAL_OPTIONS_LABEL,main_icon,"options_window");
g_object_set_data(G_OBJECT(dialog->Window),"connection_window",window);
int size;
config_str options = yon_config_load(command,&size);
for (int i=0;i<size;i++){
yon_char_remove_last_symbol(options[i],'\n');
gtk_list_store_append(dialog->List,&iter);
gtk_list_store_set(dialog->List,&iter,1,options[i],-1);
}
yon_char_parsed_free(options,size);
}
}
connection_window *yon_connection_window_new(){ connection_window *yon_connection_window_new(){
GtkBuilder *builder = gtk_builder_new_from_resource(glade_connection_path); GtkBuilder *builder = gtk_builder_new_from_resource(glade_connection_path);
connection_window *window = malloc(sizeof(connection_window)); connection_window *window = malloc(sizeof(connection_window));
@ -143,18 +241,20 @@ connection_window *yon_connection_window_new(){
window->KerberosServerEntry = yon_gtk_builder_get_widget(builder,"KerberosServerEntry"); window->KerberosServerEntry = yon_gtk_builder_get_widget(builder,"KerberosServerEntry");
window->DNSEntry = yon_gtk_builder_get_widget(builder,"DNSEntry"); window->DNSEntry = yon_gtk_builder_get_widget(builder,"DNSEntry");
window->ClientCombo = yon_gtk_builder_get_widget(builder,"ClientCombo"); window->ClientCombo = yon_gtk_builder_get_widget(builder,"ClientCombo");
window->AdditionalCombo = yon_gtk_builder_get_widget(builder,"AdditionalCombo");
window->EditButton = yon_gtk_builder_get_widget(builder,"EditButton");
window->SettingsTree = yon_gtk_builder_get_widget(builder,"SettingsTree");
window->SaveButton = yon_gtk_builder_get_widget(builder,"SaveButton"); window->SaveButton = yon_gtk_builder_get_widget(builder,"SaveButton");
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
window->CheckButton = yon_gtk_builder_get_widget(builder,"CheckButton"); window->CheckButton = yon_gtk_builder_get_widget(builder,"CheckButton");
window->OuEntry = yon_gtk_builder_get_widget(builder,"OuEntry"); window->OuEntry = yon_gtk_builder_get_widget(builder,"OuEntry");
window->list = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1")); window->EditButton = yon_gtk_builder_get_widget(builder,"EditButton");
window->AdditionalParametersEntry = yon_gtk_builder_get_widget(builder,"AdditionalParametersEntry");
window->AdditionalParametersDefaultSwitch = yon_gtk_builder_get_widget(builder,"AdditionalParametersDefaultSwitch");
yon_gtk_entry_block_symbols(GTK_ENTRY(window->OuEntry),"!\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~."); yon_gtk_entry_block_symbols(GTK_ENTRY(window->OuEntry),"!\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~.");
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
g_signal_connect(G_OBJECT(window->StatusEntry),"clicked",G_CALLBACK(on_status_clicked),window); g_signal_connect(G_OBJECT(window->StatusEntry),"clicked",G_CALLBACK(on_status_clicked),window);
g_signal_connect(G_OBJECT(window->CheckButton),"clicked",G_CALLBACK(yon_update_thread),window); g_signal_connect(G_OBJECT(window->CheckButton),"clicked",G_CALLBACK(yon_update_thread),window);
g_signal_connect(G_OBJECT(window->ClientCombo),"changed",G_CALLBACK(yon_domain_client_changed),window);
g_signal_connect(G_OBJECT(window->AdditionalParametersDefaultSwitch),"state-set",G_CALLBACK(yon_domain_client_changed_switch),window);
g_signal_connect(G_OBJECT(window->EditButton),"clicked",G_CALLBACK(yon_domain_additional_options_open),window);
yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordEntry)); yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordEntry));
return window; return window;

@ -36,22 +36,23 @@ void on_locale_accept(GtkWidget *self, language_window *window){
yon_interface_update(widgets); yon_interface_update(widgets);
} }
language_window *yon_language_window_new(){ gboolean yon_locale_window_set_locales(struct locales_struct *data){
language_window *window = malloc(sizeof(language_window)); GtkTreeIter iter;
GtkBuilder *builder = gtk_builder_new_from_resource(glade_locales_path); gtk_list_store_append(GTK_LIST_STORE(data->list),&iter);
window->Window = yon_gtk_builder_get_widget(builder,"Window"); gtk_list_store_set(GTK_LIST_STORE(data->list),&iter,1,data->locale,2,data->lang,3,data->territory,0,data->chosen,-1);
window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); if(!yon_char_is_empty(data->lang)) free(data->lang);
window->LanguagesTree = yon_gtk_builder_get_widget(builder,"LanguagesTree"); if(!yon_char_is_empty(data->locale)) free(data->locale);
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); if(!yon_char_is_empty(data->territory)) free(data->territory);
window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton"); if(!yon_char_is_empty(data->lang)) free(data);
window->ManualEntry = yon_gtk_builder_get_widget(builder,"ManualEntry"); return G_SOURCE_REMOVE;
window->ToggleCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ToggleCell")); }
window->LanguagesList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LanguagesList"));
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); gboolean yon_locale_window_unlock(GtkWidget *spinner){
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_locale_accept),window); gtk_widget_hide(spinner);
g_signal_connect(G_OBJECT(window->ToggleCell),"toggled",G_CALLBACK(on_locale_toggle),window); return G_SOURCE_REMOVE;
}
void *yon_locales_load_func(language_window *window){
char *config_value = config(locale_parameter); char *config_value = config(locale_parameter);
int config_parsed_size; int config_parsed_size;
config_str config_parsed = NULL; config_str config_parsed = NULL;
@ -61,19 +62,51 @@ language_window *yon_language_window_new(){
} }
int size; int size;
GtkTreeIter iter;
config_str languages = yon_config_load(languages_command,&size); config_str languages = yon_config_load(languages_command,&size);
for (int i=0;i<size;i++){ for (int i=0;i<size;i++){
struct locales_struct *data_struct = malloc(sizeof(struct locales_struct));
data_struct->list=window->LanguagesList;
yon_char_remove_last_symbol(languages[i],'\n'); yon_char_remove_last_symbol(languages[i],'\n');
int parsed_size; int parsed_size;
config_str parsed = yon_char_parse(languages[i],&parsed_size,"|"); config_str parsed = yon_char_parse(languages[i],&parsed_size,"|");
gtk_list_store_append(window->LanguagesList,&iter); data_struct->locale = yon_char_new(parsed[0]);
gtk_list_store_set(window->LanguagesList,&iter,1,parsed[0],2,parsed[1],3,parsed[2],-1); data_struct->lang = yon_char_new(parsed[1]);
if (config_parsed_size&&yon_char_parsed_check_exist(config_parsed,config_parsed_size,parsed[2])>-1){ data_struct->territory = yon_char_new(parsed[2]);
gtk_list_store_set(window->LanguagesList,&iter,0,1,-1);
if (config_parsed_size&&yon_char_parsed_check_exist(config_parsed,config_parsed_size,parsed[0])>-1){
data_struct->chosen=1;
} else {
data_struct->chosen=0;
} }
g_idle_add((GSourceFunc)yon_locale_window_set_locales,data_struct);
yon_char_parsed_free(parsed,parsed_size);
} }
g_idle_add((GSourceFunc)yon_locale_window_unlock,window->LoadingSpinner);
yon_char_parsed_free(config_parsed,config_parsed_size); yon_char_parsed_free(config_parsed,config_parsed_size);
g_thread_exit(NULL);
}
language_window *yon_language_window_new(){
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");
window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
window->LanguagesTree = yon_gtk_builder_get_widget(builder,"LanguagesTree");
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
window->ManualEntry = yon_gtk_builder_get_widget(builder,"ManualEntry");
window->LoadingOverlay = yon_gtk_builder_get_widget(builder,"LoadingOverlay");
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"));
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_overlay_add_overlay(GTK_OVERLAY(window->LoadingOverlay),window->LoadingSpinner);
g_thread_new("locales-thread",(GThreadFunc)yon_locales_load_func,window);
return window; return window;
} }
@ -82,7 +115,7 @@ void on_language_open(GtkWidget *, main_window *widgets){
g_object_set_data(G_OBJECT(window->Window),"widgets",widgets); g_object_set_data(G_OBJECT(window->Window),"widgets",widgets);
yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),TITLE_LABEL,main_icon,"LocalesWindow"); yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),ADD_LANGUAGE_TITLE_LABEL,main_icon,"LocalesWindow");
gtk_widget_show(window->Window); gtk_widget_show(window->Window);

@ -25,7 +25,7 @@
#define glade_connection_path "/com/ublinux/ui/ubl-settings-system-connection.glade" #define glade_connection_path "/com/ublinux/ui/ubl-settings-system-connection.glade"
#define glade_domain_view_path "/com/ublinux/ui/ubl-settings-system-domain-view.glade" #define glade_domain_view_path "/com/ublinux/ui/ubl-settings-system-domain-view.glade"
#define glade_locales_path "/com/ublinux/ui/ubl-settings-system-layouts.glade" #define glade_locales_path "/com/ublinux/ui/ubl-settings-system-layouts.glade"
#define banner_path "/com/ublinux/images/ubl-settings-system-banner.png" #define glade_domain_options_path "/com/ublinux/ui/ubl-settings-system-domain-options.glade"
#define CssPath "/com/ublinux/css/ubl-settings-system.css" #define CssPath "/com/ublinux/css/ubl-settings-system.css"
#define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) #define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL)
#define locale_transcriptions_path "/usr/share/ubl-settings-system/csv/locales.csv" #define locale_transcriptions_path "/usr/share/ubl-settings-system/csv/locales.csv"
@ -52,12 +52,22 @@
#define check_domain_access_command(targeet) yon_char_append("adcli info --domain ",target) #define check_domain_access_command(targeet) yon_char_append("adcli info --domain ",target)
#define get_domain_info_command "ubdomain-client list " #define get_domain_info_command "ubdomain-client list "
#define domains_seek_command "ubdomain-client discover" #define domains_seek_command "ubdomain-client discover"
#define domain_connect_command(target,user,password, addition,ou) yon_char_unite("ubdomain-client join",!yon_char_is_empty(user)?" --user \"":"",!yon_char_is_empty(user)?user:"",!yon_char_is_empty(user)?"\"":"",!yon_char_is_empty(password)?" --password \"":"",!yon_char_is_empty(password)?password:"",!yon_char_is_empty(password)?"\"":""," --domain \"",target,"\"",!yon_char_is_empty(ou)?" --ou \"":"",!yon_char_is_empty(ou)?ou:"",!yon_char_is_empty(ou)?"\"":"", addition,NULL) #define domain_connect_command(target,user,password, addition,ou,options) yon_char_unite("ubdomain-client join",\
!yon_char_is_empty(user)?" --user \"":"",!yon_char_is_empty(user)?user:"",!yon_char_is_empty(user)?"\"":"",\
!yon_char_is_empty(password)?" --password \"":"",!yon_char_is_empty(password)?password:"",!yon_char_is_empty(password)?"\"":"",\
" --domain \"",target,"\"",\
!yon_char_is_empty(ou)?" --ou \"":"",!yon_char_is_empty(ou)?ou:"",!yon_char_is_empty(ou)?"\"":"",\
!yon_char_is_empty(options)?" --authpam_opt \"":"",!yon_char_is_empty(options)?options:"",!yon_char_is_empty(options)?"\"":"",\
addition,NULL)
#define domain_disconnect_command(target,user,password) yon_char_unite("ubdomain-client leave",!yon_char_is_empty(user)?" --user \"":"",!yon_char_is_empty(user)?user:"",!yon_char_is_empty(user)?"\"":"",!yon_char_is_empty(password)?" --password \"":"",!yon_char_is_empty(password)?password:"",!yon_char_is_empty(password)?"\"":""," --domain \"",target,"\"",NULL) #define domain_disconnect_command(target,user,password) yon_char_unite("ubdomain-client leave",!yon_char_is_empty(user)?" --user \"":"",!yon_char_is_empty(user)?user:"",!yon_char_is_empty(user)?"\"":"",!yon_char_is_empty(password)?" --password \"":"",!yon_char_is_empty(password)?password:"",!yon_char_is_empty(password)?"\"":""," --domain \"",target,"\"",NULL)
#define kerberos_addition_command(target) yon_char_unite(" --domain_server \"",target,"\"",NULL) #define kerberos_addition_command(target) yon_char_unite(" --domain_server \"",target,"\"",NULL)
#define dns_addition_command(target) yon_char_unite(" --dns \"",target,"\"",NULL) #define dns_addition_command(target) yon_char_unite(" --dns \"",target,"\"",NULL)
#define client_addition_command(target) yon_char_unite(" --domain_client \"",target,"\"",NULL) #define client_addition_command(target) yon_char_unite(" --domain_client \"",target,"\"",NULL)
#define sssd_client_parameters_command "authselect list-features sssd"
#define windbind_client_parameters_command "authselect list-features winbind"
#define samba_client_parameters_command "authselect list-features winbind"
#define domain_info(target) yon_char_unite("ubdomain-client discover --domain \"",target,"\"",NULL) #define domain_info(target) yon_char_unite("ubdomain-client discover --domain \"",target,"\"",NULL)
#define domain_connected_icon "com.ublinux.ubl-settings-system.plug-connected-symbolic" #define domain_connected_icon "com.ublinux.ubl-settings-system.plug-connected-symbolic"
@ -148,6 +158,8 @@ typedef struct {
GtkWidget *CancelButton; GtkWidget *CancelButton;
GtkWidget *AcceptButton; GtkWidget *AcceptButton;
GtkWidget *ManualEntry; GtkWidget *ManualEntry;
GtkWidget *LoadingOverlay;
GtkWidget *LoadingSpinner;
GtkCellRenderer *ToggleCell; GtkCellRenderer *ToggleCell;
GtkListStore *LanguagesList; GtkListStore *LanguagesList;
@ -185,10 +197,9 @@ typedef struct {
GtkWidget *CheckButton; GtkWidget *CheckButton;
GtkWidget *KerberosServerEntry; GtkWidget *KerberosServerEntry;
GtkWidget *ClientCombo; GtkWidget *ClientCombo;
GtkWidget *AdditionalCombo; GtkWidget *AdditionalParametersEntry;
GtkWidget *AdditionalParametersDefaultSwitch;
GtkWidget *EditButton; GtkWidget *EditButton;
GtkWidget *SettingsTree;
GtkListStore *list;
guint timer_id; guint timer_id;
} connection_window; } connection_window;
@ -202,6 +213,26 @@ typedef struct {
GtkWidget *TerminalScroll; GtkWidget *TerminalScroll;
} domain_info_window; } domain_info_window;
typedef struct {
GtkWidget *Window;
GtkWidget *StatusBox;
GtkWidget *TitleLabel;
GtkWidget *OptionsTree;
GtkWidget *OptionsEntry;
GtkWidget *AcceptButton;
GtkWidget *CancelButton;
GtkListStore *List;
GtkCellRenderer *ChooseCell;
} domain_options_window;
struct locales_struct {
char *locale;
char *lang;
char *territory;
int chosen;
GtkListStore *list;
};
void on_save_done(main_window *widgets, config_str output, int size); void on_save_done(main_window *widgets, config_str output, int size);
void on_config_reload(GtkWidget *,main_window *widgets); void on_config_reload(GtkWidget *,main_window *widgets);
void yon_config_local_load(GtkWidget *self, main_window *widgets); void yon_config_local_load(GtkWidget *self, main_window *widgets);
@ -259,4 +290,13 @@ language_window *yon_language_window_new();
void yon_config_init(); void yon_config_init();
void on_locale_toggled(GtkCellRenderer *, gchar *path, main_window *widgets); void on_locale_toggled(GtkCellRenderer *, gchar *path, main_window *widgets);
void on_language_default_toggled(GtkWidget *, int status, main_window *widgets); void on_language_default_toggled(GtkWidget *, int status, main_window *widgets);
void on_language_remove(GtkWidget *, main_window *widgets); void on_language_remove(GtkWidget *, main_window *widgets);
gboolean yon_locale_window_set_locales(struct locales_struct *data);
void *yon_locales_load_func(language_window *window);
gboolean yon_locale_window_unlock(GtkWidget *spinner);
void yon_domain_client_changed(GtkWidget*,connection_window *window);
void on_domain_options_accept(GtkWidget *,domain_options_window *dialog);
void on_domain_options_cell_toggled(GtkCellRenderer*, gchar *path,domain_options_window *window);
domain_options_window *yon_domain_options_window_new();
void yon_domain_additional_options_open(GtkWidget *, connection_window *window);
void yon_domain_client_changed_switch(GtkWidget*,int ,connection_window *window);

@ -68,12 +68,15 @@
#define OU_LABEL _("OU, Organizational Unit:") #define OU_LABEL _("OU, Organizational Unit:")
#define OU_TOOLTIP_LABEL _("The name of the OU in which we want to create the computer account in the domain. If the account already exists, it will be updated. Example: \"ubhosts\" or \"OU=UBL Servers,OU=KOM,DC=ad,DC=holding,DC=com\"") #define OU_TOOLTIP_LABEL _("The name of the OU in which we want to create the computer account in the domain. If the account already exists, it will be updated. Example: \"ubhosts\" or \"OU=UBL Servers,OU=KOM,DC=ad,DC=holding,DC=com\"")
#define LANGUAGE__LABEL _("Language") #define LANGUAGE__LABEL _("Language")
#define AVALIABLE_LANGUAGES_LABEL _("Available languages in the system:") #define REGIONAL_SETTINGS_LABEL _("Regional settings")
#define AVALIABLE_LANGUAGES_LABEL _("Available locales in the system:")
#define SYSTEM_LOCALE_LABEL _("System locale") #define SYSTEM_LOCALE_LABEL _("System locale")
#define TERRITORY_LABEL _("Territory") #define TERRITORY_LABEL _("Territory")
#define VALUE_LABEL _("Value") #define VALUE_LABEL _("Value")
#define MANUAL_INPUT_LABEL _("Manual input:") #define MANUAL_INPUT_LABEL _("Manual input:")
#define LANGUAGES_LABEL _("Languages") #define LANGUAGES_LABEL _("Languages")
#define ADD_LANGIAGE_TOOLTIP_LABEL _("Add anguages") #define ADD_LANGUAGE_TITLE_LABEL _("Add locales")
#define ADD_LANGUAGE_TOOLTIP_LABEL _("Add locale")
#define REMOVE_LANGUAGE_LABEL _("Remove language") #define REMOVE_LANGUAGE_LABEL _("Remove language")
#define RESTRICTED_SYMBOLS_LABEL _("OU, Organizational Unit restricted symbols: ! \" # $ % & \' ( ) * + , - . / : ; < = > ? @ [ \\ ] ^ _ ` { | } ~.") #define RESTRICTED_SYMBOLS_LABEL _("OU, Organizational Unit restricted symbols: ! \" # $ % & \' ( ) * + , - . / : ; < = > ? @ [ \\ ] ^ _ ` { | } ~.")
#define ADDITIONAL_OPTIONS_LABEL _("Additional authentication profile options")

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 --> <!-- Generated with glade 3.40.0 -->
<interface domain="ubl-settings-system"> <interface domain="ubl-settings-system">
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-system.css --> <!-- interface-css-provider-path ubl-settings-system.css -->
@ -13,13 +13,12 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="icon-name">document-edit-symbolic</property> <property name="icon-name">document-edit-symbolic</property>
</object> </object>
<object class="GtkListStore" id="liststore1"/>
<object class="GtkApplicationWindow" id="MainWindow"> <object class="GtkApplicationWindow" id="MainWindow">
<property name="width-request">450</property> <property name="width-request">450</property>
<property name="height-request">400</property> <property name="height-request">400</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="modal">True</property> <property name="modal">True</property>
<property name="icon-name">com.ublinux.ubl-settings-repomanager</property> <property name="icon-name">com.ublinux.ubl-settings-system</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
@ -387,8 +386,9 @@
</child> </child>
<child> <child>
<object class="GtkFrame"> <object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label-xalign">0</property> <property name="label-xalign">0.019999999552965164</property>
<property name="shadow-type">in</property> <property name="shadow-type">in</property>
<child> <child>
<object class="GtkAlignment"> <object class="GtkAlignment">
@ -404,13 +404,33 @@
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkComboBoxText" id="AdditionalCombo"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<items> <property name="spacing">5</property>
<item translatable="yes">Default</item> <child>
<item translatable="yes">Set</item> <object class="GtkSwitch" id="AdditionalParametersDefaultSwitch">
</items> <property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Default</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -423,6 +443,18 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child>
<object class="GtkEntry" id="AdditionalParametersEntry">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
@ -432,6 +464,7 @@
<child> <child>
<object class="GtkButton" id="EditButton"> <object class="GtkButton" id="EditButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="image">image3</property> <property name="image">image3</property>
@ -442,48 +475,19 @@
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">0</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkTreeView" id="SettingsTree">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">liststore1</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
@ -496,12 +500,12 @@
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">Additional options for autentification profile</property> <property name="label" translatable="yes">Additional authentication profile options</property>
</object> </object>
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">4</property> <property name="position">4</property>
</packing> </packing>
@ -593,4 +597,5 @@
</object> </object>
</child> </child>
</object> </object>
<object class="GtkListStore" id="liststore1"/>
</interface> </interface>

@ -0,0 +1,205 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<interface domain="ubl-settings-system">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-system.css -->
<object class="GtkListStore" id="List">
<columns>
<!-- column-name Chosen -->
<column type="gboolean"/>
<!-- column-name Parameter -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.accept-symbolic</property>
</object>
<object class="GtkApplicationWindow" id="Window">
<property name="width-request">450</property>
<property name="height-request">400</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="modal">True</property>
<property name="icon-name">com.ublinux.ubl-settings-system</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="StatusBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="hscrollbar-policy">never</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkTreeView" id="OptionsTree">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">List</property>
<property name="headers-visible">False</property>
<property name="show-expanders">False</property>
<child internal-child="selection">
<object class="GtkTreeSelection">
<property name="mode">none</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<child>
<object class="GtkCellRendererToggle" id="ChooseCell"/>
<attributes>
<attribute name="active">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Option</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="markup">1</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkEntry" id="OptionsEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar" id="SettingsBar2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child type="title">
<object class="GtkLabel" id="TitleLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Additional authentication profile options</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">32</property>
<property name="icon-name">com.ublinux.ubl-settings-system</property>
</object>
</child>
<child>
<object class="GtkButton" id="CancelButton">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image1</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="AcceptButton">
<property name="label" translatable="yes">Accept</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image2</property>
</object>
<packing>
<property name="pack-type">end</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</interface>

@ -14,6 +14,11 @@
<column type="gchararray"/> <column type="gchararray"/>
</columns> </columns>
</object> </object>
<object class="GtkSpinner" id="LoadingSpinner">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="active">True</property>
</object>
<object class="GtkImage" id="image8"> <object class="GtkImage" id="image8">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
@ -53,75 +58,88 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkScrolledWindow"> <object class="GtkOverlay" id="LoadingOverlay">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="hscrollbar-policy">never</property>
<property name="shadow-type">in</property>
<child> <child>
<object class="GtkTreeView" id="LanguagesTree"> <object class="GtkScrolledWindow">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="model">LanguagesList</property> <property name="margin-start">5</property>
<property name="enable-grid-lines">both</property> <property name="margin-end">5</property>
<property name="activate-on-single-click">True</property> <property name="hscrollbar-policy">never</property>
<child internal-child="selection"> <property name="shadow-type">in</property>
<object class="GtkTreeSelection">
<property name="mode">none</property>
</object>
</child>
<child> <child>
<object class="GtkTreeViewColumn"> <object class="GtkTreeView" id="LanguagesTree">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">LanguagesList</property>
<property name="search-column">1</property>
<property name="enable-grid-lines">both</property>
<property name="activate-on-single-click">True</property>
<child> <child>
<object class="GtkCellRendererToggle" id="ToggleCell"/> <object class="GtkTreeViewColumn">
<attributes> <child>
<attribute name="active">0</attribute> <object class="GtkCellRendererToggle" id="ToggleCell"/>
</attributes> <attributes>
<attribute name="active">0</attribute>
</attributes>
</child>
</object>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Locale</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkTreeViewColumn">
<attributes> <property name="title" translatable="yes">Locale</property>
<attribute name="text">1</attribute> <child>
</attributes> <object class="GtkCellRendererText">
<property name="wrap-mode">word</property>
<property name="wrap-width">150</property>
</object>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Language</property>
<child> <child>
<object class="GtkCellRendererText"> <object class="GtkTreeViewColumn">
<property name="wrap-mode">word</property> <property name="sizing">autosize</property>
<property name="wrap-width">100</property> <property name="min-width">35</property>
<property name="title" translatable="yes">Language</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText">
<property name="wrap-mode">word</property>
<property name="wrap-width">100</property>
</object>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object> </object>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child> </child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Territory</property>
<child> <child>
<object class="GtkCellRendererText"> <object class="GtkTreeViewColumn">
<property name="wrap-mode">word</property> <property name="sizing">autosize</property>
<property name="wrap-width">125</property> <property name="title" translatable="yes">Territory</property>
<property name="expand">True</property>
<child>
<object class="GtkCellRendererText">
<property name="wrap-mode">word</property>
<property name="wrap-width">125</property>
</object>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object> </object>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child> </child>
</object> </object>
</child> </child>
</object> </object>
<packing>
<property name="index">-1</property>
</packing>
</child> </child>
</object> </object>
<packing> <packing>

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 <!-- Generated with glade 3.40.0
ubl-settings-system - ubl-settings-system -
Copyright (C) UBGroup Copyright (C) UBGroup
@ -322,7 +322,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">Available languages in the system:</property> <property name="label" translatable="yes">Available locales in the system:</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -448,7 +448,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Add languages</property> <property name="tooltip-text" translatable="yes">Add locale</property>
<property name="image">image2</property> <property name="image">image2</property>
<style> <style>
<class name="thin"/> <class name="thin"/>
@ -499,7 +499,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="label" translatable="yes">Language</property> <property name="label" translatable="yes">Regional settings</property>
</object> </object>
</child> </child>
</object> </object>

Loading…
Cancel
Save