diff --git a/source/ubinstall-gtk-components.c b/source/ubinstall-gtk-components.c
index 9bfe3e0..67fd321 100644
--- a/source/ubinstall-gtk-components.c
+++ b/source/ubinstall-gtk-components.c
@@ -40,7 +40,6 @@ int yon_kernel_save(main_window *widgets){
if (!main_config.configure_mode){
yon_debug_output("%s\n",yon_config_save_args_simple(main_config.config_load_path,packages_parameter, KERNEL_BOOT_parameter,NULL));
}
-
return 1;
}
@@ -181,6 +180,10 @@ int yon_os_components_save(main_window *widgets){
return 1;
}
+void on_os_components_info(GtkWidget *, char *, os_row *row){
+ yon_package_info_window_create(row->modules);
+}
+
os_row *yon_os_row_new(){
os_row *row = new(os_row);
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_os_row);
@@ -196,6 +199,7 @@ os_row *yon_os_row_new(){
row->modules=NULL;
row->version=NULL;
+ g_signal_connect(G_OBJECT(row->NameLabel),"activate-link",G_CALLBACK(on_os_components_info),row);
row->row = yon_gtk_builder_get_widget(builder,"MainRow");
gtk_widget_show(row->row);
@@ -242,6 +246,7 @@ void *yon_modules_list_load(main_window *widgets){
void yon_os_row_setup(os_row *row, char *name, char *version,char *tags, char *description,char *source, char *size){
row->name = yon_char_new(name);
row->source = yon_char_new(source);
+ row->modules = yon_char_new(name);
char *description_full = yon_char_new(description);
if (yon_char_is_empty(source)||yon_char_check_begins_with(source,"(local)/")){
@@ -250,7 +255,8 @@ void yon_os_row_setup(os_row *row, char *name, char *version,char *tags, char *d
gtk_label_set_text(GTK_LABEL(row->SourceLabel),source);
}
- gtk_label_set_label(GTK_LABEL(row->NameLabel),name);
+ char *label_markup = yon_char_unite("",name,"",NULL);
+ gtk_label_set_markup(GTK_LABEL(row->NameLabel),label_markup);
gtk_label_set_label(GTK_LABEL(row->VersionLabel),version);
gtk_label_set_label(GTK_LABEL(row->DescriptionLabel),description_full);
gtk_label_set_label(GTK_LABEL(row->SizeLabel),size);
@@ -258,6 +264,7 @@ void yon_os_row_setup(os_row *row, char *name, char *version,char *tags, char *d
yon_kernel_row_setup_tags((kernel_row*)row,tags);
free(size);
free(description_full);
+ free(label_markup);
}
gboolean yon_os_component_insert(struct row_data *row_input){
diff --git a/source/ubinstall-gtk-kernel.c b/source/ubinstall-gtk-kernel.c
index 657f854..1ea1886 100644
--- a/source/ubinstall-gtk-kernel.c
+++ b/source/ubinstall-gtk-kernel.c
@@ -18,6 +18,10 @@ 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);
+}
+
kernel_row *yon_kernel_row_new(){
kernel_row *row = new(kernel_row);
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_kernel_row);
@@ -37,6 +41,7 @@ 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);
row->row = gtk_list_box_row_new();
gtk_container_add(GTK_CONTAINER(row->row),row->RowBox);
@@ -117,13 +122,15 @@ void yon_kernel_row_setup(kernel_row *row, char *name, char *modules,char *packa
yon_char_parsed_free(description_wrapped,size);
}
char *modules_parsed = yon_char_replace(modules," ","\n");
- gtk_label_set_label(GTK_LABEL(row->NameLabel),name);
+ char *label_markup = yon_char_unite("",name,"",NULL);
+ gtk_label_set_markup(GTK_LABEL(row->NameLabel),label_markup);
gtk_label_set_label(GTK_LABEL(row->ModulesLabel),modules_parsed);
gtk_label_set_label(GTK_LABEL(row->DescriptionLabel),description_full);
yon_kernel_row_setup_tags(row,tags);
free(description_full);
free(modules_parsed);
+ free(label_markup);
}
void yon_kernel_resize(main_window *widgets){
@@ -262,7 +269,6 @@ void on_kernel_addon_install_enabled(GtkWidget *, kernel_addon_row *row){
}
}
-void yon_gtk_label_set_font(GtkLabel *label);
void yon_gtk_label_set_font(GtkLabel *label){
g_return_if_fail(GTK_IS_LABEL(label));
PangoAttrList *attributes = pango_attr_list_new();
@@ -273,13 +279,6 @@ void yon_gtk_label_set_font(GtkLabel *label){
gtk_label_set_attributes(GTK_LABEL(label),attributes);
}
-typedef struct {
- GtkWidget *MainBox;
- GtkWidget *InfoTree;
- GtkListStore *InfoList;
-} info_element;
-
-info_element *yon_package_info_element_new();
info_element *yon_package_info_element_new(){
info_element *element = malloc(sizeof(info_element));
memset(element,0,sizeof(info_element));
diff --git a/source/ubinstall-gtk-packages.c b/source/ubinstall-gtk-packages.c
index cb2bfaa..cfc79a7 100644
--- a/source/ubinstall-gtk-packages.c
+++ b/source/ubinstall-gtk-packages.c
@@ -66,6 +66,20 @@ GtkTreeIter *yon_subcategory_check(GtkTreeStore *target, GtkTreeIter *parent_ite
return ret_iter;
}
+void on_software_info(GtkWidget*, main_window *widgets){
+ char *packages;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->PackagesTree)),&model,&iter);
+ gtk_tree_model_get(GTK_TREE_MODEL(widgets->PackagesList),&iter,5,&packages,-1);
+ int size=0;
+ config_str parsed = yon_char_parse(packages,&size,",");
+ for (int i=0;iPackagesList,&subcatiter,category_iter);
- gtk_tree_store_set(widgets->PackagesList,&subcatiter,1,parsed[1],2,_(parsed[3]),3,0,-1);
+ 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);
@@ -150,7 +164,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],","),-1);
+ 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);
free(full_string);
} else {
GtkTreeIter package_iter;
diff --git a/source/ubinstall-gtk-startup-apps.c b/source/ubinstall-gtk-startup-apps.c
index 9549a1b..4150a6f 100644
--- a/source/ubinstall-gtk-startup-apps.c
+++ b/source/ubinstall-gtk-startup-apps.c
@@ -51,7 +51,7 @@ void yon_startup_apps_init(main_window *widgets){
config_str apps_ret = yon_resource_open_file(apps_list_path,&size);
apps_ret = yon_char_parsed_rip(apps_ret,&size,0);
if (!size) return;
- qsort(apps_ret,(size_t)size,sizeof(char *),(__compar_fn_t)yon_char_parsed_compare);
+ // qsort(apps_ret,(size_t)size,sizeof(char *),(__compar_fn_t)yon_char_parsed_compare);
for (int i=0;iConfigurationModeMenuItem),"Label"));
list = g_slist_append(list,g_object_get_data(G_OBJECT(widgets->EnableVNCMenuItem),"Label"));
list = g_slist_append(list,g_object_get_data(G_OBJECT(widgets->EnableRDPMenuItem),"Label"));
+ dictionary *diter = NULL;
+ for_dictionaries (diter,widgets->PackagesMenu->buttons){
+ GtkWidget *label = g_object_get_data(G_OBJECT(diter->data),"Label");
+ list = g_slist_append(list,label);
+ }
GSList *iter;
for (iter = list; iter; iter = iter->next){
@@ -380,4 +385,5 @@ void yon_update_translation(main_window *widgets){
g_list_free(list);
g_list_free(container);
}
+
}
\ No newline at end of file
diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c
index bc256c4..ee6d7cf 100644
--- a/source/ubinstall-gtk.c
+++ b/source/ubinstall-gtk.c
@@ -7,6 +7,46 @@ void yon_license_init(main_window *widgets){
gtk_widget_set_sensitive(widgets->NextButton,0);
}
+yon_window *yon_package_info_window_create(const char *package_str){
+ if (yon_char_is_empty(package_str)) return NULL;
+ yon_window *window = yon_window_new();
+ yon_gtk_window_setup(GTK_WINDOW(window->Window),NULL,PACKAGE_INFO_LABEL,icon_path,"info-label");
+ int size=0;
+ char *package = yon_char_new(package_str);
+ if (strstr(package,",")){
+ char *temp = yon_char_replace(package,","," ");
+ free(package);
+ package = temp;
+ }
+
+ GtkWidget *label = NULL;
+ yon_packages_info *info_struct = yon_packages_get_info_struct(YON_PACKAGES_ALL,package);
+ if (!info_struct) return NULL;
+ char* info_string = yon_packages_get_info_string(info_struct);
+ config_str info = yon_char_parse(info_string,&size,"\n");
+ if (size>0){
+ info_element *element = yon_package_info_element_new();
+ gtk_box_pack_start(GTK_BOX(window->MainBox),element->MainBox,1,1,0);
+ for (int i=0;iInfoList,&iter);
+ gtk_list_store_set(element->InfoList,&iter,0,parsed[0],1,!yon_char_is_empty(parsed[1])?_(parsed[1]):"",-1);
+
+ }
+ } else {
+ label = gtk_label_new(PACKAGE_NOT_FOUND_LABEL);
+ yon_gtk_label_set_font(GTK_LABEL(label));
+ gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(window->MainBox),label,0,0,0);
+ gtk_label_set_xalign(GTK_LABEL(label),0);
+ }
+ gtk_widget_show(window->Window);
+ return window;
+}
+
double yon_password_check_func(yon_password_window *window, const char *password_string){
pwquality_settings_t *settings = pwquality_default_settings();
int strength = pwquality_check(settings,password_string,NULL,NULL,NULL);
@@ -904,6 +944,12 @@ void yon_main_window_create(main_window *widgets){
yon_root_button_init(widgets->root_button,GTK_WINDOW(widgets->MainWindow));
}
+ widgets->PackagesMenu = yon_rmb_menu_setup(widgets->PackagesTree,NULL,NULL,INFO_LABEL,info_icon_path,G_CALLBACK(on_software_info),widgets,NULL);
+
+ dictionary *iter = NULL;
+ for_dictionaries (iter,widgets->PackagesMenu->buttons){
+ yon_gtk_widget_set_translation(g_object_get_data(G_OBJECT(iter->data),"Label"));
+ }
yon_startup_language_init();
yon_locale_init();
yon_main_window_update_locale(widgets);
diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h
index fbe142a..f106171 100755
--- a/source/ubinstall-gtk.h
+++ b/source/ubinstall-gtk.h
@@ -49,6 +49,7 @@
#define add_icon_path "com.ublinux.libublsettingsui-gtk3.increase-symbolic"
#define active_icon_path "com.ublinux.libublsettingsui-gtk3.active-symbolic"
#define inactive_icon_path "com.ublinux.libublsettingsui-gtk3.inactive-symbolic"
+#define info_icon_path "com.ublinux.libublsettingsui-gtk3.important-symbolic"
#define LocalePath "/usr/share/locale"
#define LocaleName "ubinstall-gtk"
@@ -826,6 +827,7 @@ typedef struct
GtkTreeStore *PackagesList;
GtkCellRenderer *PackagesChosenCell;
GtkWidget *PackagesTree;
+ rmb_menu_window *PackagesMenu;
// Configuration hub slide section
GtkWidget *ConfigHubRebootCombo;
@@ -1227,6 +1229,12 @@ typedef struct
GtkWidget *TextLabel;
} slider_object;
+typedef struct {
+ GtkWidget *MainBox;
+ GtkWidget *InfoTree;
+ GtkListStore *InfoList;
+} info_element;
+
void config_init();
main_window *yon_main_window_complete();
ubinstall_language_window *yon_ubinstall_language_new();
@@ -1621,4 +1629,10 @@ gboolean on_kernel_addon_menu_block(GObject *self, GdkEventButton *event);
void on_os_components_uncheck_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);
\ No newline at end of file
+void on_locale_selected(GtkTreeView *self,main_window *widgets);
+yon_window *yon_package_info_window_create(const char *package);
+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);
+void on_os_components_info(GtkWidget *, char *, os_row *row);
+void on_software_info(GtkWidget*, main_window *widgets);
\ No newline at end of file
diff --git a/source/ubl-strings.h b/source/ubl-strings.h
index 7ab8b9e..eb3aa7f 100644
--- a/source/ubl-strings.h
+++ b/source/ubl-strings.h
@@ -303,6 +303,7 @@ NULL)
#define EDIT_USER_LABEL _("Edit user")
#define ACCESSED_LABEL _("Accessed")
#define UNACCESSED_LABEL _("Unaccessed")
+#define INFO_LABEL _("Package information")
// #define _LABEL _("Chosen size:")
// #define _LABEL _("Overall size:")