From 29669855329888458c1fc2cc9ac23cb99a646df2 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Tue, 21 Apr 2026 15:40:29 +0600 Subject: [PATCH] Uncheck all check buttons improvements --- source/ubinstall-gtk-components.c | 156 ++++++++++++++++++------------ source/ubinstall-gtk.c | 4 +- source/ubinstall-gtk.h | 4 +- ubinstall-gtk.glade | 1 + 4 files changed, 100 insertions(+), 65 deletions(-) diff --git a/source/ubinstall-gtk-components.c b/source/ubinstall-gtk-components.c index de06fca..ce6abea 100644 --- a/source/ubinstall-gtk-components.c +++ b/source/ubinstall-gtk-components.c @@ -1,50 +1,53 @@ #include "ubinstall-gtk.h" -void on_os_components_uncheck_all(GtkWidget *,main_window *widgets){ - int active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->OSSoftwareUncheckAllCheck)); - switch(active){ - case 1:{ - GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->OSSoftwareListBox)); - GList *iter; - for(iter = list;iter;iter=iter->next){ - os_row *row = g_object_get_data(iter->data,"kernel_row"); - int sensitive = gtk_widget_get_sensitive(row->InstallCheck); - if (sensitive){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(row->InstallCheck),0); - } - } - } break; - } - gtk_widget_hide(widgets->OSSoftwareUncheckAllCheck); - g_signal_handlers_block_by_func(G_OBJECT(widgets->OSSoftwareUncheckAllCheck),on_os_components_uncheck_all,widgets); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->OSSoftwareUncheckAllCheck),0); - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->OSSoftwareUncheckAllCheck),on_os_components_uncheck_all,widgets); -} - // void on_os_components_uncheck_all(GtkWidget *,main_window *widgets){ // int active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->OSSoftwareUncheckAllCheck)); -// GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->OSSoftwareListBox)); -// GList *iter; -// for(iter = list;iter;iter=iter->next){ -// os_row *row = g_object_get_data(iter->data,"kernel_row"); -// int sensitive = gtk_widget_get_sensitive(row->InstallCheck); -// if (sensitive){ -// gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(row->InstallCheck),!active); -// } -// } // switch(active){ -// case 0: gtk_button_set_label(GTK_BUTTON(widgets->OSSoftwareUncheckAllCheck),UNCHECK_ALL_LABEL); -// break; -// case 1: gtk_button_set_label(GTK_BUTTON(widgets->OSSoftwareUncheckAllCheck),CHECK_ALL_LABEL); +// case 1:{ +// GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->OSSoftwareListBox)); +// GList *iter; +// for(iter = list;iter;iter=iter->next){ +// os_row *row = g_object_get_data(iter->data,"kernel_row"); +// int sensitive = gtk_widget_get_sensitive(row->InstallCheck); +// if (sensitive){ +// gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(row->InstallCheck),0); +// } +// } +// } break; // } +// gtk_widget_hide(widgets->OSSoftwareUncheckAllCheck); // g_signal_handlers_block_by_func(G_OBJECT(widgets->OSSoftwareUncheckAllCheck),on_os_components_uncheck_all,widgets); // gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->OSSoftwareUncheckAllCheck),0); // g_signal_handlers_unblock_by_func(G_OBJECT(widgets->OSSoftwareUncheckAllCheck),on_os_components_uncheck_all,widgets); // } +void on_os_components_switch_all(GtkWidget *self,main_window *widgets){ + g_signal_handlers_block_by_func(G_OBJECT(self),G_CALLBACK(on_os_components_switch_all),widgets); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self),0); + g_signal_handlers_unblock_by_func(G_OBJECT(self),G_CALLBACK(on_os_components_switch_all),widgets); + int active = !!g_object_get_data(G_OBJECT(self),"uncheck"); + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->OSSoftwareListBox)); + GList *iter; + for(iter = list;iter;iter=iter->next){ + os_row *row = g_object_get_data(iter->data,"kernel_row"); + int sensitive = gtk_widget_get_sensitive(row->InstallCheck); + if (sensitive){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(row->InstallCheck),!active); + } + } + switch(active){ + case 0: gtk_button_set_label(GTK_BUTTON(self),UNCHECK_ALL_LABEL); + g_object_set_data(G_OBJECT(self),"uncheck",widgets); + break; + case 1: gtk_button_set_label(GTK_BUTTON(self),CHECK_ALL_LABEL); + g_object_set_data(G_OBJECT(self),"uncheck",NULL); + } +} + int yon_os_components_check_packages_size(GtkWidget *, main_window *widgets){ long pacman_size = 0; { + int active = 1; GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->OSSoftwareListBox)); GList *listiter; for (listiter=list;listiter;listiter=listiter->next){ @@ -53,16 +56,18 @@ int yon_os_components_check_packages_size(GtkWidget *, main_window *widgets){ long cur_size = row->size_raw; pacman_size += cur_size; if (gtk_widget_get_sensitive(row->InstallCheck)){ - gtk_widget_show(widgets->OSSoftwareUncheckAllCheck); - // gtk_button_set_label(GTK_BUTTON(widgets->OSSoftwareUncheckAllCheck),UNCHECK_ALL_LABEL); + // gtk_widget_show(widgets->OSSoftwareUncheckAllCheck); + active = 0; } - // } else { - // gtk_button_set_label(GTK_BUTTON(widgets->OSSoftwareUncheckAllCheck),CHECK_ALL_LABEL); - // g_signal_handlers_block_by_func(G_OBJECT(widgets->OSSoftwareUncheckAllCheck),on_os_components_uncheck_all,widgets); - // gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->OSSoftwareUncheckAllCheck),1); - // g_signal_handlers_unblock_by_func(G_OBJECT(widgets->OSSoftwareUncheckAllCheck),on_os_components_uncheck_all,widgets); } } + switch(active){ + case 0: gtk_button_set_label(GTK_BUTTON(widgets->OSSoftwareUncheckAllCheck),UNCHECK_ALL_LABEL); + g_object_set_data(G_OBJECT(widgets->OSSoftwareUncheckAllCheck),"uncheck",widgets); + break; + case 1: gtk_button_set_label(GTK_BUTTON(widgets->OSSoftwareUncheckAllCheck),CHECK_ALL_LABEL); + g_object_set_data(G_OBJECT(widgets->OSSoftwareUncheckAllCheck),"uncheck",NULL); + } } { GtkTreeIter iter; @@ -299,12 +304,9 @@ void yon_os_components_init(main_window *widgets){ if (!main_config.configure_mode){ yon_config_update_by_args(main_config.config_load_path, modules_parameter,NULL); } - // int size = 0; GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->OSSoftwareListBox)); GList *iter; for (iter=list;iter;iter=iter->next){ - // os_row *row = g_object_get_data(iter->data,"kernel_row"); - // free(row); gtk_widget_destroy(GTK_WIDGET(iter->data)); } if (!gtk_widget_get_parent(widgets->OSSpinner)) @@ -315,25 +317,48 @@ void yon_os_components_init(main_window *widgets){ while(gtk_events_pending()) gtk_main_iteration(); } -void on_software_uncheck_all(GtkWidget *, main_window *widgets){ - int active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->AdditionalComponentsUncheckAllCheck)); +// void on_software_uncheck_all(GtkWidget *, main_window *widgets){ +// int active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->AdditionalComponentsUncheckAllCheck)); +// switch(active){ +// case 1:{ +// GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdditionalComponentsList)); +// GList *iter; +// for(iter = list;iter;iter=iter->next){ +// os_row *row = g_object_get_data(iter->data,"kernel_row"); +// int sensitive = gtk_widget_get_sensitive(row->InstallCheck); +// if (sensitive){ +// gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(row->InstallCheck),0); +// } +// } +// } break; +// } +// gtk_widget_hide(widgets->AdditionalComponentsUncheckAllCheck); +// g_signal_handlers_block_by_func(G_OBJECT(widgets->AdditionalComponentsUncheckAllCheck),on_software_switch_all,widgets); +// gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->AdditionalComponentsUncheckAllCheck),0); +// g_signal_handlers_unblock_by_func(G_OBJECT(widgets->AdditionalComponentsUncheckAllCheck),on_software_switch_all,widgets); +// } + +void on_software_switch_all(GtkWidget *self,main_window *widgets){ + g_signal_handlers_block_by_func(G_OBJECT(self),G_CALLBACK(on_software_switch_all),widgets); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self),0); + g_signal_handlers_unblock_by_func(G_OBJECT(self),G_CALLBACK(on_software_switch_all),widgets); + int active = !!g_object_get_data(G_OBJECT(self),"uncheck"); + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdditionalComponentsList)); + GList *iter; + for(iter = list;iter;iter=iter->next){ + os_row *row = g_object_get_data(iter->data,"kernel_row"); + int sensitive = gtk_widget_get_sensitive(row->InstallCheck); + if (sensitive){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(row->InstallCheck),!active); + } + } switch(active){ - case 1:{ - GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdditionalComponentsList)); - GList *iter; - for(iter = list;iter;iter=iter->next){ - os_row *row = g_object_get_data(iter->data,"kernel_row"); - int sensitive = gtk_widget_get_sensitive(row->InstallCheck); - if (sensitive){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(row->InstallCheck),0); - } - } - } break; + case 0: gtk_button_set_label(GTK_BUTTON(self),UNCHECK_ALL_LABEL); + g_object_set_data(G_OBJECT(self),"uncheck",widgets); + break; + case 1: gtk_button_set_label(GTK_BUTTON(self),CHECK_ALL_LABEL); + g_object_set_data(G_OBJECT(self),"uncheck",NULL); } - gtk_widget_hide(widgets->AdditionalComponentsUncheckAllCheck); - g_signal_handlers_block_by_func(G_OBJECT(widgets->AdditionalComponentsUncheckAllCheck),on_software_uncheck_all,widgets); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->AdditionalComponentsUncheckAllCheck),0); - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->AdditionalComponentsUncheckAllCheck),on_software_uncheck_all,widgets); } int yon_software_save(main_window *widgets){ @@ -378,6 +403,7 @@ int yon_software_save(main_window *widgets){ int yon_software_check_packages_size(GtkWidget *, main_window *widgets){ long pacman_size = 0; { + int active = 1; GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdditionalComponentsList)); GList *listiter; for (listiter=list;listiter;listiter=listiter->next){ @@ -386,10 +412,18 @@ int yon_software_check_packages_size(GtkWidget *, main_window *widgets){ long cur_size = row->size_raw; pacman_size += cur_size; if (gtk_widget_get_sensitive(row->InstallCheck)){ - gtk_widget_show(widgets->AdditionalComponentsUncheckAllCheck); + // gtk_widget_show(widgets->AdditionalComponentsUncheckAllCheck); + active = 0; } } } + switch(active){ + case 0: gtk_button_set_label(GTK_BUTTON(widgets->AdditionalComponentsUncheckAllCheck),UNCHECK_ALL_LABEL); + g_object_set_data(G_OBJECT(widgets->AdditionalComponentsUncheckAllCheck),"uncheck",widgets); + break; + case 1: gtk_button_set_label(GTK_BUTTON(widgets->AdditionalComponentsUncheckAllCheck),CHECK_ALL_LABEL); + g_object_set_data(G_OBJECT(widgets->AdditionalComponentsUncheckAllCheck),"uncheck",NULL); + } } { GtkTreeIter iter; diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index 957b9a2..b22d8dd 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -830,8 +830,8 @@ void yon_main_window_create(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->SamePlaceDeviceTree),"cursor-changed",G_CALLBACK(on_device_selection_changed),widgets); g_signal_connect(G_OBJECT(widgets->UserdataDevicesTree),"cursor-changed",G_CALLBACK(on_device_selection_changed),widgets); - g_signal_connect(G_OBJECT(widgets->OSSoftwareUncheckAllCheck),"toggled",G_CALLBACK(on_os_components_uncheck_all),widgets); - g_signal_connect(G_OBJECT(widgets->AdditionalComponentsUncheckAllCheck),"toggled",G_CALLBACK(on_software_uncheck_all),widgets); + g_signal_connect(G_OBJECT(widgets->OSSoftwareUncheckAllCheck),"toggled",G_CALLBACK(on_os_components_switch_all),widgets); + g_signal_connect(G_OBJECT(widgets->AdditionalComponentsUncheckAllCheck),"toggled",G_CALLBACK(on_software_switch_all),widgets); g_signal_connect(G_OBJECT(widgets->NextInstallationSizeSpin),"value-changed",G_CALLBACK(yon_size_changed),widgets); g_signal_connect(G_OBJECT(widgets->UserdataFormatSizeSpin),"value-changed",G_CALLBACK(yon_size_changed),widgets); g_signal_connect(G_OBJECT(widgets->OSFormatSizeSpin),"value-changed",G_CALLBACK(yon_size_changed),widgets); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 4b0400c..6749f30 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -1616,11 +1616,11 @@ void yon_gtk_widget_set_translation(GtkWidget *target); void on_bootloader_user_edit(GtkWidget *, main_window *widgets); void on_bootloader_admin_toggled(GtkWidget *, char *path, main_window *widgets); void on_bootloader_user_remove(GtkWidget *, main_window *widgets); -void on_software_uncheck_all(GtkWidget *, main_window *widgets); +void on_software_switch_all(GtkWidget *, main_window *widgets); gboolean on_kernel_enabled_toggled(GtkWidget *self, GdkEventButton *, kernel_row *row); void on_status_update(GtkWidget *,main_window *widgets); gboolean on_kernel_addon_menu_block(GObject *self, GdkEventButton *event); -void on_os_components_uncheck_all(GtkWidget *,main_window *widgets); +void on_os_components_switch_all(GtkWidget *,main_window *widgets); gboolean yon_os_components_load(main_window *widgets); gboolean on_user_autoloin_switch(GtkWidget *, int status, main_window *); void on_locale_selected(GtkTreeView *self,main_window *widgets); diff --git a/ubinstall-gtk.glade b/ubinstall-gtk.glade index 676391c..dccecec 100644 --- a/ubinstall-gtk.glade +++ b/ubinstall-gtk.glade @@ -3539,6 +3539,7 @@ Select a different installation sources. Uncheck all + True True False True