Fixed crashed, caused by frequent drivers update activation

pull/89/head
Ivan Dmitrievich Yartsev 10 months ago
parent c8dc503b04
commit 5905afdfca

@ -978,21 +978,45 @@ void yon_monitor_view_update(){
} }
} }
void *yon_proprietary_local_get(main_window *widgets){ gboolean yon_proprietary_clear(main_window *widgets){
gtk_list_store_clear(main_config.list); gtk_list_store_clear(main_config.list);
gtk_list_store_clear(main_config.list2); gtk_list_store_clear(main_config.list2);
gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->KernelsCombo)); 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_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_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_widget_set_sensitive(widgets->LoadDriversButton,0);
g_idle_add((GSourceFunc)yon_proprietary_clear,widgets);
int kernels_size; int kernels_size;
config_str kernels_installed=yon_config_load(yon_debug_output("%s\n",yon_get_kernels_installed),&kernels_size); config_str kernels_installed=yon_config_load(yon_debug_output("%s\n",yon_get_kernels_installed),&kernels_size);
if (!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;i<kernels_size;i++){ for (int i=0;i<kernels_size;i++){
yon_char_remove_last_symbol(kernels_installed[i],'\n'); yon_char_remove_last_symbol(kernels_installed[i],'\n');
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->KernelsCombo),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; int size;
@ -1005,20 +1029,24 @@ void *yon_proprietary_local_get(main_window *widgets){
for (int dr_desc=1;dr_desc<size;dr_desc++){ for (int dr_desc=1;dr_desc<size;dr_desc++){
int current_size; int current_size;
config_str current = yon_char_parse(rtn[dr_desc],&current_size,";"); config_str current = yon_char_parse(rtn[dr_desc],&current_size,";");
GtkTreeIter iter;
if ((!strcmp(current[0],"")||yon_char_parsed_check_exist(kernels_installed,kernels_size,current[0])>-1)){ if ((!strcmp(current[0],"")||yon_char_parsed_check_exist(kernels_installed,kernels_size,current[0])>-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]))))){ 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 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; 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); struct proprietary_struct *cur = malloc(sizeof(struct proprietary_struct));
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); 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); 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); free(status_text);
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); 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); g_thread_exit (NULL);
} }

@ -315,6 +315,19 @@ typedef struct
GtkWidget *ProprietaryAcceptButton; GtkWidget *ProprietaryAcceptButton;
} driver_window; } 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); monitor_data *yon_monitor_new(main_window *widgets,int dull);
void yon_launch_with_output(char *command); void yon_launch_with_output(char *command);
void yon_monitor_view_update(); 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); void on_database_update(void *self,void *widgets);
template_main_window *yon_main_window_complete(main_window *widgets); template_main_window *yon_main_window_complete(main_window *widgets);
void config_init(); 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 #endif
Loading…
Cancel
Save