diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index 49d8ff1..0736467 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -160,6 +160,46 @@ void on_config_custom_load(GtkWidget *,main_window *widgets){ yon_terminal_integrated_start(terminal,command); } +char *yon_package_dependent_get(char *target){ + int size=0; + config_str parsed = NULL; + if (strstr(target,",")){ + int final_size=0; + int targets_size=0; + config_str targets = yon_char_parse(target,&targets_size,","); + for (int i=0;iinstall_tags_box)); for (guint i=0;iMainNotebook))){ gtk_widget_hide(window->DependencesFrame); - // gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START); + gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START); } else { int size; config_str additions = yon_resource_open_file(kernels_addon_path,&size); @@ -766,7 +806,7 @@ void on_package_install_clicked(GtkWidget *self,dictionary *dict){ if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){ gtk_widget_hide(window->DependencesFrame); - // gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START); + gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START); } else { int size; config_str additions = yon_resource_open_file(kernels_addon_path,&size); @@ -835,7 +875,7 @@ void on_module_remove_clicked(GtkWidget *self,dictionary *dict){ yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),self==tab->update_package_button?UPDATE_MODULE_TITLE_LABEL:INSTALL_MODULE_TITLE_LABEL,icon_path,"additions_dialog"); action_text = ADDITION_MODULE_REMOVE_CONFIRMATION_LABEL(tab->name); gtk_widget_hide(window->DependencesFrame); - // gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START); + gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START); gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_ADDITION_MODULE_TITLE_LABEL); } else { yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),self==tab->update_package_button?UPDATE_MODULE_TITLE_LABEL:INSTALL_MODULE_TITLE_LABEL,icon_path,"dialog"); @@ -848,18 +888,26 @@ void on_module_remove_clicked(GtkWidget *self,dictionary *dict){ } int size; config_str additions = yon_resource_open_file(kernels_addon_path,&size); - GtkTreeIter iter; + // GtkTreeIter iter; for (int i=0;imodule_requirements_size;i++){ if (!system(get_package_is_installed_command(tab->module_requirements[i]))){ - gtk_list_store_append(window->liststore1,&iter); for (int j=1;jmodule_requirements[i])) - gtk_list_store_set(window->liststore1,&iter,1,yon_char_unite(parsed[1],",",parsed[2],NULL),2,parsed[3],-1); + if (!strcmp(parsed[1],tab->module_requirements[i])){ + char *target = yon_char_unite(parsed[1],",",parsed[2],NULL); + char *depends = yon_package_dependent_get(target); + if (strcmp(depends,target)){ + GtkTreeIter itar; + gtk_list_store_append(window->liststore1,&itar); + gtk_list_store_set(window->liststore1,&itar,0,1,1,depends,2, parsed[3],-1); + + } + } yon_char_parsed_free(parsed,cur_size); } } + } yon_char_parsed_free(additions,size); } @@ -909,7 +957,7 @@ void on_package_remove_clicked(GtkWidget *self,dictionary *dict){ action_text = ADDITION_PACKAGE_REMOVE_CONFIRMATION_LABEL(tab->name); gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_ADDITION_PACKAGE_TITLE_LABEL); gtk_widget_hide(window->DependencesFrame); - // gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START); + gtk_box_set_child_packing(GTK_BOX(gtk_widget_get_parent(window->DependencesFrame)),gtk_widget_get_parent(gtk_widget_get_parent(window->TopicLabel)),1,1,0,GTK_PACK_START); } else { if (installed_kernels>1){ action_text = KERNEL_PACKAGE_REMOVE_CONFIRMATION_LABEL(tab->name); @@ -921,18 +969,23 @@ void on_package_remove_clicked(GtkWidget *self,dictionary *dict){ gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_PACKAGE_TITLE_LABEL); int size; config_str additions = yon_resource_open_file(kernels_addon_path,&size); - GtkTreeIter iter; for (int i=0;imodule_requirements_size;i++){ if (!system(get_package_is_installed_command(tab->package_requirements[i]))){ - gtk_list_store_append(window->liststore1,&iter); for (int j=1;jmodule_requirements[i])) - gtk_list_store_set(window->liststore1,&iter,2,parsed[3],-1); + if (!strcmp(parsed[1],tab->module_requirements[i])){ + char *target = yon_char_unite(parsed[1],",",parsed[2],NULL); + char *depends = yon_package_dependent_get(target); + if (strcmp(depends,target)){ + GtkTreeIter itar; + gtk_list_store_append(window->liststore1,&itar); + gtk_list_store_set(window->liststore1,&itar,0,1,1,depends,2, parsed[3],-1); + + } + } yon_char_parsed_free(parsed,cur_size); } - gtk_list_store_set(window->liststore1,&iter,0,1,1,tab->module_requirements[i],-1); } } yon_char_parsed_free(additions,size); diff --git a/source/ubl-strings.h b/source/ubl-strings.h index acf1461..a4620be 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -92,4 +92,5 @@ #define UPDATE_ADDITION_PACKAGE_TITLE_LABEL _("Update addition package") #define BUILD_SUCCESS_STATUS_LABEL _("Building has succeeded") #define BUILD_FAILED_STATUS_LABEL _("Building has failed") -#define KERNEL_PACKAGE_INSTALL_ATTENTION_LABEL _("Attention! If you work in sandbox mode, you must install the package with the module!") \ No newline at end of file +#define KERNEL_PACKAGE_INSTALL_ATTENTION_LABEL _("Attention! If you work in sandbox mode, you must install the package with the module!") +#define DEPENDS_LABEL(target) yon_char_unite(_("Some of chosen dependent packages have been in dependences for another packages"),": ",target,_(". Do you really want to remove them?"),NULL) \ No newline at end of file diff --git a/ubl-settings-kernel-dialog.glade b/ubl-settings-kernel-dialog.glade index bf2774c..753b4a1 100644 --- a/ubl-settings-kernel-dialog.glade +++ b/ubl-settings-kernel-dialog.glade @@ -5,11 +5,13 @@ - + - + - + + + @@ -103,6 +105,7 @@ True True liststore1 + both none @@ -122,7 +125,10 @@ Module - + + word + 200 + 1 @@ -133,7 +139,9 @@ Description - + + 100 + 2 @@ -155,7 +163,7 @@ - False + True True 1