From 1aa81456275728c4ecfa8a0b9f962f7e6cd15176 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 11 Nov 2025 18:06:09 +0600 Subject: [PATCH 1/6] WIP languages table --- source/CMakeLists.txt | 2 + source/ubl-settings-system-domain.c | 301 +++++++++++++++ source/ubl-settings-system-language.c | 69 ++++ source/ubl-settings-system.c | 524 +++----------------------- source/ubl-settings-system.h | 69 ++-- ubl-settings-system-layouts.glade | 192 +++++----- ubl-settings-system.glade | 201 ++++------ 7 files changed, 630 insertions(+), 728 deletions(-) create mode 100644 source/ubl-settings-system-domain.c create mode 100644 source/ubl-settings-system-language.c diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index ec678ee..7bd6310 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -78,6 +78,8 @@ endif() set(SOURCE_FILES ubl-settings-system.c + ubl-settings-system-language.c + ubl-settings-system-domain.c ubl-settings-system.h ubl-strings.h ) diff --git a/source/ubl-settings-system-domain.c b/source/ubl-settings-system-domain.c new file mode 100644 index 0000000..e7d6006 --- /dev/null +++ b/source/ubl-settings-system-domain.c @@ -0,0 +1,301 @@ +#include "ubl-settings-system.h" + +void on_domain_address_save(GtkEntry *self){ + char *adress = (char*)gtk_entry_get_text(self); + if (!yon_char_is_empty(adress)){ + yon_config_register(DOMAIN,DOMAIN_get_command,adress); + } +} + +domain_info_window *yon_information_window_new(){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_domain_view_path); + + domain_info_window *window = malloc(sizeof(domain_info_window)); + window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->ExecuteTerminal = yon_gtk_builder_get_widget(builder,"ExecuteTerminal"); + window->TerminalScroll = yon_gtk_builder_get_widget(builder,"TerminalScroll"); + yon_gtk_widget_set_scroll_window_for_scroll(window->Window,GTK_SCROLLBAR(window->TerminalScroll)); + GdkRGBA rgba; + vte_terminal_get_color_background_for_draw(VTE_TERMINAL(window->ExecuteTerminal),&rgba); + vte_terminal_set_color_cursor(VTE_TERMINAL(window->ExecuteTerminal),&rgba); + yon_gtk_window_setup(GTK_WINDOW(window->Window),NULL,TITLE_LABEL,"com.ublinux.ubl-settings-system","InfoWindow"); + yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"loading",LOADING_LABEL,BACKGROUND_IMAGE_INFO_TYPE); + g_signal_connect(G_OBJECT(window->ExecuteTerminal), "child-exited", G_CALLBACK(on_terminal_command_ended), window); + + return window; +} + +void on_domain_connect(GtkWidget *, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + connection_window *window = yon_dictionary_get_data(dict->first->next,connection_window*); + char *adress = (char*)gtk_entry_get_text(GTK_ENTRY(window->AdressEntry)); + if (yon_char_is_empty(adress)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->AdressEntry); + return; + } + char *login = (char*)gtk_entry_get_text(GTK_ENTRY(window->LoginEntry)); + char *password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); + char *kerberos = (char*)gtk_entry_get_text(GTK_ENTRY(window->KerberosServerEntry)); + char *dns = (char*)gtk_entry_get_text(GTK_ENTRY(window->DNSEntry)); + char *ou = (char*)gtk_entry_get_text(GTK_ENTRY(window->OuEntry)); + char *client = NULL; + if (gtk_combo_box_get_active(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 *command = domain_connect_command(adress,login,password,final,ou); + yon_debug_output("%s\n",command); + domain_info_window *dialog = yon_information_window_new(); + gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),DOMAIN_CONNECTING_LABEL); + gtk_window_set_title(GTK_WINDOW(dialog->Window),DOMAIN_CONNECTING_LABEL); + yon_terminal_integrated_start(dialog->ExecuteTerminal,command); + dictionary *dc = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dc,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dc,"window",window->Window); + g_signal_connect(G_OBJECT(dialog->ExecuteTerminal),"child-exited",G_CALLBACK(on_terminal_done),dc); + gtk_widget_show(dialog->Window); + gtk_entry_set_text(GTK_ENTRY(widgets->DomainEntry),adress); + + on_config_reload(NULL,widgets); +} + +void on_status_clicked(GtkWidget *, connection_window *window){ + char *target = (char*)gtk_entry_get_text(GTK_ENTRY(window->AdressEntry)); + if (!yon_char_is_empty(target)){ + yon_debug_output("%s\n",domain_info(target)); + domain_info_window *dialog = yon_information_window_new(); + yon_terminal_integrated_start(dialog->ExecuteTerminal,domain_info(target)); + gtk_window_set_transient_for(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->Window)); + gtk_widget_show(dialog->Window); + + } +} + +void on_find_domains_clicked(GtkWidget *, main_window *window){ + + domain_info_window *dialog = yon_information_window_new(); + yon_terminal_integrated_start(dialog->ExecuteTerminal,domains_seek_command); + gtk_window_set_transient_for(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->Window)); + gtk_widget_show(dialog->Window); + // yon_terminal_window_launch(GTK_WINDOW(window->Window),yon_debug_output("%s\n",domains_seek_command),yon_char_get_localised_from_lib(SUCCESS_LABEL),yon_char_get_localised_from_lib(FAIL_LABEL)); +} + + +void on_main_window_domain_status_clicked(GtkWidget *, GtkEntryIconPosition icon_pos,GdkEvent* ,main_window *widgets){ + if (icon_pos==GTK_ENTRY_ICON_SECONDARY&&main_config.domain_connected){ + char *target = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->DomainEntry)); + if (!yon_char_is_empty(target)){ + yon_debug_output("%s\n",get_domain_info_command); + domain_info_window *dialog = yon_information_window_new(); + gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),INFO_TITLE_LABEL); + yon_terminal_integrated_start(dialog->ExecuteTerminal,get_domain_info_command); + gtk_window_set_transient_for(GTK_WINDOW(dialog->Window),GTK_WINDOW(widgets->Window)); + gtk_widget_show(dialog->Window); + } + } +} + +int update_thread_buzy = 0; + +gboolean on_main_window_domain_status_update(connection_window *window){ + const char *target = gtk_entry_get_text(GTK_ENTRY(window->AdressEntry)); + if (!yon_char_is_empty(target)){ + int status = system(domain_check_alive(target)); + if (!status){ + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(window->AdressEntry),GTK_ENTRY_ICON_SECONDARY,domain_connected_icon); + } else { + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(window->AdressEntry),GTK_ENTRY_ICON_SECONDARY,domain_disconnected_icon); + } + } else { + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(window->AdressEntry),GTK_ENTRY_ICON_SECONDARY,domain_disconnected_icon); + } + g_mutex_lock(&main_config.ThreadMutex); + update_thread_buzy = 0; + g_mutex_unlock(&main_config.ThreadMutex); + return G_SOURCE_REMOVE; +} + +// gboolean yon_update_thread(GtkWidget *self, GdkEvent *event, connection_window *window){ + gboolean yon_update_thread(GtkWidget *, connection_window *window){ + g_mutex_lock(&main_config.ThreadMutex); + if (!update_thread_buzy){ + update_thread_buzy=1; + g_mutex_unlock(&main_config.ThreadMutex); + g_idle_add((GSourceFunc)on_main_window_domain_status_update,window); + } else { + g_mutex_unlock(&main_config.ThreadMutex); + } + return 1; +} + +connection_window *yon_connection_window_new(){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_connection_path); + connection_window *window = malloc(sizeof(connection_window)); + window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->AdressEntry = yon_gtk_builder_get_widget(builder,"AdressEntry"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->StatusEntry = yon_gtk_builder_get_widget(builder,"StatusEntry"); + window->LoginEntry = yon_gtk_builder_get_widget(builder,"LoginEntry"); + window->PasswordEntry = yon_gtk_builder_get_widget(builder,"PasswordEntry"); + window->KerberosServerEntry = yon_gtk_builder_get_widget(builder,"KerberosServerEntry"); + window->DNSEntry = yon_gtk_builder_get_widget(builder,"DNSEntry"); + 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->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->CheckButton = yon_gtk_builder_get_widget(builder,"CheckButton"); + window->OuEntry = yon_gtk_builder_get_widget(builder,"OuEntry"); + window->list = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1")); + 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->StatusEntry),"clicked",G_CALLBACK(on_status_clicked),window); + g_signal_connect(G_OBJECT(window->CheckButton),"clicked",G_CALLBACK(yon_update_thread),window); + + yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordEntry)); + return window; +} + +void on_domain_disconnect(GtkWidget *, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + domain_window *window = yon_dictionary_get_data(dict->first->next,domain_window*); + char *adress = (char*)gtk_entry_get_text(GTK_ENTRY(window->AdressEntry)); + char *login = (char*)gtk_entry_get_text(GTK_ENTRY(window->LoginEntry)); + char *password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); + if (yon_char_is_empty(adress)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->AdressEntry); + return; + } + yon_debug_output("%s\n",domain_disconnect_command(adress,login,password)); + domain_info_window *dialog = yon_information_window_new(); + gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),DISCONNECTION_LABEL); + gtk_window_set_title(GTK_WINDOW(dialog->Window),DISCONNECTION_LABEL); + yon_terminal_integrated_start(dialog->ExecuteTerminal,domain_disconnect_command(adress,login,password)); + dictionary *dc = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dc,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dc,"window",window->Window); + g_signal_connect(G_OBJECT(dialog->ExecuteTerminal),"child-exited",G_CALLBACK(on_terminal_done),dc); + gtk_entry_set_text(GTK_ENTRY(widgets->DomainEntry),adress); + gtk_widget_show(dialog->Window); +} + +domain_window *yon_domain_window_new(){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_domain_path); + + domain_window *window = malloc(sizeof(domain_window)); + window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->SaveButton = yon_gtk_builder_get_widget(builder,"SaveButton"); + window->AdressEntry = yon_gtk_builder_get_widget(builder,"AdressEntry"); + window->LoginEntry = yon_gtk_builder_get_widget(builder,"LoginEntry"); + window->PasswordEntry = yon_gtk_builder_get_widget(builder,"PasswordEntry"); + window->DNSEntry = yon_gtk_builder_get_widget(builder,"DNSEntry"); + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordEntry)); + + return window; +} + +void on_domain_opened(GtkWidget *, main_window *widgets){ + if (main_config.domain_connected){ + domain_window *window = yon_domain_window_new(); + gtk_label_set_text(GTK_LABEL(window->HeadLabel),DISCONNECTION_LABEL); + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),DISCONNECTION_LABEL,"com.ublinux.ubl-settings-system","DomainWindow"); + char *domain = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->DomainEntry)); + char *password = yon_config_get_by_key(DOMAIN_ADMANGER); + char *login = yon_char_divide_search(password,":",-1); + char *dns = config(DOMAIN_DNS); + if (!yon_char_is_empty(login)) + gtk_entry_set_text(GTK_ENTRY(window->LoginEntry),login); + if (!yon_char_is_empty(password)) + gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),password); + if (!yon_char_is_empty(domain)) + gtk_entry_set_text(GTK_ENTRY(window->AdressEntry),domain); + if (!yon_char_is_empty(dns)) + gtk_entry_set_text(GTK_ENTRY(window->DNSEntry),dns); + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_domain_disconnect),dict); + g_signal_connect(G_OBJECT(window->Window),"destroy",G_CALLBACK(on_check_domain_connected),widgets); + + gtk_widget_show(window->Window); + } else { + connection_window *window = yon_connection_window_new(); + gtk_label_set_text(GTK_LABEL(window->HeadLabel),DOMAIN_CONNECTING_LABEL); + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),DOMAIN_CONNECTING_LABEL,"com.ublinux.ubl-settings-system","ConnectWindow"); + char *domain = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->DomainEntry)); + char *dns = config(DOMAIN_DNS); + char *client = yon_config_get_by_key(DOMAIN_CLIENT); + char *kerberos = yon_config_get_by_key(DOMAIN_SERVER); + char *password = yon_config_get_by_key(DOMAIN_ADMANGER); + char *login = yon_char_divide_search(password,":",-1); + if (!yon_char_is_empty(login)) + gtk_entry_set_text(GTK_ENTRY(window->LoginEntry),login); + if (!yon_char_is_empty(password)) + gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),password); + if (!yon_char_is_empty(domain)) + gtk_entry_set_text(GTK_ENTRY(window->AdressEntry),domain); + if (!yon_char_is_empty(kerberos)) + gtk_entry_set_text(GTK_ENTRY(window->KerberosServerEntry),kerberos); + if (!yon_char_is_empty(dns)) + gtk_entry_set_text(GTK_ENTRY(window->DNSEntry),dns); + if (!yon_char_is_empty(client)){ + gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->ClientCombo),client); + } + dictionary *dict = NULL; + yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); + yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_domain_connect),dict); + g_signal_connect(G_OBJECT(window->Window),"destroy",G_CALLBACK(on_check_domain_connected),widgets); + // yon_update_thread(NULL,NULL,window); + gtk_widget_show(window->Window); + } + +} + +// standard functions + +void on_check_domain_connected(GtkWidget *, main_window *widgets){ + int ansv = system(domain_connect_check); + if (!ansv){ + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widgets->DomainEntry),GTK_ENTRY_ICON_SECONDARY,domain_connected_icon); + gtk_button_set_label(GTK_BUTTON(widgets->DomainButton),DOMAIN_DISCONNECT_LABEL); + gtk_widget_set_tooltip_markup(widgets->DomainButton,DDISCONNECTION_LABEL); + gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(widgets->DomainEntry),GTK_ENTRY_ICON_SECONDARY,DOMAIN_CONNECTED_LABEL); + main_config.domain_connected=1; + } else { + gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widgets->DomainEntry),GTK_ENTRY_ICON_SECONDARY,domain_disconnected_icon); + gtk_button_set_label(GTK_BUTTON(widgets->DomainButton),DOMAIN_CONNECT_LABEL); + gtk_widget_set_tooltip_markup(widgets->DomainButton,CONNECTION_LABEL); + gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(widgets->DomainEntry),GTK_ENTRY_ICON_SECONDARY,DOMAIN_DISCONNECTED_LABEL); + main_config.domain_connected=0; + } + YON_CONFIG_TYPE type; + switch(main_config.load_mode){ + case 0: type=YON_CONFIG_GLOBAL; + yon_config_load_config(type,yon_config_parameter_prepare_command(DOMAIN_get_command,"global",NULL,NULL), yon_config_parameter_prepare_command(HOSTNAME_get_command,"global",NULL,NULL),NULL); + break; + case 1: type=YON_CONFIG_LOCAL; + yon_config_load_config(type,yon_config_parameter_prepare_command(DOMAIN_get_command,"system",NULL,NULL), yon_config_parameter_prepare_command(HOSTNAME_get_command,"system",NULL,NULL),NULL); + break; + case 3: type=YON_CONFIG_CUSTOM; + if (!yon_char_is_empty(main_config.custom_load_path)) + yon_config_load_config(type,yon_config_parameter_prepare_command(DOMAIN_get_command,main_config.custom_load_path,NULL,NULL), yon_config_parameter_prepare_command(HOSTNAME_get_command,main_config.custom_load_path,NULL,NULL),NULL); + break; + } + char *hostname = yon_config_get_by_key(hostname_parameter); + char *domain = yon_config_get_by_key(DOMAIN); + if (!yon_char_is_empty(hostname)) + gtk_entry_set_text(GTK_ENTRY(widgets->HostnameEntry),hostname); + if (!yon_char_is_empty(domain)) + gtk_entry_set_text(GTK_ENTRY(widgets->DomainEntry),domain); + +} \ No newline at end of file diff --git a/source/ubl-settings-system-language.c b/source/ubl-settings-system-language.c new file mode 100644 index 0000000..7e936dc --- /dev/null +++ b/source/ubl-settings-system-language.c @@ -0,0 +1,69 @@ +#include "ubl-settings-system.h" + +void on_locale_toggle(GtkCellRendererToggle *,GtkTreePath* path,GtkTreeViewColumn* ,language_window *window){ + GtkTreeIter iter; + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(window->LanguagesTree)); + gtk_tree_model_get_iter(model,&iter,path); + gboolean is_active; + gtk_tree_model_get(model,&iter,0,&is_active,-1); + gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,!is_active,-1); +} + +void on_locale_accept(GtkWidget *self, language_window *window){ + main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets"); + + yon_interface_update(widgets); + on_subwindow_close(self); +} + +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->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->DefaultSwitch = yon_gtk_builder_get_widget(builder,"DefaultSwitch"); + 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->DefaultSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->LanguagesTree); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_locale_accept),window); + g_signal_connect(G_OBJECT(window->LanguagesTree),"row-activated",G_CALLBACK(on_locale_toggle),window); + + char *config_value = config(language_parameter); + + int parsed_size; + config_str config_parsed = yon_char_parse(config_value,&parsed_size,";"); + + int size; + GtkTreeIter iter; + config_str languages = yon_config_load(languages_command,&size); + for (int i=0;iLanguagesList,&iter); + gtk_list_store_set(window->LanguagesList,&iter,1,languages[0],2,languages[1],3,languages[2],-1); + char *found = yon_char_parsed_check_exist_begins_with(config_parsed,parsed_size,languages[i]); + if (!yon_char_is_empty(found)){ + gtk_list_store_set(window->LanguagesList,&iter,0,1,-1); + } + } + yon_char_parsed_free(config_parsed,parsed_size); + return window; +} + +void on_language_open(GtkWidget *, main_window *widgets){ + language_window *window = yon_language_window_new(); + + g_object_set_data(G_OBJECT(window->Window),"widgets",widgets); + + if (!config(locale_parameter)){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DefaultSwitch),1); + } + + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),TITLE_LABEL,main_icon,"LocalesWindow"); + + gtk_dialog_run(GTK_DIALOG(window->Window)); + +} \ No newline at end of file diff --git a/source/ubl-settings-system.c b/source/ubl-settings-system.c index a5e036b..a40931f 100644 --- a/source/ubl-settings-system.c +++ b/source/ubl-settings-system.c @@ -97,45 +97,28 @@ void yon_config_custom_load(GtkWidget *, main_window *widgets){ yon_interface_update(widgets); } -void yon_language_update(main_window *widgets){ - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->LanguageCombo)); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->LanguageCombo),DEFAULT_LABEL); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LanguageCombo),0); - GtkTreeIter iter; - for_iter(GTK_TREE_MODEL(widgets->languagelist),&iter){ - char *target, *code; - int active; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->languagelist),&iter,0,&target,1,&code,2,&active,-1); - if (active){ - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->LanguageCombo),code,target); - } - } -} - void yon_interface_update(main_window *widgets){ g_signal_handlers_block_by_func(G_OBJECT(widgets->IDEntry),G_CALLBACK(on_id_changed),widgets); g_signal_handlers_block_by_func(G_OBJECT(widgets->HostnameEntry),G_CALLBACK(on_hostname_changed),widgets); - g_signal_handlers_block_by_func(G_OBJECT(widgets->ConsoleFontCombo),G_CALLBACK(on_console_font_changed),widgets); - g_signal_handlers_block_by_func(G_OBJECT(widgets->LanguageCombo),G_CALLBACK(on_language_changed),widgets); + // g_signal_handlers_block_by_func(G_OBJECT(widgets->LanguageCombo),G_CALLBACK(on_language_changed),widgets); gtk_entry_set_text(GTK_ENTRY(widgets->HostnameEntry),""); gtk_entry_set_text(GTK_ENTRY(widgets->IDEntry),""); - gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),DEFAULT_LABEL); + // gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),DEFAULT_LABEL); gtk_entry_set_text(GTK_ENTRY(widgets->DomainEntry),""); int size; GtkTreeIter iter; config_str rtn = yon_file_open(get_id_command,&size); rtn[0]=yon_char_divide_search(rtn[0],"\n",-1); gtk_entry_set_text(GTK_ENTRY(widgets->IDEntry),*rtn); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ConsoleFontCombo),0); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LanguageCombo),0); + // gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LanguageCombo),0); char *hostname = yon_config_get_by_key(hostname_parameter); if (!yon_char_is_empty(hostname)){ gtk_entry_set_text(GTK_ENTRY(widgets->HostnameEntry),hostname); } - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->languagelist),&iter); - for(;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->languagelist),&iter)){ - gtk_list_store_set(widgets->languagelist,&iter,2,0,-1); + int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->LanguageList),&iter); + for(;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->LanguageList),&iter)){ + gtk_list_store_set(widgets->LanguageList,&iter,2,0,-1); } char *id = yon_config_get_by_key(id_parameter); if (id&&!strcmp(id,"random")) @@ -155,46 +138,36 @@ void yon_interface_update(main_window *widgets){ gtk_entry_set_text(GTK_ENTRY(widgets->DomainEntry),domain); } - char *code; - char *cons_font = yon_config_get_by_key(console_font_parameter); - if (cons_font){ - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->fontlist),&iter); - for(;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->fontlist),&iter)){ - gtk_tree_model_get(GTK_TREE_MODEL(widgets->fontlist),&iter,0,&code,-1); - if (code&&!strcmp(code,cons_font)) gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widgets->ConsoleFontCombo),&iter); - } - } - char *lang = yon_config_get_by_key(language_parameter); - char *avlocale = yon_config_get_by_key(locale_parameter); - int locsize; - if (avlocale){}; - config_str locale_parsed = yon_char_parse(avlocale,&locsize,","); - gboolean is_active; - char *locale_string=""; - char *loc_name; - if (!yon_char_is_empty(avlocale)){ - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->languagelist),&iter); - for(;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->languagelist),&iter)){ - gtk_tree_model_get(GTK_TREE_MODEL(widgets->languagelist),&iter,0,&loc_name,1,&code,2,&is_active,-1); - if (yon_char_parsed_check_exist(locale_parsed,locsize,code)>-1){ - gtk_list_store_set(widgets->languagelist,&iter,2,1,-1); - char *temp = yon_char_unite(yon_char_is_empty(locale_string)?"":locale_string,yon_char_is_empty(locale_string)?"":"; ",loc_name,NULL); - if (!yon_char_is_empty(locale_string)) free(locale_string); - locale_string = temp; - } - } - if (strcmp(locale_string,"")) gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),locale_string); - } - yon_language_update(widgets); - if (!yon_char_is_empty(lang)) { - gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->LanguageCombo),lang); - } else { - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LanguageCombo),0); - } + // char *lang = yon_config_get_by_key(language_parameter); + // char *avlocale = yon_config_get_by_key(locale_parameter); + // int locsize; + // if (avlocale){}; + // config_str locale_parsed = yon_char_parse(avlocale,&locsize,","); + // gboolean is_active; + // char *locale_string=""; + // char *loc_name; + // if (!yon_char_is_empty(avlocale)){ + // int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->LanguageList),&iter); + // for(;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->LanguageList),&iter)){ + // gtk_tree_model_get(GTK_TREE_MODEL(widgets->languagelist),&iter,0,&loc_name,1,&code,2,&is_active,-1); + // if (yon_char_parsed_check_exist(locale_parsed,locsize,code)>-1){ + // gtk_list_store_set(widgets->languagelist,&iter,2,1,-1); + // char *temp = yon_char_unite(yon_char_is_empty(locale_string)?"":locale_string,yon_char_is_empty(locale_string)?"":"; ",loc_name,NULL); + // if (!yon_char_is_empty(locale_string)) free(locale_string); + // locale_string = temp; + // } + // } + // if (strcmp(locale_string,"")) gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),locale_string); + // } + // yon_language_update(widgets); + // if (!yon_char_is_empty(lang)) { + // gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->LanguageCombo),lang); + // } else { + // gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LanguageCombo),0); + // } g_signal_handlers_unblock_by_func(G_OBJECT(widgets->IDEntry),G_CALLBACK(on_id_changed),widgets); g_signal_handlers_unblock_by_func(G_OBJECT(widgets->HostnameEntry),G_CALLBACK(on_hostname_changed),widgets); - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->ConsoleFontCombo),G_CALLBACK(on_console_font_changed),widgets); - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->LanguageCombo),G_CALLBACK(on_language_changed),widgets); + // g_signal_handlers_unblock_by_func(G_OBJECT(widgets->LanguageCombo),G_CALLBACK(on_language_changed),widgets); } void yon_config_global_local_save(){ @@ -238,14 +211,6 @@ void yon_config_custom_save(){ template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,config_get_command("system"),NULL); if (window){}; } - -void on_domain_address_save(GtkEntry *self){ - char *adress = (char*)gtk_entry_get_text(self); - if (!yon_char_is_empty(adress)){ - yon_config_register(DOMAIN,DOMAIN_get_command,adress); - } -} - void yon_gtk_windget_set_sensitive_from_entry_emptiness(GtkEntry *self, GtkWidget *target){ if (yon_char_is_empty(gtk_entry_get_text(self))){ gtk_widget_set_sensitive(target,0); @@ -254,76 +219,6 @@ void yon_gtk_windget_set_sensitive_from_entry_emptiness(GtkEntry *self, GtkWidge } } -void on_locale_toggle(GtkCellRendererToggle *,GtkTreePath* path,GtkTreeViewColumn* ,locals_window *window){ - GtkTreeIter iter; - GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(window->MainTree)); - gtk_tree_model_get_iter(model,&iter,path); - gboolean is_active; - gtk_tree_model_get(model,&iter,2,&is_active,-1); - gtk_list_store_set(GTK_LIST_STORE(model),&iter,2,!is_active,-1); -} - -void on_locale_accept(GtkWidget *self, dictionary *dict){ - main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); - locals_window *window = yon_dictionary_get_data(dict->first->next,locals_window*); - GtkTreeIter iter; - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DefaultCheck))){ - yon_config_remove_by_key(locale_parameter); - yon_config_remove_by_key(language_parameter); - gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),DEFAULT_LABEL); - for_iter (GTK_TREE_MODEL(widgets->languagelist),&iter){ - gtk_list_store_set(widgets->languagelist,&iter,2,0,-1); - } - } else { - gboolean is_active; - char *final_string = ""; - char *final_ids = ""; - char *name, *id; - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->languagelist),&iter); - for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->languagelist),&iter)){ - gtk_tree_model_get(GTK_TREE_MODEL(widgets->languagelist),&iter,0,&name,1,&id,2,&is_active,-1); - if (is_active){ - final_string = yon_char_unite(strcmp(final_string,"") ? yon_char_append(final_string,"; ") : final_string,name,NULL); - final_ids = yon_char_unite(strcmp(final_ids,"") ? yon_char_append(final_ids,",") : final_ids,id,NULL); - } - } - yon_config_register(locale_parameter,LOCALE_get_command,final_ids); - gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),final_string); - } - yon_language_update(widgets); - on_subwindow_close(self); -} - -void on_locale_open(GtkWidget *, main_window *widgets){ - locals_window *window = malloc(sizeof(locals_window)); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_locales_path); - window->Window = yon_gtk_builder_get_widget(builder,"localesLayoutsWindow"); - window->MainTree = yon_gtk_builder_get_widget(builder,"localesTree"); - window->CloseButton = yon_gtk_builder_get_widget(builder,"localesCancelButton"); - window->AcceptButton = yon_gtk_builder_get_widget(builder,"localesAcceptButton"); - window->DefaultCheck = yon_gtk_builder_get_widget(builder,"DefaultCheck"); - window->ToggleCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"toggleCell")); - gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree), GTK_TREE_MODEL(widgets->languagelist)); - - dictionary *dict = NULL; - yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); - - - g_signal_connect(G_OBJECT(window->CloseButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - g_signal_connect(G_OBJECT(window->DefaultCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->MainTree); - g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_locale_accept),dict); - g_signal_connect(G_OBJECT(window->MainTree),"row-activated",G_CALLBACK(on_locale_toggle),window); - - if (!config(locale_parameter)){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DefaultCheck),1); - } - - yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),TITLE_LABEL,main_icon,"LocalesWindow"); - - gtk_dialog_run(GTK_DIALOG(window->Window)); - -} void on_hostname_changed(GtkEntry *self, main_window *){ char *text = (char*)gtk_entry_get_text(self); @@ -384,32 +279,6 @@ void on_id_copy(GtkButton *, main_window *widgets){ yon_ubl_status_box_render(COPY_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } -void on_console_font_changed(GtkComboBox *self, main_window *widgets){ - GtkTreeIter iter; - if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->ConsoleFontCombo))==0){ - yon_config_remove_by_key(console_font_parameter); - } else { - gtk_combo_box_get_active_iter(self,&iter); - char *code; - gtk_tree_model_get(GTK_TREE_MODEL(widgets->fontlist),&iter,0,&code,-1); - if (code){ - if (yon_config_get_by_key(console_font_parameter)){ - yon_config_set(console_font_parameter,code); - } else { - yon_config_register(console_font_parameter,CONSOLE_FONT_get_command,code); - } - } - } -} - -void on_language_changed(GtkComboBox *, main_window *widgets){ - const char *code; - code = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->LanguageCombo)); - if (code){ - yon_config_register(language_parameter,LANG_get_command,(char*)code); - } -} - void on_terminal_done(VteTerminal *, gint status, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); GtkWidget *window = yon_dictionary_get_data(dict->first->next,GtkWidget*); @@ -428,299 +297,6 @@ void on_terminal_command_ended(VteTerminal *, gint status, domain_info_window *w } } -domain_info_window *yon_information_window_new(){ - GtkBuilder *builder = gtk_builder_new_from_resource(glade_domain_view_path); - - domain_info_window *window = malloc(sizeof(domain_info_window)); - window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); - window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); - window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); - window->ExecuteTerminal = yon_gtk_builder_get_widget(builder,"ExecuteTerminal"); - window->TerminalScroll = yon_gtk_builder_get_widget(builder,"TerminalScroll"); - yon_gtk_widget_set_scroll_window_for_scroll(window->Window,GTK_SCROLLBAR(window->TerminalScroll)); - GdkRGBA rgba; - vte_terminal_get_color_background_for_draw(VTE_TERMINAL(window->ExecuteTerminal),&rgba); - vte_terminal_set_color_cursor(VTE_TERMINAL(window->ExecuteTerminal),&rgba); - yon_gtk_window_setup(GTK_WINDOW(window->Window),NULL,TITLE_LABEL,"com.ublinux.ubl-settings-system","InfoWindow"); - yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"loading",LOADING_LABEL,BACKGROUND_IMAGE_INFO_TYPE); - g_signal_connect(G_OBJECT(window->ExecuteTerminal), "child-exited", G_CALLBACK(on_terminal_command_ended), window); - - return window; -} - -void on_domain_connect(GtkWidget *, dictionary *dict){ - main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); - connection_window *window = yon_dictionary_get_data(dict->first->next,connection_window*); - char *adress = (char*)gtk_entry_get_text(GTK_ENTRY(window->AdressEntry)); - if (yon_char_is_empty(adress)){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->AdressEntry); - return; - } - char *login = (char*)gtk_entry_get_text(GTK_ENTRY(window->LoginEntry)); - char *password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); - char *kerberos = (char*)gtk_entry_get_text(GTK_ENTRY(window->KerberosServerEntry)); - char *dns = (char*)gtk_entry_get_text(GTK_ENTRY(window->DNSEntry)); - char *ou = (char*)gtk_entry_get_text(GTK_ENTRY(window->OuEntry)); - char *client = NULL; - if (gtk_combo_box_get_active(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 *command = domain_connect_command(adress,login,password,final,ou); - yon_debug_output("%s\n",command); - domain_info_window *dialog = yon_information_window_new(); - gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),DOMAIN_CONNECTING_LABEL); - gtk_window_set_title(GTK_WINDOW(dialog->Window),DOMAIN_CONNECTING_LABEL); - yon_terminal_integrated_start(dialog->ExecuteTerminal,command); - dictionary *dc = NULL; - yon_dictionary_add_or_create_if_exists_with_data(dc,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dc,"window",window->Window); - g_signal_connect(G_OBJECT(dialog->ExecuteTerminal),"child-exited",G_CALLBACK(on_terminal_done),dc); - gtk_widget_show(dialog->Window); - gtk_entry_set_text(GTK_ENTRY(widgets->DomainEntry),adress); - - on_config_reload(NULL,widgets); -} - -void on_status_clicked(GtkWidget *, connection_window *window){ - char *target = (char*)gtk_entry_get_text(GTK_ENTRY(window->AdressEntry)); - if (!yon_char_is_empty(target)){ - yon_debug_output("%s\n",domain_info(target)); - domain_info_window *dialog = yon_information_window_new(); - yon_terminal_integrated_start(dialog->ExecuteTerminal,domain_info(target)); - gtk_window_set_transient_for(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->Window)); - gtk_widget_show(dialog->Window); - - } -} - -void on_find_domains_clicked(GtkWidget *, main_window *window){ - - domain_info_window *dialog = yon_information_window_new(); - yon_terminal_integrated_start(dialog->ExecuteTerminal,domains_seek_command); - gtk_window_set_transient_for(GTK_WINDOW(dialog->Window),GTK_WINDOW(window->Window)); - gtk_widget_show(dialog->Window); - // yon_terminal_window_launch(GTK_WINDOW(window->Window),yon_debug_output("%s\n",domains_seek_command),yon_char_get_localised_from_lib(SUCCESS_LABEL),yon_char_get_localised_from_lib(FAIL_LABEL)); -} - - -void on_main_window_domain_status_clicked(GtkWidget *, GtkEntryIconPosition icon_pos,GdkEvent* ,main_window *widgets){ - if (icon_pos==GTK_ENTRY_ICON_SECONDARY&&main_config.domain_connected){ - char *target = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->DomainEntry)); - if (!yon_char_is_empty(target)){ - yon_debug_output("%s\n",get_domain_info_command); - domain_info_window *dialog = yon_information_window_new(); - gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),INFO_TITLE_LABEL); - yon_terminal_integrated_start(dialog->ExecuteTerminal,get_domain_info_command); - gtk_window_set_transient_for(GTK_WINDOW(dialog->Window),GTK_WINDOW(widgets->Window)); - gtk_widget_show(dialog->Window); - } - } -} - -int update_thread_buzy = 0; - -gboolean on_main_window_domain_status_update(connection_window *window){ - const char *target = gtk_entry_get_text(GTK_ENTRY(window->AdressEntry)); - if (!yon_char_is_empty(target)){ - int status = system(domain_check_alive(target)); - if (!status){ - gtk_entry_set_icon_from_icon_name(GTK_ENTRY(window->AdressEntry),GTK_ENTRY_ICON_SECONDARY,domain_connected_icon); - } else { - gtk_entry_set_icon_from_icon_name(GTK_ENTRY(window->AdressEntry),GTK_ENTRY_ICON_SECONDARY,domain_disconnected_icon); - } - } else { - gtk_entry_set_icon_from_icon_name(GTK_ENTRY(window->AdressEntry),GTK_ENTRY_ICON_SECONDARY,domain_disconnected_icon); - } - g_mutex_lock(&main_config.ThreadMutex); - update_thread_buzy = 0; - g_mutex_unlock(&main_config.ThreadMutex); - return G_SOURCE_REMOVE; -} - -// gboolean yon_update_thread(GtkWidget *self, GdkEvent *event, connection_window *window){ - gboolean yon_update_thread(GtkWidget *, connection_window *window){ - g_mutex_lock(&main_config.ThreadMutex); - if (!update_thread_buzy){ - update_thread_buzy=1; - g_mutex_unlock(&main_config.ThreadMutex); - g_idle_add((GSourceFunc)on_main_window_domain_status_update,window); - } else { - g_mutex_unlock(&main_config.ThreadMutex); - } - return 1; -} - -connection_window *yon_connection_window_new(){ - GtkBuilder *builder = gtk_builder_new_from_resource(glade_connection_path); - connection_window *window = malloc(sizeof(connection_window)); - window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); - window->AdressEntry = yon_gtk_builder_get_widget(builder,"AdressEntry"); - window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); - window->StatusEntry = yon_gtk_builder_get_widget(builder,"StatusEntry"); - window->LoginEntry = yon_gtk_builder_get_widget(builder,"LoginEntry"); - window->PasswordEntry = yon_gtk_builder_get_widget(builder,"PasswordEntry"); - window->KerberosServerEntry = yon_gtk_builder_get_widget(builder,"KerberosServerEntry"); - window->DNSEntry = yon_gtk_builder_get_widget(builder,"DNSEntry"); - 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->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); - window->CheckButton = yon_gtk_builder_get_widget(builder,"CheckButton"); - window->OuEntry = yon_gtk_builder_get_widget(builder,"OuEntry"); - window->list = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1")); - 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->StatusEntry),"clicked",G_CALLBACK(on_status_clicked),window); - g_signal_connect(G_OBJECT(window->CheckButton),"clicked",G_CALLBACK(yon_update_thread),window); - - yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordEntry)); - return window; -} - -void on_domain_disconnect(GtkWidget *, dictionary *dict){ - main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); - domain_window *window = yon_dictionary_get_data(dict->first->next,domain_window*); - char *adress = (char*)gtk_entry_get_text(GTK_ENTRY(window->AdressEntry)); - char *login = (char*)gtk_entry_get_text(GTK_ENTRY(window->LoginEntry)); - char *password = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)); - if (yon_char_is_empty(adress)){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->AdressEntry); - return; - } - yon_debug_output("%s\n",domain_disconnect_command(adress,login,password)); - domain_info_window *dialog = yon_information_window_new(); - gtk_label_set_text(GTK_LABEL(dialog->HeadLabel),DISCONNECTION_LABEL); - gtk_window_set_title(GTK_WINDOW(dialog->Window),DISCONNECTION_LABEL); - yon_terminal_integrated_start(dialog->ExecuteTerminal,domain_disconnect_command(adress,login,password)); - dictionary *dc = NULL; - yon_dictionary_add_or_create_if_exists_with_data(dc,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dc,"window",window->Window); - g_signal_connect(G_OBJECT(dialog->ExecuteTerminal),"child-exited",G_CALLBACK(on_terminal_done),dc); - gtk_entry_set_text(GTK_ENTRY(widgets->DomainEntry),adress); - gtk_widget_show(dialog->Window); -} - -domain_window *yon_domain_window_new(){ - GtkBuilder *builder = gtk_builder_new_from_resource(glade_domain_path); - - domain_window *window = malloc(sizeof(domain_window)); - window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); - window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); - window->HeadLabel = yon_gtk_builder_get_widget(builder,"HeadLabel"); - window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); - window->SaveButton = yon_gtk_builder_get_widget(builder,"SaveButton"); - window->AdressEntry = yon_gtk_builder_get_widget(builder,"AdressEntry"); - window->LoginEntry = yon_gtk_builder_get_widget(builder,"LoginEntry"); - window->PasswordEntry = yon_gtk_builder_get_widget(builder,"PasswordEntry"); - window->DNSEntry = yon_gtk_builder_get_widget(builder,"DNSEntry"); - g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - yon_gtk_entry_set_password_visibility_icon(GTK_ENTRY(window->PasswordEntry)); - - return window; -} - -void on_domain_opened(GtkWidget *, main_window *widgets){ - if (main_config.domain_connected){ - domain_window *window = yon_domain_window_new(); - gtk_label_set_text(GTK_LABEL(window->HeadLabel),DISCONNECTION_LABEL); - yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),DISCONNECTION_LABEL,"com.ublinux.ubl-settings-system","DomainWindow"); - char *domain = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->DomainEntry)); - char *password = yon_config_get_by_key(DOMAIN_ADMANGER); - char *login = yon_char_divide_search(password,":",-1); - char *dns = config(DOMAIN_DNS); - if (!yon_char_is_empty(login)) - gtk_entry_set_text(GTK_ENTRY(window->LoginEntry),login); - if (!yon_char_is_empty(password)) - gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),password); - if (!yon_char_is_empty(domain)) - gtk_entry_set_text(GTK_ENTRY(window->AdressEntry),domain); - if (!yon_char_is_empty(dns)) - gtk_entry_set_text(GTK_ENTRY(window->DNSEntry),dns); - dictionary *dict = NULL; - yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); - g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_domain_disconnect),dict); - g_signal_connect(G_OBJECT(window->Window),"destroy",G_CALLBACK(on_check_domain_connected),widgets); - - gtk_widget_show(window->Window); - } else { - connection_window *window = yon_connection_window_new(); - gtk_label_set_text(GTK_LABEL(window->HeadLabel),DOMAIN_CONNECTING_LABEL); - yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),DOMAIN_CONNECTING_LABEL,"com.ublinux.ubl-settings-system","ConnectWindow"); - char *domain = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->DomainEntry)); - char *dns = config(DOMAIN_DNS); - char *client = yon_config_get_by_key(DOMAIN_CLIENT); - char *kerberos = yon_config_get_by_key(DOMAIN_SERVER); - char *password = yon_config_get_by_key(DOMAIN_ADMANGER); - char *login = yon_char_divide_search(password,":",-1); - if (!yon_char_is_empty(login)) - gtk_entry_set_text(GTK_ENTRY(window->LoginEntry),login); - if (!yon_char_is_empty(password)) - gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),password); - if (!yon_char_is_empty(domain)) - gtk_entry_set_text(GTK_ENTRY(window->AdressEntry),domain); - if (!yon_char_is_empty(kerberos)) - gtk_entry_set_text(GTK_ENTRY(window->KerberosServerEntry),kerberos); - if (!yon_char_is_empty(dns)) - gtk_entry_set_text(GTK_ENTRY(window->DNSEntry),dns); - if (!yon_char_is_empty(client)){ - gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->ClientCombo),client); - } - dictionary *dict = NULL; - yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); - g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_domain_connect),dict); - g_signal_connect(G_OBJECT(window->Window),"destroy",G_CALLBACK(on_check_domain_connected),widgets); - // yon_update_thread(NULL,NULL,window); - gtk_widget_show(window->Window); - } - -} - -// standard functions - -void on_check_domain_connected(GtkWidget *, main_window *widgets){ - int ansv = system(domain_connect_check); - if (!ansv){ - gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widgets->DomainEntry),GTK_ENTRY_ICON_SECONDARY,domain_connected_icon); - gtk_button_set_label(GTK_BUTTON(widgets->DomainButton),DOMAIN_DISCONNECT_LABEL); - gtk_widget_set_tooltip_markup(widgets->DomainButton,DDISCONNECTION_LABEL); - gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(widgets->DomainEntry),GTK_ENTRY_ICON_SECONDARY,DOMAIN_CONNECTED_LABEL); - main_config.domain_connected=1; - } else { - gtk_entry_set_icon_from_icon_name(GTK_ENTRY(widgets->DomainEntry),GTK_ENTRY_ICON_SECONDARY,domain_disconnected_icon); - gtk_button_set_label(GTK_BUTTON(widgets->DomainButton),DOMAIN_CONNECT_LABEL); - gtk_widget_set_tooltip_markup(widgets->DomainButton,CONNECTION_LABEL); - gtk_entry_set_icon_tooltip_markup(GTK_ENTRY(widgets->DomainEntry),GTK_ENTRY_ICON_SECONDARY,DOMAIN_DISCONNECTED_LABEL); - main_config.domain_connected=0; - } - YON_CONFIG_TYPE type; - switch(main_config.load_mode){ - case 0: type=YON_CONFIG_GLOBAL; - yon_config_load_config(type,yon_config_parameter_prepare_command(DOMAIN_get_command,"global",NULL,NULL), yon_config_parameter_prepare_command(HOSTNAME_get_command,"global",NULL,NULL),NULL); - break; - case 1: type=YON_CONFIG_LOCAL; - yon_config_load_config(type,yon_config_parameter_prepare_command(DOMAIN_get_command,"system",NULL,NULL), yon_config_parameter_prepare_command(HOSTNAME_get_command,"system",NULL,NULL),NULL); - break; - case 3: type=YON_CONFIG_CUSTOM; - if (!yon_char_is_empty(main_config.custom_load_path)) - yon_config_load_config(type,yon_config_parameter_prepare_command(DOMAIN_get_command,main_config.custom_load_path,NULL,NULL), yon_config_parameter_prepare_command(HOSTNAME_get_command,main_config.custom_load_path,NULL,NULL),NULL); - break; - } - char *hostname = yon_config_get_by_key(hostname_parameter); - char *domain = yon_config_get_by_key(DOMAIN); - if (!yon_char_is_empty(hostname)) - gtk_entry_set_text(GTK_ENTRY(widgets->HostnameEntry),hostname); - if (!yon_char_is_empty(domain)) - gtk_entry_set_text(GTK_ENTRY(widgets->DomainEntry),domain); - -} - main_window *yon_main_window_complete(main_window *widgets){ /* Widgets getting | Получение виджетов */ widgets = yon_remalloc(widgets,sizeof(main_window)); @@ -731,18 +307,17 @@ main_window *yon_main_window_complete(main_window *widgets){ widgets->IDCombo = yon_gtk_builder_get_widget(builder,"IDCombo"); widgets->IDEntry = yon_gtk_builder_get_widget(builder,"IDEntry"); widgets->IDCopyButton = yon_gtk_builder_get_widget(builder,"IDCopyButton"); - widgets->ConsoleFontCombo = yon_gtk_builder_get_widget(builder,"ConsoleFontCombo"); - widgets->LanguageCombo = yon_gtk_builder_get_widget(builder,"LanguageCombo"); - widgets->LocaleButton = yon_gtk_builder_get_widget(builder,"getLocalesButton"); - widgets->LocaleEntry = yon_gtk_builder_get_widget(builder,"localeEntry"); + widgets->LocaleTree = yon_gtk_builder_get_widget(builder,"LocaleTree"); + widgets->LocaleAddButton = yon_gtk_builder_get_widget(builder,"LocaleAddButton"); + widgets->LocaleRemoveButton = yon_gtk_builder_get_widget(builder,"LocaleRemoveButton"); + widgets->LocaleDefaultSwitch = yon_gtk_builder_get_widget(builder,"LocaleDefaultSwitch"); widgets->FindButton = yon_gtk_builder_get_widget(builder,"FindButton"); widgets->DomainButton = yon_gtk_builder_get_widget(builder,"DomainButton"); widgets->DomainEntry = yon_gtk_builder_get_widget(builder,"DomainEntry"); - widgets->fontlist = GTK_LIST_STORE(gtk_builder_get_object(builder,"fontlist")); - widgets->languagelist = GTK_LIST_STORE(gtk_builder_get_object(builder,"languagelist")); + widgets->LanguageList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LanguageList")); widgets->DocumentationMenuItem = yon_ubl_menu_item_documentation_new(DOCUMENTATION_LABEL); widgets->AboutMenuItem = yon_ubl_menu_item_about_new(ABOUT_LABEL); @@ -773,9 +348,11 @@ main_window *yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->IDCombo),"changed",G_CALLBACK(on_id_combo_toggled),widgets); g_signal_connect(G_OBJECT(widgets->IDEntry),"changed",G_CALLBACK(on_id_changed),widgets); g_signal_connect(G_OBJECT(widgets->IDCopyButton),"clicked",G_CALLBACK(on_id_copy),widgets); - g_signal_connect(G_OBJECT(widgets->LocaleButton),"clicked",G_CALLBACK(on_locale_open),widgets); - g_signal_connect(G_OBJECT(widgets->ConsoleFontCombo),"changed",G_CALLBACK(on_console_font_changed),widgets); - g_signal_connect(G_OBJECT(widgets->LanguageCombo),"changed",G_CALLBACK(on_language_changed),widgets); + g_signal_connect(G_OBJECT(widgets->LocaleAddButton),"clicked",G_CALLBACK(on_language_open),widgets); + // g_signal_connect(G_OBJECT(widgets->LocaleRemoveButton),"clicked",G_CALLBACK(on_language_remove),widgets); + g_signal_connect(G_OBJECT(widgets->LocaleDefaultSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LocaleTree); + g_signal_connect(G_OBJECT(widgets->LocaleDefaultSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LocaleAddButton); + g_signal_connect(G_OBJECT(widgets->LocaleDefaultSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LocaleRemoveButton); g_signal_connect(G_OBJECT(widgets->DomainButton),"clicked",G_CALLBACK(on_domain_opened),widgets); g_signal_connect(G_OBJECT(widgets->DomainEntry),"icon-press",G_CALLBACK(on_main_window_domain_status_clicked),widgets); @@ -798,17 +375,10 @@ main_window *yon_main_window_complete(main_window *widgets){ int locsize; locales[i]=yon_char_divide_search(locales[i],"\n",-1); config_str loc_parsed = yon_char_parse(locales[i],&locsize,";"); - gtk_list_store_append(widgets->languagelist,&iter); - gtk_list_store_set(widgets->languagelist,&iter,0,_(loc_parsed[1]),1,loc_parsed[0],2,0,-1); + gtk_list_store_append(widgets->LanguageList,&iter); + gtk_list_store_set(widgets->LanguageList,&iter,0,_(loc_parsed[1]),1,loc_parsed[0],2,0,-1); } yon_char_parsed_free(locales,size); - config_str fonts = yon_resource_open_file(get_fonts_command,&size); - for (int i=1;ifontlist,&iter); - gtk_list_store_set(widgets->fontlist,&iter,0,fonts[i],-1); - } - yon_char_parsed_free(fonts,size); if (main_config.lock_load_global == 1){ gtk_widget_set_sensitive(widgets->LoadGlobalMenuItem,0); } @@ -830,7 +400,7 @@ main_window *yon_main_window_complete(main_window *widgets){ } int main(int argc, char *argv[]){ - local=setlocale(LC_ALL, ""); + setlocale(LC_ALL, ""); textdomain (LocaleName); yon_ubl_connect_config((_template_config*)&main_config); yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK); diff --git a/source/ubl-settings-system.h b/source/ubl-settings-system.h index 9f09629..8f88e0a 100644 --- a/source/ubl-settings-system.h +++ b/source/ubl-settings-system.h @@ -46,21 +46,7 @@ #define config_get_global_only_parameters "" #define config_get_local_only_parameters "" -#define hostname_parameter "HOSTNAME" -#define id_parameter "MACHINEID" -#define keyboard_layout_parameter "XKBLAYOUT" -#define console_font_parameter "CONSOLE_FONT" -#define num_lock_boot_parameter "NUMLOCK" -#define language_parameter "LANG" -#define locale_parameter "LOCALE" - -#define LOCALE_get_command "ubconfig --source global get [locale] LOCALE" -#define HOSTNAME_get_command "ubconfig --source global get [system] HOSTNAME" -#define MACHINEID_get_command "ubconfig --source global get [system] MACHINEID" -#define CONSOLE_FONT_get_command "ubconfig --source global get [locale] CONSOLE_FONT" -// #define NUMLOCK_get_command "ubconfig --source global get [locale] NUMLOCK" -#define LANG_get_command "ubconfig --source global get [locale] LANG" -#define DOMAIN_get_command "ubconfig --source global get [network] DOMAIN" +#define languages_command "while IFS= read SELECT_LOCALE; do SELECT_LOCALE=\"${SELECT_LOCALE% *}\"; [[ $(< /usr/share/i18n/locales/${SELECT_LOCALE%.*}) =~ \"title\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"language\"[[:blank:]]*\\\"([^\\\"]*)\\\".*=\"territory\"[[:blank:]]*\\\"([^\\\"]*)\\\" ]] && echo \"${BASH_REMATCH[2]}|${BASH_REMATCH[3]}|${SELECT_LOCALE}|${BASH_REMATCH[1]}\" || echo \"||${SELECT_LOCALE}|\"; done < \"/usr/share/i18n/SUPPORTED\"" #define check_domain_access_command(targeet) yon_char_append("adcli info --domain ",target) #define get_domain_info_command "ubdomain-client list " @@ -82,17 +68,32 @@ #define terminal_command_start(title,command) yon_char_unite("vte-2.91 --name=vte --cursor-shape=ibeam --cursor-blink=off --keep --no-pty --title=\"",title,"\" --no-shell --icon-title --no-context-menu --background-color='rgb(0,0,0)' --foreground-color='rgb(255,255,255)' --whole-window-transparent --no-geometry-hints -- ", command, NULL) +#define locale_parameter "LOCALE" +#define LOCALE_get_command "ubconfig --source global get [locale] LOCALE" + +#define hostname_parameter "HOSTNAME" +#define HOSTNAME_get_command "ubconfig --source global get [system] HOSTNAME" + +#define id_parameter "MACHINEID" +#define MACHINEID_get_command "ubconfig --source global get [system] MACHINEID" + +#define CONSOLE_FONT_get_command "ubconfig --source global get [locale] CONSOLE_FONT" + +#define language_parameter "LANG" +#define LANG_get_command "ubconfig --source global get [locale] LANG" + #define DOMAIN "DOMAIN" #define DOMAIN_ADMANGER "DOMAIN[admanger]" #define DOMAIN_SERVER "DOMAIN[server]" #define DOMAIN_DNS "DOMAIN[dns]" #define DOMAIN_CLIENT "DOMAIN[client]" +#define DOMAIN_get_command "ubconfig --source global get [network] DOMAIN" +typedef char* string; -typedef char* string; +__attribute__((unused)) static \ string version_application; -char *local; typedef struct { template_config_fields @@ -101,6 +102,7 @@ typedef struct { int domain_connected; GMutex ThreadMutex; } config; +extern config main_config; typedef struct { template_window_fields @@ -109,18 +111,16 @@ typedef struct { GtkWidget *IDCombo; GtkWidget *IDEntry; GtkWidget *IDCopyButton; - GtkWidget *ConsoleFontCombo; - GtkWidget *LanguageCombo; - - GtkWidget *LocaleButton; - GtkWidget *LocaleEntry; + GtkWidget *LocaleDefaultSwitch; + GtkWidget *LocaleTree; + GtkWidget *LocaleAddButton; + GtkWidget *LocaleRemoveButton; GtkWidget *DomainEntry; GtkWidget *DomainButton; GtkWidget *FindButton; - GtkListStore *fontlist; - GtkListStore *languagelist; + GtkListStore *LanguageList; } main_window; @@ -133,20 +133,22 @@ typedef struct { GtkWidget *InfoText; GtkWidget *AlwaysOpenCheck; - GtkWidget *CloseButton; + GtkWidget *CancelButton; GtkWidget *AcceptButton; } documentation_confirmation_window; typedef struct { GtkWidget *Window; - GtkWidget *MainTree; + GtkWidget *LanguagesTree; - GtkWidget *CloseButton; + GtkWidget *CancelButton; GtkWidget *AcceptButton; - GtkWidget *DefaultCheck; + GtkWidget *DefaultSwitch; GtkCellRenderer *ToggleCell; -} locals_window; + + GtkListStore *LanguagesList; +} language_window; typedef struct { GtkWidget *Window; @@ -224,9 +226,9 @@ void yon_config_global_save(); void yon_config_custom_save(); void on_domain_address_save(GtkEntry *self); void yon_gtk_windget_set_sensitive_from_entry_emptiness(GtkEntry *self, GtkWidget *target); -void on_locale_toggle(GtkCellRendererToggle *self,GtkTreePath* path,GtkTreeViewColumn* column,locals_window *window); -void on_locale_accept(GtkWidget *self, dictionary *dict); -void on_locale_open(GtkWidget *self, main_window *widgets); +void on_locale_toggle(GtkCellRendererToggle *self,GtkTreePath* path,GtkTreeViewColumn* column,language_window *window); +void on_locale_accept(GtkWidget *self, language_window *window); +void on_language_open(GtkWidget *self, main_window *widgets); void on_hostname_changed(GtkEntry *self, main_window *widgets); void on_id_combo_toggled(GtkComboBox *self, main_window *widgets); void on_id_changed(GtkEntry *self, main_window *widgets); @@ -248,4 +250,5 @@ domain_window *yon_domain_window_new(); void on_domain_opened(GtkWidget *self, main_window *widgets); void on_check_domain_connected(GtkWidget *self, main_window *widgets); main_window *yon_main_window_complete(main_window *widgets); -void yon_language_update(main_window *widgets); \ No newline at end of file +void yon_language_update(main_window *widgets); +language_window *yon_language_window_new(); \ No newline at end of file diff --git a/ubl-settings-system-layouts.glade b/ubl-settings-system-layouts.glade index 6ab0e03..813f976 100644 --- a/ubl-settings-system-layouts.glade +++ b/ubl-settings-system-layouts.glade @@ -1,152 +1,140 @@ - + + + + + + + + + + + True False - process-stop-symbolic + com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic True False - emblem-ok-symbolic + com.ublinux.libublsettingsui-gtk3.accept-symbolic - + 450 550 False True com.ublinux.ubl-settings-system - dialog - + + True False vertical - 2 - - + 5 + + + True False - end + vertical - - Cancel + + + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + 5 + 5 + + True True - True - image8 - False True - end 0 - - Accept + True - True - True - image9 - + False + Default False True - end 1 False - False - 0 + True + 1 - + True - False - 2 - 2 - 2 - 2 - vertical - 10 - - - Default - True - True - False - True - - - False - True - 0 - - + True + 5 + 5 + 5 + in - + True True - in + LanguagesList + False + True + + + - - True - True - False - True - - - none - - + + column - - column - - - - 2 - - - + + + 2 + + + + + + column - - column - - - - 0 - - - + + + 0 + - - True - True - 1 - True True - 1 + 2 @@ -157,7 +145,7 @@ False True - + True False System configuration @@ -166,6 +154,34 @@ + + + Cancel + True + True + True + image8 + + + + + + Accept + True + True + True + image9 + + + + end + 1 + + diff --git a/ubl-settings-system.glade b/ubl-settings-system.glade index dc8771a..9e717c1 100644 --- a/ubl-settings-system.glade +++ b/ubl-settings-system.glade @@ -1,5 +1,5 @@ - - + - + + + - - - Default - - - True @@ -47,7 +43,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True False - document-edit-symbolic + com.ublinux.libublsettingsui-gtk3.increase-symbolic True @@ -59,6 +55,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False com.ublinux.libublsettingsui-gtk3.zoom-symbolic + + True + False + com.ublinux.libublsettingsui-gtk3.trash-symbolic + True False @@ -316,12 +317,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False 5 - + True False - Console font: - True - 0 + Available languages ​​in the system: False @@ -330,106 +329,21 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - + True - False - fontlist - 0 - - - - 0 - - - - - True - True - 1 - - - - - False - True - 1 - - - - - - - - - True - False - Console - - - - - False - True - 1 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 5 - 5 - 5 - - - True - False - vertical - 5 - - - True - False - 5 - - - True - False - Locale: - 0 + True False True - 0 - - - - - True - False - - - True - True 1 - + True - True - True - image2 - + False + Default False @@ -450,33 +364,74 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False 5 - + True - False - Language: - True - 0 + True + in + + + True + True + + + + + - False + True True 0 - + True False + vertical + 5 + + + True + True + True + image2 + + + + False + True + 0 + + + + + True + True + True + image5 + + + + False + True + 1 + + - True + False True 1 - False + True True 1 @@ -489,12 +444,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True False - Locale + Language - False + True True 2 @@ -503,24 +458,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - - - - + - - - - - - - - - - True False -- 2.35.1 From 5d0fe97ccb723ff2ce01656fac23daa361fdb90a Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 12 Nov 2025 18:05:37 +0600 Subject: [PATCH 2/6] System update --- locale/ubl-settings-system.pot | 394 ++---------------------- locale/ubl-settings-system_ru.po | 421 +++----------------------- source/CMakeLists.txt | 1 + source/ubl-settings-system-language.c | 82 +++-- source/ubl-settings-system-save.c | 148 +++++++++ source/ubl-settings-system.c | 282 ++++++----------- source/ubl-settings-system.h | 34 ++- source/ubl-strings.h | 11 +- ubl-settings-system-layouts.glade | 125 +++++--- ubl-settings-system.glade | 63 +++- 10 files changed, 525 insertions(+), 1036 deletions(-) create mode 100644 source/ubl-settings-system-save.c diff --git a/locale/ubl-settings-system.pot b/locale/ubl-settings-system.pot index 2b6c3af..87e250b 100644 --- a/locale/ubl-settings-system.pot +++ b/locale/ubl-settings-system.pot @@ -237,395 +237,49 @@ msgstr "" msgid "Check" msgstr "" +#: source/ubl-strings.h:68 msgid "OU, Organizational Unit:" msgstr "" -msgid "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\"" -msgstr "" - -msgid "Domain connection" -msgstr "" - -msgid "Afrikaans, South Africa" -msgstr "" - -msgid "Arabic, United Arab Emirates" -msgstr "" - -msgid "Arabic, Bahrain" -msgstr "" - -msgid "Arabic, Algeria" -msgstr "" - -msgid "Arabic, Egypt" -msgstr "" - -msgid "Arabic, Iraq" -msgstr "" - -msgid "Arabic, Jordan" -msgstr "" - -msgid "Arabic, Kuwait" -msgstr "" - -msgid "Arabic, Libya" -msgstr "" - -msgid "Arabic, Morocco" -msgstr "" - -msgid "Arabic, Oman" -msgstr "" - -msgid "Arabic, Qatar" -msgstr "" - -msgid "Arabic, Saudi Arabia" -msgstr "" - -msgid "Arabic, Tunisia" -msgstr "" - -msgid "Arabic, Yemen" -msgstr "" - -msgid "Assamese, India" -msgstr "" - -msgid "Azerbaijani, Azerbaijan" -msgstr "" - -msgid "Belarusian, Belarus" -msgstr "" - -msgid "Bulgarian, Bulgaria" -msgstr "" - -msgid "Bengali, India" -msgstr "" - -msgid "Bosnian, Bosnia and Herzegovina" -msgstr "" - -msgid "Catalan, Spain" -msgstr "" - -msgid "Czech, Czech Republic" -msgstr "" - -msgid "Danish, Denmark" -msgstr "" - -msgid "German, Austria" -msgstr "" - -msgid "German, Belgium" -msgstr "" - -msgid "German, Switzerland" -msgstr "" - -msgid "German, Germany" -msgstr "" - -msgid "German, Liechtenstein" -msgstr "" - -msgid "German, Luxembourg" -msgstr "" - -msgid "Greek, Cyprus" -msgstr "" - -msgid "Greek, Greece" -msgstr "" - -msgid "English, Australia" -msgstr "" - -msgid "English, Botswana" -msgstr "" - -msgid "English, Canada" -msgstr "" - -msgid "English, United Kingdom" -msgstr "" - -msgid "English, Hong Kong SAR China" -msgstr "" - -msgid "English, Ireland" -msgstr "" - -msgid "English, India" -msgstr "" - -msgid "English, Malta" -msgstr "" - -msgid "English, New Zealand" -msgstr "" - -msgid "English, Philippines" -msgstr "" - -msgid "English, Singapore" -msgstr "" - -msgid "English, U.S.A." -msgstr "" - -msgid "English, Zimbabwe" -msgstr "" - -msgid "Spanish, Argentina" -msgstr "" - -msgid "Spanish, Bolivia" -msgstr "" - -msgid "Spanish, Chile" -msgstr "" - -msgid "Spanish, Colombia" -msgstr "" - -msgid "Spanish, Costa Rica" -msgstr "" - -msgid "Spanish, Dominican Republic" -msgstr "" - -msgid "Spanish, Ecuador" -msgstr "" - -msgid "Spanish, Spain" -msgstr "" - -msgid "Spanish, Guatemala" -msgstr "" - -msgid "Spanish, Honduras" -msgstr "" - -msgid "Spanish, Mexico" -msgstr "" - -msgid "Spanish, Nicaragua" -msgstr "" - -msgid "Spanish, Panama" -msgstr "" - -msgid "Spanish, Peru" -msgstr "" - -msgid "Spanish, Puerto Rico" -msgstr "" - -msgid "Spanish, Paraguay" -msgstr "" - -msgid "Spanish, El Salvador" -msgstr "" - -msgid "Spanish, U.S.A." -msgstr "" - -msgid "Spanish, Uruguay" -msgstr "" - -msgid "Spanish, Venezuela" -msgstr "" - -msgid "Estonian, Estonia" -msgstr "" - -msgid "Finnish, Finland" -msgstr "" - -msgid "French, Belgium" -msgstr "" - -msgid "French, Canada" -msgstr "" - -msgid "French, Switzerland" -msgstr "" - -msgid "French, France" -msgstr "" - -msgid "French, Luxembourg" -msgstr "" - -msgid "Gujarati, India" -msgstr "" - -msgid "Hebrew, Israel" -msgstr "" - -msgid "Hindi, India" -msgstr "" - -msgid "Croatian, Croatia" -msgstr "" - -msgid "Hungarian, Hungary" -msgstr "" - -msgid "Armenian, Armenia" -msgstr "" - -msgid "Indonesian, Indonesia" -msgstr "" - -msgid "Icelandic, Iceland" -msgstr "" - -msgid "Italian, Switzerla" -msgstr "" - -msgid "Italian, Italy" -msgstr "" - -msgid "Japanese, Japan" -msgstr "" - -msgid "Georgian, Georgia" -msgstr "" - -msgid "Kazakh, Kazakhstan" -msgstr "" - -msgid "Kannada, India" -msgstr "" - -msgid "Korean, Korea" -msgstr "" - -msgid "Kashmiri, India" -msgstr "" - -msgid "Kurdish, Turkey" -msgstr "" - -msgid "Kurdish (Sorani), Turkey" -msgstr "" - -msgid "Kirghiz, Kyrgyzstan" -msgstr "" - -msgid "Lithuanian, Lithuania" -msgstr "" - -msgid "Latvian, Latvia" -msgstr "" - -msgid "Macedonian, Macedonia" -msgstr "" - -msgid "Malayalam, India" -msgstr "" - -msgid "Marathi, India" -msgstr "" - -msgid "Malay, Malaysia" -msgstr "" - -msgid "Maltese, Malta" -msgstr "" - -msgid "Bokmal, Norway" -msgstr "" - -msgid "Dutch, Belgium" -msgstr "" - -msgid "Dutch, Netherlands" -msgstr "" - -msgid "Nynorsk, Norway" -msgstr "" - -msgid "Oriya, India" -msgstr "" - -msgid "Punjabi, India" -msgstr "" - -msgid "Polish, Poland" -msgstr "" - -msgid "Portuguese, Brazil" -msgstr "" - -msgid "Portuguese, Portugal" -msgstr "" - -msgid "Romanian, Romania" -msgstr "" - -msgid "Russian, Russia" -msgstr "" - -msgid "Russian, Ukraine" -msgstr "" - -msgid "Sanskrit, India" -msgstr "" - -msgid "Slovak, Slovakia" -msgstr "" - -msgid "Slovenian, Slovenia" -msgstr "" - -msgid "Albanian, Albania" -msgstr "" - -msgid "Serbian, Montenegro" -msgstr "" - -msgid "Serbian, Montenegro (Latin)" -msgstr "" - -msgid "Serbian, Serbia" -msgstr "" - -msgid "Serbian, Serbia (Latin)" -msgstr "" - -msgid "Tamil, India" +#: source/ubl-strings.h:69 +msgid "" +"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\"" msgstr "" -msgid "Telugu, India" +#: source/ubl-strings.h:70 +msgid "Language" msgstr "" -msgid "Thai, Thailand" +#: source/ubl-strings.h:71 +msgid "Available languages ​​in the system:" msgstr "" -msgid "Turkish, Turkey" +#: source/ubl-strings.h:72 +msgid "System locale" msgstr "" -msgid "Ukrainian, Ukraine" +#: source/ubl-strings.h:73 +msgid "Territory" msgstr "" -msgid "Vietnamese, Vietnam" +#: source/ubl-strings.h:74 +msgid "Value" msgstr "" -msgid "Simplified Chinese, China" +#: source/ubl-strings.h:75 +msgid "Manual input:" msgstr "" -msgid "Traditional Chinese, Hong Kong SAR China" +#: source/ubl-strings.h:76 +msgid "Languages" msgstr "" -msgid "Chinese, Singapore" +#: source/ubl-strings.h:77 +msgid "Add anguages" msgstr "" -msgid "Traditional Chinese, Taiwan" +#: source/ubl-strings.h:78 +msgid "Remove language" msgstr "" diff --git a/locale/ubl-settings-system_ru.po b/locale/ubl-settings-system_ru.po index 1befc8d..26ce070 100644 --- a/locale/ubl-settings-system_ru.po +++ b/locale/ubl-settings-system_ru.po @@ -238,398 +238,55 @@ msgstr "Выполнение..." msgid "Check" msgstr "Проверка" -msgid "Domain connection" -msgstr "Соединение домена" - +#: source/ubl-strings.h:68 msgid "OU, Organizational Unit:" msgstr "Подразделение:" -msgid "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\"" -msgstr "Имя OU, в котором мы хотим создать учётную запись компьютера в домене. Если учётная запись уже существует, то она будет обновлена. Пример: \"ubhosts\" или \"OU=UBL Servers,OU=KOM,DC=ad,DC=holding,DC=com\"" - -msgid "Afrikaans, South Africa" -msgstr "Африканский, Южная Африка" - -msgid "Arabic, United Arab Emirates" -msgstr "Арабский, ЮАР" - -msgid "Arabic, Bahrain" -msgstr "Арабский, Бахрейн" - -msgid "Arabic, Algeria" -msgstr "Арабский, Алжир" - -msgid "Arabic, Egypt" -msgstr "Арабский, Египет" - -msgid "Arabic, Iraq" -msgstr "Арабский, Ирак" - -msgid "Arabic, Jordan" -msgstr "Арабский, Иордания" - -msgid "Arabic, Kuwait" -msgstr "Арабский, Кувейт" - -msgid "Arabic, Libya" -msgstr "Арабский, Ливия" - -msgid "Arabic, Morocco" -msgstr "Арабский, Морокко" - -msgid "Arabic, Oman" -msgstr "Арабский, Оман" - -msgid "Arabic, Qatar" -msgstr "Арабский, Катар" - -msgid "Arabic, Saudi Arabia" -msgstr "Арабский, Саудовская Аравия" - -msgid "Arabic, Tunisia" -msgstr "Арабский, Тунис" - -msgid "Arabic, Yemen" -msgstr "Арабский, Йемен" - -msgid "Assamese, India" -msgstr "Ассамский, Индия" - -msgid "Azerbaijani, Azerbaijan" -msgstr "Азербайджанский,Азербайджан" - -msgid "Belarusian, Belarus" -msgstr "Беларусский, Беларусь" - -msgid "Bulgarian, Bulgaria" -msgstr "Болгарский, Болгария" - -msgid "Bengali, India" -msgstr "Бенгальский, Индия" - -msgid "Bosnian, Bosnia and Herzegovina" -msgstr "Боснийский, Босния и Герцеговина" - -msgid "Catalan, Spain" -msgstr "Каталонский, Испания" - -msgid "Czech, Czech Republic" -msgstr "Чешский, Чехия" - -msgid "Danish, Denmark" -msgstr "Датский, Дания" - -msgid "German, Austria" -msgstr "Немецкий, Австрия" - -msgid "German, Belgium" -msgstr "Немецкий, Бельгия" - -msgid "German, Switzerland" -msgstr "Немецкий, Швейцария" - -msgid "German, Germany" -msgstr "Немецкий, Германия" - -msgid "German, Liechtenstein" -msgstr "Немецкий, Лихтенштейн" - -msgid "German, Luxembourg" -msgstr "Немецкий, Люксембург" - -msgid "Greek, Cyprus" -msgstr "Греческий, Кипр" - -msgid "Greek, Greece" -msgstr "Греческий, Греция" - -msgid "English, Australia" -msgstr "Английский, Австралия" - -msgid "English, Botswana" -msgstr "Английский, ботсвана" - -msgid "English, Canada" -msgstr "Английский, Канада" - -msgid "English, United Kingdom" -msgstr "Английский, Великобритания" - -msgid "English, Hong Kong SAR China" -msgstr "Английский, Гонконг" - -msgid "English, Ireland" -msgstr "Английский, Ирландия" - -msgid "English, India" -msgstr "Английский, Индия" - -msgid "English, Malta" -msgstr "Английский, Мальта" - -msgid "English, New Zealand" -msgstr "Английский, Новая Зеландия" - -msgid "English, Philippines" -msgstr "Английский, Филиппины" - -msgid "English, Singapore" -msgstr "Английский, Сингапур" - -msgid "English, U.S.A." -msgstr "Английский, США" - -msgid "English, Zimbabwe" -msgstr "Английский, Зимбабве" - -msgid "Spanish, Argentina" -msgstr "Испанский, Аргентина" - -msgid "Spanish, Bolivia" -msgstr "Испанский, Боливия" - -msgid "Spanish, Chile" -msgstr "Испанский, Чили" - -msgid "Spanish, Colombia" -msgstr "Испанский, Колумбия" - -msgid "Spanish, Costa Rica" -msgstr "Испанский, Коста-Рика" - -msgid "Spanish, Dominican Republic" -msgstr "Испанский, Доминиканская республика" - -msgid "Spanish, Ecuador" -msgstr "Испанский, Эквадор" - -msgid "Spanish, Spain" -msgstr "Испанский, Испания" - -msgid "Spanish, Guatemala" -msgstr "Испанский, Гватемала" - -msgid "Spanish, Honduras" -msgstr "Испанский, Гондурас" - -msgid "Spanish, Mexico" -msgstr "Испанский, Мексика" - -msgid "Spanish, Nicaragua" -msgstr "Испанский, Никарагуа" - -msgid "Spanish, Panama" -msgstr "Испанский, Панама" - -msgid "Spanish, Peru" -msgstr "Испанский, Перу" - -msgid "Spanish, Puerto Rico" -msgstr "Испанский, Пуэрто-Рико" - -msgid "Spanish, Paraguay" -msgstr "Испанский, Парагвай" - -msgid "Spanish, El Salvador" -msgstr "Испанский, Сальвадор" - -msgid "Spanish, U.S.A." -msgstr "Испанский, США" - -msgid "Spanish, Uruguay" -msgstr "Испанский, Уругвай" - -msgid "Spanish, Venezuela" -msgstr "Испанский, Венесуэла" - -msgid "Estonian, Estonia" -msgstr "Эстонский, Эстония" - -msgid "Finnish, Finland" -msgstr "Финский, Финляндия" - -msgid "French, Belgium" -msgstr "Французский, Бельгия" - -msgid "French, Canada" -msgstr "Французский, Канада" - -msgid "French, Switzerland" -msgstr "Французский, Швейцария" - -msgid "French, France" -msgstr "Французский, Франция" - -msgid "French, Luxembourg" -msgstr "Французский, Люксембург" - -msgid "Gujarati, India" -msgstr "Гуджаратский, Индия" - -msgid "Hebrew, Israel" -msgstr "Иврит, Израиль" - -msgid "Hindi, India" -msgstr "Хинди, Индия" - -msgid "Croatian, Croatia" -msgstr "Хорватский, Хорватия" - -msgid "Hungarian, Hungary" -msgstr "Венгерский, Венгрия" - -msgid "Armenian, Armenia" -msgstr "Армянский, Армения" - -msgid "Indonesian, Indonesia" -msgstr "Индонезийский, Индонезия" - -msgid "Icelandic, Iceland" -msgstr "Исландский, Исландия" - -msgid "Italian, Switzerla" -msgstr "Итальянский, Швейцария" - -msgid "Italian, Italy" -msgstr "Итальянский, Италия" - -msgid "Japanese, Japan" -msgstr "Японский, Япония" - -msgid "Georgian, Georgia" -msgstr "Грузинский, Грузия" - -msgid "Kazakh, Kazakhstan" -msgstr "Казахский, Казахстан" - -msgid "Kannada, India" -msgstr "Каннада, Индия" - -msgid "Korean, Korea" -msgstr "Корейский, Корея" - -msgid "Kashmiri, India" -msgstr "Кашмирский, Индия" - -msgid "Kurdish, Turkey" -msgstr "Курдский, Турция" - -msgid "Kurdish (Sorani), Turkey" -msgstr "Курдский (Сорани), Турция" - -msgid "Kirghiz, Kyrgyzstan" -msgstr "Киргизский, Кыргызстан" - -msgid "Lithuanian, Lithuania" -msgstr "Литовский, Литва" - -msgid "Latvian, Latvia" -msgstr "Латышский, Латвия" - -msgid "Macedonian, Macedonia" -msgstr "Македонский, Северная Македония" - -msgid "Malayalam, India" -msgstr "Малаялам, Индия" - -msgid "Marathi, India" -msgstr "Маратхи, Индия" - -msgid "Malay, Malaysia" -msgstr "Малайский, Малайзия" - -msgid "Maltese, Malta" -msgstr "Мальтийский, Мальта" - -msgid "Bokmal, Norway" -msgstr "Букмол, Норвегия" - -msgid "Dutch, Belgium" -msgstr "Нидерландский, Бельгия" - -msgid "Dutch, Netherlands" -msgstr "Нидерландский, Нидерланды" - -msgid "Nynorsk, Norway" -msgstr "Норвежский, Норвегия" - -msgid "Oriya, India" -msgstr "Ория, Индия" - -msgid "Punjabi, India" -msgstr "Панджаби, Индия" - -msgid "Polish, Poland" -msgstr "Польский, Польша" - -msgid "Portuguese, Brazil" -msgstr "Португальский, Бразилия" - -msgid "Portuguese, Portugal" -msgstr "Португальский, Португалия" - -msgid "Romanian, Romania" -msgstr "Румынский, Румыния" - -msgid "Russian, Russia" -msgstr "Русский, Россия" - -msgid "Russian, Ukraine" -msgstr "Русский, Украина" - -msgid "Sanskrit, India" -msgstr "Санскрит, Индия" - -msgid "Slovak, Slovakia" -msgstr "Словацкий, Словакия" - -msgid "Slovenian, Slovenia" -msgstr "Словенский, Словения" - -msgid "Albanian, Albania" -msgstr "Албанский, Албания" - -msgid "Serbian, Montenegro" -msgstr "Сербский, Черногория" - -msgid "Serbian, Montenegro (Latin)" -msgstr "Сербский, Черногория" - -msgid "Serbian, Serbia" -msgstr "Сербский, Сербия" - -msgid "Serbian, Serbia (Latin)" -msgstr "Сербский, Сербия" - -msgid "Tamil, India" -msgstr "Тамильский, Индия" +#: source/ubl-strings.h:69 +msgid "" +"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\"" +msgstr "" +"Имя OU, в котором мы хотим создать учётную запись компьютера в домене. Если " +"учётная запись уже существует, то она будет обновлена. Пример: \"ubhosts\" " +"или \"OU=UBL Servers,OU=KOM,DC=ad,DC=holding,DC=com\"" -msgid "Telugu, India" -msgstr "Тулугу, Индия" +#: source/ubl-strings.h:70 +msgid "Language" +msgstr "Язык" -msgid "Thai, Thailand" -msgstr "Тайский, Тайланд" +#: source/ubl-strings.h:71 +msgid "Available languages ​​in the system:" +msgstr "Доступные языки для системы:" -msgid "Turkish, Turkey" -msgstr "Турецкий, Турция" +#: source/ubl-strings.h:72 +msgid "System locale" +msgstr "Язык системы" -msgid "Ukrainian, Ukraine" -msgstr "Украинский, Украина" +#: source/ubl-strings.h:73 +msgid "Territory" +msgstr "Страна" -msgid "Vietnamese, Vietnam" -msgstr "Вьетнамский, Вьетнам" +#: source/ubl-strings.h:74 +msgid "Value" +msgstr "Значение" -msgid "Simplified Chinese, China" -msgstr "Упрощённый Китайский, Китай" +#: source/ubl-strings.h:75 +msgid "Manual input:" +msgstr "Ручной выбор:" -msgid "Traditional Chinese, Hong Kong SAR China" -msgstr "Традиционный Китайский, Гонконг" +#: source/ubl-strings.h:76 +msgid "Languages" +msgstr "Языки" -msgid "Chinese, Singapore" -msgstr "Китайский, Сингапур" +#: source/ubl-strings.h:77 +msgid "Add anguages" +msgstr "Добавить язык" -msgid "Traditional Chinese, Taiwan" -msgstr "Традиционный Китайский, Тайвань" +#: source/ubl-strings.h:78 +msgid "Remove language" +msgstr "Удалить язык" -msgid "Swedish, Sweden" -msgstr "Шведский, Швеция" +msgid "Domain connection" +msgstr "Соединение домена" diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 7bd6310..19f115b 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -78,6 +78,7 @@ endif() set(SOURCE_FILES ubl-settings-system.c + ubl-settings-system-save.c ubl-settings-system-language.c ubl-settings-system-domain.c ubl-settings-system.h diff --git a/source/ubl-settings-system-language.c b/source/ubl-settings-system-language.c index 7e936dc..116c291 100644 --- a/source/ubl-settings-system-language.c +++ b/source/ubl-settings-system-language.c @@ -1,55 +1,79 @@ #include "ubl-settings-system.h" -void on_locale_toggle(GtkCellRendererToggle *,GtkTreePath* path,GtkTreeViewColumn* ,language_window *window){ +void on_locale_toggle(GtkCellRenderer *, gchar *path,language_window *window){ GtkTreeIter iter; - GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(window->LanguagesTree)); - gtk_tree_model_get_iter(model,&iter,path); + GtkTreeModel *model = GTK_TREE_MODEL(window->LanguagesList); + gtk_tree_model_get_iter_from_string(model,&iter,path); gboolean is_active; - gtk_tree_model_get(model,&iter,0,&is_active,-1); + char *target; + gtk_tree_model_get(model,&iter,0,&is_active,1,&target,-1); gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,!is_active,-1); + + char *locales = (char*)gtk_entry_get_text(GTK_ENTRY(window->ManualEntry)); + if (!is_active){ + if (!yon_char_check_element(locales,target,",")){ + char *temp = yon_char_append_element(locales,target,","); + gtk_entry_set_text(GTK_ENTRY(window->ManualEntry),temp); + free(temp); + } + } else { + char *temp = yon_char_remove_element(locales,target,","); + gtk_entry_set_text(GTK_ENTRY(window->ManualEntry),temp); + if (!yon_char_is_empty(temp)) free(temp); + } } void on_locale_accept(GtkWidget *self, language_window *window){ main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets"); - yon_interface_update(widgets); + char *final = (char*)gtk_entry_get_text(GTK_ENTRY(window->ManualEntry)); + if (yon_char_is_empty(final)) { + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(NOTHING_CHOSEN_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + yon_config_register(locale_parameter,locale_parameter_command,final); on_subwindow_close(self); + yon_interface_update(widgets); } 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->DefaultSwitch = yon_gtk_builder_get_widget(builder,"DefaultSwitch"); + window->ManualEntry = yon_gtk_builder_get_widget(builder,"ManualEntry"); 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->DefaultSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->LanguagesTree); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_locale_accept),window); - g_signal_connect(G_OBJECT(window->LanguagesTree),"row-activated",G_CALLBACK(on_locale_toggle),window); + g_signal_connect(G_OBJECT(window->ToggleCell),"toggled",G_CALLBACK(on_locale_toggle),window); - char *config_value = config(language_parameter); - - int parsed_size; - config_str config_parsed = yon_char_parse(config_value,&parsed_size,";"); + char *config_value = config(locale_parameter); + int config_parsed_size; + config_str config_parsed = NULL; + if (config_value){ + gtk_entry_set_text(GTK_ENTRY(window->ManualEntry),config_value); + config_parsed = yon_char_parse(config_value,&config_parsed_size,","); + } int size; GtkTreeIter iter; config_str languages = yon_config_load(languages_command,&size); for (int i=0;iLanguagesList,&iter); - gtk_list_store_set(window->LanguagesList,&iter,1,languages[0],2,languages[1],3,languages[2],-1); - char *found = yon_char_parsed_check_exist_begins_with(config_parsed,parsed_size,languages[i]); - if (!yon_char_is_empty(found)){ + gtk_list_store_set(window->LanguagesList,&iter,1,parsed[0],2,parsed[1],3,parsed[2],-1); + if (config_parsed_size&&yon_char_parsed_check_exist(config_parsed,config_parsed_size,parsed[2])>-1){ gtk_list_store_set(window->LanguagesList,&iter,0,1,-1); } } - yon_char_parsed_free(config_parsed,parsed_size); + yon_char_parsed_free(config_parsed,config_parsed_size); return window; } @@ -58,12 +82,28 @@ void on_language_open(GtkWidget *, main_window *widgets){ g_object_set_data(G_OBJECT(window->Window),"widgets",widgets); - if (!config(locale_parameter)){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DefaultSwitch),1); - } - yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),TITLE_LABEL,main_icon,"LocalesWindow"); - gtk_dialog_run(GTK_DIALOG(window->Window)); + gtk_widget_show(window->Window); +} + +void on_language_remove(GtkWidget *, main_window *widgets){ + GtkTreeIter iter; + GtkTreeModel *model; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LocaleTree)),&model,&iter)){ + char *target; + gtk_tree_model_get(model,&iter,3,&target,-1); + char *locale_param = config(locale_parameter); + char *temp = yon_char_remove_element(locale_param,target,","); + if (!yon_char_is_empty(temp)){ + yon_config_register(locale_parameter,locale_parameter_command,temp); + free(temp); + } + locale_param = config(language_parameter); + if (!strcmp(locale_param,target)){ + yon_config_remove_by_key(language_parameter); + } + yon_interface_update(widgets); + } } \ No newline at end of file diff --git a/source/ubl-settings-system-save.c b/source/ubl-settings-system-save.c new file mode 100644 index 0000000..958b7c2 --- /dev/null +++ b/source/ubl-settings-system-save.c @@ -0,0 +1,148 @@ +#include "ubl-settings-system.h" + + +void on_save_done(main_window *, config_str output, int size){ + char *final_output = yon_char_parsed_to_string(output,size,"\n"); + if (final_output){ + printf("%s\n",final_output); + free(final_output); + } + yon_char_parsed_free(output,size); + textdomain(template_ui_LocaleName); + switch (main_config.save_config){ + case 0: + yon_ubl_status_box_render(GLOBAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + case 1: + yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + case 2: + yon_ubl_status_box_render(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + case 3: + yon_ubl_status_box_render(SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + + } + textdomain(LocaleName); + +} + +void on_config_reload(GtkWidget *,main_window *widgets){ + if (main_config.load_mode==0){ + yon_config_global_load(NULL,widgets); + } else if (main_config.load_mode==1){ + yon_config_local_load(NULL,widgets); + } + yon_interface_update(widgets); +} + +void yon_load_proceed(YON_CONFIG_TYPE type){ + yon_config_clean(); + if (!yon_char_is_empty(config_get_default_command)) + yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); + if (type==YON_CONFIG_GLOBAL){ + yon_config_load_config(type,config_get_command("global"),NULL); + } else if (type==YON_CONFIG_LOCAL){ + yon_config_load_config(type,config_get_command("system"),NULL); + } else if (type==YON_CONFIG_CUSTOM){ + char *path=""; + textdomain(template_ui_LocaleName); + GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); + textdomain(LocaleName); + gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-services"); + gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter,"*.ini"); + gtk_file_filter_set_name(filter, "*.ini"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); + gtk_widget_show(dialog); + int response = gtk_dialog_run(GTK_DIALOG(dialog)); + if (response == GTK_RESPONSE_ACCEPT){ + char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + if (!yon_char_is_empty(file)){ + path=file; + } + gtk_widget_destroy(dialog); + } else { + gtk_widget_destroy(dialog); + } + char *command = config_get_command(path); + yon_config_load_config(type,command,NULL); + } +} + +void yon_config_local_load(GtkWidget *, main_window *widgets){ + yon_load_proceed(YON_CONFIG_LOCAL); + main_config.load_mode=YON_CONFIG_LOCAL; + yon_interface_update(widgets); +} + +void yon_config_global_load(GtkWidget *, main_window *widgets){ + yon_load_proceed(YON_CONFIG_GLOBAL); + if (getuid()==0){ + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + textdomain(LocaleName); + } + main_config.load_mode=0; + yon_interface_update(widgets); +} + +void yon_config_custom_load(GtkWidget *, main_window *widgets){ + yon_load_proceed(YON_CONFIG_CUSTOM); + main_config.load_mode=YON_CONFIG_CUSTOM; + yon_interface_update(widgets); +} + +void yon_interface_save(main_window *widgets){ + if (gtk_switch_get_active(GTK_SWITCH(widgets->LocaleDefaultSwitch))){ + yon_config_remove_by_key(language_parameter); + yon_config_remove_by_key(locale_parameter); + } +} + +void yon_config_global_local_save(GtkWidget *, main_window *widgets){ + yon_interface_save(widgets); + main_config.save_config=2; + int changed = yon_config_get_status(id_parameter)==1; + template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_command("global"),NULL); + if (window){ + if (changed){ + yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"warning",SAVE_WARNING_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } + } + +} + +void yon_config_local_save(GtkWidget *, main_window *widgets){ + yon_interface_save(widgets); + main_config.save_config=1; + int changed = yon_config_get_status(id_parameter)==1; + template_saving_window *window = yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_command("system"),NULL); + if (window){ + if (changed){ + yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"warning",SAVE_WARNING_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } + } + +} + +void yon_config_global_save(GtkWidget *, main_window *widgets){ + yon_interface_save(widgets); + main_config.save_config=0; + int changed = yon_config_get_status(id_parameter)==1; + template_saving_window *window = yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_command("global"),NULL); + if (window){ + if (changed){ + yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"warning",SAVE_WARNING_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + } + } + +} + +void yon_config_custom_save(GtkWidget *, main_window *widgets){ + yon_interface_save(widgets); + main_config.save_config=3; + template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,config_get_command("system"),NULL); + if (window){}; +} \ No newline at end of file diff --git a/source/ubl-settings-system.c b/source/ubl-settings-system.c index a40931f..8c91923 100644 --- a/source/ubl-settings-system.c +++ b/source/ubl-settings-system.c @@ -4,122 +4,23 @@ config main_config; //functions -void on_save_done(main_window *, config_str output, int size){ - char *final_output = yon_char_parsed_to_string(output,size,"\n"); - if (final_output){ - printf("%s\n",final_output); - free(final_output); - } - yon_char_parsed_free(output,size); - textdomain(template_ui_LocaleName); - switch (main_config.save_config){ - case 0: - yon_ubl_status_box_render(GLOBAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - break; - case 1: - yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - break; - case 2: - yon_ubl_status_box_render(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - break; - case 3: - yon_ubl_status_box_render(SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - - } - textdomain(LocaleName); - -} - -void on_config_reload(GtkWidget *,main_window *widgets){ - if (main_config.load_mode==0){ - yon_config_global_load(NULL,widgets); - } else if (main_config.load_mode==1){ - yon_config_local_load(NULL,widgets); - } - yon_interface_update(widgets); -} - -void yon_load_proceed(YON_CONFIG_TYPE type){ - yon_config_clean(); - if (!yon_char_is_empty(config_get_default_command)) - yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); - if (type==YON_CONFIG_GLOBAL){ - yon_config_load_config(type,config_get_command("global"),NULL); - } else if (type==YON_CONFIG_LOCAL){ - yon_config_load_config(type,config_get_command("system"),NULL); - } else if (type==YON_CONFIG_CUSTOM){ - char *path=""; - textdomain(template_ui_LocaleName); - GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); - textdomain(LocaleName); - gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-services"); - gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL); - GtkFileFilter *filter = gtk_file_filter_new(); - gtk_file_filter_add_pattern(filter,"*.ini"); - gtk_file_filter_set_name(filter, "*.ini"); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); - gtk_widget_show(dialog); - int response = gtk_dialog_run(GTK_DIALOG(dialog)); - if (response == GTK_RESPONSE_ACCEPT){ - char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - if (!yon_char_is_empty(file)){ - path=file; - } - gtk_widget_destroy(dialog); - } else { - gtk_widget_destroy(dialog); - } - char *command = config_get_command(path); - yon_config_load_config(type,command,NULL); - } -} - -void yon_config_local_load(GtkWidget *, main_window *widgets){ - yon_load_proceed(YON_CONFIG_LOCAL); - main_config.load_mode=YON_CONFIG_LOCAL; - yon_interface_update(widgets); -} - -void yon_config_global_load(GtkWidget *, main_window *widgets){ - yon_load_proceed(YON_CONFIG_GLOBAL); - if (getuid()==0){ - textdomain(template_ui_LocaleName); - yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - textdomain(LocaleName); - } - main_config.load_mode=0; - yon_interface_update(widgets); -} - -void yon_config_custom_load(GtkWidget *, main_window *widgets){ - yon_load_proceed(YON_CONFIG_CUSTOM); - main_config.load_mode=YON_CONFIG_CUSTOM; - yon_interface_update(widgets); -} void yon_interface_update(main_window *widgets){ g_signal_handlers_block_by_func(G_OBJECT(widgets->IDEntry),G_CALLBACK(on_id_changed),widgets); g_signal_handlers_block_by_func(G_OBJECT(widgets->HostnameEntry),G_CALLBACK(on_hostname_changed),widgets); - // g_signal_handlers_block_by_func(G_OBJECT(widgets->LanguageCombo),G_CALLBACK(on_language_changed),widgets); + gtk_list_store_clear(widgets->LanguageList); gtk_entry_set_text(GTK_ENTRY(widgets->HostnameEntry),""); gtk_entry_set_text(GTK_ENTRY(widgets->IDEntry),""); - // gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),DEFAULT_LABEL); gtk_entry_set_text(GTK_ENTRY(widgets->DomainEntry),""); int size; - GtkTreeIter iter; config_str rtn = yon_file_open(get_id_command,&size); rtn[0]=yon_char_divide_search(rtn[0],"\n",-1); gtk_entry_set_text(GTK_ENTRY(widgets->IDEntry),*rtn); - // gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LanguageCombo),0); char *hostname = yon_config_get_by_key(hostname_parameter); if (!yon_char_is_empty(hostname)){ gtk_entry_set_text(GTK_ENTRY(widgets->HostnameEntry),hostname); } - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->LanguageList),&iter); - for(;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->LanguageList),&iter)){ - gtk_list_store_set(widgets->LanguageList,&iter,2,0,-1); - } char *id = yon_config_get_by_key(id_parameter); if (id&&!strcmp(id,"random")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->IDCombo),1); @@ -137,80 +38,35 @@ void yon_interface_update(main_window *widgets){ if (!yon_char_is_empty(domain)){ gtk_entry_set_text(GTK_ENTRY(widgets->DomainEntry),domain); } - - // char *lang = yon_config_get_by_key(language_parameter); - // char *avlocale = yon_config_get_by_key(locale_parameter); - // int locsize; - // if (avlocale){}; - // config_str locale_parsed = yon_char_parse(avlocale,&locsize,","); - // gboolean is_active; - // char *locale_string=""; - // char *loc_name; - // if (!yon_char_is_empty(avlocale)){ - // int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->LanguageList),&iter); - // for(;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->LanguageList),&iter)){ - // gtk_tree_model_get(GTK_TREE_MODEL(widgets->languagelist),&iter,0,&loc_name,1,&code,2,&is_active,-1); - // if (yon_char_parsed_check_exist(locale_parsed,locsize,code)>-1){ - // gtk_list_store_set(widgets->languagelist,&iter,2,1,-1); - // char *temp = yon_char_unite(yon_char_is_empty(locale_string)?"":locale_string,yon_char_is_empty(locale_string)?"":"; ",loc_name,NULL); - // if (!yon_char_is_empty(locale_string)) free(locale_string); - // locale_string = temp; - // } - // } - // if (strcmp(locale_string,"")) gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),locale_string); - // } - // yon_language_update(widgets); - // if (!yon_char_is_empty(lang)) { - // gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->LanguageCombo),lang); - // } else { - // gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LanguageCombo),0); - // } - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->IDEntry),G_CALLBACK(on_id_changed),widgets); - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->HostnameEntry),G_CALLBACK(on_hostname_changed),widgets); - // g_signal_handlers_unblock_by_func(G_OBJECT(widgets->LanguageCombo),G_CALLBACK(on_language_changed),widgets); -} - -void yon_config_global_local_save(){ - main_config.save_config=2; - int changed = yon_config_get_status(id_parameter)==1; - template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_command("global"),NULL); - if (window){ - if (changed){ - yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"warning",SAVE_WARNING_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - } - } - -} - -void yon_config_local_save(){ - main_config.save_config=1; - int changed = yon_config_get_status(id_parameter)==1; - template_saving_window *window = yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_command("system"),NULL); - if (window){ - if (changed){ - yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"warning",SAVE_WARNING_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - } - } - -} - -void yon_config_global_save(){ - main_config.save_config=0; - int changed = yon_config_get_status(id_parameter)==1; - template_saving_window *window = yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_command("global"),NULL); - if (window){ - if (changed){ - yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"warning",SAVE_WARNING_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + { + char *config_locale = config(locale_parameter); + char *config_languages = config(language_parameter); + int parsed_param_size; + config_str parsed_param = yon_char_parse(config_locale,&parsed_param_size,","); + GtkTreeIter iter; + for (int i=0;iLanguageList,&iter); + gtk_list_store_set(widgets->LanguageList,&iter,1,parsed[1],2,parsed[2],3,parsed[0],-1); + if (!yon_char_is_empty(config_languages)){ + if (!strcmp(config_languages,parsed[0])){ + gtk_list_store_set(widgets->LanguageList,&iter,0,1,-1); + } + } else if (!i){ + + } + yon_char_parsed_free(parsed,parsed_size); + } } } + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->IDEntry),G_CALLBACK(on_id_changed),widgets); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->HostnameEntry),G_CALLBACK(on_hostname_changed),widgets); } -void yon_config_custom_save(){ - main_config.save_config=3; - template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,config_get_command("system"),NULL); - if (window){}; -} void yon_gtk_windget_set_sensitive_from_entry_emptiness(GtkEntry *self, GtkWidget *target){ if (yon_char_is_empty(gtk_entry_get_text(self))){ gtk_widget_set_sensitive(target,0); @@ -219,6 +75,20 @@ void yon_gtk_windget_set_sensitive_from_entry_emptiness(GtkEntry *self, GtkWidge } } +void on_locale_toggled(GtkCellRenderer *, gchar *path, main_window *widgets){ + GtkTreeIter fiter; + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->LanguageList); + gtk_tree_model_get_iter_from_string(model,&fiter,path); + for_iter(model,&iter){ + gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,0,-1); + + } + char *target; + gtk_tree_model_get(model,&fiter,3,&target,-1); + gtk_list_store_set(GTK_LIST_STORE(model),&fiter,0,1,-1); + yon_config_register(language_parameter,language_parameter_command,target); +} void on_hostname_changed(GtkEntry *self, main_window *){ char *text = (char*)gtk_entry_get_text(self); @@ -297,11 +167,37 @@ void on_terminal_command_ended(VteTerminal *, gint status, domain_info_window *w } } +void on_language_default_toggled(GtkWidget *, int status, main_window *widgets){ + gtk_widget_set_sensitive(widgets->LocaleTree,!status); + gtk_widget_set_sensitive(widgets->LocaleAddButton,!status); + gtk_widget_set_sensitive(widgets->LocaleRemoveButton,!status); + if (!status){ + GtkTreeModel *model = GTK_TREE_MODEL(widgets->LanguageList); + GtkTreeIter iter; + char *locales = NULL; + for_iter(model,&iter){ + int status; + char *target; + + gtk_tree_model_get(model,&iter,0,&status,3,&target,-1); + char *temp = yon_char_append_element(locales?locales:"",target,","); + if (!yon_char_is_empty(locales)) free(locales); + locales = temp; + if (status){ + yon_config_register(language_parameter,language_parameter_command,target); + } + } + if (!yon_char_is_empty(locales)){ + yon_config_register(locale_parameter,locale_parameter_command,locales); + } + } +} + main_window *yon_main_window_complete(main_window *widgets){ /* Widgets getting | Получение виджетов */ widgets = yon_remalloc(widgets,sizeof(main_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); - gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"BoxMain"),0,0,0); + gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"BoxMain"),1,1,0); widgets->HostnameEntry = yon_gtk_builder_get_widget(builder,"HostnameEntry"); widgets->IDCombo = yon_gtk_builder_get_widget(builder,"IDCombo"); @@ -312,6 +208,7 @@ main_window *yon_main_window_complete(main_window *widgets){ widgets->LocaleAddButton = yon_gtk_builder_get_widget(builder,"LocaleAddButton"); widgets->LocaleRemoveButton = yon_gtk_builder_get_widget(builder,"LocaleRemoveButton"); widgets->LocaleDefaultSwitch = yon_gtk_builder_get_widget(builder,"LocaleDefaultSwitch"); + widgets->LocaleCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"LocaleCell")); widgets->FindButton = yon_gtk_builder_get_widget(builder,"FindButton"); widgets->DomainButton = yon_gtk_builder_get_widget(builder,"DomainButton"); @@ -322,18 +219,9 @@ main_window *yon_main_window_complete(main_window *widgets){ widgets->DocumentationMenuItem = yon_ubl_menu_item_documentation_new(DOCUMENTATION_LABEL); widgets->AboutMenuItem = yon_ubl_menu_item_about_new(ABOUT_LABEL); - - gtk_window_set_title(GTK_WINDOW(widgets->Window),TITLE_LABEL); - - GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menu2"); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->DocumentationMenuItem); - gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->AboutMenuItem); - /* Widget registration for config monitoring | Регистрация виджетов для мониторинга конфига */ /* Signal connection | Присоединение сигналов */ - g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),WIKI_LINK); - g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(on_about),widgets); g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(yon_config_global_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(yon_config_local_load),widgets); @@ -349,10 +237,9 @@ main_window *yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->IDEntry),"changed",G_CALLBACK(on_id_changed),widgets); g_signal_connect(G_OBJECT(widgets->IDCopyButton),"clicked",G_CALLBACK(on_id_copy),widgets); g_signal_connect(G_OBJECT(widgets->LocaleAddButton),"clicked",G_CALLBACK(on_language_open),widgets); - // g_signal_connect(G_OBJECT(widgets->LocaleRemoveButton),"clicked",G_CALLBACK(on_language_remove),widgets); - g_signal_connect(G_OBJECT(widgets->LocaleDefaultSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LocaleTree); - g_signal_connect(G_OBJECT(widgets->LocaleDefaultSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LocaleAddButton); - g_signal_connect(G_OBJECT(widgets->LocaleDefaultSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LocaleRemoveButton); + g_signal_connect(G_OBJECT(widgets->LocaleRemoveButton),"clicked",G_CALLBACK(on_language_remove),widgets); + g_signal_connect(G_OBJECT(widgets->LocaleDefaultSwitch),"state-set",G_CALLBACK(on_language_default_toggled),widgets); + g_signal_connect(G_OBJECT(widgets->LocaleCell),"toggled",G_CALLBACK(on_locale_toggled),widgets); g_signal_connect(G_OBJECT(widgets->DomainButton),"clicked",G_CALLBACK(on_domain_opened),widgets); g_signal_connect(G_OBJECT(widgets->DomainEntry),"icon-press",G_CALLBACK(on_main_window_domain_status_clicked),widgets); @@ -362,23 +249,9 @@ main_window *yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->FindButton),"clicked",G_CALLBACK(on_find_domains_clicked),widgets); - - gtk_widget_set_size_request(widgets->Window,800,440); - // g_timeout_add(1000,(GSourceFunc)on_check_domain_connected,widgets); on_check_domain_connected(NULL, widgets); - int size; - config_str locales = yon_resource_open_file(get_locales_command,&size); - GtkTreeIter iter; - for (int i=1;iLanguageList,&iter); - gtk_list_store_set(widgets->LanguageList,&iter,0,_(loc_parsed[1]),1,loc_parsed[0],2,0,-1); - } - yon_char_parsed_free(locales,size); if (main_config.lock_load_global == 1){ gtk_widget_set_sensitive(widgets->LoadGlobalMenuItem,0); } @@ -399,9 +272,24 @@ main_window *yon_main_window_complete(main_window *widgets){ return widgets; } +void yon_config_init(){ + main_config.languages = g_hash_table_new(g_str_hash,g_str_equal); + int size; + config_str languages = yon_config_load(languages_command,&size); + for (int i=0;i + + @@ -23,7 +25,7 @@ com.ublinux.libublsettingsui-gtk3.accept-symbolic - 450 + 500 550 False True @@ -32,6 +34,7 @@ True False + 5 vertical 5 @@ -49,81 +52,71 @@ 0 - - - True - False - 5 - 5 - 5 - 5 - 5 - - - True - True - - - False - True - 0 - - - - - True - False - Default - - - False - True - 1 - - - - - False - True - 1 - - True True 5 5 - 5 + never in True True LanguagesList - False + both True - + + none + - column - 2 + 0 - column + Locale - 0 + 1 + + + + + + + Language + + + word + 100 + + + 2 + + + + + + + Territory + + + word + 125 + + + 3 @@ -134,6 +127,43 @@ True True + 1 + + + + + True + False + 5 + 5 + 5 + + + True + False + Manual input: + + + False + True + 0 + + + + + True + True + + + True + True + 1 + + + + + False + True 2 @@ -143,7 +173,6 @@ True False - True True diff --git a/ubl-settings-system.glade b/ubl-settings-system.glade index 9e717c1..163446a 100644 --- a/ubl-settings-system.glade +++ b/ubl-settings-system.glade @@ -27,12 +27,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - + + + - + + + - - @@ -368,13 +370,64 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True True in + 125 True True + LanguageList + + + System locale + + + True + + + 0 + + + + + + + 100 + Value + + + + 3 + + + + + + + Language + True + + + + 1 + + + + + + + Territory + True + + + + 2 + + + + @@ -395,6 +448,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True True True + Add languages image2