From 2494cfee413d2051066afc50e9971ecb38d6dc3e Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Wed, 21 Jan 2026 10:57:40 +0000 Subject: [PATCH] Fixed package info output --- gresource.xml | 1 + source/CMakeLists.txt | 1 + source/ubinstall-gtk-kernel.c | 91 ++++++++++++++++++++++---------- source/ubinstall-gtk.h | 3 +- ubinstall-gtk-package-info.glade | 68 ++++++++++++++++++++++++ 5 files changed, 136 insertions(+), 28 deletions(-) create mode 100644 ubinstall-gtk-package-info.glade diff --git a/gresource.xml b/gresource.xml index eaee9ad..4c2b01f 100644 --- a/gresource.xml +++ b/gresource.xml @@ -22,6 +22,7 @@ ubinstall-gtk-layouts.glade ubinstall-gtk-keyboard-layouts.glade ubinstall-gtk-slider.glade + ubinstall-gtk-package-info.glade ubinstall-gtk.css diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index d4ce9e5..0c2e995 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -62,6 +62,7 @@ set(DEPENDFILES ../ubinstall-gtk-layouts.glade ../ubinstall-gtk-keyboard-layouts.glade ../ubinstall-gtk-slider.glade + ../ubinstall-gtk-package-info.glade ../gresource.xml ../ubinstall-gtk.css ../modules.csv diff --git a/source/ubinstall-gtk-kernel.c b/source/ubinstall-gtk-kernel.c index 3b4dd71..7cefc09 100644 --- a/source/ubinstall-gtk-kernel.c +++ b/source/ubinstall-gtk-kernel.c @@ -240,13 +240,41 @@ 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(); + PangoFontDescription *font_descr = pango_font_description_new(); + pango_font_description_set_family(font_descr,"Source Code Pro 10"); + PangoAttribute *font_attr = pango_attr_font_desc_new(font_descr); + pango_attr_list_insert(attributes,font_attr); + 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)); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_package_info); + element->MainBox = yon_gtk_builder_get_widget(builder,"MainBox"); + element->InfoTree = yon_gtk_builder_get_widget(builder,"InfoTree"); + element->InfoList = GTK_LIST_STORE(gtk_builder_get_object(builder,"InfoList")); + + return element; +} void on_kernel_addon_info(GtkLabel *self){ yon_window *window = yon_window_new(); yon_gtk_window_setup(GTK_WINDOW(window->Window),NULL,PACKAGE_INFO_LABEL,icon_path,"info-label"); char *package=NULL; package = yon_char_new(gtk_label_get_text(self)); - // int size; + int size; if (strstr(package,",")){ @@ -256,35 +284,44 @@ void on_kernel_addon_info(GtkLabel *self){ } GtkWidget *label = NULL; - { - yon_packages_info *info = yon_packages_get_info_struct(YON_PACKAGES_ALL,package); - char *info_string = yon_packages_get_info_string(info); + // { + // yon_packages_info *info = yon_packages_get_info_struct(YON_PACKAGES_ALL,package); + // char *info_string = yon_packages_get_info_string(info); - if (!yon_char_is_empty(info_string)){ - label = gtk_label_new(NULL); - char *temp = yon_char_replace(info_string,"@",""); - gtk_label_set_markup(GTK_LABEL(label),temp); - gtk_widget_show(label); - gtk_box_pack_start(GTK_BOX(window->MainBox),label,0,0,0); - } else { - label = gtk_label_new(PACKAGE_NOT_FOUND_LABEL); - gtk_widget_show(label); - gtk_box_pack_start(GTK_BOX(window->MainBox),label,0,0,0); - } - } - // config_str info = yon_config_load(get_package_info_command(package),&size); - // if (size!=-1){ - // char *final_text = yon_char_parsed_to_string(info,size,""); - // label = gtk_label_new(final_text); - // gtk_widget_show(label); - // gtk_box_pack_start(GTK_BOX(window->MainBox),label,0,0,0); - // free(final_text); - // } else { - // label = gtk_label_new(PACKAGE_NOT_FOUND_LABEL); - // gtk_widget_show(label); - // gtk_box_pack_start(GTK_BOX(window->MainBox),label,0,0,0); + // if (!yon_char_is_empty(info_string)){ + // label = gtk_label_new(NULL); + // yon_gtk_label_set_font(GTK_LABEL(label)); + // char *temp = info_string; + // gtk_label_set_markup(GTK_LABEL(label),temp); + // gtk_widget_show(label); + // gtk_box_pack_start(GTK_BOX(window->MainBox),label,0,0,0); + // } 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); + // } // } + config_str info = yon_config_load(get_package_info_command(package),&size); + if (size!=-1){ + 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,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); } diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index bc8a49a..a8be308 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -39,6 +39,7 @@ #define glade_locales_path "/com/ublinux/ui/ubinstall-gtk-layouts.glade" #define glade_layouts_path "/com/ublinux/ui/ubinstall-gtk-keyboard-layouts.glade" #define glade_path_slider "/com/ublinux/ui/ubinstall-gtk-slider.glade" +#define glade_path_package_info "/com/ublinux/ui/ubinstall-gtk-package-info.glade" #define CssPath "/com/ublinux/css/ubinstall-gtk.css" #define config_path yon_char_unite(yon_ubl_user_get_home_directory(), "/.config/", LocaleName, "/", LocaleName, ".conf", NULL) @@ -298,7 +299,7 @@ layout && /description:/ {\ #define languages_command "while IFS= read -ru3 SELECT_LOCALE; do SELECT_LOCALE=\"${SELECT_LOCALE% *}\"; [[ $(< /usr/share/i18n/locales/${SELECT_LOCALE%.*}) =~ (\"language\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"territory\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"country_name\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"lang_name\"[[:blank:]]*\\\"([^\\\"]*)\\\")|(\"language\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"territory\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"lang_name\"[[:blank:]]*\\\"([^\\\"]*)\\\")|(\"language\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"territory\"[[:blank:]]*\\\"([^\\\"]*)\\\") ]] && echo \"${SELECT_LOCALE}|${BASH_REMATCH[2]}${BASH_REMATCH[7]}${BASH_REMATCH[11]}${BASH_REMATCH[5]:+ (${BASH_REMATCH[5]})}${BASH_REMATCH[9]:+ (${BASH_REMATCH[9]})}|${BASH_REMATCH[3]}${BASH_REMATCH[8]}${BASH_REMATCH[12]}${BASH_REMATCH[4]:+ (${BASH_REMATCH[4]})}\" || echo \"${SELECT_LOCALE}\"; done 3< \"/usr/share/i18n/SUPPORTED\"" -#define get_package_info_command(target) yon_char_append("pacman -Si ", target) +#define get_package_info_command(target) yon_char_unite("pacman -Si ", target,"| sed 's/ */ /g'",NULL) #define layouts_command "sed -En '/^! layout$/,/^ *$/!d;s/[[:blank:]]+([^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" #define layouts_variant_command "sed -En '/^! variant$/,/^ *$/!d;s/[[:blank:]]+([^ ]+)[[:blank:]]+([^ :]+):[[:blank:]]+(.*)/\\2|\\1|\\3/p' /usr/share/X11/xkb/rules/evdev.lst" diff --git a/ubinstall-gtk-package-info.glade b/ubinstall-gtk-package-info.glade new file mode 100644 index 0000000..4d537d2 --- /dev/null +++ b/ubinstall-gtk-package-info.glade @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + True + False + vertical + + + True + True + in + + + True + True + InfoList + False + False + vertical + + + none + + + + + column + + + + 0 + + + + + + + column + + + + 1 + + + + + + + + + True + True + 0 + + + +