From ba6924d91a9e15c5edb25d22608cdb3ecb51c1e6 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Thu, 5 Mar 2026 17:00:27 +0600 Subject: [PATCH 1/2] WIP advanced installation saving and loading --- source/ubinstall-gtk-advanced.c | 214 ++++++++++++++++++++++++++--- source/ubinstall-gtk-page-switch.c | 2 +- source/ubinstall-gtk.h | 11 +- 3 files changed, 205 insertions(+), 22 deletions(-) diff --git a/source/ubinstall-gtk-advanced.c b/source/ubinstall-gtk-advanced.c index a563377..28d4a5e 100644 --- a/source/ubinstall-gtk-advanced.c +++ b/source/ubinstall-gtk-advanced.c @@ -3,6 +3,37 @@ #define toggled_icon_name "com.ublinux.libublsettingsui-gtk3.toggled-symbolic" #define untoggled_icon_name "com.ublinux.libublsettingsui-gtk3.untoggled-symbolic" +void on_advanced_part_toggled(GtkWidget *self){ + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self))){ + g_signal_handlers_block_by_func(G_OBJECT(self),on_advanced_part_toggled,NULL); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self),1); + g_signal_handlers_unblock_by_func(G_OBJECT(self),on_advanced_part_toggled,NULL); + } + advanced_part_widgets *select_part = g_object_get_data(G_OBJECT(self),"advanced_part_widgets"); + g_signal_handlers_block_by_func(G_OBJECT(select_part->SystemSectionToggle),on_advanced_part_toggled,NULL); + g_signal_handlers_block_by_func(G_OBJECT(select_part->UserDataSectionToggle),on_advanced_part_toggled,NULL); + main_window *widgets = g_object_get_data(G_OBJECT(select_part->MainBox),"widgets"); + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); + int size = g_list_length(list); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self == select_part->SystemSectionToggle?select_part->UserDataSectionToggle:select_part->SystemSectionToggle),!(size>1)); + + GList *iter; + for (iter=list;iter;iter=iter->next){ + advanced_part_widgets *cur_part = g_object_get_data(G_OBJECT(iter->data),"advanced_part_widgets"); + if (cur_part!=select_part){ + g_signal_handlers_block_by_func(G_OBJECT(cur_part->SystemSectionToggle),on_advanced_part_toggled,NULL); + g_signal_handlers_block_by_func(G_OBJECT(cur_part->UserDataSectionToggle),on_advanced_part_toggled,NULL); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self == select_part->SystemSectionToggle ? cur_part->SystemSectionToggle : cur_part->UserDataSectionToggle),0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self == select_part->SystemSectionToggle ? cur_part->UserDataSectionToggle : cur_part->SystemSectionToggle),1); + g_signal_handlers_unblock_by_func(G_OBJECT(cur_part->SystemSectionToggle),on_advanced_part_toggled,NULL); + g_signal_handlers_unblock_by_func(G_OBJECT(cur_part->UserDataSectionToggle),on_advanced_part_toggled,NULL); + + } + } + g_signal_handlers_unblock_by_func(G_OBJECT(select_part->SystemSectionToggle),on_advanced_part_toggled,NULL); + g_signal_handlers_unblock_by_func(G_OBJECT(select_part->UserDataSectionToggle),on_advanced_part_toggled,NULL); +} + void on_advanced_part_remove_part(GtkWidget *self, main_window *widgets){ advanced_part_widgets *part = g_object_get_data(G_OBJECT(self),"advanced_part_widgets"); advanced_part_data *data = g_object_get_data(G_OBJECT(self),"advanced_part_data"); @@ -109,6 +140,138 @@ void on_install_advanced_device_chosen(GtkCellRenderer *, gchar *path, main_wind } } +void yon_advanced_part_to_data(advanced_part_widgets *part, advanced_part_data *data){ + const char *format = gtk_combo_box_get_active_id(GTK_COMBO_BOX(part->FormatCombo)); + data->format = yon_char_new(format); + if (gtk_combo_box_get_active(GTK_COMBO_BOX(part->FormatCombo))==2){ + gdouble size = gtk_spin_button_get_value(GTK_SPIN_BUTTON(part->SizeSpin)); + char *sizemod = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(part->SizeCombo)); + data->size = size; + data->size_letter = sizemod[0]; + + data->part_label = yon_char_new(gtk_entry_get_text(GTK_ENTRY(part->PartLabelEntry))); + + data->encryption = yon_char_new(gtk_combo_box_get_active_id(GTK_COMBO_BOX(part->EncryptionCombo))); + data->encryption_password = yon_char_new(gtk_entry_get_text(GTK_ENTRY(part->EncryptionEntry))); + + data->fs_type = yon_char_new(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(part->FileSystemTypeCombo))); + data->fs_label = yon_char_new(gtk_entry_get_text(GTK_ENTRY(part->FileSystemLabelEntry))); + } +} + +void yon_advanced_part_clean_config(){ + yon_config_remove_by_key(device_parameter); + yon_config_remove_by_key(part_parameter); + yon_config_remove_by_key(part_size_parameter); + yon_config_remove_by_key(part_label_parameter); + yon_config_remove_by_key(part_fs_type_parameter); + yon_config_remove_by_key(part_fs_label_parameter); + yon_config_remove_by_key(part_crypt_parameter); + yon_config_remove_by_key(part_format_parameter); +} + +void yon_advanced_part_save_part(advanced_part_data *data){ + if (!config(device_parameter)) yon_config_register(device_parameter,device_parameter_command,NULL); + if (!config(part_parameter)) yon_config_register(part_parameter,part_parameter_command,NULL); + if (!config(part_size_parameter)) yon_config_register(part_size_parameter,part_size_parameter_command,NULL); + if (!config(part_label_parameter)) yon_config_register(part_label_parameter,part_label_parameter_command,NULL); + if (!config(part_fs_type_parameter)) yon_config_register(part_fs_type_parameter,part_fs_type_parameter_command,NULL); + if (!config(part_fs_label_parameter)) yon_config_register(part_fs_label_parameter,part_fs_label_parameter_command,NULL); + if (!config(part_crypt_parameter)) yon_config_register(part_crypt_parameter,part_crypt_parameter_command,NULL); + if (!config(part_format_parameter)) yon_config_register(part_format_parameter,part_format_parameter_command,NULL); + + yon_config_force_append_element(device_parameter,data->device,","); + yon_config_force_append_element(part_parameter,data->partition,","); + if (data->size>0){ + char *size_str = yon_char_from_long(data->size); + char *temp = yon_char_append_c(size_str,data->size_letter); + free(size_str); + yon_config_force_append_element(part_size_parameter,temp,","); + } else { + yon_config_force_append_element(part_size_parameter,"",","); + + } + yon_config_force_append_element(part_label_parameter,data->part_label,","); + yon_config_force_append_element(part_fs_type_parameter,data->fs_type,","); + yon_config_force_append_element(part_fs_label_parameter,data->fs_label,","); + yon_config_force_append_element(part_crypt_parameter,data->encryption,","); + yon_config_force_append_element(part_format_parameter,data->format,","); +} + +void yon_advanced_part_save(main_window *widgets){ + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); + + advanced_part_data *data1 = NULL; + if (list){ + data1 = g_object_get_data(list->data,"advanced_part_data"); + advanced_part_widgets *part1 = g_object_get_data(list->data,"advanced_part_widgets"); + yon_advanced_part_to_data(part1,data1); + + advanced_part_data *data2 = NULL; + if (list->next){ + data2 = g_object_get_data(list->next->data,"advanced_part_data"); + advanced_part_widgets *part2 = g_object_get_data(list->next->data,"advanced_part_widgets"); + yon_advanced_part_to_data(part2,data2); + } + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(part1->SystemSectionToggle))){ + yon_advanced_part_save_part(data1); + yon_advanced_part_save_part(data2); + } else { + yon_advanced_part_save_part(data2); + yon_advanced_part_save_part(data1); + } + } +} + +int yon_advanced_save(main_window *widgets){ + yon_config_register(AUTOINSTALL_TYPE_INSTALL,AUTOINSTALL_TYPE_INSTALL_command,"custom"); + yon_advanced_part_clean_config(); + yon_advanced_part_save(widgets); + if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedLoadTypeSwitch))){ + char *boot = NULL; + if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedBiosSectorSwitch))){ + char *temp = yon_char_append_element(boot,"bios","+"); + if(!yon_char_is_empty(boot)) free(boot); + boot = temp; + } + if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedEFISwitch))){ + char *temp = yon_char_append_element(boot,"efi","+"); + if(!yon_char_is_empty(boot)) free(boot); + boot = temp; + + } + if (!yon_char_is_empty(boot)){ + yon_config_register(boot_parameter,boot_parameter_command,boot); + } else { + yon_config_remove_by_key(boot_parameter); + } + } else { + yon_config_remove_by_key(boot_parameter); + } + if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapSwitch))){ + if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapAutoSwitch))){ + yon_config_register(swap_parameter,swap_parameter_command,"auto"); + + } else if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapRamSwitch))){ + yon_config_register(swap_parameter,swap_parameter_command,"yes"); + yon_config_register(swap_size_parameter,swap_parameter_command,"ram"); + + } else if (gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapFixedSwitch))){ + yon_config_register(swap_parameter,swap_parameter_command,"yes"); + long swap_size = gtk_spin_button_get_value(GTK_SPIN_BUTTON(widgets->AdvancedSwapFixedSpin)); + int size_letter = gtk_switch_get_active(GTK_SWITCH(widgets->AdvancedSwapFixedSizeSwitch)); + char *swap_str = yon_char_from_long(swap_size); + char *size_final = yon_char_unite(swap_str,size_letter?"G":"M",NULL); + yon_config_register(swap_size_parameter,swap_parameter_command,size_final); + } else { + yon_config_remove_by_key(swap_parameter); + yon_config_remove_by_key(swap_size_parameter); + } + } + yon_debug_output("%s\n",yon_config_get_all_info()); + return 1; +} + int yon_advanced_part_check_count(main_window *widgets){ GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); int len = g_list_length(list); @@ -185,6 +348,9 @@ void on_advanced_virtual_device_changed(GtkWidget *, main_window *widgets){ data->part_source = PART_SOURCE_VIRTUAL; data->device = yon_char_new(device); advanced_part_widgets *part = yon_advanced_part_create(data); + g_object_set_data(G_OBJECT(part->SystemSectionToggle),"advanced_part_widgets",part); + g_object_set_data(G_OBJECT(part->UserDataSectionToggle),"advanced_part_widgets",part); + g_object_set_data(G_OBJECT(part->MainBox),"widgets",widgets); gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); g_signal_connect(G_OBJECT(part->RemoveButton),"clicked",G_CALLBACK(on_advanced_part_remove_virtual),widgets); yon_advanced_part_update_from_data(part, data); @@ -205,23 +371,15 @@ void on_advanced_virtual_device_changed(GtkWidget *, main_window *widgets){ } } yon_char_parsed_free(vfs_file,size); - // yon_advanced_update(widgets); } void yon_update_part_sections(main_window *widgets){ GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); - int parts_size = g_list_length(list); if (list){ advanced_part_widgets *part = g_object_get_data(G_OBJECT(list->data),"advanced_part_widgets"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->SystemSectionToggle),1); - if (parts_size==2){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->UserDataSectionToggle),0); - } else { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->UserDataSectionToggle),1); - } if (list->next){ advanced_part_widgets *part = g_object_get_data(G_OBJECT(list->next->data),"advanced_part_widgets"); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->SystemSectionToggle),0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->UserDataSectionToggle),1); } @@ -315,8 +473,6 @@ void yon_advanced_part_update_from_data(advanced_part_widgets *part, advanced_pa } gtk_label_set_text(GTK_LABEL(part->SectionLabel),source_string); - //toggle buttons - // format int format = 0; if (yon_char_is_empty(data->format)) return; @@ -353,6 +509,9 @@ void yon_advanced_part_create_for_device(GtkTreeIter *iter, main_window *widgets data->device = target; advanced_part_widgets *part = yon_advanced_part_create(data); g_signal_connect(G_OBJECT(part->RemoveButton),"clicked",G_CALLBACK(on_advanced_part_remove_device),widgets); + g_object_set_data(G_OBJECT(part->SystemSectionToggle),"advanced_part_widgets",part); + g_object_set_data(G_OBJECT(part->UserDataSectionToggle),"advanced_part_widgets",part); + g_object_set_data(G_OBJECT(part->MainBox),"widgets",widgets); gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); yon_advanced_part_update_from_data(part,data); yon_update_part_sections(widgets); @@ -367,6 +526,9 @@ void yon_advanced_part_create_for_part(GtkTreeIter *iter, main_window *widgets){ data->partition = target; advanced_part_widgets *part = yon_advanced_part_create(data); g_signal_connect(G_OBJECT(part->RemoveButton),"clicked",G_CALLBACK(on_advanced_part_remove_part),widgets); + g_object_set_data(G_OBJECT(part->SystemSectionToggle),"advanced_part_widgets",part); + g_object_set_data(G_OBJECT(part->UserDataSectionToggle),"advanced_part_widgets",part); + g_object_set_data(G_OBJECT(part->MainBox),"widgets",widgets); gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); yon_advanced_part_update_from_data(part,data); yon_update_part_sections(widgets); @@ -389,7 +551,7 @@ void yon_advanced_part_add_parts_for_device(const char *device_name, main_window free_space = capacity-atol(parsed[8]); } char *free_space_string = free_space ? yon_size_long_convert_automatic_to_string(free_space) : yon_char_new(""); - if (!strcmp(parsed[1],"part")&&strcmp(parsed[1],"free")){ + if (!strcmp(parsed[1],"part")){ gtk_list_store_append(widgets->PartitionsList,&iter); gtk_list_store_set(widgets->PartitionsList,&iter, 0,yon_char_return_if_exist(parsed[2],""), 1,capacity_string, @@ -438,10 +600,16 @@ int yon_advanced_part_select_for_data(advanced_part_data *data, main_window *wid GtkTreeModel *device_model = GTK_TREE_MODEL(widgets->DevicesList); for_iter(device_model, &device_iter){ char *device_name; - gtk_tree_model_get(device_model,&device_iter,0,&device_name,-1); - if (!yon_char_is_empty(data->device)&&!strcmp(device_name,data->device)){ + int status; + gtk_tree_model_get(device_model,&device_iter,0,&device_name,5,&status,-1); + if ((!yon_char_is_empty(data->device)&&!strcmp(device_name,data->device))||(!yon_char_is_empty(data->partition)&&strstr(data->partition,device_name))){ + gtk_list_store_set(widgets->DevicesList,&device_iter, 5,1,-1); - yon_advanced_part_add_parts_for_device(device_name,widgets); + if (!status){ + yon_advanced_part_add_parts_for_device(device_name,widgets); + } + + if (yon_char_is_empty(data->partition)){ yon_advanced_part_create_for_device(&device_iter,widgets); } @@ -454,7 +622,8 @@ int yon_advanced_part_select_for_data(advanced_part_data *data, main_window *wid char *part_name; gtk_tree_model_get(part_model,&part_iter,0,&part_name,-1); if (!strcmp(part_name,data->partition)){ - gtk_list_store_set(GTK_LIST_STORE(widgets->PartitionsList),&part_iter,7,1,-1); + char *path = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(widgets->PartitionsList),&part_iter); + g_signal_emit_by_name(widgets->AdvancedPartChosenCell,"toggled",path,widgets,NULL); } } @@ -463,6 +632,13 @@ int yon_advanced_part_select_for_data(advanced_part_data *data, main_window *wid } void yon_advanced_init(main_window *widgets){ + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); + GList *iter; + for (iter=list;iter;iter=iter->next){ + advanced_part_widgets *part = g_object_get_data(G_OBJECT(iter->data),"advanced_part_widgets"); + on_advanced_part_remove_part(part->RemoveButton,widgets); + } + gtk_list_store_clear(widgets->PartitionsList); yon_devices_setup(widgets); g_signal_handlers_block_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->AdvancedVirtualDeviceCombo)); @@ -513,15 +689,17 @@ advanced_part_widgets *yon_advanced_part_create(advanced_part_data *part_data){ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->SizeCombo),"T",TB_LABEL); gtk_combo_box_set_active(GTK_COMBO_BOX(part->SizeCombo),0); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(part->FormatCombo),DEFAULT_LABEL); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(part->FormatCombo),DO_NOT_FORMAT_LABEL); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(part->FormatCombo),FORMAT_LABEL); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->FormatCombo),NULL,DEFAULT_LABEL); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->FormatCombo),"no",DO_NOT_FORMAT_LABEL); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(part->FormatCombo),"yes",FORMAT_LABEL); gtk_combo_box_set_active(GTK_COMBO_BOX(part->FormatCombo),0); g_signal_connect(G_OBJECT(part->EncryptionButton),"clicked",G_CALLBACK(on_advanced_password_clicked),part); g_signal_connect(G_OBJECT(part->EncryptionCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),part->EncryptionButton); g_signal_connect(G_OBJECT(part->EncryptionCombo),"changed",G_CALLBACK(yon_gtk_widget_set_sensitive_from_combo_box),part->EncryptionEntry); g_signal_connect(G_OBJECT(part->FormatCombo),"changed",G_CALLBACK(on_format_changed),part); + g_signal_connect(G_OBJECT(part->SystemSectionToggle),"toggled",G_CALLBACK(on_advanced_part_toggled),NULL); + g_signal_connect(G_OBJECT(part->UserDataSectionToggle),"toggled",G_CALLBACK(on_advanced_part_toggled),NULL); yon_fs_type_setup(GTK_COMBO_BOX_TEXT(part->FileSystemTypeCombo)); diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index b6de2b9..e27be95 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -281,7 +281,7 @@ int yon_page_save(main_window *widgets, enum YON_PAGES page){ return yon_install_same_partition_save(widgets); break; case YON_PAGE_INSTALL_ADVANCED: - // return yon_advanced_save(widgets); + return yon_advanced_save(widgets); break; case YON_PAGE_RECOVERY_GRUB_INSTALL: return yon_grub_install_save(widgets); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 2a9757d..7995e82 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -1094,7 +1094,7 @@ typedef struct char *format; gulong full_part_size; unsigned long size; - // char size_letter; + char size_letter; char *part_label; char *fs_type; char *fs_label; @@ -1401,7 +1401,7 @@ gboolean yon_spinner_switch_off(GtkSpinner *target); void yon_fs_type_setup(GtkComboBoxText *target); // void yon_advanced_set_max_size_from_partition(advanced_part_widgets *part, main_window *widgets); // void on_advanced_size_changed(GtkWidget *self, main_window *widgets); -// int yon_advanced_save(main_window *widgets); +int yon_advanced_save(main_window *widgets); // void yon_advanced_part_parameter_changed(GtkWidget *self, advanced_part_widgets *part); // void yon_advanced_section_update(main_window *widgets); // void yon_advanced_section_update_section(advanced_part_widgets *part, GtkWidget *cur_toggle, main_window *widgets); @@ -1550,4 +1550,9 @@ void yon_advanced_part_update_from_data(advanced_part_widgets *part, advanced_pa void yon_advanced_part_data_unref(advanced_part_data *data); void on_advanced_part_content_changed(GtkWidget *, GtkWidget *, main_window *widgets); gboolean on_keyboard_search_func(GtkTreeModel *model, gint ,const char *key, GtkTreeIter *iter, main_window *); -void yon_update_part_sections(main_window *widgets); \ No newline at end of file +void yon_update_part_sections(main_window *widgets); +void on_advanced_part_toggled(GtkWidget *self); +void yon_advanced_part_save(main_window *widgets); +void yon_advanced_part_clean_config(); +void yon_advanced_part_to_data(advanced_part_widgets *part, advanced_part_data *data); +void yon_advanced_part_save_part(advanced_part_data *data); \ No newline at end of file From 63e3bcc6bd7b9d902bf66e058c48897671d425e7 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Thu, 5 Mar 2026 17:52:16 +0600 Subject: [PATCH 2/2] Fixed added partitions removing with device toggling --- source/ubinstall-gtk-advanced.c | 24 ++++++++++++++++++++++++ source/ubinstall-gtk.h | 3 ++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/source/ubinstall-gtk-advanced.c b/source/ubinstall-gtk-advanced.c index 28d4a5e..e39bc54 100644 --- a/source/ubinstall-gtk-advanced.c +++ b/source/ubinstall-gtk-advanced.c @@ -566,6 +566,27 @@ void yon_advanced_part_add_parts_for_device(const char *device_name, main_window } } +void yon_advanced_part_remove_for_part(const char *part_name, main_window *widgets){ + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdvancedPartitionAddBox)); + GList *iter; + for (iter=list;iter;iter=iter->next){ + advanced_part_data *data = g_object_get_data(G_OBJECT(iter->data),"advanced_part_data"); + if (!yon_char_is_empty(data->partition)){ + if (!strcmp(data->partition,part_name)){ + advanced_part_widgets *part = g_object_get_data(G_OBJECT(iter->data),"advanced_part_widgets"); + on_advanced_part_remove_part(part->RemoveButton,widgets); + } + } else if (!yon_char_is_empty(data->device)){ + if (!strcmp(data->device,part_name)){ + advanced_part_widgets *part = g_object_get_data(G_OBJECT(iter->data),"advanced_part_widgets"); + on_advanced_part_remove_device(part->RemoveButton,widgets); + } + } + } + g_list_free(list); + +} + void yon_advanced_part_remove_parts_for_device(const char *device_name, main_window *widgets){ GtkTreeIter iter; GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); @@ -574,6 +595,7 @@ void yon_advanced_part_remove_parts_for_device(const char *device_name, main_win gtk_tree_model_get(model,&iter,0,&name,10,&target,-1); printf("%s\n",name); if (strstr(device_name,target)){ + yon_advanced_part_remove_for_part(name,widgets); gtk_list_store_remove(widgets->PartitionsList,&iter); if (!gtk_tree_model_get_iter_first(model,&iter)) break; } @@ -582,9 +604,11 @@ void yon_advanced_part_remove_parts_for_device(const char *device_name, main_win char *target, *name; gtk_tree_model_get(model,&iter,0,&name,10,&target,-1); if (strstr(device_name,target)){ + yon_advanced_part_remove_for_part(name,widgets); gtk_list_store_remove(widgets->PartitionsList,&iter); } } + yon_advanced_part_remove_for_part(device_name,widgets); } void on_advanced_part_create(GtkWidget *, main_window *widgets){ diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 7995e82..74063db 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -1555,4 +1555,5 @@ void on_advanced_part_toggled(GtkWidget *self); void yon_advanced_part_save(main_window *widgets); void yon_advanced_part_clean_config(); void yon_advanced_part_to_data(advanced_part_widgets *part, advanced_part_data *data); -void yon_advanced_part_save_part(advanced_part_data *data); \ No newline at end of file +void yon_advanced_part_save_part(advanced_part_data *data); +void yon_advanced_part_remove_for_part(const char *part_name, main_window *widgets); \ No newline at end of file