From a000cb60a956f5a38479d98bf65f27b7433c7034 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Tue, 30 Dec 2025 18:14:04 +0000 Subject: [PATCH] WIP configuration menus saving fixes --- source/ubinstall-gtk-bootloader.c | 10 ++- source/ubinstall-gtk-keyboard.c | 114 ++++++++++++++---------------- source/ubinstall-gtk-language.c | 28 +++++++- source/ubinstall-gtk-region.c | 41 ++--------- source/ubinstall-gtk-saving.c | 13 ++-- source/ubinstall-gtk-users.c | 2 + source/ubinstall-gtk.c | 20 ------ source/ubinstall-gtk.h | 15 +--- 8 files changed, 103 insertions(+), 140 deletions(-) diff --git a/source/ubinstall-gtk-bootloader.c b/source/ubinstall-gtk-bootloader.c index 4a9edcf..ff47380 100644 --- a/source/ubinstall-gtk-bootloader.c +++ b/source/ubinstall-gtk-bootloader.c @@ -164,14 +164,15 @@ void on_bootloader_user_add(GtkWidget *, main_window *widgets){ void yon_menu_open_submenu(yon_menu_window *window, yon_menu_item *item){ int size; config_str options = yon_config_load(get_menus_entry_command,&size); + textdomain("ublinux-init-grub-functions"); for (int i=1;i"); int name_size; - config_str name_parsed = yon_char_parse(parsed[1],&name_size,">"); + config_str name_parsed = yon_char_parse(_(parsed[1]),&name_size,">"); if (yon_char_parsed_check_exist(id_parsed,id_size,item->id)==0){ yon_menu_item *subitem = yon_menu_add_item(window,parsed[0],name_parsed[1],0); gtk_list_box_insert(GTK_LIST_BOX(window->ChildrenListBox),subitem->MenuItemRow,-1); @@ -182,6 +183,7 @@ void yon_menu_open_submenu(yon_menu_window *window, yon_menu_item *item){ yon_char_parsed_free(name_parsed,name_size); yon_char_parsed_free(parsed,parsed_size); } + textdomain(LocaleName); } void yon_menu_ungrab(yon_menu_window *window){ @@ -241,6 +243,7 @@ yon_menu_window *yon_menu_window_open(GtkWidget *, main_window *widgets){ int size; config_str options = yon_config_load(get_menus_entry_command,&size); GHashTable *created = g_hash_table_new(g_str_hash,g_str_equal); + textdomain("ublinux-init-grub-functions"); for (int i=1;iItemsListBox),item->MenuItemRow,-1); if (!have_children){ gtk_widget_hide(item->ArrowImage); } } } + textdomain(LocaleName); g_hash_table_unref(created); yon_char_parsed_free(options,size); gtk_window_set_transient_for(GTK_WINDOW(window->MenuWindow), GTK_WINDOW(widgets->MainWindow)); diff --git a/source/ubinstall-gtk-keyboard.c b/source/ubinstall-gtk-keyboard.c index af0bc4a..556083f 100644 --- a/source/ubinstall-gtk-keyboard.c +++ b/source/ubinstall-gtk-keyboard.c @@ -10,16 +10,38 @@ int yon_keyboard_save(main_window *widgets){ yon_ubl_status_highlight_incorrect(widgets->KeyboardLayoutTree); return 0; } + char *final = NULL; + for_iter(widgets->LayoutsList, &iter){ + char *target; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->LayoutsList),&iter,0,&target,-1); + char *temp = yon_char_append_element(final,target,","); + if (!yon_char_is_empty(final)) free(final); + final = temp; + } + yon_config_register(xkblayout_parameter,xkblayout_parameter_command,final); + if(!yon_char_is_empty(final)) free(final); + } + const char *keyboard_model = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo)); + if (!yon_char_is_empty(keyboard_model)){ + yon_config_register(xkbmodel_parameter,xkbmodel_parameter_command,(char*)keyboard_model); + } else { + yon_config_remove_by_key(xkbmodel_parameter); } + int numlock_active = gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->KeyboardNumLockCombo)); + char *numlock = NULL; + switch(numlock_active){ + case 1: numlock = "on"; + break; + case 2: numlock = "off"; + break; + } + yon_config_register(num_lock_boot_parameter,num_lock_boot_parameter_command,numlock); + on_options_save(NULL,widgets); return 1; } void yon_keyboard_init(main_window *widgets){ g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardModelCombo),G_CALLBACK(on_model_changed),widgets); - g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardLayoutChangingCombo),G_CALLBACK(on_options_save),widgets); - g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardNumLockCombo),G_CALLBACK(on_num_lock_changed),widgets); - g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardScrollLockSwitch),G_CALLBACK(on_scroll_lock_switch),widgets); - g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardComposeSwitch),G_CALLBACK(on_compose_switch),widgets); g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardDefaultLayoutsSwitch),G_CALLBACK(on_layout_default_toggled),widgets); gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->KeyboardModelCombo)); int size; @@ -89,8 +111,10 @@ void yon_keyboard_init(main_window *widgets){ { char *name = yon_config_get_by_key(num_lock_boot_parameter); if (name) { - if (!strcmp(name,"yes")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardNumLockCombo),1); - else if (!strcmp(name,"no")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardNumLockCombo),2); + if (!strcmp(name,"yes")||!strcmp(name,"yes")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardNumLockCombo),1); + else if (!strcmp(name,"no")||!strcmp(name,"off")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardNumLockCombo),2); + } else { + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardNumLockCombo),0); } } { @@ -118,22 +142,22 @@ void yon_keyboard_init(main_window *widgets){ } g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardModelCombo),G_CALLBACK(on_model_changed),widgets); - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardNumLockCombo),G_CALLBACK(on_num_lock_changed),widgets); - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardLayoutChangingCombo),G_CALLBACK(on_options_save),widgets); - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardScrollLockSwitch),G_CALLBACK(on_scroll_lock_switch),widgets); - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardComposeSwitch),G_CALLBACK(on_compose_switch),widgets); g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardDefaultLayoutsSwitch),G_CALLBACK(on_layout_default_toggled),widgets); } void on_layouts_accept(GtkWidget *self, layouts_window *window){ main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets"); - if (!yon_char_is_empty(window->parameters)){ - yon_config_register(xkblayout_parameter,xkblayout_parameter_command,window->parameters); - } else { - yon_config_remove_by_key(xkblayout_parameter); + gtk_list_store_clear(widgets->LayoutsList); + GtkTreeIter iter; + for_iter (window->list,&iter){ + int active; + char *target; + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&target,3,&active,-1); + if (active){ + yon_layout_load(target,widgets); + } } on_subwindow_close(self); - yon_keyboard_init(widgets); } void on_layouts_chosen(GtkCellRenderer *, gchar *path, layouts_window *window){ @@ -244,7 +268,6 @@ void yon_layouts_remove(GtkTreeView *tree, GtkListStore *cur_list, main_window * if (yon_confirmation_dialog_call(widgets->MainWindow,data)!=GTK_RESPONSE_ACCEPT) return; gtk_list_store_remove(widgets->LayoutsList,&iter); } - yon_keyboard_init(widgets); } void on_system_layouts_remove(GtkWidget *, main_window *widgets){ @@ -356,30 +379,6 @@ void on_layout_move_down(GtkWidget *, main_window *widgets){ } } -void on_compose_switch(GtkWidget *,int status,main_window *widgets){ - switch(status){ - case 0:{ - yon_config_remove_element(xkboptions_parameter,"compose:rwin",","); - } break; - case 1:{ - yon_config_append_element(xkboptions_parameter,"compose:rwin",","); - } break; - } - yon_keyboard_init(widgets); -} - -void on_scroll_lock_switch(GtkWidget *,int status,main_window *widgets){ - switch(status){ - case 0:{ - yon_config_remove_element(xkboptions_parameter,"grp_led:scroll",","); - } break; - case 1:{ - yon_config_append_element(xkboptions_parameter,"grp_led:scroll",","); - } break; - } - yon_keyboard_init(widgets); -} - void on_layout_default_sensitive_toggled(GtkWidget *, int status, main_window *widgets){ gtk_widget_set_sensitive(widgets->KeyboardLayoutTree,!status); gtk_widget_set_sensitive(widgets->KeyboardLayoutAddButton,!status); @@ -426,18 +425,6 @@ void on_layout_selection_changed(GtkTreeView *self,main_window *widgets){ } -void on_num_lock_changed(GtkComboBox *self, main_window *){ - switch (gtk_combo_box_get_active(self)){ - case 0: - yon_config_remove_by_key(num_lock_boot_parameter); - break; - case 1: yon_config_register(num_lock_boot_parameter,num_lock_boot_parameter_command,"yes"); - break; - case 2:yon_config_register(num_lock_boot_parameter,num_lock_boot_parameter_command,"no"); - break; - } -} - void on_model_changed(GtkComboBoxText *self, main_window *widgets){ switch (gtk_combo_box_get_active(GTK_COMBO_BOX(self))){ case 0: @@ -452,14 +439,21 @@ void on_model_changed(GtkComboBoxText *self, main_window *widgets){ void on_options_save(GtkWidget *,main_window *widgets){ char *main_id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->KeyboardLayoutChangingCombo)); - int parameter_parsed_size; - config_str parameter_parsed = NULL; - yon_char_parsed_add_or_create_if_exists(parameter_parsed,¶meter_parsed_size,!yon_char_is_empty(main_id)?main_id:""); - char *final_parameter = yon_char_parsed_to_string_full(parameter_parsed,parameter_parsed_size,","); - yon_char_parsed_free(parameter_parsed,parameter_parsed_size); - if (!yon_char_is_empty(final_parameter)){ - yon_config_register(xkboptions_parameter,xkboptions_parameter_command,final_parameter); - free(final_parameter); + char *options = yon_char_append_element(NULL,main_id,","); + if (gtk_switch_get_active(GTK_SWITCH(widgets->KeyboardComposeSwitch))){ + char *temp = yon_char_append_element(options,"compose:rwin",","); + if (!yon_char_is_empty(options)) free(options); + options = temp; + } + if (gtk_switch_get_active(GTK_SWITCH(widgets->KeyboardScrollLockSwitch))){ + char *temp = yon_char_append_element(options,"grp_led:scroll",","); + if (!yon_char_is_empty(options)) free(options); + options = temp; + + } + if (!yon_char_is_empty(options)){ + yon_config_register(xkboptions_parameter,xkboptions_parameter_command,options); + free(options); } else { yon_config_remove_by_key(xkboptions_parameter); } diff --git a/source/ubinstall-gtk-language.c b/source/ubinstall-gtk-language.c index 3f9ef34..a21942d 100644 --- a/source/ubinstall-gtk-language.c +++ b/source/ubinstall-gtk-language.c @@ -112,8 +112,32 @@ gboolean yon_locale_window_unlock(GtkWidget *spinner){ return G_SOURCE_REMOVE; } +gboolean yon_locale_window_load(language_window *window){ + main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets"); + char *config_languages = NULL; + GtkTreeIter iter; + for_iter (widgets->LanguageList,&iter){ + char *code; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->LanguageList),&iter,3,&code,-1); + char *temp = yon_char_append_element(config_languages,code,","); + if (!yon_char_is_empty(config_languages)) free(config_languages); + config_languages = temp; + } + if (!yon_char_is_empty(config_languages)) + gtk_entry_set_text(GTK_ENTRY(window->ManualEntry),config_languages); + for_iter (window->LanguagesList,&iter){ + char *code; + gtk_tree_model_get(GTK_TREE_MODEL(window->LanguagesList),&iter,1,&code,-1); + if (yon_char_check_element(config_languages,code,",")){ + gtk_list_store_set(window->LanguagesList,&iter,0,1,-1); + } + } + yon_locale_window_unlock(window->LoadingSpinner); + return G_SOURCE_REMOVE; +} + void *yon_locales_load_func(language_window *window){ - char *config_value = config(locale_parameter); + char *config_value = config(lang_parameter); int config_parsed_size; config_str config_parsed = NULL; if (config_value){ @@ -141,6 +165,7 @@ void *yon_locales_load_func(language_window *window){ g_idle_add((GSourceFunc)yon_locale_window_set_locales,data_struct); yon_char_parsed_free(parsed,parsed_size); } + g_idle_add((GSourceFunc)yon_locale_window_load,window); g_idle_add((GSourceFunc)yon_locale_window_unlock,window->LoadingSpinner); yon_char_parsed_free(config_parsed,config_parsed_size); g_thread_exit(NULL); @@ -167,6 +192,7 @@ language_window *yon_language_window_new(){ gtk_overlay_add_overlay(GTK_OVERLAY(window->LoadingOverlay),window->LoadingSpinner); g_thread_new("locales-thread",(GThreadFunc)yon_locales_load_func,window); + return window; } diff --git a/source/ubinstall-gtk-region.c b/source/ubinstall-gtk-region.c index 84a7e81..1870f43 100644 --- a/source/ubinstall-gtk-region.c +++ b/source/ubinstall-gtk-region.c @@ -10,20 +10,11 @@ int yon_region_save(main_window *widgets){ yon_ubl_status_highlight_incorrect(widgets->ZoneCombo); return 0; } - char *languages = ""; - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->LanguagesFilter); - char *lang_code=NULL; - for_iter(model,&iter){ - gtk_tree_model_get(model,&iter,2,&lang_code,-1); - languages = yon_char_unite(languages,!yon_char_is_empty(languages)?",":"",lang_code,NULL); - } - if (yon_char_is_empty(languages)){ - yon_config_remove_by_key(locale_parameter); - } else { - yon_config_register(locale_parameter,locale_parameter_command,languages); - free(languages); - } + const char *region = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->RegionCombo)); + const char *zone = gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->ZoneCombo)); + char *final = yon_char_unite(region,"/",zone,NULL); + yon_config_register(zone_parameter,zone_parameter_command,final); + free(final); return 1; } @@ -46,24 +37,6 @@ void on_region_changed(GtkComboBox *self, main_window *widgets){ void yon_region_init(main_window *widgets){ int size; config_str parsed = NULL; - int langsize; - config_str lang = default_langs(&langsize); - - GtkTreeIter iter; - gtk_list_store_clear(widgets->LanguagesList); - - config_str languages = yon_config_load(languages_command,&size); - - for (int i=0;iLanguagesList,&iter); - gtk_list_store_set(widgets->LanguagesList,&iter,0,0,1,parsed[0],2,parsed[1],3,parsed[2],-1); - } - yon_char_parsed_free(parsed,size); - if (lang) - yon_char_parsed_free(lang,langsize); - parsed = yon_dir_get_contents(zone_path,&size); for (int i=0;iRegionCombo),0); yon_char_parsed_free(parsed,size); - - gtk_tree_model_filter_set_visible_column(GTK_TREE_MODEL_FILTER(widgets->LanguagesFilter),0); - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->LanguagesFilter)); - char *zone = yon_char_new(config(zone_parameter)); if (!yon_char_is_empty(zone)){ diff --git a/source/ubinstall-gtk-saving.c b/source/ubinstall-gtk-saving.c index d88ff27..13bfc11 100644 --- a/source/ubinstall-gtk-saving.c +++ b/source/ubinstall-gtk-saving.c @@ -89,7 +89,6 @@ void on_config_global_save(GtkWidget *,main_window *widgets){ gboolean on_install_success(main_window *widgets){ gtk_label_set_text(GTK_LABEL(widgets->InstallationLabel),""); - // gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_COMPLETION); yon_config_restore(widgets); on_page_next_clicked(NULL,widgets); @@ -294,12 +293,12 @@ void *on_setup_system_configuration(void * data){ } if (!main_config.dry_run){ - char *parameter_string = yon_char_parsed_to_string(all_parameters,size," "); - char *command = set_user_config_command(parameter_string); - if (system(yon_debug_output("%s\n",command))){}; - yon_char_parsed_free(all_parameters,size); - free(command); - if (parameter_string) free(parameter_string); + char *parameter_string = yon_char_parsed_to_string(all_parameters,size," "); + char *command = set_user_config_command(parameter_string); + if (system(yon_debug_output("%s\n",command))){}; + yon_char_parsed_free(all_parameters,size); + free(command); + if (parameter_string) free(parameter_string); } else { yon_launch("ubconfig --source system get /"); } diff --git a/source/ubinstall-gtk-users.c b/source/ubinstall-gtk-users.c index e399ded..9e68138 100644 --- a/source/ubinstall-gtk-users.c +++ b/source/ubinstall-gtk-users.c @@ -91,6 +91,8 @@ yon_user_struct *yon_user_struct_new(){ user->PasswordCombo = yon_gtk_builder_get_widget(builder,"PasswordCombo"); user->PasswordEntry = yon_gtk_builder_get_widget(builder,"PasswordEntry"); user->PasswordButton = yon_gtk_builder_get_widget(builder,"PasswordButton"); + yon_gtk_entry_block_symbols(GTK_ENTRY(user->LoginEntry),"'\"=:\n"); + yon_gtk_entry_block_symbols(GTK_ENTRY(user->UsernameEntry),"'\":\n"); g_object_set_data(G_OBJECT(user->MainBox),"yon_user_struct",user); diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index 4365993..4318c1f 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -941,9 +941,6 @@ void yon_main_window_create(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->KeyboardLayoutAddButton),"clicked",G_CALLBACK(on_system_layouts_add),widgets); g_signal_connect(G_OBJECT(widgets->KeyboardLayoutRemoveButton),"clicked",G_CALLBACK(on_system_layouts_remove),widgets); g_signal_connect(G_OBJECT(widgets->KeyboardModelCombo),"changed",G_CALLBACK(on_model_changed),widgets); - g_signal_connect(G_OBJECT(widgets->KeyboardNumLockCombo),"changed",G_CALLBACK(on_num_lock_changed),widgets); - g_signal_connect(G_OBJECT(widgets->KeyboardComposeSwitch),"state-set",G_CALLBACK(on_compose_switch),widgets); - g_signal_connect(G_OBJECT(widgets->KeyboardScrollLockSwitch),"state-set",G_CALLBACK(on_scroll_lock_switch),widgets); g_signal_connect(G_OBJECT(widgets->GrubInstallDevicesTree),"cursor-changed",G_CALLBACK(on_device_selection_changed),widgets); g_signal_connect(G_OBJECT(widgets->GrubUpdateDevicesTree),"cursor-changed",G_CALLBACK(on_device_selection_changed),widgets); @@ -1108,23 +1105,6 @@ void yon_main_window_create(main_window *widgets){ textdomain(LocaleName); } } - { - int size; - config_str slides = yon_char_parsed_new(&size,slide_repeat_path); - widgets->region_original = gdk_pixbuf_new_from_resource(regions_path,NULL); - widgets->keyboard_original = gdk_pixbuf_new_from_resource(keyboard_path,NULL); - widgets->user_original = gdk_pixbuf_new_from_resource(users_path,NULL); - widgets->startup_original = gdk_pixbuf_new_from_resource(startup_path,NULL); - widgets->bootloader_original = gdk_pixbuf_new_from_resource(bootloader_path,NULL); - widgets->network_original = gdk_pixbuf_new_from_resource(network_icon_path,NULL); - widgets->slides_original = NULL; - widgets->slides_original = g_list_prepend(widgets->slides_original,gdk_pixbuf_new_from_resource(slide_0_path,NULL)); - for (int i=1;islides_original = g_list_prepend(widgets->slides_original,gdk_pixbuf_new_from_resource(slides[i-1],NULL)); - } - widgets->slides_original = g_list_reverse(widgets->slides_original); - yon_char_parsed_free(slides,size); - } gtk_builder_connect_signals(builder,NULL); if (!yon_char_is_empty(config(AUTOINSTALL_TYPE_INSTALL))){ gtk_widget_show(widgets->StartScenarioButton); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index bc29dcc..e726dc7 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -632,15 +632,6 @@ typedef struct GtkTreeModel *LanguagesFilter; GtkTreeModel *LayoutsFilter; - GdkPixbuf *region_original; - GdkPixbuf *keyboard_original; - GdkPixbuf *user_original; - GdkPixbuf *startup_original; - GdkPixbuf *bootloader_original; - GdkPixbuf *network_original; - GList *slides_original; - float region_height_mult; - GtkWidget *RegionSensitiveSwitch; GtkWidget *HostnameSensitiveSwitch; @@ -1414,12 +1405,9 @@ void yon_layout_load(char *layout, main_window *widgets); void yon_layout_build(layouts_window *window); void on_layout_move_up(GtkWidget *, main_window *widgets); void on_layout_move_down(GtkWidget *, main_window *widgets); -void on_compose_switch(GtkWidget *, int status, main_window *widgets); -void on_scroll_lock_switch(GtkWidget *, int status, main_window *widgets); void on_layout_default_sensitive_toggled(GtkWidget *, int status, main_window *widgets); void on_layout_default_toggled(GtkWidget *, int status, main_window *widgets); void on_layout_selection_changed(GtkTreeView *self, main_window *widgets); -void on_num_lock_changed(GtkComboBox *self, main_window *); void on_model_changed(GtkComboBoxText *self, main_window *widgets); void on_options_save(GtkWidget *, main_window *widgets); void yon_packages_tab_init(main_window *widgets); @@ -1459,4 +1447,5 @@ void on_gparted_update(GtkWidget *, main_window *widgets); void yon_menu_open_submenu(yon_menu_window *window, yon_menu_item *item); yon_menu_item *yon_menu_add_item(yon_menu_window *target_menu,const char *id, const char *name, int children); void yon_menu_ungrab(yon_menu_window *window); -void on_menu_chosen(GtkWidget *, GtkListBoxRow* row, yon_menu_window *window); \ No newline at end of file +void on_menu_chosen(GtkWidget *, GtkListBoxRow* row, yon_menu_window *window); +gboolean yon_locale_window_load(language_window *window); \ No newline at end of file