From 1a24968abd719ac44bf72f9dd74bbb0b4d7bd2bc Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Tue, 3 Mar 2026 18:02:10 +0600 Subject: [PATCH] WIP Advanced installation page partitions removing --- source/ubinstall-gtk-advanced.c | 54 ++++++++++++++++++++++++++++++--- source/ubinstall-gtk.h | 4 ++- 2 files changed, 53 insertions(+), 5 deletions(-) diff --git a/source/ubinstall-gtk-advanced.c b/source/ubinstall-gtk-advanced.c index 91f9a83..3d3f274 100644 --- a/source/ubinstall-gtk-advanced.c +++ b/source/ubinstall-gtk-advanced.c @@ -3,6 +3,46 @@ #define toggled_icon_name "com.ublinux.libublsettingsui-gtk3.toggled-symbolic" #define untoggled_icon_name "com.ublinux.libublsettingsui-gtk3.untoggled-symbolic" +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"); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->PartitionsList); + for_iter (model, &iter){ + char *target; + gtk_tree_model_get(model,&iter,0,&target,-1); + if (!strcmp(data->partition,target)){ + gtk_widget_destroy(part->MainBox); + gtk_list_store_set(widgets->PartitionsList,&iter,7,0,-1); + free(part); + } + } +} + +void on_advanced_part_remove_device(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"); + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->DevicesList); + for_iter (model, &iter){ + char *target; + gtk_tree_model_get(model,&iter,0,&target,-1); + if (!strcmp(data->device,target)){ + gtk_widget_destroy(part->MainBox); + free(part); + } + } +} + +void on_advanced_part_remove_virtual(GtkWidget *, main_window *widgets){ + // advanced_part_widgets *part = g_object_get_data(G_OBJECT(self),"advanced_part_widgets"); + // g_signal_handlers_block_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo),0); + // gtk_widget_destroy(part->MainBox); + // g_signal_handlers_unblock_by_func(G_OBJECT(widgets->AdvancedVirtualDeviceCombo),G_CALLBACK(on_advanced_virtual_device_changed),widgets); + // free(part); +} + void on_format_changed(GtkWidget *self, advanced_part_widgets *part){ int active = gtk_combo_box_get_active(GTK_COMBO_BOX(self)); switch (active){ @@ -142,7 +182,7 @@ void on_advanced_virtual_device_changed(GtkWidget *, main_window *widgets){ advanced_part_data *data = g_object_get_data(G_OBJECT(part->MainBox),"advanced_part_data"); free(data->device); data->device = yon_char_new(device); - // yon_advanced_part_update_from_data(part, data); + yon_advanced_part_update_from_data(part, data); } else { if (yon_advanced_part_check_count(widgets)){ advanced_part_data *data = yon_advanced_part_data_new(); @@ -150,7 +190,8 @@ void on_advanced_virtual_device_changed(GtkWidget *, main_window *widgets){ data->device = yon_char_new(device); advanced_part_widgets *part = yon_advanced_part_create(data); gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); - // yon_advanced_part_update_from_data(part, data); + g_signal_connect(G_OBJECT(part->RemoveButton),"clicked",G_CALLBACK(on_advanced_part_remove_virtual),widgets); + yon_advanced_part_update_from_data(part, data); } else { gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->AdvancedVirtualDeviceCombo),0); @@ -267,6 +308,8 @@ void yon_advanced_part_update_from_data(advanced_part_widgets *part, advanced_pa gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->UserDataSectionToggle),0); } else if (pos == 1){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->SystemSectionToggle),0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->SystemSectionToggle),0); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->UserDataSectionToggle),1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(part->UserDataSectionToggle),1); } @@ -305,8 +348,9 @@ void yon_advanced_part_create_for_device(GtkTreeIter *iter, main_window *widgets advanced_part_data *data = yon_advanced_part_data_new(); 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); gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); - // yon_advanced_part_update_from_data(part,data); + yon_advanced_part_update_from_data(part,data); } } @@ -317,8 +361,9 @@ void yon_advanced_part_create_for_part(GtkTreeIter *iter, main_window *widgets){ advanced_part_data *data = yon_advanced_part_data_new(); 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); gtk_box_pack_start(GTK_BOX(widgets->AdvancedPartitionAddBox),part->MainBox,0,0,0); - // yon_advanced_part_update_from_data(part,data); + yon_advanced_part_update_from_data(part,data); } } @@ -480,6 +525,7 @@ advanced_part_widgets *yon_advanced_part_create(advanced_part_data *part_data){ g_object_set_data(G_OBJECT(part->MainBox),"advanced_part_data",part_data); g_object_set_data(G_OBJECT(part->SizeCombo),"advanced_part_widgets",part); g_object_set_data(G_OBJECT(part->RemoveButton),"advanced_part_widgets",part); + g_object_set_data(G_OBJECT(part->RemoveButton),"advanced_part_data",part_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); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 9f2957a..0bff66e 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -1357,7 +1357,9 @@ void on_install_advanced_partition_chosen(GtkCellRenderer *, gchar *path, main_w void yon_devices_setup(main_window *widgets); void on_advanced_password_clicked(GtkWidget *, advanced_part_widgets *part); advanced_part_widgets *yon_advanced_partition_new(); -void on_advanced_part_remove(GtkWidget *self, main_window *widgets); +void on_advanced_part_remove_device(GtkWidget *self, main_window *widgets); +void on_advanced_part_remove_part(GtkWidget *self, main_window *widgets); +void on_advanced_part_remove_virtual(GtkWidget *self, main_window *widgets); int yon_advanced_get_part_size(main_window *widgets); void yon_advanced_partition_clear(main_window *widgets); void yon_os_row_setup(os_row *row, char *name, char *version, char *tags, char *description, char *source, char *size);