From 5905afdfca53860abe56598a8d34137fd949de3b Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 5 Mar 2025 12:24:05 +0600 Subject: [PATCH] Fixed crashed, caused by frequent drivers update activation --- source/ubl-settings-video.c | 50 +++++++++++++++++++++++++++++-------- source/ubl-settings-video.h | 18 +++++++++++++ 2 files changed, 57 insertions(+), 11 deletions(-) diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index 0af3f05..785e0f2 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -978,21 +978,45 @@ void yon_monitor_view_update(){ } } +gboolean yon_proprietary_clear(main_window *widgets){ + gtk_list_store_clear(main_config.list); + gtk_list_store_clear(main_config.list2); + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->KernelsCombo)); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->KernelsCombo),ALL_INSTALLED_KERNELS_LABEL); + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KernelsCombo),0); + return G_SOURCE_REMOVE; +} + + +gboolean yon_proprietary_append(struct proprietary_struct *target){ + GtkTreeIter iter; + gtk_list_store_append(main_config.list,&iter); + gtk_list_store_set(main_config.list,&iter,0,target->module_status,1,target->package_status,2,target->drivers[0],3,target->drivers[3],4,_(target->drivers[4]),5,_(target->drivers[5]),7,target->drivers[1],8,target->drivers[2],9,!yon_char_is_empty(target->drivers[1]),10,!yon_char_is_empty(target->drivers[2]),-1); + free(target); + return G_SOURCE_REMOVE; +} + +gboolean yon_proprietary_append_kernels(struct proprietary_kernel_append_struct *append){ + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(append->widgets->KernelsCombo),append->kernel); + free(append->kernel); + return G_SOURCE_REMOVE; +} + void *yon_proprietary_local_get(main_window *widgets){ - gtk_list_store_clear(main_config.list); - gtk_list_store_clear(main_config.list2); - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->KernelsCombo)); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->KernelsCombo),ALL_INSTALLED_KERNELS_LABEL); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KernelsCombo),0); + gtk_widget_set_sensitive(widgets->LoadDriversButton,0); + g_idle_add((GSourceFunc)yon_proprietary_clear,widgets); int kernels_size; config_str kernels_installed=yon_config_load(yon_debug_output("%s\n",yon_get_kernels_installed),&kernels_size); if (!kernels_size){ - yon_ubl_status_box_render(KERNELS_SUPPORTED_UNFOUND_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_box_render_thread(KERNELS_SUPPORTED_UNFOUND_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } for (int i=0;iKernelsCombo),kernels_installed[i]); + struct proprietary_kernel_append_struct *cur = malloc(sizeof(struct proprietary_kernel_append_struct)); + cur->widgets=widgets; + cur->kernel=yon_char_new(kernels_installed[i]); + g_idle_add((GSourceFunc)yon_proprietary_append_kernels,cur); } int size; @@ -1005,20 +1029,24 @@ void *yon_proprietary_local_get(main_window *widgets){ for (int dr_desc=1;dr_desc-1)){ if ((!yon_char_is_empty(current[1])&&!system(yon_get_is_exist_command(yon_debug_output("%s\n\n\n",current[1]))))||(!yon_char_is_empty(current[2])&&!system(yon_get_is_exist_command(yon_debug_output("%s\n\n\n",current[2]))))){ int module_status = !yon_char_is_empty(current[1])?!system(yon_get_is_installed_command(current[1])):0; int package_status = !yon_char_is_empty(current[2])?!system(yon_get_is_installed_command(current[2])):0; - gtk_list_store_append(main_config.list,&iter); - gtk_list_store_set(main_config.list,&iter,0,module_status,1,package_status,2,current[0],3,current[3],4,_(current[4]),5,_(current[5]),7,current[1],8,current[2],9,!yon_char_is_empty(current[1]),10,!yon_char_is_empty(current[2]),-1); + struct proprietary_struct *cur = malloc(sizeof(struct proprietary_struct)); + cur->drivers=current; + cur->drivers_size=current_size; + cur->module_status=module_status; + cur->package_status=package_status; + g_idle_add((GSourceFunc)yon_proprietary_append,cur); } } } char *status_text = yon_char_unite(yon_char_get_localised_from_lib(SUCCESS_LABEL),". ", !getuid()? main_config.load_mode==1?yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL):yon_char_get_localised_from_lib(GLOBAL_LOAD_SUCCESS_LABEL):yon_char_get_localised_from_lib(ROOT_WARNING_LABEL),NULL); - yon_ubl_status_box_render(status_text,!getuid()?BACKGROUND_IMAGE_SUCCESS_TYPE:BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_box_render_thread(status_text,!getuid()?BACKGROUND_IMAGE_SUCCESS_TYPE:BACKGROUND_IMAGE_FAIL_TYPE); free(status_text); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); + gtk_widget_set_sensitive(widgets->LoadDriversButton,1); g_thread_exit (NULL); } diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index d0fc17a..9f6e015 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -315,6 +315,19 @@ typedef struct GtkWidget *ProprietaryAcceptButton; } driver_window; + +struct proprietary_struct { + config_str drivers; + int drivers_size; + int module_status; + int package_status; +}; + +struct proprietary_kernel_append_struct { + main_window *widgets; + char *kernel; +}; + monitor_data *yon_monitor_new(main_window *widgets,int dull); void yon_launch_with_output(char *command); void yon_monitor_view_update(); @@ -363,4 +376,9 @@ void yon_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target); void on_database_update(void *self,void *widgets); template_main_window *yon_main_window_complete(main_window *widgets); void config_init(); + +void *yon_proprietary_local_get(main_window *widgets); +gboolean yon_proprietary_append_kernels(struct proprietary_kernel_append_struct *append); +gboolean yon_proprietary_append(struct proprietary_struct *target); +gboolean yon_proprietary_clear(main_window *widgets); #endif \ No newline at end of file