From f6381495920c0ad709d41849d32ed7adeae19c58 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 7 Mar 2024 10:16:53 +0600 Subject: [PATCH 1/3] Updates for new libraries version --- source/ubl-settings-system.c | 40 ++++++++++++++++-------------------- source/ubl-settings-system.h | 21 ++++++++++++------- 2 files changed, 32 insertions(+), 29 deletions(-) diff --git a/source/ubl-settings-system.c b/source/ubl-settings-system.c index 17a3b0b..47112cf 100644 --- a/source/ubl-settings-system.c +++ b/source/ubl-settings-system.c @@ -5,11 +5,13 @@ config main_config; //functions void yon_load_proceed(YON_CONFIG_TYPE type){ - if (yon_config_load_register(type,hostname_section,hostname_parameter,id_section,id_parameter,console_font_section,console_font_parameter,locale_section,locale_parameter,language_section,language_parameter,NULL)){} - else{ - textdomain(template_ui_LocaleName); - yon_ubl_status_box_render(LOAD_FAILED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); - textdomain(LocaleName); + yon_config_clean(); + yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); + if (type==YON_CONFIG_GLOBAL){ + yon_config_load_config(type,config_get_global_command,NULL); + } + if (type==YON_CONFIG_LOCAL){ + yon_config_load_config(type,config_get_local_command,NULL); } } @@ -164,40 +166,34 @@ void yon_config_global_load(GtkWidget *self, main_window *widgets){ void yon_config_global_local_save(){ int changed = yon_config_get_status(id_parameter)==1; - template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_BOTH,hostname_section,hostname_parameter,id_section,id_parameter,console_font_section,console_font_parameter,locale_section,locale_parameter,language_section,language_parameter,NULL); + template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL); if (window){ if (changed){ yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"warning",SAVE_WARNING_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } - } else { - yon_ubl_status_box_render(SAVE_WARNING_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - } + } // yon_ubl_status_box_render(yon_char_unite(SAVE_SUCCESS,"\n", SAVE_WARNING_LABEL,NULL),BACKGROUND_IMAGE_SUCCESS_TYPE); } void yon_config_local_save(){ int changed = yon_config_get_status(id_parameter)==1; - template_saving_window *window = yon_save_proceed("system",YON_CONFIG_LOCAL,hostname_section,hostname_parameter,id_section,id_parameter,console_font_section,console_font_parameter,locale_section,locale_parameter,language_section,language_parameter,NULL); + template_saving_window *window = yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_local_command,NULL); if (window){ if (changed){ yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"warning",SAVE_WARNING_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } - } else { - yon_ubl_status_box_render(SAVE_WARNING_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - } + } } void yon_config_global_save(){ int changed = yon_config_get_status(id_parameter)==1; - template_saving_window *window = yon_save_proceed("global",YON_CONFIG_GLOBAL,hostname_section,hostname_parameter,id_section,id_parameter,console_font_section,console_font_parameter,locale_section,locale_parameter,language_section,language_parameter,NULL); + template_saving_window *window = yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL); if (window){ if (changed){ yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),"warning",SAVE_WARNING_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } - } else { - yon_ubl_status_box_render(SAVE_WARNING_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } @@ -230,7 +226,7 @@ void on_locale_accept(GtkWidget *self, dictionary *dict){ } gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),final_string); if (yon_config_get_by_key("LOCALE")) yon_config_set("LOCALE",final_ids); - else yon_config_register("LOCALE",locale_section,final_ids); + else yon_config_register("LOCALE",LOCALE_get_command,final_ids); on_subwindow_close(self); } @@ -260,7 +256,7 @@ void on_hostname_changed(GtkEntry *self, main_window *widgets){ if (yon_config_get_by_key(hostname_parameter)){ yon_config_set(hostname_parameter,text); } else { - yon_config_register(hostname_parameter,hostname_section,text); + yon_config_register(hostname_parameter,HOSTNAME_get_command,text); } } @@ -270,7 +266,7 @@ void on_id_combo_toggled(GtkComboBox *self, main_window *widgets){ if (yon_config_get_by_key(id_parameter)){ yon_config_set(id_parameter, id == 1 ? "random" : "hardware"); } else { - yon_config_register(id_parameter,id_section, id == 1 ? "random":"hardware"); + yon_config_register(id_parameter,MACHINEID_get_command, id == 1 ? "random":"hardware"); } } if (id<3){ @@ -287,7 +283,7 @@ void on_id_changed(GtkEntry *self, main_window *widgets){ if (yon_config_get_by_key(id_parameter)){ yon_config_set(id_parameter,text); } else { - yon_config_register(id_parameter,id_section,text); + yon_config_register(id_parameter,MACHINEID_get_command,text); } if (!main_config.lock_save_global) gtk_widget_set_sensitive(widgets->SaveGlobalMenuItem,1); @@ -326,7 +322,7 @@ void on_console_font_changed(GtkComboBox *self, main_window *widgets){ 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_section,code); + yon_config_register(console_font_parameter,CONSOLE_FONT_get_command,code); } } } @@ -340,7 +336,7 @@ void on_language_changed(GtkComboBox *self, main_window *widgets){ if (yon_config_get_by_key(language_parameter)){ yon_config_set(language_parameter,code); } else { - yon_config_register(language_parameter,language_section,code); + yon_config_register(language_parameter,LANG_get_command,code); } } diff --git a/source/ubl-settings-system.h b/source/ubl-settings-system.h index e94fb03..0004ff5 100644 --- a/source/ubl-settings-system.h +++ b/source/ubl-settings-system.h @@ -37,20 +37,27 @@ #define get_id_command "grep '' /etc/machine-id" // #define get_fonts_command "ls /usr/share/kbd/consolefonts/ |grep -v \"README\"|grep -oE \"^[-a-zA-Z0-9_]{3,}.psf\"|sed -e 's/\\.psf//g'" +#define config_get_local_command "ubconfig --source system get system HOSTNAME MACHINEID", "ubconfig --source system get locale CONSOLE_FONT LOCALE LANG" +#define config_get_global_command "ubconfig --source global get system HOSTNAME MACHINEID", "ubconfig --source global get locale CONSOLE_FONT LOCALE LANG" +#define config_get_default_command "ubconfig --source default get " + +#define config_get_global_only_parameters "" +#define config_get_local_only_parameters "" + #define hostname_parameter "HOSTNAME" -#define hostname_section "system" #define id_parameter "MACHINEID" -#define id_section "system" #define keyboard_layout_parameter "XKBLAYOUT" -#define keyboard_section "keyboard" #define console_font_parameter "CONSOLE_FONT" -#define console_font_section "locale" #define num_lock_boot_parameter "NUMLOCK" -#define num_lock_boot_section "config" #define language_parameter "LANG" -#define language_section "locale" #define locale_parameter "LOCALE" -#define locale_section "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" typedef char* string; string version_application; -- 2.35.1 From 8bc96582f66470854bf722b8a2639cc6c7415b0b Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 7 Mar 2024 10:28:06 +0600 Subject: [PATCH 2/3] Added checking for preventing calling system() on empty command string --- source/ubl-settings-system.c | 3 ++- source/ubl-settings-system.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/source/ubl-settings-system.c b/source/ubl-settings-system.c index 47112cf..43707e9 100644 --- a/source/ubl-settings-system.c +++ b/source/ubl-settings-system.c @@ -6,7 +6,8 @@ config main_config; void yon_load_proceed(YON_CONFIG_TYPE type){ yon_config_clean(); - yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); + 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_global_command,NULL); } diff --git a/source/ubl-settings-system.h b/source/ubl-settings-system.h index 0004ff5..18e6aaa 100644 --- a/source/ubl-settings-system.h +++ b/source/ubl-settings-system.h @@ -39,7 +39,7 @@ #define config_get_local_command "ubconfig --source system get system HOSTNAME MACHINEID", "ubconfig --source system get locale CONSOLE_FONT LOCALE LANG" #define config_get_global_command "ubconfig --source global get system HOSTNAME MACHINEID", "ubconfig --source global get locale CONSOLE_FONT LOCALE LANG" -#define config_get_default_command "ubconfig --source default get " +#define config_get_default_command "" #define config_get_global_only_parameters "" #define config_get_local_only_parameters "" -- 2.35.1 From 06efd162f4769299fe8faecace700e2540f54b96 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 13 Mar 2024 11:42:15 +0600 Subject: [PATCH 3/3] Added saving and loading from custom file --- source/ubl-settings-system.c | 113 ++++++++++++++++++++++++++++++++--- source/ubl-settings-system.h | 52 +--------------- 2 files changed, 109 insertions(+), 56 deletions(-) diff --git a/source/ubl-settings-system.c b/source/ubl-settings-system.c index 43707e9..d3811a6 100644 --- a/source/ubl-settings-system.c +++ b/source/ubl-settings-system.c @@ -9,11 +9,30 @@ void yon_load_proceed(YON_CONFIG_TYPE type){ 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_global_command,NULL); + 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; + 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); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(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); + return; + } + yon_config_load_config(type,config_get_command(path),NULL); } - if (type==YON_CONFIG_LOCAL){ - yon_config_load_config(type,config_get_local_command,NULL); - } } @@ -167,7 +186,7 @@ void yon_config_global_load(GtkWidget *self, main_window *widgets){ void yon_config_global_local_save(){ int changed = yon_config_get_status(id_parameter)==1; - template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL); + 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); @@ -177,9 +196,83 @@ void yon_config_global_local_save(){ } +void yon_config_custom_load(GtkWidget *self, main_window *widgets){ + g_signal_handlers_block_by_func(G_OBJECT(widgets->IDEntry),G_CALLBACK(on_id_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); + int size; + GtkTreeIter iter; + config_str rtn = yon_config_load(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); + yon_load_proceed(YON_CONFIG_CUSTOM); + 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); + else if (id&&!strcmp(id,"hardware")) + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->IDCombo),2); + else if (id){ + gtk_entry_set_text(GTK_ENTRY(widgets->IDEntry),id); + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->IDCombo),3); + } else { + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->IDCombo),0); + gtk_widget_set_sensitive(widgets->IDEntry,0); + } + + 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 (lang){ + 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 (code&&!strcmp(code,lang)) gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widgets->LanguageCombo),&iter); + if (avlocale) + for (int i=0;ilanguagelist,&iter,2,1,-1); + locale_string = yon_char_unite(strcmp(locale_string,"") ? yon_char_append(locale_string,"; ") : locale_string, loc_name,NULL); + } + } + if (strcmp(locale_string,"")) gtk_entry_set_text(GTK_ENTRY(widgets->LocaleEntry),locale_string); + } + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->IDEntry),G_CALLBACK(on_id_changed),widgets); + if (getuid()==0){ + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + textdomain(LocaleName); + } + main_config.load_mode=1; +} + void yon_config_local_save(){ int changed = yon_config_get_status(id_parameter)==1; - template_saving_window *window = yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_local_command,NULL); + 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); @@ -190,7 +283,7 @@ void yon_config_local_save(){ void yon_config_global_save(){ int changed = yon_config_get_status(id_parameter)==1; - template_saving_window *window = yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL); + 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); @@ -200,6 +293,10 @@ void yon_config_global_save(){ } +void yon_config_custom_save(){ + template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,config_get_command("system"),NULL); +} + void on_locale_toggle(GtkCellRendererToggle *self,GtkTreePath* path,GtkTreeViewColumn* column,locals_window *window){ GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(window->MainTree)); @@ -393,10 +490,12 @@ main_window *yon_main_window_complete(main_window *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); + g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(yon_config_custom_load),widgets); g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(yon_config_global_local_save),widgets); g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(yon_config_global_save),widgets); g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(yon_config_local_save),widgets); + g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(yon_config_custom_save),widgets); g_signal_connect(G_OBJECT(widgets->HostnameEntry),"changed",G_CALLBACK(on_hostname_changed),widgets); g_signal_connect(G_OBJECT(widgets->IDCombo),"changed",G_CALLBACK(on_id_combo_toggled),widgets); diff --git a/source/ubl-settings-system.h b/source/ubl-settings-system.h index 18e6aaa..27e86ef 100644 --- a/source/ubl-settings-system.h +++ b/source/ubl-settings-system.h @@ -37,8 +37,7 @@ #define get_id_command "grep '' /etc/machine-id" // #define get_fonts_command "ls /usr/share/kbd/consolefonts/ |grep -v \"README\"|grep -oE \"^[-a-zA-Z0-9_]{3,}.psf\"|sed -e 's/\\.psf//g'" -#define config_get_local_command "ubconfig --source system get system HOSTNAME MACHINEID", "ubconfig --source system get locale CONSOLE_FONT LOCALE LANG" -#define config_get_global_command "ubconfig --source global get system HOSTNAME MACHINEID", "ubconfig --source global get locale CONSOLE_FONT LOCALE LANG" +#define config_get_command(source) yon_char_unite("ubconfig --source ", source, " get system HOSTNAME MACHINEID",NULL), yon_char_unite("ubconfig --source ", source, " get locale CONSOLE_FONT LOCALE LANG",NULL) #define config_get_default_command "" #define config_get_global_only_parameters "" @@ -65,57 +64,12 @@ string version_application; char *local; typedef struct { -// Standard config. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_config STRUCT { - int socket_id; - int load_socket_id; - int save_socket_id; - - int lock_help; - int lock_save_local; - int lock_save_global; - int lock_load_global; - int lock_load_system; - - int load_mode; - - int always_open_documentation; -// } Standard config. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_config STRUCT -// Type custom parameters below: - + template_config_fields GtkListStore *localeslist; } config; typedef struct { -// Standard widgets. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_main_window STRUCT { - GtkWidget *Window; - GtkWidget *HeadLabel; - GtkWidget *PlugBox; - - GtkWidget *HeadOverlay; - GtkWidget *HeadImage; - GtkWidget *HeadBox; - GtkWidget *HeadTitleLabel; - GtkWidget *HeadInfoLabel; - - GtkWidget *StatusBox; - GtkWidget *StatusIcon; - GtkWidget *StatusLabel; - - GtkWidget *SaveMenuItem; - GtkWidget *SaveGlobalMenuItem; - GtkWidget *SaveLocalMenuItem; - GtkWidget *RightBox; - - GtkWidget *LoadGlobalMenuItem; - GtkWidget *LoadLocalMenuItem; - GtkWidget *LeftBox; - - GtkWidget *DocumentationMenuItem; - GtkWidget *AboutMenuItem; - - GtkWidget *InterfaceBox; -// } Standard widgets. DO NOT EDIT - MUST BE SAME AS ublsettings-ui's template_main_window STRUCT -// Type custom parameters below: + template_window_fields // Custom GtkWidget *HostnameEntry; GtkWidget *IDCombo; -- 2.35.1