From 60b6bbf030c227eeb87b04df5c9f483caf692c5e Mon Sep 17 00:00:00 2001 From: YanTheKaller Date: Mon, 13 Apr 2026 15:36:58 +0600 Subject: [PATCH 01/15] Pacman database updating changes --- source/ubinstall-gtk-components.c | 9 +++- source/ubinstall-gtk-kernel.c | 15 ++++++- source/ubinstall-gtk-packages.c | 4 ++ source/ubinstall-gtk-page-switch.c | 28 ++++++++++++ source/ubinstall-gtk.c | 70 ++++++++++++++++++++---------- source/ubinstall-gtk.h | 10 ++++- 6 files changed, 107 insertions(+), 29 deletions(-) diff --git a/source/ubinstall-gtk-components.c b/source/ubinstall-gtk-components.c index 21d7b16..6d044b0 100644 --- a/source/ubinstall-gtk-components.c +++ b/source/ubinstall-gtk-components.c @@ -484,6 +484,7 @@ gboolean yon_software_insert(struct row_data *row_input){ config_str parsed = yon_char_parse(main_config.modules[i],&parsed_size,";"); yon_char_parsed_add_or_create_if_exists(final,&final_size,parsed[1]); yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); } modules_param = yon_char_parsed_to_string(final,final_size,","); } else if (!yon_char_is_empty(modules_prm)){ @@ -496,6 +497,7 @@ gboolean yon_software_insert(struct row_data *row_input){ yon_char_parsed_add_or_create_if_exists(final,&final_size,parsed[1]); } yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); } modules_param = yon_char_parsed_to_string(final,final_size,","); } @@ -508,7 +510,6 @@ gboolean yon_software_insert(struct row_data *row_input){ } void yon_software_init(main_window *widgets){ - on_status_update(NULL,widgets); if (!main_config.configure_mode){ yon_config_update_by_args(main_config.config_load_path, packages_parameter,NULL); } @@ -518,6 +519,7 @@ void yon_software_init(main_window *widgets){ os_row *row = g_object_get_data(iter->data,"kernel_row"); free(row); gtk_widget_destroy(GTK_WIDGET(iter->data)); + while(gtk_events_pending()) gtk_main_iteration(); } int base_size; config_str base = yon_packages_find(YON_PACKAGES_ALL,"ubm-",(gsize*)&base_size); @@ -548,6 +550,7 @@ void yon_software_init(main_window *widgets){ row->size = size_str; row->widgets=widgets; g_idle_add((GSourceFunc)yon_software_insert,row); + while(gtk_events_pending()) gtk_main_iteration(); } g_idle_add((GSourceFunc)yon_spinner_switch_off,widgets->OSSpinner); yon_char_parsed_free(base,base_size); @@ -585,7 +588,6 @@ int yon_pacman_software_save(main_window *widgets){ } void yon_pacman_init(main_window *widgets){ - on_status_update(NULL,widgets); if (!main_config.configure_mode){ yon_config_update_by_args(main_config.config_load_path, packages_parameter,NULL); } @@ -606,6 +608,7 @@ void yon_pacman_init(main_window *widgets){ gtk_list_store_append(widgets->PacmanSoftwareChosenList,&iter); gtk_list_store_set(widgets->PacmanSoftwareChosenList,&iter,0,1,1,parsed[i],2,version,3,_(description),4,size_str,6,1,-1); free(size_str); + while(gtk_events_pending()) gtk_main_iteration(); } yon_char_parsed_free(parsed,size); @@ -633,6 +636,7 @@ void yon_pacman_init(main_window *widgets){ } modules_packages = yon_char_parsed_to_string(final,final_size,","); } + while(gtk_events_pending()) gtk_main_iteration(); parsed = yon_char_parse(modules_packages,&size,","); for (int i=1;iPacmanSoftwareChosenList,&iter); gtk_list_store_set(widgets->PacmanSoftwareChosenList,&iter,0,1,1,parsed[i],2,version,3,_(description),4,size_str,6,0,-1); free(size_str); + while(gtk_events_pending()) gtk_main_iteration(); } yon_pacman_software_update_overall_size(widgets); yon_char_parsed_free(parsed,size); diff --git a/source/ubinstall-gtk-kernel.c b/source/ubinstall-gtk-kernel.c index de1c5dd..87392f9 100644 --- a/source/ubinstall-gtk-kernel.c +++ b/source/ubinstall-gtk-kernel.c @@ -113,6 +113,7 @@ void yon_kernel_row_setup_tags(kernel_row *row, char *tags){ tag_type = "tag_green"; }; yon_tag_add(GTK_BOX(row->TagsBox),tag_name,tag_type,NULL); + while(gtk_events_pending()) gtk_main_iteration(); } } @@ -127,6 +128,7 @@ void yon_kernel_row_setup(kernel_row *row, char *name, char *modules,char *packa config_str description_wrapped = yon_char_wrap_to_lines(description_full,3,&size); description_full = yon_char_parsed_to_string(description_wrapped,size,"\n"); yon_char_parsed_free(description_wrapped,size); + while(gtk_events_pending()) gtk_main_iteration(); } int modules_size=0; config_str modules_parsed = yon_char_parse(modules,&modules_size," "); @@ -135,6 +137,7 @@ void yon_kernel_row_setup(kernel_row *row, char *name, char *modules,char *packa char *temp = yon_char_unite("",modules_parsed[i],"",NULL); free(modules_parsed[i]); modules_parsed[i] = temp; + while(gtk_events_pending()) gtk_main_iteration(); } char *modules_final = yon_char_parsed_to_string(modules_parsed,modules_size,"\n"); gtk_label_set_markup(GTK_LABEL(row->NameLabel),label_markup); @@ -168,6 +171,7 @@ void yon_kernel_resize(main_window *widgets){ gtk_widget_get_preferred_width(row->ModulesLabel,&cur_modules_size,NULL); if (name_sizeKernelNameLabel),name_size,-1); gtk_widget_set_size_request(GTK_WIDGET(widgets->KernelModulesLabel),modules_size,-1); @@ -177,6 +181,7 @@ void yon_kernel_resize(main_window *widgets){ gtk_widget_set_size_request(GTK_WIDGET(row->EnableRadio),enable_size,-1); gtk_widget_set_size_request(row->NameLabel,name_size,-1); gtk_widget_set_size_request(row->ModulesLabel,modules_size,-1); + while(gtk_events_pending()) gtk_main_iteration(); } g_list_free(list); } @@ -208,10 +213,10 @@ void yon_kernel_addon_resize(main_window *widgets){ } void yon_kernel_init(main_window *widgets){ - on_status_update(NULL,widgets); if (!main_config.configure_mode){ yon_config_update_by_args(main_config.config_load_path, packages_parameter,KERNEL_BOOT_parameter,NULL); } + while(gtk_events_pending()) gtk_main_iteration(); GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelListBox)); GList *iter; for (iter = list; iter; iter = iter->next){ @@ -222,6 +227,7 @@ void yon_kernel_init(main_window *widgets){ free(row); gtk_widget_destroy(GTK_WIDGET(iter->data)); } + while(gtk_events_pending()) gtk_main_iteration(); } g_list_free(list); @@ -234,6 +240,7 @@ void yon_kernel_init(main_window *widgets){ modules_parsed = yon_char_parse(modules,&modules_size,","); } + while(gtk_events_pending()) gtk_main_iteration(); int size; config_str kernels = yon_resource_open_file(kernel_list_path,&size); gtk_size_group_add_widget(widgets->KernelSizeGroup,widgets->KernelTagsLabel); @@ -256,6 +263,7 @@ void yon_kernel_init(main_window *widgets){ yon_kernel_row_setup(row,name,modules,package,tags,description); + while(gtk_events_pending()) gtk_main_iteration(); if (yon_char_parsed_check_exist(modules_parsed,modules_size,parsed[1])>-1){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(row->InstallCheck),1); } else { @@ -269,6 +277,7 @@ void yon_kernel_init(main_window *widgets){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(row->EnableRadio),1); } yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); } yon_kernel_resize(widgets); @@ -419,11 +428,11 @@ void yon_kernel_addon_row_setup(kernel_addon_row *row, char *name, char *modules } void yon_kernel_addon_init(main_window *widgets){ - on_status_update(NULL,widgets); yon_config_remove_by_args(packages_parameter,NULL); char *command = yon_config_parameter_prepare_command(packages_parameter_command,main_config.config_load_path,NULL,NULL); yon_config_load_config(YON_CONFIG_CUSTOM,command,NULL); free(command); + while(gtk_events_pending()) gtk_main_iteration(); GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelAddonListBox)); GList *iter; for (iter = list; iter; iter = iter->next){ @@ -434,6 +443,7 @@ void yon_kernel_addon_init(main_window *widgets){ free(row); gtk_widget_destroy(GTK_WIDGET(iter->data)); } + while(gtk_events_pending()) gtk_main_iteration(); } g_list_free(list); @@ -478,6 +488,7 @@ void yon_kernel_addon_init(main_window *widgets){ gtk_widget_set_sensitive(row->InstallCheck,0); } yon_char_parsed_free(parsed,parsed_size); + while(gtk_events_pending()) gtk_main_iteration(); } yon_kernel_addon_resize(widgets); diff --git a/source/ubinstall-gtk-packages.c b/source/ubinstall-gtk-packages.c index 850c855..e12b92d 100644 --- a/source/ubinstall-gtk-packages.c +++ b/source/ubinstall-gtk-packages.c @@ -117,6 +117,7 @@ void yon_packages_tab_init(main_window *widgets){ yon_config_load_config(YON_CONFIG_CUSTOM,command,NULL); free(command); } + while(gtk_events_pending()) gtk_main_iteration(); gtk_tree_store_clear(widgets->PackagesList); char *modules = config(modules_parameter); if (modules&&!strcmp(modules,"auto")){ @@ -142,6 +143,7 @@ void yon_packages_tab_init(main_window *widgets){ } modules = yon_char_parsed_to_string(final,final_size,","); } + while(gtk_events_pending()) gtk_main_iteration(); int size; char *config_packages = config(packages_parameter); @@ -163,6 +165,7 @@ void yon_packages_tab_init(main_window *widgets){ } yon_char_parsed_add_or_create_if_exists(final,&final_size,modules_parsed[j]); } + while(gtk_events_pending()) gtk_main_iteration(); yon_char_parsed_free(modules_parsed,modules_parsed_size); char *modules_string = yon_char_parsed_to_string(final,final_size,"\t"); if (empty && !yon_char_check_elements(modules,modules_string,",")) continue; @@ -218,6 +221,7 @@ void yon_packages_tab_init(main_window *widgets){ free(full_string); } } + while(gtk_events_pending()) gtk_main_iteration(); } yon_packages_remove_empty_groups(widgets); if (!yon_char_is_empty(modules)) free(modules); diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index 9f815eb..2f4a721 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -419,6 +419,28 @@ void yon_switch_page_render(main_window *widgets){ g_list_free(list); } +void yon_container_start_loading(GtkWidget *target){ + GtkWidget *parent = gtk_widget_get_parent(target); + g_object_ref(target); + gtk_container_remove(GTK_CONTAINER(parent),target); + GtkWidget *overlay = gtk_overlay_new(); + g_object_set_data(G_OBJECT(parent),"loader_overlay",overlay); + g_object_set_data(G_OBJECT(target),"parent",parent); + gtk_overlay_add_overlay(GTK_OVERLAY(overlay),target); + gtk_widget_show(overlay); +} + +void yon_container_stop_loading(GtkWidget *target){ + g_object_ref(target); + GtkWidget *parent = g_object_get_data(G_OBJECT(target),"loader_overlay"); + GtkWidget *overlay = g_object_get_data(G_OBJECT(parent),"loader_overlay"); + gtk_container_remove(GTK_CONTAINER(overlay),target); + gtk_container_add(GTK_CONTAINER(parent),target); + gtk_widget_destroy(overlay); + gtk_widget_show(overlay); + g_object_set_data(G_OBJECT(parent),"loader_overlay",NULL); + g_object_set_data(G_OBJECT(target),"parent",NULL); +} void yon_configuration_mode_check(main_window *widgets){ enum YON_PAGES page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook)); @@ -470,18 +492,23 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){ yon_configuration_hub_init(widgets); break; case YON_PAGE_OS_COMPONENTS: + on_status_update(NULL,widgets); yon_os_components_init(widgets); break; case YON_PAGE_KERNEL: + on_status_update(NULL,widgets); yon_kernel_init(widgets); break; case YON_PAGE_KERNEL_ADDON: + on_status_update(NULL,widgets); yon_kernel_addon_init(widgets); break; case YON_PAGE_SOFTWARE: + on_status_update(NULL,widgets); yon_software_init(widgets); break; case YON_PAGE_PACMAN_SOFTWARE: + on_status_update(NULL,widgets); yon_pacman_init(widgets); break; case YON_PAGE_REGION: @@ -509,6 +536,7 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){ yon_network_init(widgets); break; case YON_PAGE_PACKAGES: + on_status_update(NULL,widgets); yon_packages_tab_init(widgets); break; case YON_PAGE_INSTALL_ADVANCED: diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index 50d99ce..da767e7 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -315,28 +315,34 @@ void yon_licence_load(main_window *widgets){ } } -// void on_database_update(void *,main_window *widgets){ -// // vte_revealer_struct *revealer = yon_vte_revealer_new(); -// yon_terminal_window_launch(GTK_WINDOW(widgets->MainWindow),"pacman -Sy",SUCCESS_LABEL,FAIL_LABEL); -// yon_terminal_integrated_start_shell(widgets->InstallTerminal,yon_debug_output("%s\n",pacman_update_command),NULL,NULL); -// g_signal_connect(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_db_update_done),widgets); -// gtk_button_clicked(GTK_BUTTON(widgets->MoreButton)); -// gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->MenusTab),1); -// } - -void on_status_update(GtkWidget *,main_window *widgets){ - // on_database_update(NULL,widgets); - yon_window *window = yon_window_new(); - GtkWidget *terminal = vte_terminal_new(); - yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->MainWindow),DB_UPDATE_LABEL,icon_path,NULL); - gtk_widget_show(terminal); - gtk_box_pack_start(GTK_BOX(window->MainBox),terminal,1,1,0); - yon_terminal_integrated_start_shell(terminal,"pacman -Sy",NULL,NULL); - gtk_widget_show(window->Window); - // yon_terminal_window_launch(GTK_WINDOW(widgets->MainWindow),"pacman -Sy",SUCCESS_LABEL,FAIL_LABEL); +void yon_update_page(main_window *widgets){ + enum YON_PAGES page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook)); yon_packages_update(); + while(gtk_events_pending()) gtk_main_iteration(); + yon_page_init(widgets,page); + gtk_widget_set_sensitive(widgets->KernelPacmanStatusButton,1); + gtk_widget_set_sensitive(widgets->PacmanSoftwareStatusButton,1); + gtk_widget_set_sensitive(widgets->KernelAddonPacmanStatusButton,1); + gtk_widget_set_sensitive(widgets->AdditionalComponentsStatusButton,1); +} - if (system(yon_check_database_command)){ +void *yon_db_update(main_window *widgets){ + yon_launch("pacsync --updated"); + g_idle_add_once((GSourceOnceFunc)yon_update_page,widgets); + pthread_exit(NULL); +} + +void on_status_button_update(GtkWidget *, main_window *widgets){ + gtk_widget_set_sensitive(widgets->KernelPacmanStatusButton,0); + gtk_widget_set_sensitive(widgets->PacmanSoftwareStatusButton,0); + gtk_widget_set_sensitive(widgets->KernelAddonPacmanStatusButton,0); + gtk_widget_set_sensitive(widgets->AdditionalComponentsStatusButton,0); + pthread_t tid=0; + pthread_create(&tid,NULL,(void*(*)(void*))yon_db_update,widgets); + +} + +void yon_status_thread_update_inactive(main_window *widgets){ gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelPacmanStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelAddonPacmanStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PacmanSoftwareStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); @@ -347,7 +353,9 @@ void on_status_update(GtkWidget *,main_window *widgets){ gtk_label_set_text(GTK_LABEL(widgets->KernelAddonPacmanStatusLabel),UNACCESSED_LABEL); gtk_label_set_text(GTK_LABEL(widgets->AdditionalComponentsStatusLabel),UNACCESSED_LABEL); gtk_label_set_text(GTK_LABEL(widgets->PackagesStatusLabel),UNACCESSED_LABEL); - } else { +} + +void yon_status_thread_update_active(main_window *widgets){ gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelPacmanStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelAddonPacmanStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PacmanSoftwareStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); @@ -358,10 +366,19 @@ void on_status_update(GtkWidget *,main_window *widgets){ gtk_label_set_text(GTK_LABEL(widgets->KernelAddonPacmanStatusLabel),ACCESSED_LABEL); gtk_label_set_text(GTK_LABEL(widgets->AdditionalComponentsStatusLabel),ACCESSED_LABEL); gtk_label_set_text(GTK_LABEL(widgets->PackagesStatusLabel),ACCESSED_LABEL); +} +void *yon_status_thread_update(main_window *widgets){ + if (system(yon_check_database_command)){ + g_idle_add_once((GSourceOnceFunc)yon_status_thread_update_inactive,widgets); + } else { + g_idle_add_once((GSourceOnceFunc)yon_status_thread_update_active,widgets); } - enum YON_PAGES page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook)); - page = yon_page_get_next(widgets,page); - yon_page_init(widgets,page); + pthread_exit(NULL); +} + +void on_status_update(GtkWidget *,main_window *widgets){ + pthread_t tid=0; + pthread_create(&tid,NULL,(void*(*)(void*))yon_status_thread_update,widgets); } @@ -723,6 +740,11 @@ void yon_main_window_create(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->LoadLocalConfigurationMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadExternalConfigurationMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets); + g_signal_connect(G_OBJECT(widgets->PackagesStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets); + g_signal_connect(G_OBJECT(widgets->AdditionalComponentsStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets); + g_signal_connect(G_OBJECT(widgets->KernelPacmanStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets); + g_signal_connect(G_OBJECT(widgets->KernelAddonPacmanStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets); + g_signal_connect(G_OBJECT(widgets->PacmanSoftwareStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets); g_signal_connect(G_OBJECT(widgets->PackagesStatusButton),"clicked",G_CALLBACK(on_status_update),widgets); g_signal_connect(G_OBJECT(widgets->AdditionalComponentsStatusButton),"clicked",G_CALLBACK(on_status_update),widgets); g_signal_connect(G_OBJECT(widgets->KernelPacmanStatusButton),"clicked",G_CALLBACK(on_status_update),widgets); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 1cf8735..9ac5f09 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -1627,4 +1627,12 @@ gboolean on_os_components_info(GtkWidget *, GdkEventButton *, os_row *row); void on_software_info(GtkWidget*, main_window *widgets); void yon_packages_remove_empty_groups(main_window *widgets); void yon_config_mode_start(main_window *widgets); -void on_bootloader_selected(GtkTreeView *,main_window *widgets); \ No newline at end of file +void on_bootloader_selected(GtkTreeView *,main_window *widgets); +void yon_update_page(main_window *widgets); +void *yon_db_update(main_window *widgets); +void on_status_button_update(GtkWidget *, main_window *widgets); +void yon_container_start_loading(GtkWidget *target); +void yon_container_stop_loading(GtkWidget *target); +void yon_status_thread_update_inactive(main_window *widgets); +void yon_status_thread_update_active(main_window *widgets); +void *yon_status_thread_update(main_window *widgets); \ No newline at end of file -- 2.35.1 From b21db72c844ea49854c30ed08d6be58bd0d506e1 Mon Sep 17 00:00:00 2001 From: YanTheKaller Date: Mon, 13 Apr 2026 16:06:42 +0600 Subject: [PATCH 02/15] Removed visited link --- ubinstall-gtk-kernel-row.glade | 1 + 1 file changed, 1 insertion(+) diff --git a/ubinstall-gtk-kernel-row.glade b/ubinstall-gtk-kernel-row.glade index feb2178..0145396 100644 --- a/ubinstall-gtk-kernel-row.glade +++ b/ubinstall-gtk-kernel-row.glade @@ -134,6 +134,7 @@ True False 5 + False 0 0 -- 2.35.1 From b5f59ddcfc24be831ae945c393a1d10da8d9eb58 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Tue, 14 Apr 2026 11:52:27 +0600 Subject: [PATCH 03/15] Fixed pacman DB sync --- source/ubinstall-gtk-components.c | 4 +- source/ubinstall-gtk-config-hub.c | 11 ++++ source/ubinstall-gtk-page-switch.c | 23 ++++++--- source/ubinstall-gtk.c | 83 ++++++++++++++++++------------ source/ubinstall-gtk.h | 9 +++- 5 files changed, 88 insertions(+), 42 deletions(-) diff --git a/source/ubinstall-gtk-components.c b/source/ubinstall-gtk-components.c index 6d044b0..de88cf5 100644 --- a/source/ubinstall-gtk-components.c +++ b/source/ubinstall-gtk-components.c @@ -349,8 +349,8 @@ void yon_os_components_init(main_window *widgets){ GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->OSSoftwareListBox)); GList *iter; for (iter=list;iter;iter=iter->next){ - os_row *row = g_object_get_data(iter->data,"kernel_row"); - free(row); + // os_row *row = g_object_get_data(iter->data,"kernel_row"); + // free(row); gtk_widget_destroy(GTK_WIDGET(iter->data)); } if (!gtk_widget_get_parent(widgets->OSSpinner)) diff --git a/source/ubinstall-gtk-config-hub.c b/source/ubinstall-gtk-config-hub.c index a2edd67..83a68e9 100644 --- a/source/ubinstall-gtk-config-hub.c +++ b/source/ubinstall-gtk-config-hub.c @@ -236,6 +236,17 @@ void on_configuration_hub_open(GtkFlowBox *,GtkFlowBoxChild *child, main_window config_hub_icon *cur_icon = g_object_get_data(G_OBJECT(child),"config_hub_icon"); gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),cur_icon->page); + switch(cur_icon->page){ + case YON_PAGE_OS_COMPONENTS: + case YON_PAGE_KERNEL: + case YON_PAGE_KERNEL_ADDON: + case YON_PAGE_PACMAN_SOFTWARE: + case YON_PAGE_SOFTWARE: + case YON_PAGE_PACKAGES: + on_status_button_update(NULL,widgets); + break; + default: break; + }; yon_page_init(widgets,cur_icon->page); yon_page_update(widgets); } diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index 2f4a721..aa5e0d6 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -492,23 +492,23 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){ yon_configuration_hub_init(widgets); break; case YON_PAGE_OS_COMPONENTS: - on_status_update(NULL,widgets); + // on_status_update(NULL,widgets); yon_os_components_init(widgets); break; case YON_PAGE_KERNEL: - on_status_update(NULL,widgets); + // on_status_update(NULL,widgets); yon_kernel_init(widgets); break; case YON_PAGE_KERNEL_ADDON: - on_status_update(NULL,widgets); + // on_status_update(NULL,widgets); yon_kernel_addon_init(widgets); break; case YON_PAGE_SOFTWARE: - on_status_update(NULL,widgets); + // on_status_update(NULL,widgets); yon_software_init(widgets); break; case YON_PAGE_PACMAN_SOFTWARE: - on_status_update(NULL,widgets); + // on_status_update(NULL,widgets); yon_pacman_init(widgets); break; case YON_PAGE_REGION: @@ -536,7 +536,7 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){ yon_network_init(widgets); break; case YON_PAGE_PACKAGES: - on_status_update(NULL,widgets); + // on_status_update(NULL,widgets); yon_packages_tab_init(widgets); break; case YON_PAGE_INSTALL_ADVANCED: @@ -592,6 +592,17 @@ void on_page_next_clicked(GtkWidget *, main_window *widgets){ page = yon_page_get_next(widgets,page); if ((int)page!=-1){ gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),page); + switch(page){ + case YON_PAGE_OS_COMPONENTS: + case YON_PAGE_KERNEL: + case YON_PAGE_KERNEL_ADDON: + case YON_PAGE_PACMAN_SOFTWARE: + case YON_PAGE_SOFTWARE: + case YON_PAGE_PACKAGES: + on_status_button_update(NULL,widgets); + break; + default: break; + }; yon_page_init(widgets,page); } yon_page_update(widgets); diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index da767e7..576d02d 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -320,10 +320,8 @@ void yon_update_page(main_window *widgets){ yon_packages_update(); while(gtk_events_pending()) gtk_main_iteration(); yon_page_init(widgets,page); - gtk_widget_set_sensitive(widgets->KernelPacmanStatusButton,1); - gtk_widget_set_sensitive(widgets->PacmanSoftwareStatusButton,1); - gtk_widget_set_sensitive(widgets->KernelAddonPacmanStatusButton,1); - gtk_widget_set_sensitive(widgets->AdditionalComponentsStatusButton,1); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->db_lock_monitor),G_CALLBACK(yon_db_unlock_update),widgets); + on_status_update(NULL,widgets); } void *yon_db_update(main_window *widgets){ @@ -333,39 +331,36 @@ void *yon_db_update(main_window *widgets){ } void on_status_button_update(GtkWidget *, main_window *widgets){ - gtk_widget_set_sensitive(widgets->KernelPacmanStatusButton,0); - gtk_widget_set_sensitive(widgets->PacmanSoftwareStatusButton,0); - gtk_widget_set_sensitive(widgets->KernelAddonPacmanStatusButton,0); - gtk_widget_set_sensitive(widgets->AdditionalComponentsStatusButton,0); + g_signal_handlers_block_by_func(G_OBJECT(widgets->db_lock_monitor),G_CALLBACK(yon_db_unlock_update),widgets); pthread_t tid=0; pthread_create(&tid,NULL,(void*(*)(void*))yon_db_update,widgets); } void yon_status_thread_update_inactive(main_window *widgets){ - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelPacmanStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelAddonPacmanStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PacmanSoftwareStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->AdditionalComponentsStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PackagesStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_label_set_text(GTK_LABEL(widgets->KernelPacmanStatusLabel),UNACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->PacmanSoftwareStatusLabel),UNACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->KernelAddonPacmanStatusLabel),UNACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->AdditionalComponentsStatusLabel),UNACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->PackagesStatusLabel),UNACCESSED_LABEL); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelPacmanStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelAddonPacmanStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PacmanSoftwareStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->AdditionalComponentsStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PackagesStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_label_set_text(GTK_LABEL(widgets->KernelPacmanStatusLabel),UNACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->PacmanSoftwareStatusLabel),UNACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->KernelAddonPacmanStatusLabel),UNACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->AdditionalComponentsStatusLabel),UNACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->PackagesStatusLabel),UNACCESSED_LABEL); } void yon_status_thread_update_active(main_window *widgets){ - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelPacmanStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelAddonPacmanStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PacmanSoftwareStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->AdditionalComponentsStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PackagesStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_label_set_text(GTK_LABEL(widgets->KernelPacmanStatusLabel),ACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->PacmanSoftwareStatusLabel),ACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->KernelAddonPacmanStatusLabel),ACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->AdditionalComponentsStatusLabel),ACCESSED_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->PackagesStatusLabel),ACCESSED_LABEL); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelPacmanStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelAddonPacmanStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PacmanSoftwareStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->AdditionalComponentsStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PackagesStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON); + gtk_label_set_text(GTK_LABEL(widgets->KernelPacmanStatusLabel),ACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->PacmanSoftwareStatusLabel),ACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->KernelAddonPacmanStatusLabel),ACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->AdditionalComponentsStatusLabel),ACCESSED_LABEL); + gtk_label_set_text(GTK_LABEL(widgets->PackagesStatusLabel),ACCESSED_LABEL); } void *yon_status_thread_update(main_window *widgets){ if (system(yon_check_database_command)){ @@ -393,6 +388,24 @@ void yon_scroll_block_for_builder(GtkBuilder *builder){ g_slist_free(list); } +void yon_db_lock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets){ + if (!access(pacman_lock_path,F_OK)){ + gtk_widget_set_sensitive(widgets->KernelPacmanStatusButton,0); + gtk_widget_set_sensitive(widgets->PacmanSoftwareStatusButton,0); + gtk_widget_set_sensitive(widgets->KernelAddonPacmanStatusButton,0); + gtk_widget_set_sensitive(widgets->AdditionalComponentsStatusButton,0); + } +} + +void yon_db_unlock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets){ + if (access(pacman_lock_path,F_OK)){ + gtk_widget_set_sensitive(widgets->KernelPacmanStatusButton,1); + gtk_widget_set_sensitive(widgets->PacmanSoftwareStatusButton,1); + gtk_widget_set_sensitive(widgets->KernelAddonPacmanStatusButton,1); + gtk_widget_set_sensitive(widgets->AdditionalComponentsStatusButton,1); + } +} + void yon_main_window_create(main_window *widgets){ __attribute__((unused)) char *locale = setlocale(LC_ALL, "en_US.UTF-8"); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); @@ -723,6 +736,15 @@ void yon_main_window_create(main_window *widgets){ widgets->pacmanchosen = g_hash_table_new_full(g_str_hash,g_str_equal,free,NULL); main_config.status_box = widgets->StatusBox; + + GError *err = NULL; + GFile *file_desc = g_file_new_for_path(pacman_lock_dir_path); + widgets->db_lock_monitor = g_file_monitor_directory(file_desc,G_FILE_MONITOR_NONE,NULL,&err); + if (err){ + printf("%s\n",err->message); + } + g_signal_connect(G_OBJECT(widgets->db_lock_monitor),"changed",G_CALLBACK(yon_db_lock_update),widgets); + g_signal_connect(G_OBJECT(widgets->db_lock_monitor),"changed",G_CALLBACK(yon_db_unlock_update),widgets); } g_signal_connect(G_OBJECT(widgets->MainWindow),"delete-event",G_CALLBACK(on_yon_exit),widgets); GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menu2"); @@ -745,11 +767,6 @@ void yon_main_window_create(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->KernelPacmanStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets); g_signal_connect(G_OBJECT(widgets->KernelAddonPacmanStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets); g_signal_connect(G_OBJECT(widgets->PacmanSoftwareStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets); - g_signal_connect(G_OBJECT(widgets->PackagesStatusButton),"clicked",G_CALLBACK(on_status_update),widgets); - g_signal_connect(G_OBJECT(widgets->AdditionalComponentsStatusButton),"clicked",G_CALLBACK(on_status_update),widgets); - g_signal_connect(G_OBJECT(widgets->KernelPacmanStatusButton),"clicked",G_CALLBACK(on_status_update),widgets); - g_signal_connect(G_OBJECT(widgets->KernelAddonPacmanStatusButton),"clicked",G_CALLBACK(on_status_update),widgets); - g_signal_connect(G_OBJECT(widgets->PacmanSoftwareStatusButton),"clicked",G_CALLBACK(on_status_update),widgets); g_signal_connect(G_OBJECT(widgets->ReadFullLogButton),"clicked",G_CALLBACK(on_process_log_view),widgets); g_signal_connect(G_OBJECT(widgets->ReadShortLogButton),"clicked",G_CALLBACK(on_summary_log_view),widgets); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 9ac5f09..25b6c83 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -95,6 +95,9 @@ #define arrow_left_icon_path "com.ublinux.ubinstall-gtk.arrow-left-symbolic" #define arrow_right_icon_path "com.ublinux.ubinstall-gtk.arrow-right-symbolic" +#define pacman_lock_path "/var/lib/pacman/db.lck" +#define pacman_lock_dir_path "/var/lib/pacman/" + #define slide_repeat_path "/com/ublinux/images/slide-1.png", \ "/com/ublinux/images/slide-2.png", \ "/com/ublinux/images/slide-3.png", \ @@ -852,6 +855,8 @@ typedef struct GtkWidget *root_button; GtkWidget *debug_button; + GFileMonitor *db_lock_monitor; + } main_window; enum ADVANCED_PART_TYPE @@ -1635,4 +1640,6 @@ void yon_container_start_loading(GtkWidget *target); void yon_container_stop_loading(GtkWidget *target); void yon_status_thread_update_inactive(main_window *widgets); void yon_status_thread_update_active(main_window *widgets); -void *yon_status_thread_update(main_window *widgets); \ No newline at end of file +void *yon_status_thread_update(main_window *widgets); +void yon_db_lock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets); +void yon_db_unlock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets); \ No newline at end of file -- 2.35.1 From 3b31a02b82acda182c1a56c570ca1bb2adf80232 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Tue, 14 Apr 2026 13:34:08 +0600 Subject: [PATCH 04/15] Fixed missing configuration window icon --- ...om.ublinux.ubinstall-gtk.configuration.svg | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 icons/emblems/com.ublinux.ubinstall-gtk.configuration.svg diff --git a/icons/emblems/com.ublinux.ubinstall-gtk.configuration.svg b/icons/emblems/com.ublinux.ubinstall-gtk.configuration.svg new file mode 100644 index 0000000..842ceae --- /dev/null +++ b/icons/emblems/com.ublinux.ubinstall-gtk.configuration.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- 2.35.1 From 533f41a55ff23b1219d959686a220b283982dd04 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Tue, 14 Apr 2026 14:58:42 +0600 Subject: [PATCH 05/15] Fixed user data only recovery page order --- source/ubinstall-gtk-page-switch.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index aa5e0d6..fd9c386 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -17,7 +17,7 @@ enum YON_PAGES yon_page_get_next(main_window *widgets, enum YON_PAGES page){ } else if (strcmp(config(AUTOINSTALL_TYPE_INSTALL),"data_only")){ return YON_PAGE_INSTALLATION; } else { - return YON_PAGE_RECOVERY_PROCESS; + return YON_PAGE_RECOVERY_BEGIN; } } break; case YON_PAGE_KERNEL: return YON_PAGE_CONFIG_HUB; break; @@ -37,11 +37,11 @@ enum YON_PAGES yon_page_get_next(main_window *widgets, enum YON_PAGES page){ case YON_PAGE_INSTALL_SAME_PARTITION: return YON_PAGE_OS_COMPONENTS; break; case YON_PAGE_INSTALL_ADVANCED: return YON_PAGE_OS_COMPONENTS; break; case YON_PAGE_INSTALL_RECOVERY: return yon_recovery_get_next(widgets); break; - case YON_PAGE_RECOVERY_GRUB_INSTALL: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_RECOVERY_BEGIN; break; - case YON_PAGE_RECOVERY_GRUB_UPDATE: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_RECOVERY_BEGIN; break; + case YON_PAGE_RECOVERY_GRUB_INSTALL: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_CONFIG_HUB; break; + case YON_PAGE_RECOVERY_GRUB_UPDATE: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_CONFIG_HUB; break; case YON_PAGE_RECOVERY_OS_ONLY: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_OS_COMPONENTS; break; - case YON_PAGE_RECOVERY_USRDATA_ONLY: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_RECOVERY_BEGIN; break; - case YON_PAGE_RECOVERY_BEGIN: main_config.save_configured = 1; return strcmp(config(AUTOINSTALL_TYPE_INSTALL),"data_only") ? YON_PAGE_RECOVERY_PROCESS: YON_PAGE_CONFIG_HUB; break; + case YON_PAGE_RECOVERY_USRDATA_ONLY: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_CONFIG_HUB; break; + case YON_PAGE_RECOVERY_BEGIN: main_config.save_configured = 1; return YON_PAGE_RECOVERY_PROCESS; break; case YON_PAGE_RECOVERY_PROCESS: return YON_PAGE_RECOVERY_COMPLETION; break; case YON_PAGE_INSTALLATION: return YON_PAGE_COMPLETION; break; case YON_PAGE_CONFIGURE_SAVE: -- 2.35.1 From ee55e9d4e4f9a49482744070e0be6d3cf582e687 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Tue, 14 Apr 2026 16:39:29 +0600 Subject: [PATCH 06/15] Changed ubinstall commands --- source/ubinstall-gtk.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 25b6c83..c474948 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -156,7 +156,7 @@ layout && /description:/ {\ #define yon_check_database_command "pacman -Syy >/dev/null" #define internet_tomezone_check_command "curl -s ipinfo.io/timezone" -#define ubinstall_dry_run_command "ubinstall --dry-run" +#define ubinstall_dry_run_command "/usr/bin/bash -c \"ubinstall --dry-run" #define os_name_get_command "sed -En 's/^PRETTY_NAME=[\"]*([^\"]+)[\"]*/\\1/p' /etc/os-release" #define get_keyboard_layout_change_command "grep \"grp:\" /usr/share/X11/xkb/rules/base.lst | awk '{$1=$1; sub(/^!.*$/, \"\"); if ($1 ~ /^grp:/) {opt=$1; $1=\"\"; print opt \"|\" substr($0,2)}}'" @@ -295,7 +295,7 @@ layout && /description:/ {\ #define get_localisation_command "ubconfig -ea --source global get [autoinstall] AUTOINSTALL[installer_locale] -- get [autoinstall] AUTOINSTALL['ubconfig set [locale] LANG'] -- get [locale] LANG" -#define save_config_command yon_char_unite("nice ubinstall autoinstall",main_config.debug_mode?" --debug":""," --noautoconfig --noinstall_extra", NULL) +#define save_config_command yon_char_unite("/usr/bin/bash -c \"nice ubinstall autoinstall",main_config.debug_mode?" --debug":""," --noautoconfig --noinstall_extra\"", NULL) #define quick_install_command(path) yon_char_unite("nice ubinstall autoinstall",main_config.debug_mode?" --debug":""," --config='",path,"' --noautoconfig --noinstall_extra", NULL) #define set_user_config_command yon_char_unite("nice ubinstall autoconfig",main_config.debug_mode?" --debug":""," install_extra", NULL) @@ -307,7 +307,7 @@ layout && /description:/ {\ #define PASSWORD_DEFAULT "ublinux" -#define start_fast_install_command "ubinstall --autoinstall" +#define start_fast_install_command "/usr/bin/bash -c \"ubinstall --autoinstall\"" #define progress_path "/var/log/ubinstall_progress.log" @@ -317,9 +317,9 @@ layout && /description:/ {\ #define full_log_path "/var/log/ubinstall.log" -#define get_devices_command "ubinstall show --lsdevices" -#define get_parts_for_device_command "ubinstall show --lsparts" -#define get_modules_command "ubinstall show --lsmodules" +#define get_devices_command "/usr/bin/bash -c \"ubinstall show --lsdevices\"" +#define get_parts_for_device_command "/usr/bin/bash -c \"ubinstall show --lsparts\"" +#define get_modules_command "/usr/bin/bash -c \"ubinstall show --lsmodules\"" #define ubconfig_file_create_pkexec(target) yon_char_unite("pkexec ubconfig --target \"",target,"\" create",NULL) #define config_get_command(target) yon_char_unite("ubconfig -ea --conarg --source ", target, " get [autoinstall] AUTOINSTALL[*] ADDADM -- get [locale] LANG", NULL) -- 2.35.1 From 550384c886b5806dd25b3572cb4f62161789ebf8 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Tue, 14 Apr 2026 18:01:34 +0600 Subject: [PATCH 07/15] Log read error processing --- source/ubinstall-gtk-log.c | 6 +++++- source/ubinstall-gtk.h | 2 -- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/source/ubinstall-gtk-log.c b/source/ubinstall-gtk-log.c index dd183c4..ef85cce 100644 --- a/source/ubinstall-gtk-log.c +++ b/source/ubinstall-gtk-log.c @@ -96,7 +96,11 @@ void on_process_log_view(GtkWidget *,main_window *widgets){ yon_gtk_window_setup(GTK_WINDOW(window->Window),NULL,INSTALL_LOG_LABEL,icon_path,"log_viewer"); window->command = yon_char_new(short_log_path); GFile *file = g_file_new_for_path(window->command); - window->monitor = g_file_monitor_file(file,G_FILE_MONITOR_NONE,NULL,NULL); + GError *err = NULL; + window->monitor = g_file_monitor_file(file,G_FILE_MONITOR_NONE,NULL,&err); + if (err){ + printf("%s\n",err->message); + } g_signal_connect(G_OBJECT(window->monitor),"changed",G_CALLBACK(yon_read_log),window); g_object_unref(file); yon_read_log(NULL,NULL,NULL,G_FILE_MONITOR_EVENT_CHANGED,window); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index c474948..fac5416 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -307,8 +307,6 @@ layout && /description:/ {\ #define PASSWORD_DEFAULT "ublinux" -#define start_fast_install_command "/usr/bin/bash -c \"ubinstall --autoinstall\"" - #define progress_path "/var/log/ubinstall_progress.log" #define password_limits_path "/etc/security/pwquiality.conf" -- 2.35.1 From bf523f973cb20b4a9fa7dcb8f9a584e97d419ecb Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Wed, 15 Apr 2026 09:13:55 +0600 Subject: [PATCH 08/15] Log read error processing --- source/ubinstall-gtk-log.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/source/ubinstall-gtk-log.c b/source/ubinstall-gtk-log.c index ef85cce..636508c 100644 --- a/source/ubinstall-gtk-log.c +++ b/source/ubinstall-gtk-log.c @@ -166,7 +166,12 @@ void yon_installation_progress_update(GFileMonitor *,GFile *,GFile *,GFileMonito gboolean yon_progress_bar_start(main_window *widgets){ GFile *file_desc = g_file_new_for_path(progress_path); - widgets->install_info_monitor = g_file_monitor_file(file_desc,G_FILE_MONITOR_NONE,NULL,NULL); + GError *err = NULL; + widgets->install_info_monitor = g_file_monitor_file(file_desc,G_FILE_MONITOR_NONE,NULL,&err); + if (err){ + printf("%s\n",err->message); + return G_SOURCE_REMOVE; + } g_signal_connect(G_OBJECT(widgets->install_info_monitor),"changed",G_CALLBACK(yon_installation_progress_update),widgets); // g_thread_new("progress",(GThreadFunc)yon_progress_thread_test,widgets); g_object_unref(file_desc); -- 2.35.1 From bd6a0a4e8fe13e2e5863c8ed7f1a33f173816b40 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Wed, 15 Apr 2026 09:37:30 +0600 Subject: [PATCH 09/15] TEST Log read error processing headed to status --- source/ubinstall-gtk-log.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/ubinstall-gtk-log.c b/source/ubinstall-gtk-log.c index 636508c..15607c4 100644 --- a/source/ubinstall-gtk-log.c +++ b/source/ubinstall-gtk-log.c @@ -153,7 +153,6 @@ void yon_installation_progress_update(GFileMonitor *,GFile *,GFile *,GFileMonito double fraction = atof(parsed[3]) / 100; gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->PackageInstallationProgress), fraction); gtk_label_set_text(GTK_LABEL(widgets->PackageInstallationLabel), yon_char_parsed_to_string(parsed, size, " ")); - // yon_char_parsed_free(parsed,size); } if (!yon_char_is_empty(current_copy)) free(current_copy); } @@ -170,10 +169,10 @@ gboolean yon_progress_bar_start(main_window *widgets){ widgets->install_info_monitor = g_file_monitor_file(file_desc,G_FILE_MONITOR_NONE,NULL,&err); if (err){ printf("%s\n",err->message); + yon_ubl_status_box_spawn(widgets->StatusBox,err->message,5,BACKGROUND_IMAGE_FAIL_TYPE); return G_SOURCE_REMOVE; } g_signal_connect(G_OBJECT(widgets->install_info_monitor),"changed",G_CALLBACK(yon_installation_progress_update),widgets); - // g_thread_new("progress",(GThreadFunc)yon_progress_thread_test,widgets); g_object_unref(file_desc); if (access(progress_path,F_OK)){ FILE *file = fopen(progress_path,"w"); -- 2.35.1 From 3a1d764f4373835d50a224e029f041d3cb00e437 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Wed, 15 Apr 2026 09:48:44 +0600 Subject: [PATCH 10/15] TEST Fixed build --- source/ubinstall-gtk-log.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/ubinstall-gtk-log.c b/source/ubinstall-gtk-log.c index 15607c4..d0f6dbb 100644 --- a/source/ubinstall-gtk-log.c +++ b/source/ubinstall-gtk-log.c @@ -169,7 +169,7 @@ gboolean yon_progress_bar_start(main_window *widgets){ widgets->install_info_monitor = g_file_monitor_file(file_desc,G_FILE_MONITOR_NONE,NULL,&err); if (err){ printf("%s\n",err->message); - yon_ubl_status_box_spawn(widgets->StatusBox,err->message,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),err->message,5,BACKGROUND_IMAGE_FAIL_TYPE); return G_SOURCE_REMOVE; } g_signal_connect(G_OBJECT(widgets->install_info_monitor),"changed",G_CALLBACK(yon_installation_progress_update),widgets); -- 2.35.1 From 1acd759baa3e07c5ee133f716b6d41a0ca4baf30 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Wed, 15 Apr 2026 10:29:04 +0600 Subject: [PATCH 11/15] TEST fix for install --- source/ubinstall-gtk-install-start.c | 4 +- source/ubinstall-gtk-page-switch.c | 22 +++-- source/ubinstall-gtk-saving.c | 122 +++++++++------------------ source/ubinstall-gtk.h | 5 +- 4 files changed, 62 insertions(+), 91 deletions(-) diff --git a/source/ubinstall-gtk-install-start.c b/source/ubinstall-gtk-install-start.c index ee59796..083de62 100644 --- a/source/ubinstall-gtk-install-start.c +++ b/source/ubinstall-gtk-install-start.c @@ -2,7 +2,9 @@ int yon_installation_start(main_window *widgets){ gtk_widget_show(gtk_widget_get_parent(widgets->InstallationProgress)); - return !pthread_create(&main_config.install_thread,NULL,on_config_save,widgets); + // return !pthread_create(&main_config.install_thread,NULL,on_config_save,widgets); + on_config_terminal_save(widgets); + return 1; } void yon_quick_install(GtkWidget *self, main_window *widgets){ diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index fd9c386..2fb7be6 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -8,13 +8,23 @@ enum YON_PAGES yon_page_get_next(main_window *widgets, enum YON_PAGES page){ case YON_PAGE_WELCOME: return YON_PAGE_LICENCE; break; case YON_PAGE_LICENCE: return YON_PAGE_SECTIONS; break; case YON_PAGE_SECTIONS: return yon_sections_get_next_page(widgets); break; - case YON_PAGE_OS_COMPONENTS: return main_config.configure_mode?YON_PAGE_CONFIG_HUB: strcmp(config(AUTOINSTALL_TYPE_INSTALL),"system_only") ? YON_PAGE_INSTALLATION_BEGIN : YON_PAGE_RECOVERY_BEGIN; break; + case YON_PAGE_OS_COMPONENTS: { + char *install_mode = config(AUTOINSTALL_TYPE_INSTALL); + if (main_config.configure_mode&&strcmp(install_mode,"system_only")&&strcmp(install_mode,"grub_install")&&strcmp(install_mode,"grub_update")){ + return YON_PAGE_CONFIG_HUB; + } else if (strcmp(install_mode,"system_only")){ + return YON_PAGE_INSTALLATION_BEGIN; + } else { + return YON_PAGE_RECOVERY_BEGIN; + } + } case YON_PAGE_INSTALLATION_BEGIN: return YON_PAGE_CONFIG_HUB; break; case YON_PAGE_SOFTWARE: return YON_PAGE_CONFIG_HUB; break; case YON_PAGE_CONFIG_HUB: { + char *install_mode = config(AUTOINSTALL_TYPE_INSTALL); if (main_config.configure_mode){ return YON_PAGE_CONFIGURE_END; - } else if (strcmp(config(AUTOINSTALL_TYPE_INSTALL),"data_only")){ + } else if (strcmp(install_mode,"data_only")){ return YON_PAGE_INSTALLATION; } else { return YON_PAGE_RECOVERY_BEGIN; @@ -37,10 +47,10 @@ enum YON_PAGES yon_page_get_next(main_window *widgets, enum YON_PAGES page){ case YON_PAGE_INSTALL_SAME_PARTITION: return YON_PAGE_OS_COMPONENTS; break; case YON_PAGE_INSTALL_ADVANCED: return YON_PAGE_OS_COMPONENTS; break; case YON_PAGE_INSTALL_RECOVERY: return yon_recovery_get_next(widgets); break; - case YON_PAGE_RECOVERY_GRUB_INSTALL: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_CONFIG_HUB; break; - case YON_PAGE_RECOVERY_GRUB_UPDATE: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_CONFIG_HUB; break; - case YON_PAGE_RECOVERY_OS_ONLY: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_OS_COMPONENTS; break; - case YON_PAGE_RECOVERY_USRDATA_ONLY: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_CONFIG_HUB; break; + case YON_PAGE_RECOVERY_GRUB_INSTALL: return YON_PAGE_CONFIG_HUB; break; + case YON_PAGE_RECOVERY_GRUB_UPDATE: return YON_PAGE_CONFIG_HUB; break; + case YON_PAGE_RECOVERY_OS_ONLY: return YON_PAGE_OS_COMPONENTS; break; + case YON_PAGE_RECOVERY_USRDATA_ONLY: return YON_PAGE_CONFIG_HUB; break; case YON_PAGE_RECOVERY_BEGIN: main_config.save_configured = 1; return YON_PAGE_RECOVERY_PROCESS; break; case YON_PAGE_RECOVERY_PROCESS: return YON_PAGE_RECOVERY_COMPLETION; break; case YON_PAGE_INSTALLATION: return YON_PAGE_COMPLETION; break; diff --git a/source/ubinstall-gtk-saving.c b/source/ubinstall-gtk-saving.c index 98b126c..c3ea53f 100644 --- a/source/ubinstall-gtk-saving.c +++ b/source/ubinstall-gtk-saving.c @@ -156,6 +156,43 @@ enum INSTALL_TYPE yon_ubl_get_install_mode(){ return INSTALL_ERROR; } +void on_config_install_success(GtkWidget *self, int state, main_window *widgets){ + if (state){ + gdk_threads_add_idle((GSourceFunc)on_install_error,widgets); + g_mutex_lock(&main_config.install_mutex); + main_config.install_complete=1; + g_mutex_unlock(&main_config.install_mutex); + return; + }; + g_mutex_lock(&main_config.install_mutex); + main_config.install_complete=1; + g_mutex_unlock(&main_config.install_mutex); + if ((!main_config.save_done)&&main_config.save_configured){ + on_setup_system_configuration(widgets); + } + gtk_widget_destroy(self); +} + +void on_config_terminal_save(main_window *widgets){ + g_idle_add((GSourceFunc)yon_progress_bar_start,widgets); + if (!main_config.dry_run){ + char *command = yon_debug_output("%s\n",save_config_command); + yon_debug_output("%s\n","Entered installation"); + GtkWidget *terminal = vte_terminal_new(); + yon_window *window = yon_window_new(); + gtk_box_pack_start(GTK_BOX(window->MainBox),terminal,1,1,0); + gtk_widget_show(window->Window); + gtk_widget_show(terminal); + g_signal_connect(G_OBJECT(terminal),"child-exited",G_CALLBACK(on_config_install_success),widgets); + yon_terminal_integrated_start(terminal,command); + + } else { + yon_launch("ubconfig --source system get /"); + } + return; +} + + void *on_config_save(void *data){ main_window *widgets = (main_window*)data; @@ -190,97 +227,16 @@ void *on_setup_system_configuration(void * data){ yon_debug_output("%s\n","Entered thread"); main_window *widgets = (main_window*)data; if (widgets){}; - int size; - config_str all_parameters = yon_config_get_selection_by_key(&size, - root_password_parameter, - autologin_parameter, - xkbmodel_parameter, - xkblayout_parameter, - xkbvariant_parameter, - xkboptions_parameter, - hostname_parameter, - zone_parameter, - lang_parameter, - locale_parameter, - SERVICES_ENABLE_parameter, - GRUB_DEFAULT_parameter, - GRUB_TIMEOUT_parameter, - AUTOLOGINUSER_parameter, - GRUB_SUPERUSERS_parameter, - DOMAIN_parameter, - DOMAIN_admanger_parameter, - NTPSERVERS_parameter, - packages_parameter, - KERNEL_BOOT_parameter, - packages_parameter, - NULL); - int user_size=0; - config_str users = yon_config_get_all_by_key(USERADD_parameter_search,&user_size); - if (user_size){ - int final_size; - config_str final = yon_char_parsed_merge(all_parameters,size,users,user_size,&final_size); - // yon_char_parsed_free(users,user_size); - if (size) yon_char_parsed_free(all_parameters,size); - all_parameters = final; - size = final_size; - } - users = yon_config_get_all_by_key(GRUB_PASSWORD_parameter_search,&user_size); - if (users){ - int final_size; - config_str final = yon_char_parsed_merge(all_parameters,size,users,user_size,&final_size); - // yon_char_parsed_free(users,user_size); - if (size) yon_char_parsed_free(all_parameters,size); - all_parameters = final; - size = final_size; - } - int network_size; - config_str networks = yon_config_get_all_by_key(NETWORK_parameter_search,&network_size); - if (network_size){ - int final_size; - config_str final = yon_char_parsed_merge(all_parameters,size,networks,network_size,&final_size); - // yon_char_parsed_free(networks,network_size); - if (size) yon_char_parsed_free(all_parameters,size); - all_parameters = final; - size = final_size; - } - - if (all_parameters){ - for (int i=0;i #include #include +// #define VTE_INCLUDE #ifdef WEBKIT_INCLUDE #include #endif @@ -1640,4 +1641,6 @@ void yon_status_thread_update_inactive(main_window *widgets); void yon_status_thread_update_active(main_window *widgets); void *yon_status_thread_update(main_window *widgets); void yon_db_lock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets); -void yon_db_unlock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets); \ No newline at end of file +void yon_db_unlock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets); +void on_config_install_success(GtkWidget *self, int state, main_window *widgets); +void on_config_terminal_save(main_window *widgets); \ No newline at end of file -- 2.35.1 From e12426c10105f22a24c1a5a9a6bc987840e147fb Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Wed, 15 Apr 2026 15:51:29 +0600 Subject: [PATCH 12/15] Test installation move to vte terminal --- source/ubinstall-gtk-page-switch.c | 11 +++++-- source/ubinstall-gtk-saving.c | 51 ++++++++++++++++++++++-------- source/ubinstall-gtk.c | 30 ++++++++++++++++-- source/ubinstall-gtk.h | 7 +++- 4 files changed, 79 insertions(+), 20 deletions(-) diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index 2fb7be6..1297fc6 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -588,7 +588,8 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){ g_mutex_lock(&main_config.install_mutex); if (main_config.install_complete){ g_mutex_unlock(&main_config.install_mutex); - g_thread_new("install_thread",(GThreadFunc)on_setup_system_configuration,widgets); + // g_thread_new("install_thread",(GThreadFunc)on_setup_system_configuration,widgets); + on_config_terminal_setup_system_configuration(widgets); } else { g_mutex_unlock(&main_config.install_mutex); } @@ -627,7 +628,7 @@ void on_page_prev_clicked(GtkWidget *, main_window *widgets){ yon_page_update(widgets); } -#include +// #include void on_page_cancel_clicked(GtkWidget *, main_window *widgets){ enum YON_PAGES cur_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook)); @@ -651,7 +652,11 @@ void on_page_cancel_clicked(GtkWidget *, main_window *widgets){ data->action_text=INTERRUPT_TEXT_LABEL; data->title=WARNING_TITLE_LABEL; if (yon_confirmation_dialog_call(widgets->MainWindow,data)==GTK_RESPONSE_ACCEPT ){ - pthread_cancel(main_config.install_thread); + g_signal_handlers_block_by_func(G_OBJECT(widgets->install_terminal),on_config_install_success,widgets); + gtk_widget_destroy(widgets->install_terminal); + widgets->install_terminal = NULL; + yon_install_terminal_recreate(widgets); + // pthread_cancel(main_config.install_thread); kill(main_config.install_thread,SIGKILL); g_signal_handlers_disconnect_by_func(G_OBJECT(widgets->install_info_monitor),yon_installation_progress_update,widgets); g_file_monitor_cancel(widgets->install_info_monitor); diff --git a/source/ubinstall-gtk-saving.c b/source/ubinstall-gtk-saving.c index c3ea53f..5db64a5 100644 --- a/source/ubinstall-gtk-saving.c +++ b/source/ubinstall-gtk-saving.c @@ -156,21 +156,29 @@ enum INSTALL_TYPE yon_ubl_get_install_mode(){ return INSTALL_ERROR; } -void on_config_install_success(GtkWidget *self, int state, main_window *widgets){ +void on_config_install_success(GtkWidget *, int state, main_window *widgets){ if (state){ gdk_threads_add_idle((GSourceFunc)on_install_error,widgets); g_mutex_lock(&main_config.install_mutex); main_config.install_complete=1; g_mutex_unlock(&main_config.install_mutex); return; - }; + } g_mutex_lock(&main_config.install_mutex); - main_config.install_complete=1; + if (!main_config.install_complete){ + main_config.install_complete = 1; + } g_mutex_unlock(&main_config.install_mutex); if ((!main_config.save_done)&&main_config.save_configured){ - on_setup_system_configuration(widgets); + // on_setup_system_configuration(widgets); + on_config_terminal_setup_system_configuration(widgets); + } else if (main_config.save_done&&main_config.save_configured){ + g_idle_add((GSourceFunc)on_install_success,widgets); + + } else { + main_config.save_done=1; + gtk_widget_hide(widgets->install_terminal_window->Window); } - gtk_widget_destroy(self); } void on_config_terminal_save(main_window *widgets){ @@ -178,14 +186,9 @@ void on_config_terminal_save(main_window *widgets){ if (!main_config.dry_run){ char *command = yon_debug_output("%s\n",save_config_command); yon_debug_output("%s\n","Entered installation"); - GtkWidget *terminal = vte_terminal_new(); - yon_window *window = yon_window_new(); - gtk_box_pack_start(GTK_BOX(window->MainBox),terminal,1,1,0); - gtk_widget_show(window->Window); - gtk_widget_show(terminal); - g_signal_connect(G_OBJECT(terminal),"child-exited",G_CALLBACK(on_config_install_success),widgets); - yon_terminal_integrated_start(terminal,command); - + yon_terminal_integrated_start(widgets->install_terminal,command); + gtk_widget_show(widgets->install_terminal_window->Window); + main_config.install_thread = 1; } else { yon_launch("ubconfig --source system get /"); } @@ -214,7 +217,8 @@ void *on_config_save(void *data){ main_config.install_complete=1; g_mutex_unlock(&main_config.install_mutex); if ((!main_config.save_done)&&main_config.save_configured){ - on_setup_system_configuration(widgets); + // on_setup_system_configuration(widgets); + on_config_terminal_setup_system_configuration(widgets); // on_page_next_clicked(NULL,widgets); } } else { @@ -223,6 +227,25 @@ void *on_config_save(void *data){ return 0; } + +void on_config_terminal_setup_system_configuration(main_window *widgets){ + g_idle_add((GSourceFunc)yon_progress_bar_start,widgets); + if (!main_config.dry_run){ + char *command = yon_debug_output("%s\n",set_user_config_command); + yon_debug_output("%s\n","Entered configuration"); + yon_terminal_integrated_start(widgets->install_terminal,command); + g_mutex_lock(&main_config.install_mutex); + main_config.install_thread=1; + g_mutex_unlock(&main_config.install_mutex); + gtk_widget_show(widgets->install_terminal_window->Window); + + } else { + yon_launch("ubconfig --source system get /"); + yon_launch(ubinstall_dry_run_command); + } + return; +} + void *on_setup_system_configuration(void * data){ yon_debug_output("%s\n","Entered thread"); main_window *widgets = (main_window*)data; diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index 576d02d..b4775ac 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -254,7 +254,11 @@ void on_reboot_accepted(main_window *widgets){ if (yon_confirmation_dialog_call(widgets->MainWindow,data)==GTK_RESPONSE_ACCEPT){ g_mutex_lock(&main_config.install_mutex); if (main_config.install_thread){ - pthread_cancel((pthread_t)main_config.install_thread); + g_signal_handlers_block_by_func(G_OBJECT(widgets->install_terminal),on_config_install_success,widgets); + gtk_widget_destroy(widgets->install_terminal); + widgets->install_terminal = NULL; + yon_install_terminal_recreate(widgets); + // pthread_cancel((pthread_t)main_config.install_thread); g_mutex_unlock(&main_config.install_mutex); } main_config.exit_accepted=1; @@ -267,10 +271,23 @@ void on_reboot_accepted(main_window *widgets){ } } +void yon_install_terminal_recreate(main_window *widgets){ + + widgets->install_terminal = vte_terminal_new(); + + gtk_box_pack_start(GTK_BOX(widgets->install_terminal_window->MainBox),widgets->install_terminal,1,1,0); + gtk_widget_show(widgets->install_terminal); + g_signal_connect(G_OBJECT(widgets->install_terminal),"child-exited",G_CALLBACK(on_config_install_success),widgets); +} + void on_exit_accepted(main_window *widgets){ g_mutex_lock(&main_config.install_mutex); if (main_config.install_thread){ - pthread_cancel((pthread_t)main_config.install_thread); + g_signal_handlers_block_by_func(G_OBJECT(widgets->install_terminal),on_config_install_success,widgets); + gtk_widget_destroy(widgets->install_terminal); + widgets->install_terminal = NULL; + yon_install_terminal_recreate(widgets); + // pthread_cancel((pthread_t)main_config.install_thread); g_mutex_unlock(&main_config.install_mutex); } if (!main_config.configure_mode) @@ -732,6 +749,9 @@ void yon_main_window_create(main_window *widgets){ widgets->NextInstallationSliderImage = yon_gtk_builder_get_widget(builder,"NextInstallationSliderImage"); widgets->PrevInstallationSliderImage = yon_gtk_builder_get_widget(builder,"PrevInstallationSliderImage"); + widgets->install_terminal_window = yon_window_new(); + widgets->install_terminal = vte_terminal_new(); + widgets->network_connections = NULL; widgets->pacmanchosen = g_hash_table_new_full(g_str_hash,g_str_equal,free,NULL); @@ -746,6 +766,12 @@ void yon_main_window_create(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->db_lock_monitor),"changed",G_CALLBACK(yon_db_lock_update),widgets); g_signal_connect(G_OBJECT(widgets->db_lock_monitor),"changed",G_CALLBACK(yon_db_unlock_update),widgets); } + + yon_gtk_widget_block_destruction(widgets->install_terminal_window->Window); + gtk_box_pack_start(GTK_BOX(widgets->install_terminal_window->MainBox),widgets->install_terminal,1,1,0); + gtk_widget_show(widgets->install_terminal); + g_signal_connect(G_OBJECT(widgets->install_terminal),"child-exited",G_CALLBACK(on_config_install_success),widgets); + g_signal_connect(G_OBJECT(widgets->MainWindow),"delete-event",G_CALLBACK(on_yon_exit),widgets); GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menu2"); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 0112be2..96950fd 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -856,6 +856,9 @@ typedef struct GFileMonitor *db_lock_monitor; + yon_window *install_terminal_window; + GtkWidget *install_terminal; + } main_window; enum ADVANCED_PART_TYPE @@ -1643,4 +1646,6 @@ void *yon_status_thread_update(main_window *widgets); void yon_db_lock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets); void yon_db_unlock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets); void on_config_install_success(GtkWidget *self, int state, main_window *widgets); -void on_config_terminal_save(main_window *widgets); \ No newline at end of file +void on_config_terminal_save(main_window *widgets); +void yon_install_terminal_recreate(main_window *widgets); +void on_config_terminal_setup_system_configuration(main_window *widgets); \ No newline at end of file -- 2.35.1 From c3d3af21f779a8dc00af8da8455da2f8da115528 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Wed, 15 Apr 2026 17:33:33 +0600 Subject: [PATCH 13/15] Fixed double main components list --- source/ubinstall-gtk-page-switch.c | 1 - 1 file changed, 1 deletion(-) diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index 1297fc6..403f566 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -604,7 +604,6 @@ void on_page_next_clicked(GtkWidget *, main_window *widgets){ if ((int)page!=-1){ gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),page); switch(page){ - case YON_PAGE_OS_COMPONENTS: case YON_PAGE_KERNEL: case YON_PAGE_KERNEL_ADDON: case YON_PAGE_PACMAN_SOFTWARE: -- 2.35.1 From 038be70e7dc5aa900367cd314d13c1b6b54c3c78 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Wed, 15 Apr 2026 17:34:27 +0600 Subject: [PATCH 14/15] Terminal window opens only in debug mode --- source/ubinstall-gtk-saving.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/source/ubinstall-gtk-saving.c b/source/ubinstall-gtk-saving.c index 5db64a5..b62e680 100644 --- a/source/ubinstall-gtk-saving.c +++ b/source/ubinstall-gtk-saving.c @@ -187,7 +187,9 @@ void on_config_terminal_save(main_window *widgets){ char *command = yon_debug_output("%s\n",save_config_command); yon_debug_output("%s\n","Entered installation"); yon_terminal_integrated_start(widgets->install_terminal,command); - gtk_widget_show(widgets->install_terminal_window->Window); + if (main_config.debug_mode){ + gtk_widget_show(widgets->install_terminal_window->Window); + } main_config.install_thread = 1; } else { yon_launch("ubconfig --source system get /"); @@ -237,7 +239,9 @@ void on_config_terminal_setup_system_configuration(main_window *widgets){ g_mutex_lock(&main_config.install_mutex); main_config.install_thread=1; g_mutex_unlock(&main_config.install_mutex); - gtk_widget_show(widgets->install_terminal_window->Window); + if (main_config.debug_mode){ + gtk_widget_show(widgets->install_terminal_window->Window); + } } else { yon_launch("ubconfig --source system get /"); -- 2.35.1 From 54efeabb5ad9194cddfb48b3ff18f4a8ad82be00 Mon Sep 17 00:00:00 2001 From: Ivan Dmitrievich Yartsev Date: Wed, 15 Apr 2026 17:51:20 +0600 Subject: [PATCH 15/15] Removed vte terminal --- source/ubinstall-gtk-install-start.c | 5 ++- source/ubinstall-gtk-page-switch.c | 9 ++---- source/ubinstall-gtk-saving.c | 46 ++-------------------------- source/ubinstall-gtk.c | 28 ++--------------- source/ubinstall-gtk.h | 8 +---- ubinstall-gtk.glade | 8 ++--- 6 files changed, 13 insertions(+), 91 deletions(-) diff --git a/source/ubinstall-gtk-install-start.c b/source/ubinstall-gtk-install-start.c index 083de62..19caa72 100644 --- a/source/ubinstall-gtk-install-start.c +++ b/source/ubinstall-gtk-install-start.c @@ -2,8 +2,7 @@ int yon_installation_start(main_window *widgets){ gtk_widget_show(gtk_widget_get_parent(widgets->InstallationProgress)); - // return !pthread_create(&main_config.install_thread,NULL,on_config_save,widgets); - on_config_terminal_save(widgets); + return !pthread_create(&main_config.install_thread,NULL,on_config_save,widgets); return 1; } @@ -12,7 +11,7 @@ void yon_quick_install(GtkWidget *self, main_window *widgets){ main_config.save_configured=1; gtk_widget_hide(self); gtk_widget_show(gtk_widget_get_parent(widgets->InstallationProgress)); - // pthread_create(&main_config.install_thread,NULL,on_config_save,widgets); + pthread_create(&main_config.install_thread,NULL,on_config_save,widgets); gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALLATION); if (!yon_char_is_empty(main_config.config_load_path)){ char *command = quick_install_command(main_config.config_load_path); diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index 403f566..e0d4fbe 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -588,8 +588,7 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){ g_mutex_lock(&main_config.install_mutex); if (main_config.install_complete){ g_mutex_unlock(&main_config.install_mutex); - // g_thread_new("install_thread",(GThreadFunc)on_setup_system_configuration,widgets); - on_config_terminal_setup_system_configuration(widgets); + g_thread_new("install_thread",(GThreadFunc)on_setup_system_configuration,widgets); } else { g_mutex_unlock(&main_config.install_mutex); } @@ -651,11 +650,7 @@ void on_page_cancel_clicked(GtkWidget *, main_window *widgets){ data->action_text=INTERRUPT_TEXT_LABEL; data->title=WARNING_TITLE_LABEL; if (yon_confirmation_dialog_call(widgets->MainWindow,data)==GTK_RESPONSE_ACCEPT ){ - g_signal_handlers_block_by_func(G_OBJECT(widgets->install_terminal),on_config_install_success,widgets); - gtk_widget_destroy(widgets->install_terminal); - widgets->install_terminal = NULL; - yon_install_terminal_recreate(widgets); - // pthread_cancel(main_config.install_thread); + pthread_cancel(main_config.install_thread); kill(main_config.install_thread,SIGKILL); g_signal_handlers_disconnect_by_func(G_OBJECT(widgets->install_info_monitor),yon_installation_progress_update,widgets); g_file_monitor_cancel(widgets->install_info_monitor); diff --git a/source/ubinstall-gtk-saving.c b/source/ubinstall-gtk-saving.c index b62e680..f5f0efd 100644 --- a/source/ubinstall-gtk-saving.c +++ b/source/ubinstall-gtk-saving.c @@ -170,34 +170,15 @@ void on_config_install_success(GtkWidget *, int state, main_window *widgets){ } g_mutex_unlock(&main_config.install_mutex); if ((!main_config.save_done)&&main_config.save_configured){ - // on_setup_system_configuration(widgets); - on_config_terminal_setup_system_configuration(widgets); + on_setup_system_configuration(widgets); } else if (main_config.save_done&&main_config.save_configured){ g_idle_add((GSourceFunc)on_install_success,widgets); } else { main_config.save_done=1; - gtk_widget_hide(widgets->install_terminal_window->Window); } } -void on_config_terminal_save(main_window *widgets){ - g_idle_add((GSourceFunc)yon_progress_bar_start,widgets); - if (!main_config.dry_run){ - char *command = yon_debug_output("%s\n",save_config_command); - yon_debug_output("%s\n","Entered installation"); - yon_terminal_integrated_start(widgets->install_terminal,command); - if (main_config.debug_mode){ - gtk_widget_show(widgets->install_terminal_window->Window); - } - main_config.install_thread = 1; - } else { - yon_launch("ubconfig --source system get /"); - } - return; -} - - void *on_config_save(void *data){ main_window *widgets = (main_window*)data; @@ -219,9 +200,7 @@ void *on_config_save(void *data){ main_config.install_complete=1; g_mutex_unlock(&main_config.install_mutex); if ((!main_config.save_done)&&main_config.save_configured){ - // on_setup_system_configuration(widgets); - on_config_terminal_setup_system_configuration(widgets); - // on_page_next_clicked(NULL,widgets); + on_setup_system_configuration(widgets); } } else { yon_launch("ubconfig --source system get /"); @@ -229,27 +208,6 @@ void *on_config_save(void *data){ return 0; } - -void on_config_terminal_setup_system_configuration(main_window *widgets){ - g_idle_add((GSourceFunc)yon_progress_bar_start,widgets); - if (!main_config.dry_run){ - char *command = yon_debug_output("%s\n",set_user_config_command); - yon_debug_output("%s\n","Entered configuration"); - yon_terminal_integrated_start(widgets->install_terminal,command); - g_mutex_lock(&main_config.install_mutex); - main_config.install_thread=1; - g_mutex_unlock(&main_config.install_mutex); - if (main_config.debug_mode){ - gtk_widget_show(widgets->install_terminal_window->Window); - } - - } else { - yon_launch("ubconfig --source system get /"); - yon_launch(ubinstall_dry_run_command); - } - return; -} - void *on_setup_system_configuration(void * data){ yon_debug_output("%s\n","Entered thread"); main_window *widgets = (main_window*)data; diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index b4775ac..338b8e4 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -254,11 +254,7 @@ void on_reboot_accepted(main_window *widgets){ if (yon_confirmation_dialog_call(widgets->MainWindow,data)==GTK_RESPONSE_ACCEPT){ g_mutex_lock(&main_config.install_mutex); if (main_config.install_thread){ - g_signal_handlers_block_by_func(G_OBJECT(widgets->install_terminal),on_config_install_success,widgets); - gtk_widget_destroy(widgets->install_terminal); - widgets->install_terminal = NULL; - yon_install_terminal_recreate(widgets); - // pthread_cancel((pthread_t)main_config.install_thread); + pthread_cancel((pthread_t)main_config.install_thread); g_mutex_unlock(&main_config.install_mutex); } main_config.exit_accepted=1; @@ -271,23 +267,10 @@ void on_reboot_accepted(main_window *widgets){ } } -void yon_install_terminal_recreate(main_window *widgets){ - - widgets->install_terminal = vte_terminal_new(); - - gtk_box_pack_start(GTK_BOX(widgets->install_terminal_window->MainBox),widgets->install_terminal,1,1,0); - gtk_widget_show(widgets->install_terminal); - g_signal_connect(G_OBJECT(widgets->install_terminal),"child-exited",G_CALLBACK(on_config_install_success),widgets); -} - void on_exit_accepted(main_window *widgets){ g_mutex_lock(&main_config.install_mutex); if (main_config.install_thread){ - g_signal_handlers_block_by_func(G_OBJECT(widgets->install_terminal),on_config_install_success,widgets); - gtk_widget_destroy(widgets->install_terminal); - widgets->install_terminal = NULL; - yon_install_terminal_recreate(widgets); - // pthread_cancel((pthread_t)main_config.install_thread); + pthread_cancel((pthread_t)main_config.install_thread); g_mutex_unlock(&main_config.install_mutex); } if (!main_config.configure_mode) @@ -749,8 +732,6 @@ void yon_main_window_create(main_window *widgets){ widgets->NextInstallationSliderImage = yon_gtk_builder_get_widget(builder,"NextInstallationSliderImage"); widgets->PrevInstallationSliderImage = yon_gtk_builder_get_widget(builder,"PrevInstallationSliderImage"); - widgets->install_terminal_window = yon_window_new(); - widgets->install_terminal = vte_terminal_new(); widgets->network_connections = NULL; widgets->pacmanchosen = g_hash_table_new_full(g_str_hash,g_str_equal,free,NULL); @@ -767,11 +748,6 @@ void yon_main_window_create(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->db_lock_monitor),"changed",G_CALLBACK(yon_db_unlock_update),widgets); } - yon_gtk_widget_block_destruction(widgets->install_terminal_window->Window); - gtk_box_pack_start(GTK_BOX(widgets->install_terminal_window->MainBox),widgets->install_terminal,1,1,0); - gtk_widget_show(widgets->install_terminal); - g_signal_connect(G_OBJECT(widgets->install_terminal),"child-exited",G_CALLBACK(on_config_install_success),widgets); - g_signal_connect(G_OBJECT(widgets->MainWindow),"delete-event",G_CALLBACK(on_yon_exit),widgets); GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menu2"); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 96950fd..f279cfc 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -856,9 +856,6 @@ typedef struct GFileMonitor *db_lock_monitor; - yon_window *install_terminal_window; - GtkWidget *install_terminal; - } main_window; enum ADVANCED_PART_TYPE @@ -1645,7 +1642,4 @@ void yon_status_thread_update_active(main_window *widgets); void *yon_status_thread_update(main_window *widgets); void yon_db_lock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets); void yon_db_unlock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets); -void on_config_install_success(GtkWidget *self, int state, main_window *widgets); -void on_config_terminal_save(main_window *widgets); -void yon_install_terminal_recreate(main_window *widgets); -void on_config_terminal_setup_system_configuration(main_window *widgets); \ No newline at end of file +void on_config_install_success(GtkWidget *self, int state, main_window *widgets); \ No newline at end of file diff --git a/ubinstall-gtk.glade b/ubinstall-gtk.glade index fe4b481..d1ea92e 100644 --- a/ubinstall-gtk.glade +++ b/ubinstall-gtk.glade @@ -5914,22 +5914,22 @@ Select a different installation sources. - Service + Unit - 2 + 1 - Unit + Service - 1 + 2 -- 2.35.1