From 4510bb067eea1d99b164d43e6217cb2b9270a9d2 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 2 Dec 2024 09:53:04 +0600 Subject: [PATCH 01/13] Changed pacman update call; localisation updates --- source/ubl-settings-kernel.c | 71 ++++++++++++++++++++++++++++-------- source/ubl-settings-kernel.h | 3 ++ source/ubl-strings.h | 2 + ubl-settings-kernel.pot | 8 ++++ ubl-settings-kernel_ru.po | 8 ++++ 5 files changed, 76 insertions(+), 16 deletions(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index eee2e4a..6d98a16 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -125,6 +125,41 @@ void on_config_custom_load(GtkWidget *,main_window *widgets){ } + void on_terminal_done(GtkWidget *, int state, GtkWidget *status_box){ + if (state) yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(status_box),"terminal_done",BUILD_SUCCESS_STATUS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + else yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(status_box),"terminal_done",BUILD_FAILED_STATUS_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } + + void yon_terminal_window_start(GtkWindow *parent_window, char *command){ + GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + GtkWidget *header = gtk_header_bar_new(); + GtkWidget *terminal = vte_terminal_new(); + GtkWidget *status_box = gtk_box_new(GTK_ORIENTATION_VERTICAL,5); + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL,5); + GtkWidget *terminal_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); + GtkWidget *scroll = gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL,gtk_scrollable_get_vadjustment(GTK_SCROLLABLE(terminal))); + + gtk_window_set_titlebar(GTK_WINDOW(window),header); + gtk_container_add(GTK_CONTAINER(window),box); + gtk_box_pack_start(GTK_BOX(box),status_box,0,0,0); + gtk_box_pack_start(GTK_BOX(box),terminal_box,1,1,0); + gtk_box_pack_start(GTK_BOX(terminal_box),terminal,1,1,0); + gtk_box_pack_start(GTK_BOX(terminal_box),scroll,0,0,0); + gtk_widget_set_margin_bottom(terminal_box,5); + gtk_widget_set_margin_start(terminal_box,5); + gtk_widget_set_margin_end(terminal_box,5); + gtk_widget_show_all(window); + + vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal),-1); + + gtk_window_set_modal(GTK_WINDOW(window),1); + gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(header),1); + gtk_window_set_title(GTK_WINDOW(window),gtk_window_get_title(parent_window)); + gtk_window_set_icon_name(GTK_WINDOW(window),gtk_window_get_icon_name(parent_window)); + g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(on_terminal_done), status_box); + yon_terminal_integrated_start(terminal,command); + } + gboolean yon_tab_create_tags(kernels_tab *tab){ GList *list = gtk_container_get_children(GTK_CONTAINER(tab->install_tags_box)); for (guint i=0;iUpdateButton,0); dictionary *dict = NULL; - for_dictionaries(dict,main_config.kernel_tabs){ - gtk_widget_set_sensitive(((kernels_tab*)dict->data)->update_module_button,0); - gtk_widget_set_sensitive(((kernels_tab*)dict->data)->update_package_button,0); - gtk_widget_set_sensitive(((kernels_tab*)dict->data)->install_module_button,0); - gtk_widget_set_sensitive(((kernels_tab*)dict->data)->install_package_button,0); - gtk_widget_set_sensitive(((kernels_tab*)dict->data)->remove_module_button,0); - gtk_widget_set_sensitive(((kernels_tab*)dict->data)->remove_package_button,0); + if (main_config.kernel_tabs){ + for_dictionaries(dict,main_config.kernel_tabs){ + gtk_widget_set_sensitive(((kernels_tab*)dict->data)->update_module_button,0); + gtk_widget_set_sensitive(((kernels_tab*)dict->data)->update_package_button,0); + gtk_widget_set_sensitive(((kernels_tab*)dict->data)->install_module_button,0); + gtk_widget_set_sensitive(((kernels_tab*)dict->data)->install_package_button,0); + gtk_widget_set_sensitive(((kernels_tab*)dict->data)->remove_module_button,0); + gtk_widget_set_sensitive(((kernels_tab*)dict->data)->remove_package_button,0); + } } - for_dictionaries(dict,main_config.addition_tabs){ - gtk_widget_set_sensitive(((kernels_tab*)dict->data)->update_module_button,0); - gtk_widget_set_sensitive(((kernels_tab*)dict->data)->update_package_button,0); - gtk_widget_set_sensitive(((kernels_tab*)dict->data)->install_module_button,0); - gtk_widget_set_sensitive(((kernels_tab*)dict->data)->install_package_button,0); - gtk_widget_set_sensitive(((kernels_tab*)dict->data)->remove_module_button,0); - gtk_widget_set_sensitive(((kernels_tab*)dict->data)->remove_package_button,0); + if (main_config.addition_tabs){ + for_dictionaries(dict,main_config.addition_tabs){ + gtk_widget_set_sensitive(((kernels_tab*)dict->data)->update_module_button,0); + gtk_widget_set_sensitive(((kernels_tab*)dict->data)->update_package_button,0); + gtk_widget_set_sensitive(((kernels_tab*)dict->data)->install_module_button,0); + gtk_widget_set_sensitive(((kernels_tab*)dict->data)->install_package_button,0); + gtk_widget_set_sensitive(((kernels_tab*)dict->data)->remove_module_button,0); + gtk_widget_set_sensitive(((kernels_tab*)dict->data)->remove_package_button,0); + } } return NULL; } @@ -1148,7 +1187,7 @@ void on_build_execute(GtkWidget *, dictionary *dict){ char *target = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->KernelVersionCombo)); char *filename = (char*)gtk_entry_get_text(GTK_ENTRY(window->FilenameEntry)); char *command = build_command(target,filename,debug,drivers); - yon_terminal_window_launch(GTK_WINDOW(widgets->Window),yon_debug_output("%s\n",command)); + yon_terminal_window_start(GTK_WINDOW(widgets->Window),yon_debug_output("%s\n",command)); gtk_widget_destroy(window->window); } @@ -1296,7 +1335,7 @@ void yon_main_window_complete(main_window *widgets){ on_update_clicked(NULL,widgets); yon_save_window_set_postsave_function(on_save_done,widgets); - yon_command_execute_async(pacman_update_command,widgets); + yon_terminal_integrated_start(widgets->InstallTerminal,pacman_update_command); } yon_load_proceed(YON_CONFIG_LOCAL); } diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h index 0d96a86..bc991bc 100644 --- a/source/ubl-settings-kernel.h +++ b/source/ubl-settings-kernel.h @@ -236,6 +236,9 @@ void on_config_local_load(GtkWidget *, main_window *widgets); void on_config_global_load(GtkWidget *, main_window *widgets); void on_config_custom_load(GtkWidget *,main_window *widgets); +void on_terminal_done(GtkWidget *, int state, GtkWidget *status_box); +void yon_terminal_window_start(GtkWindow *parent_window, char *command); + void config_init(); void yon_main_window_complete(main_window *widgets); diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 7df69c4..2bd4d24 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -90,3 +90,5 @@ #define REMOVE_ADDITION_PACKAGE_TITLE_LABEL _("Remove addition package") #define UPDATE_ADDITION_MODULE_TITLE_LABEL _("Update addition module") #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") \ No newline at end of file diff --git a/ubl-settings-kernel.pot b/ubl-settings-kernel.pot index 6596ef3..b4c3280 100644 --- a/ubl-settings-kernel.pot +++ b/ubl-settings-kernel.pot @@ -329,3 +329,11 @@ msgstr "" #: source/ubl-strings.h:92 msgid "Update addition package" msgstr "" + +#: source/ubl-strings.h:93 +msgid "Building has succeeded" +msgstr "" + +#: source/ubl-strings.h:94 +msgid "Building has failed" +msgstr "" diff --git a/ubl-settings-kernel_ru.po b/ubl-settings-kernel_ru.po index f6b2b71..97d3e06 100644 --- a/ubl-settings-kernel_ru.po +++ b/ubl-settings-kernel_ru.po @@ -340,3 +340,11 @@ msgstr "Обновить модуль с дополнением" #, fuzzy msgid "Update addition package" msgstr "Обновить пакет с дополнением" + +#: source/ubl-strings.h:93 +msgid "Building has succeeded" +msgstr "Сборка прошла успешно" + +#: source/ubl-strings.h:94 +msgid "Building has failed" +msgstr "Ошибка сборки ядра" -- 2.35.1 From e3b8936505f9cb46afc6a2ba840925bfd12c386e Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 2 Dec 2024 10:02:36 +0600 Subject: [PATCH 02/13] Fixed wrong text for head label at addition module removal confirmation window --- source/ubl-settings-kernel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index 6d98a16..c2633b5 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -806,7 +806,7 @@ void on_module_remove_clicked(GtkWidget *self,dictionary *dict){ action_text = KERNEL_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_label_set_text(GTK_LABEL(window->HeadLabel),INSTALL_ADDITION_MODULE_TITLE_LABEL); + gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_ADDITION_MODULE_TITLE_LABEL); } else { gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_MODULE_TITLE_LABEL); action_text = ADDITION_MODULE_REMOVE_CONFIRMATION_LABEL(tab->name); -- 2.35.1 From 7ee9a9067e322be7761999d49592d12b9d75e4ba Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 2 Dec 2024 10:38:53 +0600 Subject: [PATCH 03/13] Localisation update --- source/ubl-settings-kernel.h | 2 +- source/ubl-strings.h | 5 +++-- ubl-settings-kernel.pot | 6 ++++++ ubl-settings-kernel_ru.po | 6 ++++++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h index bc991bc..d39f358 100644 --- a/source/ubl-settings-kernel.h +++ b/source/ubl-settings-kernel.h @@ -46,7 +46,7 @@ #define get_kernel_changelog_command(target) yon_char_unite("find /usr/lib/modules/ -maxdepth 2 -type f -iname \"pkgbase\" -exec grep -il \"",target,"\" {} + | xargs dirname | xargs -I {} cat \"{}/changelog\"", NULL) #define get_package_info_command(target) yon_char_append("pacman -Si ",target) #define get_package_is_installed_command(target) yon_char_append("pacman -Qq ",target) -#define get_package_is_updated_command(target) yon_char_append("pacman -Qu ",target) +#define get_package_is_updated_command(target) yon_char_append("pacman -Qqu ",target) #define unload_command(target) yon_char_append("ubmunload ",target) #define pacman_update_command "pacman -Sy" diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 2bd4d24..4c4ec3e 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -62,7 +62,7 @@ #define PACKAGE_REMOVED_BUT_NOT_DISABLED_LABEL _("The package with the module has been removed, but the module is not disabled from the system, as it is used by other system programs. After rebooting, the module will be disabled and removed.") #define KERNEL_MODULE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel module")," ",target,"?",NULL) -#define KERNEL_PACKAGE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel package")," ",target,"?",NULL) +#define KERNEL_PACKAGE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel package")," ",target,"?\n",KERNEL_PACKAGE_INSTALL_ATTENTION_LABEL,NULL) #define KERNEL_MODULE_UPDATE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to update kernel module")," ",target,"?",NULL) #define KERNEL_PACKAGE_UPDATE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to update kernel package")," ",target,"?",NULL) #define KERNEL_MODULE_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove kernel module")," ",target,"?",NULL) @@ -91,4 +91,5 @@ #define UPDATE_ADDITION_MODULE_TITLE_LABEL _("Update addition module") #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") \ No newline at end of file +#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 diff --git a/ubl-settings-kernel.pot b/ubl-settings-kernel.pot index b4c3280..6480b60 100644 --- a/ubl-settings-kernel.pot +++ b/ubl-settings-kernel.pot @@ -337,3 +337,9 @@ msgstr "" #: source/ubl-strings.h:94 msgid "Building has failed" msgstr "" + +#: source/ubl-strings.h:95 +msgid "" +"Attention! If you work in sandbox mode, you must install the package with " +"the module!" +msgstr "" diff --git a/ubl-settings-kernel_ru.po b/ubl-settings-kernel_ru.po index 97d3e06..098a5d6 100644 --- a/ubl-settings-kernel_ru.po +++ b/ubl-settings-kernel_ru.po @@ -348,3 +348,9 @@ msgstr "Сборка прошла успешно" #: source/ubl-strings.h:94 msgid "Building has failed" msgstr "Ошибка сборки ядра" + +#: source/ubl-strings.h:95 +msgid "" +"Attention! If you work in sandbox mode, you must install the package with " +"the module!" +msgstr "Внимание! Если вы работаете в режиме песочницы, необходимо установить пакет с модулем!" -- 2.35.1 From ec3f30e141203c08d3b7aa24415cebb504076e79 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 2 Dec 2024 11:26:08 +0600 Subject: [PATCH 04/13] Package updates together with module --- source/ubl-settings-kernel.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index c2633b5..516392c 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -538,7 +538,9 @@ void on_module_install_accept(GtkWidget *, dictionary *dict){ free(dict->first->next->next); dict->first->next->next = NULL; char *module_formated = yon_package_string_set(tab->module); - char *modules_to_install = module_formated; + char *modules_to_install = NULL; + if (!tab->module_updated) modules_to_install = yon_char_unite(module_formated, " ", yon_package_string_set(tab->package), NULL); + else modules_to_install = module_formated; GtkTreeIter iter; for_iter (GTK_TREE_MODEL(window->liststore1),&iter){ -- 2.35.1 From 8eb2872c4b468cef15d582dd3431be093410841f Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 2 Dec 2024 13:56:24 +0600 Subject: [PATCH 05/13] Fixed building status checking --- source/ubl-settings-kernel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index 516392c..4585594 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -126,7 +126,7 @@ void on_config_custom_load(GtkWidget *,main_window *widgets){ } void on_terminal_done(GtkWidget *, int state, GtkWidget *status_box){ - if (state) yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(status_box),"terminal_done",BUILD_SUCCESS_STATUS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + if (!state) yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(status_box),"terminal_done",BUILD_SUCCESS_STATUS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); else yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(status_box),"terminal_done",BUILD_FAILED_STATUS_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } -- 2.35.1 From 9c56df488031f9af71e01de86a8e692a9fecedb8 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 2 Dec 2024 18:08:36 +0600 Subject: [PATCH 06/13] Fixed dependances when removing kernels --- source/ubl-settings-kernel.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index 4585594..808342a 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -821,7 +821,7 @@ void on_module_remove_clicked(GtkWidget *self,dictionary *dict){ 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->module))){ + if (!system(get_package_is_installed_command(tab->module_requirements[i]))){ gtk_list_store_append(window->liststore1,&iter); for (int j=1;jmodule_requirements_size;i++){ - if (!system(get_package_is_installed_command(tab->package))){ + if (!system(get_package_is_installed_command(tab->package_requirements[i]))){ gtk_list_store_append(window->liststore1,&iter); for (int j=1;j Date: Tue, 3 Dec 2024 10:03:29 +0600 Subject: [PATCH 07/13] Added cursive for attention string --- source/ubl-settings-kernel.c | 2 +- source/ubl-strings.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index 808342a..1e42b76 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -737,7 +737,7 @@ void on_package_install_clicked(GtkWidget *self,dictionary *dict){ } } - gtk_label_set_text(GTK_LABEL(window->TopicLabel),action_text); + gtk_label_set_markup(GTK_LABEL(window->TopicLabel),action_text); gtk_widget_show(window->Window); yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 4c4ec3e..607ae2d 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -62,7 +62,7 @@ #define PACKAGE_REMOVED_BUT_NOT_DISABLED_LABEL _("The package with the module has been removed, but the module is not disabled from the system, as it is used by other system programs. After rebooting, the module will be disabled and removed.") #define KERNEL_MODULE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel module")," ",target,"?",NULL) -#define KERNEL_PACKAGE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel package")," ",target,"?\n",KERNEL_PACKAGE_INSTALL_ATTENTION_LABEL,NULL) +#define KERNEL_PACKAGE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel package")," ",target,"?\n",KERNEL_PACKAGE_INSTALL_ATTENTION_LABEL,"",NULL) #define KERNEL_MODULE_UPDATE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to update kernel module")," ",target,"?",NULL) #define KERNEL_PACKAGE_UPDATE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to update kernel package")," ",target,"?",NULL) #define KERNEL_MODULE_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove kernel module")," ",target,"?",NULL) -- 2.35.1 From 5906d6162ea1e61956b75114c6c2215ff5b36c53 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 3 Dec 2024 11:31:06 +0600 Subject: [PATCH 08/13] Fixed closing for package removal dialog window --- source/ubl-settings-kernel.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index 1e42b76..03b21aa 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -617,6 +617,7 @@ void on_package_remove_accept(GtkWidget *, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); dialog_window *window = yon_dictionary_get_data(dict->first->next->next,dialog_window*); + dict=dict->first; free(dict->first->next->next); dict->first->next->next = NULL; char *module_formated = yon_package_string_set(tab->package); @@ -867,11 +868,11 @@ void on_package_remove_clicked(GtkWidget *self,dictionary *dict){ dialog_window *window = yon_dialog_window_new(); 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"); yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + dict=dict->first; g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_package_remove_accept),dict); char *action_text = ""; gtk_widget_show(window->Window); - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){ action_text = KERNEL_PACKAGE_REMOVE_CONFIRMATION_LABEL(tab->name); gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_ADDITION_PACKAGE_TITLE_LABEL); @@ -951,6 +952,8 @@ kernels_tab *yon_tab_row_new(GtkListBox *target, char *target_string, main_windo tab->install_package_button = yon_gtk_builder_get_widget(builder,"InstallPackageButton"); tab->changelog_button = yon_gtk_builder_get_widget(builder,"ChangelogButton"); tab->launch_button = yon_gtk_builder_get_widget(builder,"LaunchButton"); + tab->module_updated=0; + tab->package_updated=0; dictionary *dict = NULL; yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); @@ -1058,6 +1061,8 @@ additions_kernels_tab *yon_additions_tab_row_new(GtkListBox *target, char *targe tab->launch_button = NULL; tab->run_tags_box = NULL; tab->tags_box = NULL; + tab->module_updated=0; + tab->package_updated=0; dictionary *dict = NULL; yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); -- 2.35.1 From 8dfde723c7bccb5aabdd379bf246f338e67204b9 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 3 Dec 2024 12:22:24 +0600 Subject: [PATCH 09/13] Crash fix --- source/ubl-settings-kernel.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index 03b21aa..ca3bac6 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -589,6 +589,7 @@ void on_module_remove_accept(GtkWidget *, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); dialog_window *window = yon_dictionary_get_data(dict->first->next->next,dialog_window*); + dict=dict->first; free(dict->first->next->next); dict->first->next->next = NULL; char *module_formated = yon_package_string_set(tab->module); @@ -800,11 +801,16 @@ void on_module_remove_clicked(GtkWidget *self,dictionary *dict){ char *action_text = NULL; dialog_window *window = yon_dialog_window_new(); 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"); + if (dict->first->next->next){ + dict=dict->first; + free(dict->first->next->next); + dict->first->next->next=NULL; + } yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + dict=dict->first; g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_module_remove_accept),dict); gtk_widget_show(window->Window); - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){ action_text = KERNEL_MODULE_REMOVE_CONFIRMATION_LABEL(tab->name); gtk_widget_hide(window->DependencesFrame); @@ -867,6 +873,11 @@ void on_package_remove_clicked(GtkWidget *self,dictionary *dict){ dialog_window *window = yon_dialog_window_new(); 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"); + if (dict->first->next->next){ + dict=dict->first; + free(dict->first->next->next); + dict->first->next->next=NULL; + } yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); dict=dict->first; g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_package_remove_accept),dict); -- 2.35.1 From 4ac5219530ac17f909648de7cbdfa041ed341f0d Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 3 Dec 2024 16:58:44 +0600 Subject: [PATCH 10/13] Modules are installing package dependances as well --- source/ubl-settings-kernel.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index ca3bac6..174fd14 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -548,6 +548,16 @@ void on_module_install_accept(GtkWidget *, dictionary *dict){ char *package; gtk_tree_model_get(GTK_TREE_MODEL(window->liststore1),&iter,0,&status,1,&package,-1); if (status){ + if (strstr(package,",")){ + int parsed_size; + config_str parsed = yon_char_parse(package,&parsed_size,","); + package = ""; + for (int i=0;imodule_requirements[i])) - gtk_list_store_set(window->liststore1,&iter,2,parsed[3],-1); + gtk_list_store_set(window->liststore1,&iter,1,yon_char_unite(parsed[1],",",parsed[2],NULL),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); } -- 2.35.1 From c77202bb19a1890a672c195dac9399e0cc9d92c2 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 3 Dec 2024 17:08:21 +0600 Subject: [PATCH 11/13] Modules are removing package dependances as well --- source/ubl-settings-kernel.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index 174fd14..5b2eb97 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -612,6 +612,16 @@ void on_module_remove_accept(GtkWidget *, dictionary *dict){ char *package; gtk_tree_model_get(GTK_TREE_MODEL(window->liststore1),&iter,0,&status,1,&package,-1); if (status){ + if (strstr(package,",")){ + int parsed_size; + config_str parsed = yon_char_parse(package,&parsed_size,","); + package = ""; + for (int i=0;imodule_requirements[i])) - gtk_list_store_set(window->liststore1,&iter,2,parsed[3],-1); + gtk_list_store_set(window->liststore1,&iter,1,yon_char_unite(parsed[1],",",parsed[2],NULL),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); -- 2.35.1 From fff2c730a9416eaec41dfab15367b2f2bcf7b948 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 3 Dec 2024 18:06:04 +0600 Subject: [PATCH 12/13] Localisation fixes; dialog size WIP --- source/ubl-settings-kernel.c | 34 ++++++++++++++++++-------------- source/ubl-strings.h | 4 ++-- ubl-settings-kernel-dialog.glade | 4 ++-- ubl-settings-kernel.pot | 8 ++++++-- ubl-settings-kernel_ru.po | 8 ++++++-- 5 files changed, 35 insertions(+), 23 deletions(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index 5b2eb97..49d8ff1 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -685,7 +685,6 @@ void on_module_install_clicked(GtkWidget *self,dictionary *dict){ kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); char *action_text = NULL; dialog_window *window = yon_dialog_window_new(); - 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"); yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_module_install_accept),dict); @@ -700,9 +699,11 @@ void on_module_install_clicked(GtkWidget *self,dictionary *dict){ } } else { if (!gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){ + 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"); action_text = KERNEL_MODULE_INSTALL_CONFIRMATION_LABEL(tab->name); gtk_label_set_text(GTK_LABEL(window->HeadLabel),INSTALL_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,"additions_dialog"); action_text = ADDITION_MODULE_INSTALL_CONFIRMATION_LABEL(tab->name); gtk_label_set_text(GTK_LABEL(window->HeadLabel),INSTALL_ADDITION_MODULE_TITLE_LABEL); } @@ -713,7 +714,7 @@ void on_module_install_clicked(GtkWidget *self,dictionary *dict){ yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); 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); @@ -737,14 +738,15 @@ void on_package_install_clicked(GtkWidget *self,dictionary *dict){ kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); char *action_text = NULL; dialog_window *window = yon_dialog_window_new(); - yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),self==tab->update_package_button?UPDATE_PACKAGE_TITLE_LABEL:INSTALL_PACKAGE_TITLE_LABEL,icon_path,"dialog"); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_package_install_accept),dict); if (self == tab->update_module_button){ if (!gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){ + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),self==tab->update_package_button?UPDATE_PACKAGE_TITLE_LABEL:INSTALL_PACKAGE_TITLE_LABEL,icon_path,"dialog"); action_text = KERNEL_PACKAGE_UPDATE_CONFIRMATION_LABEL(tab->name); gtk_label_set_text(GTK_LABEL(window->HeadLabel),UPDATE_PACKAGE_TITLE_LABEL); } else { + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),self==tab->update_package_button?UPDATE_PACKAGE_TITLE_LABEL:INSTALL_PACKAGE_TITLE_LABEL,icon_path,"additions_dialog"); action_text = ADDITION_PACKAGE_UPDATE_CONFIRMATION_LABEL(tab->name); gtk_label_set_text(GTK_LABEL(window->HeadLabel),UPDATE_ADDITION_PACKAGE_TITLE_LABEL); } @@ -764,7 +766,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); @@ -819,7 +821,6 @@ void on_module_remove_clicked(GtkWidget *self,dictionary *dict){ } char *action_text = NULL; dialog_window *window = yon_dialog_window_new(); - 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"); if (dict->first->next->next){ dict=dict->first; free(dict->first->next->next); @@ -831,11 +832,13 @@ void on_module_remove_clicked(GtkWidget *self,dictionary *dict){ gtk_widget_show(window->Window); if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){ - action_text = KERNEL_MODULE_REMOVE_CONFIRMATION_LABEL(tab->name); + 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"); gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_MODULE_TITLE_LABEL); action_text = ADDITION_MODULE_REMOVE_CONFIRMATION_LABEL(tab->name); if (installed_kernels>1){ @@ -890,7 +893,6 @@ void on_package_remove_clicked(GtkWidget *self,dictionary *dict){ } dialog_window *window = yon_dialog_window_new(); - 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"); if (dict->first->next->next){ dict=dict->first; free(dict->first->next->next); @@ -903,16 +905,18 @@ void on_package_remove_clicked(GtkWidget *self,dictionary *dict){ gtk_widget_show(window->Window); if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){ - action_text = KERNEL_PACKAGE_REMOVE_CONFIRMATION_LABEL(tab->name); + 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_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 = ADDITION_PACKAGE_REMOVE_CONFIRMATION_LABEL(tab->name); - } else if (installed_kernels==1){ - action_text = KERNEL_REMOVE_LAST_CONFIRMATION_LABEL(tab->name); - } + if (installed_kernels>1){ + action_text = KERNEL_PACKAGE_REMOVE_CONFIRMATION_LABEL(tab->name); + } else if (installed_kernels==1){ + action_text = KERNEL_REMOVE_LAST_CONFIRMATION_LABEL(tab->name); + } + 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"); gtk_label_set_text(GTK_LABEL(window->HeadLabel),REMOVE_PACKAGE_TITLE_LABEL); int size; diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 607ae2d..acf1461 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -68,8 +68,8 @@ #define KERNEL_MODULE_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove kernel module")," ",target,"?",NULL) #define KERNEL_REMOVE_LAST_CONFIRMATION_LABEL(target) yon_char_unite(_("The kernel is the only one in the system. If you remove it, it will become impossible to boot. Do you really want to remove")," ",target,"?",NULL) #define KERNEL_PACKAGE_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove kernel package")," ",target,"?",NULL) -#define ADDITION_MODULE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel addition package")," ",target,"?",NULL) -#define ADDITION_PACKAGE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel addition package")," ",target,"?",NULL) +#define ADDITION_MODULE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install module with addition package")," ",target,"?",NULL) +#define ADDITION_PACKAGE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install addition package")," ",target,"?",NULL) #define ADDITION_MODULE_UPDATE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to update kernel addition module")," ",target,"?",NULL) #define ADDITION_PACKAGE_UPDATE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to update kernel addition package")," ",target,"?",NULL) #define ADDITION_MODULE_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove kernel addition module")," ",target,"?",NULL) diff --git a/ubl-settings-kernel-dialog.glade b/ubl-settings-kernel-dialog.glade index 3044e7f..bf2774c 100644 --- a/ubl-settings-kernel-dialog.glade +++ b/ubl-settings-kernel-dialog.glade @@ -14,9 +14,9 @@ - 400 False True + 1 com.ublinux.ubl-settings-repomanager @@ -155,7 +155,7 @@ - True + False True 1 diff --git a/ubl-settings-kernel.pot b/ubl-settings-kernel.pot index 6480b60..e9ddf1b 100644 --- a/ubl-settings-kernel.pot +++ b/ubl-settings-kernel.pot @@ -243,8 +243,12 @@ msgstr "" msgid "Are you sure want to remove kernel package" msgstr "" -#: source/ubl-strings.h:71 source/ubl-strings.h:72 -msgid "Are you sure want to install kernel addition package" +#: source/ubl-strings.h:71 +msgid "Are you sure want to install module with addition package" +msgstr "" + +source/ubl-strings.h:72 +msgid "Are you sure want to install addition package" msgstr "" #: source/ubl-strings.h:73 diff --git a/ubl-settings-kernel_ru.po b/ubl-settings-kernel_ru.po index 098a5d6..dda5b43 100644 --- a/ubl-settings-kernel_ru.po +++ b/ubl-settings-kernel_ru.po @@ -249,10 +249,14 @@ msgstr "" msgid "Are you sure want to remove kernel package" msgstr "Вы действительно хотите удалить из системы пакет с ядром" -#: source/ubl-strings.h:71 source/ubl-strings.h:72 -msgid "Are you sure want to install kernel addition package" +#: source/ubl-strings.h:71 +msgid "Are you sure want to install module with addition package" msgstr "Вы хотите установить в систему пакет с модулем дополнения" +#: source/ubl-strings.h:72 +msgid "Are you sure want to install addition package" +msgstr "Вы хотите установить в систему пакет с дополнением" + #: source/ubl-strings.h:73 msgid "Are you sure want to update kernel addition module" msgstr "Вы хотите обновить пакет с модулем дополнения" -- 2.35.1 From 92641ad721c3e5f86d719d02298a611140eec284 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 4 Dec 2024 13:40:09 +0600 Subject: [PATCH 13/13] Fixed initrafms building command --- source/ubl-settings-kernel.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h index d39f358..c4c786c 100644 --- a/source/ubl-settings-kernel.h +++ b/source/ubl-settings-kernel.h @@ -52,12 +52,13 @@ #define install_command(target) yon_char_append("pacman -Sy --noconfirm ",target) #define remove_command(target) yon_char_append("pacman -R --noconfirm ",target) +#define get_dependent_command(target) yon_char_append("pactree -rl ",target) #define get_active_kernel_command "cat /usr/lib/modules/$(uname -r)/pkgbase" #define get_installed_kernel_packages_command "cat /usr/lib/modules/*/pkgbase" #define get_installed_kernel_modules_command "cat /memory/data/from/0/ublinux-data/module/*linux*" -#define build_command(target,filename,debug_bool,drivers_bool) yon_char_unite("ubmkuird -l -n ",filename," -k ",target, " ",(debug_bool)?"--addon ":"",(drivers_bool)?"-H":"",NULL) +#define build_command(target,filename,debug_bool,drivers_bool) yon_char_unite("ubmkuird -l ",!yon_char_is_empty(filename)?"-n ":"",filename," -k ",target, " ",(debug_bool)?"--addon ":"",(drivers_bool)?"-H":"",NULL) #define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get boot KERNEL_BOOT",NULL) #define config_get_local_command "ubconfig --source system get boot KERNEL_BOOT" @@ -236,6 +237,8 @@ void on_config_local_load(GtkWidget *, main_window *widgets); void on_config_global_load(GtkWidget *, main_window *widgets); void on_config_custom_load(GtkWidget *,main_window *widgets); +char *yon_package_dependent_get(char *target); + void on_terminal_done(GtkWidget *, int state, GtkWidget *status_box); void yon_terminal_window_start(GtkWindow *parent_window, char *command); -- 2.35.1