From 23f39497655562ac3c733c05376c24025ce1aff3 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 8 Jul 2025 15:44:49 +0600 Subject: [PATCH] Loading rework --- source/ubl-settings-kernel.c | 67 +++---- source/ubl-settings-kernel.h | 6 +- ubl-settings-kernel.glade | 359 +++++++++++++++++++---------------- 3 files changed, 234 insertions(+), 198 deletions(-) diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index d2c0ae8..4420766 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -147,7 +147,13 @@ void on_config_custom_load(GtkWidget *,main_window *widgets){ 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); + gtk_widget_show(window); + gtk_widget_show(header); + gtk_widget_show(terminal); + gtk_widget_show(status_box); + gtk_widget_show(box); + gtk_widget_show(terminal_box); + gtk_widget_show(scroll); vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal),-1); @@ -307,49 +313,29 @@ char *yon_package_string_set(char *target){ return final; } -void *yon_tab_set_installed(kernels_tab *tab){ +void yon_tab_set_installed(kernels_tab *tab){ g_mutex_lock(&main_config.update_mutex); main_config.update_active++; g_mutex_unlock(&main_config.update_mutex); char *target_module = yon_package_string_set(tab->module); char *target_package = yon_package_string_set(tab->package); - char *check_install_command = NULL; if (yon_char_is_empty(target_module)){ tab->module_installed=-1; } else { - check_install_command = get_package_is_installed_command(target_module); //if module installed - if (!system(yon_debug_output("%s\n",check_install_command))){ - tab->module_installed=1; - } else tab->module_installed=0; - free(check_install_command); - - check_install_command = get_package_is_updated_command(target_module); //if module has updates - if (!system(yon_debug_output("%s\n",check_install_command))){ - tab->module_updated = 0; - } else tab->module_updated = 1; - free(check_install_command); + tab->module_installed = yon_packages_check_installed(target_module); + tab->module_updated = !yon_packages_check_updates(target_module); } if (yon_char_is_empty(target_package)){ tab->package_installed=-1; } else { - check_install_command = get_package_is_installed_command(target_package); //if package installed - if (!system(yon_debug_output("%s\n",check_install_command))){ - tab->package_installed=1; - } else tab->package_installed=0; - free(check_install_command); - - check_install_command = get_package_is_updated_command(target_package); //if package has updates - if (!system(yon_debug_output("%s\n",check_install_command))){ - tab->package_updated = 0; - } else tab->package_updated = 1; - free(check_install_command); + tab->package_installed=yon_packages_check_installed(target_package); + tab->package_updated = !yon_packages_check_updates(target_package); } if (tab->package_installed==-1&&tab->module_installed==-1){ gtk_widget_destroy(tab->main_box); tab->main_box=NULL; } gdk_threads_add_idle((GSourceFunc)yon_tab_create_tags,tab); - return NULL; } void *yon_interface_update(main_window *widgets){ @@ -358,11 +344,15 @@ void *yon_interface_update(main_window *widgets){ lock=main_config.update_active; g_mutex_unlock(&main_config.update_mutex); if (!lock){ + gtk_widget_show(widgets->LoadingSpinner); + gtk_spinner_start(GTK_SPINNER(widgets->LoadingSpinner)); + gtk_widget_hide(widgets->MainOverlayBox); yon_ubl_status_box_render(LOADING_LABEL,BACKGROUND_IMAGE_INFO_TYPE); { GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelsPackageBox)); if (g_list_length(list)>0){ for (guint i=0;iAdditionsPackageBox)); if (g_list_length(list)>0){ for (guint i=0;iKernelsPackageBox),kernels[i],widgets); - g_thread_new("tags_install_tread",(GThreadFunc)yon_tab_set_installed,tab); + yon_tab_set_installed(tab); { GList *list = gtk_container_get_children(GTK_CONTAINER(tab->run_tags_box)); for (guint i=0;iAdditionsPackageBox),kernels[i],widgets); - GThread *thr = g_thread_new("tags_install_tread",(GThreadFunc)yon_tab_set_installed,tab); + yon_tab_set_installed((kernels_tab*)tab); if (i+1==kernels_size) { - g_thread_join(thr); char *status_text = NULL; switch (main_config.action){ case ACTION_LOAD: @@ -426,11 +417,14 @@ void *yon_interface_update(main_window *widgets){ status_text = OPERATION_ERROR_LABEL; break; } + yon_ubl_status_box_render(status_text,BACKGROUND_IMAGE_SUCCESS_TYPE); } gtk_widget_set_can_focus(gtk_widget_get_parent(tab->main_box),0); } - yon_packages_finish(); + gtk_widget_hide(widgets->LoadingSpinner); + gtk_widget_show(widgets->MainOverlayBox); + gtk_spinner_stop(GTK_SPINNER(widgets->LoadingSpinner)); } return NULL; } @@ -501,7 +495,8 @@ int yon_tag_add(GtkBox *target,char *tag_label, char *tag_style, char *icon_name gtk_box_pack_start(GTK_BOX(box),icon,0,0,0); } gtk_box_pack_start(GTK_BOX(box),label,1,1,0); - gtk_widget_show_all(box); + gtk_widget_show(label); + gtk_widget_show(box); gtk_box_pack_start(target,box,0,0,0); return 1; } @@ -513,6 +508,7 @@ gboolean on_command_execute_success(GtkWidget *,gint status,main_window *widgets g_mutex_lock(&main_config.progress_mutex); main_config.progress_active=0; g_mutex_unlock(&main_config.progress_mutex); + gtk_widget_set_sensitive(widgets->CancelButton,0); if (!status){ on_update_clicked(NULL,widgets); main_config.action=ACTION_TERMINAL_EXECUTE_SUCCESS; @@ -605,6 +601,7 @@ void *yon_command_execute_async(char *command,main_window *widgets){ gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->InstallationProgress),0); vte_terminal_reset(VTE_TERMINAL(widgets->InstallTerminal),0,1); yon_terminal_integrated_start_shell(widgets->InstallTerminal,yon_debug_output("%s\n",command),NULL,NULL); + gtk_widget_set_sensitive(widgets->CancelButton,1); // g_signal_connect_after(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_command_execute_success),widgets); // yon_terminal_integrated_start(widgets->InstallTerminal,yon_debug_output("%s\n",command)); glong columns = vte_terminal_get_column_count(VTE_TERMINAL(widgets->InstallTerminal)); @@ -1363,6 +1360,8 @@ void config_init(){ main_config.local_load_success_localised = LOCAL_LOAD_SUCCESS_LABEL; main_config.global_load_success_localised = GLOBAL_LOAD_SUCCESS_LABEL; textdomain(LocaleName); + yon_packages_init(); + } void on_update_clicked(GtkWidget *self, main_window *widgets){ @@ -1568,6 +1567,9 @@ void yon_main_window_complete(main_window *widgets){ widgets->TerminalRevealer = yon_gtk_builder_get_widget(builder, "TerminalRevealer"); widgets->TerminalPaned = yon_gtk_builder_get_widget(builder, "TerminalPaned"); widgets->TerminalScroll = yon_gtk_builder_get_widget(builder, "TerminalScroll"); + widgets->MainOverlay = yon_gtk_builder_get_widget(builder, "MainOverlay"); + widgets->MainOverlayBox = yon_gtk_builder_get_widget(builder, "MainOverlayBox"); + widgets->LoadingSpinner = yon_gtk_builder_get_widget(builder, "LoadingSpinner"); widgets->KernelsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"KernelsList")); widgets->AdditionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"AdditionsList")); widgets->KernelsPackageBox = yon_gtk_builder_get_widget(builder,"KernelsPackageBox"); @@ -1593,6 +1595,7 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets); + gtk_overlay_add_overlay(GTK_OVERLAY(widgets->MainOverlay),widgets->LoadingSpinner); // yon_gtk_scrolled_window_set_horizontal_at_desired_size(widgets->Window,GTK_SCROLLED_WINDOW(gtk_widget_get_parent(gtk_widget_get_parent(widgets->KernelsPackageBox)))); // yon_gtk_scrolled_window_set_horizontal_at_desired_size(widgets->Window,GTK_SCROLLED_WINDOW(gtk_widget_get_parent(gtk_widget_get_parent(widgets->AdditionsPackageBox)))); diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h index edadf24..3dae529 100644 --- a/source/ubl-settings-kernel.h +++ b/source/ubl-settings-kernel.h @@ -133,6 +133,10 @@ typedef struct { GtkWidget *MoreButton; GtkWidget *TerminalPaned; GtkWidget *TerminalScroll; + + GtkWidget *MainOverlay; + GtkWidget *MainOverlayBox; + GtkWidget *LoadingSpinner; } main_window; @@ -240,7 +244,7 @@ void on_save_done(main_window *widgets, config_str output, int size); char *yon_package_string_set(char *target); gboolean yon_tab_create_tags(kernels_tab *tab); -void *yon_tab_set_installed(kernels_tab *tab); +void yon_tab_set_installed(kernels_tab *tab); void *yon_interface_update(main_window *widgets); diff --git a/ubl-settings-kernel.glade b/ubl-settings-kernel.glade index 9db2aea..cba23e8 100644 --- a/ubl-settings-kernel.glade +++ b/ubl-settings-kernel.glade @@ -44,6 +44,15 @@ + + 64 + 64 + True + False + center + center + True + @@ -187,233 +196,253 @@ - + True False - vertical - 5 - + True - True + False + vertical - + True False - 5 - 5 - 5 - 5 - 5 - 5 vertical + 5 - + True True - + True False + 5 5 + 5 5 + 5 + 5 + vertical - + + True + True + + + True + False + 5 + 5 + + + True + False + False + + + + + + + + True + True + 1 + + + + + + + True + False + Kernels + + + False + + + + + True + True + 5 + 5 + 5 + 5 + 5 + 5 + + True False - False - + 5 + 5 + + + True + False + + + + + 1 + + + + + True + False + Additions + + + 1 + False + - True + False True - 1 + 0 - - - - - True - False - Kernels - - - False - - - - - True - True - 5 - 5 - 5 - 5 - 5 - 5 - - True - False - 5 - 5 + + True + vertical + 250 + True + True - - True - False - - + + + True + True + 1 + - - - 1 - - - - - True - False - Additions - - - 1 - False - - - - - True - True - 0 - - - - - True - vertical - 250 - True - - - - - - - - - True - True - 1 - - - - - True - False - end - slide-up - True - - - True - False - vertical - 5 - + True False - 0 - in + end + slide-up + True - + True False - 5 - 5 - 5 - 5 + vertical + 5 - + True False - 5 + 0 + in - + True False - center + 5 + 5 + 5 + 5 + + + True + False + 5 + + + True + False + center + + + True + True + 0 + + + + + Cancel + True + False + True + True + + + False + True + 1 + + + + + More + True + True + True + + + False + True + 2 + + + + - - True - True - 0 - - - - Cancel - True - True - True - - - False - True - 1 - - - - - More - True - True - True - - - False - True - 2 - + + + + False + True + 1 + + - - - + False True - 1 + 2 - + + True + True + 1 + - - False - True - 2 + -1