diff --git a/source/ubinstall-gtk-kernel.c b/source/ubinstall-gtk-kernel.c index 1ea1886..de1c5dd 100644 --- a/source/ubinstall-gtk-kernel.c +++ b/source/ubinstall-gtk-kernel.c @@ -18,8 +18,12 @@ gboolean on_kernel_enabled_toggled(GtkWidget *self, GdkEventButton *, kernel_row return 0; } -void on_kernel_info(GtkWidget *, char *, kernel_row *row){ - yon_package_info_window_create(row->package); +void on_kernel_info(GtkWidget *, char *link, kernel_row *row){ + if (!yon_char_is_empty(link)){ + yon_package_info_window_create(link); + } else { + yon_package_info_window_create(row->package); + } } kernel_row *yon_kernel_row_new(){ @@ -42,6 +46,9 @@ kernel_row *yon_kernel_row_new(){ g_signal_connect(G_OBJECT(row->InstallCheck),"toggled",G_CALLBACK(on_kernel_install_enabled),row); g_signal_connect(G_OBJECT(row->EnableRadio),"button-release-event",G_CALLBACK(on_kernel_enabled_toggled),row); g_signal_connect(G_OBJECT(row->NameLabel),"activate-link",G_CALLBACK(on_kernel_info),row); + g_signal_connect(G_OBJECT(row->ModulesLabel),"activate-link",G_CALLBACK(on_kernel_info),row); + g_signal_connect(G_OBJECT(row->NameLabel),"button-press-event",G_CALLBACK(on_kernel_addon_menu_block),row); + g_signal_connect(G_OBJECT(row->ModulesLabel),"button-press-event",G_CALLBACK(on_kernel_addon_menu_block),row); row->row = gtk_list_box_row_new(); gtk_container_add(GTK_CONTAINER(row->row),row->RowBox); @@ -121,10 +128,17 @@ void yon_kernel_row_setup(kernel_row *row, char *name, char *modules,char *packa description_full = yon_char_parsed_to_string(description_wrapped,size,"\n"); yon_char_parsed_free(description_wrapped,size); } - char *modules_parsed = yon_char_replace(modules," ","\n"); + int modules_size=0; + config_str modules_parsed = yon_char_parse(modules,&modules_size," "); char *label_markup = yon_char_unite("",name,"",NULL); + for (int i=0;i",modules_parsed[i],"",NULL); + free(modules_parsed[i]); + modules_parsed[i] = temp; + } + char *modules_final = yon_char_parsed_to_string(modules_parsed,modules_size,"\n"); gtk_label_set_markup(GTK_LABEL(row->NameLabel),label_markup); - gtk_label_set_label(GTK_LABEL(row->ModulesLabel),modules_parsed); + gtk_label_set_markup(GTK_LABEL(row->ModulesLabel),modules_final); gtk_label_set_label(GTK_LABEL(row->DescriptionLabel),description_full); yon_kernel_row_setup_tags(row,tags); diff --git a/source/ubinstall-gtk-packages.c b/source/ubinstall-gtk-packages.c index cfc79a7..5217cb2 100644 --- a/source/ubinstall-gtk-packages.c +++ b/source/ubinstall-gtk-packages.c @@ -80,6 +80,31 @@ void on_software_info(GtkWidget*, main_window *widgets){ yon_char_parsed_free(parsed,size); } +void yon_packages_remove_empty_groups(main_window *widgets){ + GtkTreeModel *model = GTK_TREE_MODEL(widgets->PackagesList); + GtkTreeIter iter; + for_iter(model,&iter){ + if (gtk_tree_model_iter_has_child(model,&iter)){ + GtkTreeIter subiter; + for (int valid2 = gtk_tree_model_iter_children(model,&subiter,&iter);valid2;valid2 = gtk_tree_model_iter_next(model,&subiter)){ + if (!gtk_tree_model_iter_has_child(model,&subiter)){ + gtk_tree_store_remove(widgets->PackagesList,&subiter); + if (!gtk_tree_model_iter_children(model,&subiter,&iter)){ + valid2=0; + break; + } + } + } + } else { + gtk_tree_store_remove(widgets->PackagesList,&iter); + if (!gtk_tree_model_get_iter_first(model,&iter)){ + valid=0; + break; + } + } + } +} + void yon_packages_tab_init(main_window *widgets){ on_status_update(NULL,widgets); if (!main_config.configure_mode){ @@ -99,7 +124,9 @@ void yon_packages_tab_init(main_window *widgets){ for (int i=0;iPackagesList,parsed[0]); char *name_render = yon_char_replace(parsed[2],","," "); + int final_size = 0; + config_str final = NULL; + int modules_parsed_size = 0; + config_str modules_parsed = yon_char_parse(parsed[2],&modules_parsed_size," "); + int empty=0; + for (int j=0;jPackagesList,category_iter,parsed[1]); @@ -132,7 +173,7 @@ void yon_packages_tab_init(main_window *widgets){ GtkTreeIter package_iter; gtk_tree_store_append(widgets->PackagesList,&package_iter,subcategory_iter); char *full_string = yon_char_unite("",name_render,"\n",_(parsed[3]),NULL); - gtk_tree_store_set(widgets->PackagesList,&package_iter,0,!!yon_char_check_elements(config_packages,parsed[2],",")||yon_char_check_elements(modules,parsed[2],","),1,parsed[2],2,full_string,3,1,4,!yon_char_check_elements(modules,parsed[2],","),5,parsed[2],-1); + gtk_tree_store_set(widgets->PackagesList,&package_iter,0,!!yon_char_check_elements(config_packages,modules_string,",")||yon_char_check_elements(modules,modules_string,","),1,modules_string,2,full_string,3,1,4,!yon_char_check_elements(modules,modules_string,","),5,modules_string,-1); free(full_string); gtk_tree_iter_free(subcategory_iter); } else { @@ -142,14 +183,14 @@ void yon_packages_tab_init(main_window *widgets){ gtk_tree_store_set(widgets->PackagesList,&subcatiter,1,parsed[1],2,_(parsed[1]),3,0,-1); gtk_tree_store_append(widgets->PackagesList,&package_iter,&subcatiter); char *full_string = yon_char_unite("",name_render,"\n",_(parsed[3]),NULL); - gtk_tree_store_set(widgets->PackagesList,&package_iter,0,!!yon_char_check_elements(config_packages,parsed[2],",")||yon_char_check_elements(modules,parsed[2],","),1,parsed[2],2,full_string,3,1,4,!yon_char_check_elements(modules,parsed[2],","),5,parsed[2],-1); + gtk_tree_store_set(widgets->PackagesList,&package_iter,0,!!yon_char_check_elements(config_packages,modules_string,",")||yon_char_check_elements(modules,modules_string,","),1,modules_string,2,full_string,3,1,4,!yon_char_check_elements(modules,modules_string,","),5,modules_string,-1); free(full_string); } } else { GtkTreeIter package_iter; gtk_tree_store_append(widgets->PackagesList,&package_iter,category_iter); char *full_string = yon_char_unite("",name_render,"\n",_(parsed[3]),NULL); - gtk_tree_store_set(widgets->PackagesList,&package_iter,0,!!yon_char_check_elements(config_packages,parsed[2],",")||yon_char_check_elements(modules,parsed[2],","),1,parsed[2],2,full_string,3,1,4,!yon_char_check_elements(modules,parsed[2],","),5,parsed[2],-1); + gtk_tree_store_set(widgets->PackagesList,&package_iter,0,!!yon_char_check_elements(config_packages,modules_string,",")||yon_char_check_elements(modules,modules_string,","),1,modules_string,2,full_string,3,1,4,!yon_char_check_elements(modules,modules_string,","),5,modules_string,-1); free(full_string); } gtk_tree_iter_free(category_iter); @@ -164,7 +205,7 @@ void yon_packages_tab_init(main_window *widgets){ gtk_tree_store_set(widgets->PackagesList,&subcategory_iter,1,parsed[1],2,_(parsed[1]),3,0,-1); gtk_tree_store_append(widgets->PackagesList,&package_iter,&subcategory_iter); char *full_string = yon_char_unite("",name_render,"\n",_(parsed[3]),NULL); - gtk_tree_store_set(widgets->PackagesList,&package_iter,0,!!yon_char_check_elements(config_packages,parsed[2],",")||yon_char_check_elements(modules,parsed[2],","),1,parsed[2],2,full_string,3,1,4,!yon_char_check_elements(modules,parsed[2],","),5,parsed[2],-1); + gtk_tree_store_set(widgets->PackagesList,&package_iter,0,!!yon_char_check_elements(config_packages,modules_string,",")||yon_char_check_elements(modules,modules_string,","),1,modules_string,2,full_string,3,1,4,!yon_char_check_elements(modules,modules_string,","),5,modules_string,-1); free(full_string); } else { GtkTreeIter package_iter; @@ -173,11 +214,12 @@ void yon_packages_tab_init(main_window *widgets){ gtk_tree_store_set(widgets->PackagesList,&catiter,1,parsed[0],2,_(parsed[0]),3,0,-1); gtk_tree_store_append(widgets->PackagesList,&package_iter,&catiter); char *full_string = yon_char_unite("",name_render,"\n",_(parsed[3]),NULL); - gtk_tree_store_set(widgets->PackagesList,&package_iter,0,!!yon_char_check_elements(config_packages,parsed[2],",")||yon_char_check_elements(modules,parsed[2],","),1,parsed[2],2,full_string,3,1,4,!yon_char_check_elements(modules,parsed[2],","),5,parsed[2],-1); + gtk_tree_store_set(widgets->PackagesList,&package_iter,0,!!yon_char_check_elements(config_packages,modules_string,",")||yon_char_check_elements(modules,modules_string,","),1,modules_string,2,full_string,3,1,4,!yon_char_check_elements(modules,modules_string,","),5,modules_string,-1); free(full_string); } } } + yon_packages_remove_empty_groups(widgets); if (!yon_char_is_empty(modules)) free(modules); gtk_tree_view_expand_all(GTK_TREE_VIEW(widgets->PackagesTree)); } diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index 986bb7f..43227e7 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -268,7 +268,7 @@ int yon_page_save(main_window *widgets, enum YON_PAGES page){ case YON_PAGE_CONFIG_HUB: return yon_configuration_hub_save(widgets); case YON_PAGE_OS_COMPONENTS: - // return yon_os_components_save(widgets); + return yon_os_components_save(widgets); break; case YON_PAGE_KERNEL: return yon_kernel_save(widgets); diff --git a/source/ubinstall-gtk-region.c b/source/ubinstall-gtk-region.c index 7f9bf58..45259f1 100644 --- a/source/ubinstall-gtk-region.c +++ b/source/ubinstall-gtk-region.c @@ -186,6 +186,11 @@ void on_region_entry_changed(GtkWidget *, main_window *widgets){ } } +// void yon_region_load(CcTimezoneLocation *target, main_window *widgets){ +// const char *timezone = cc_timezone_location_get_zone(target); + +// } + void yon_region_init(main_window *widgets){ if (!main_config.configure_mode){ yon_config_update_by_args(main_config.config_load_path, zone_parameter,NULL); @@ -232,6 +237,9 @@ void yon_region_init(main_window *widgets){ size_t zones_size=0; config_str keys = (config_str)g_hash_table_get_keys_as_array(timezones_list,(guint*)&zones_size); + // TzDB *db = tz_load_db(); + // GPtrArray *locations = tz_get_locations(db); + // g_ptr_array_foreach(locations,(GFunc)yon_region_load,widgets); qsort(keys,zones_size,sizeof(char*),(__compar_fn_t)yon_char_parsed_compare); for (size_t i=0;iRegionCombo),keys[i],_(keys[i])); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 7d9a6e4..e46e332 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -1640,4 +1640,5 @@ info_element *yon_package_info_element_new(); void yon_gtk_label_set_font(GtkLabel *label); void on_kernel_info(GtkWidget *, char *link, kernel_row *row); gboolean on_os_components_info(GtkWidget *, GdkEventButton *, os_row *row); -void on_software_info(GtkWidget*, main_window *widgets); \ No newline at end of file +void on_software_info(GtkWidget*, main_window *widgets); +void yon_packages_remove_empty_groups(main_window *widgets); \ No newline at end of file