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