diff --git a/kernel-list-addon.csv b/kernel-list-addon.csv index 7337cdf..ef9f6f4 100644 --- a/kernel-list-addon.csv +++ b/kernel-list-addon.csv @@ -1,10 +1,10 @@ NAME;PAСKAGE_UBM;PAСKAGE;DESCRIPTION Linux 5.15 headers;ubm-002-linux515-headers;linux515-headers;The Linux kernel headers v5.15 Linux 5.15 Docs;ubm-003-linux515-docs;linux515-docs;The Linux kernel docs v5.15 -Linux 5.15 DKMS modules;ubm-linux515-dkms;v4l2loopback-dkms,rtl88x2bu-dkms-git,r8125-dkms,rtl8192eu-dkms,rtl8821cu-dkms-git;The Linux kernel DKMS modules v5.15 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu +Linux 5.15 DKMS modules;ubm-linux515-dkms;;The Linux kernel DKMS modules v5.15 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu Linux 6.1 headers;ubm-002-linux61-headers;linux61-headers;The Linux kernel headers v6.1 Linux 6.1 Docs;ubm-003-linux61-docs;linux61-docs;The Linux kernel docs v6.1 -Linux 6.1 DKMS modules;ubm-linux61-dkms;v4l2loopback-dkms,rtl88x2bu-dkms-git,r8125-dkms,rtl8192eu-dkms,rtl8821cu-dkms-git;The Linux kernel DKMS modules v6.1 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu +Linux 6.1 DKMS modules;ubm-linux61-dkms;;The Linux kernel DKMS modules v6.1 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu Linux 6.6 headers;ubm-002-linux66-headers;linux66-headers;The Linux kernel headers v6.6 Linux 6.6 Docs;ubm-003-linux66-docs;linux66-docs;The Linux kernel docs v6.6 -Linux 6.6 DKMS modules;ubm-linux66-dkms;v4l2loopback-dkms,rtl88x2bu-dkms-git,r8125-dkms,rtl8192eu-dkms,rtl8821cu-dkms-git;The Linux kernel DKMS modules v6.6 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu \ No newline at end of file +Linux 6.6 DKMS modules;ubm-linux66-dkms;;The Linux kernel DKMS modules v6.6 : v4l2loopback, r8168-8136, rtl88x2bu, r8125, rtl8192eu \ No newline at end of file diff --git a/kernel-list.csv b/kernel-list.csv index eb5ba2f..06d5c91 100644 --- a/kernel-list.csv +++ b/kernel-list.csv @@ -1,4 +1,4 @@ NAME;PAСKAGE_UBM;PAСKAGE;PAСKAGE_UBM_REQUIRED;PAСKAGE_REQUIRED;TAG;DESCRIPTION -Linux 5.15;ubm-001-linux515;linux515;ubm-002-linux515-headers;linux515-headers;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v5.15 and modules, headers. Manual modules: acpi_call, bbswitch, broadcom-wl, r8168, rtl8723bu, tp_smapi, vhba-module, virtualbox-host-modules, zfs -Linux 6.1;ubm-001-linux61;linux61;ubm-002-linux61-headers;linux61-headers;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v6.1 and modules, headers. Manual modules: acpi_call, bbswitch, broadcom-wl, r8168, rtl8723bu, tp_smapi, vhba-module, virtualbox-host-modules, zfs -Linux 6.6;ubm-001-linux66;linux66;ubm-002-linux66-headers;linux66-headers;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v6.6 and modules, headers. Manual modules: acpi_call, bbswitch, broadcom-wl, r8168, rtl8723bu, tp_smapi, vhba-module, virtualbox-host-modules, zfs \ No newline at end of file +Linux 5.15;ubm-001-linux515;linux515;ubm-001-linux515-headers;linux515-headers;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v5.15 and modules, headers. Manual modules: acpi_call, bbswitch, broadcom-wl, r8168, rtl8723bu, tp_smapi, vhba-module, virtualbox-host-modules, zfs +Linux 6.1;ubm-001-linux61;linux61;ubm-001-linux61-headers;linux61-headers;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v6.1 and modules, headers. Manual modules: acpi_call, bbswitch, broadcom-wl, r8168, rtl8723bu, tp_smapi, vhba-module, virtualbox-host-modules, zfs +Linux 6.6;ubm-001-linux66;linux66;ubm-001-linux66-headers;linux66-headers;LTS, Stable, RealTime, Hardened, Recomended;The Linux kernel v6.6 and modules, headers. Manual modules: acpi_call, bbswitch, broadcom-wl, r8168, rtl8723bu, tp_smapi, vhba-module, virtualbox-host-modules, zfs \ No newline at end of file diff --git a/source/ubl-settings-kernel.c b/source/ubl-settings-kernel.c index f20171f..67972da 100644 --- a/source/ubl-settings-kernel.c +++ b/source/ubl-settings-kernel.c @@ -66,28 +66,32 @@ void on_config_save(GtkWidget *, main_window *widgets){ main_config.save_config=2; template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_BOTH,yon_config_get_custom_command("global"),NULL); if (window){}; - yon_interface_update(widgets); + on_update_clicked(NULL,widgets); + } void on_config_global_save(GtkWidget *, main_window *widgets){ main_config.save_config=0; template_saving_window *window = yon_save_proceed("global",YON_CONFIG_GLOBAL,yon_config_get_custom_command("global"),NULL); if (window){}; - yon_interface_update(widgets); + on_update_clicked(NULL,widgets); + } void on_config_local_save(GtkWidget *, main_window *widgets){ main_config.save_config=1; template_saving_window *window = yon_save_proceed("system",YON_CONFIG_LOCAL,yon_config_get_custom_command("system"),NULL); if (window){}; - yon_interface_update(widgets); + on_update_clicked(NULL,widgets); + } void on_config_custom_save(GtkWidget *, main_window *widgets){ main_config.save_config=1; template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,yon_config_get_custom_command("system"),NULL); if (window){}; - yon_interface_update(widgets); + on_update_clicked(NULL,widgets); + } @@ -97,7 +101,8 @@ void on_config_local_load(GtkWidget *, main_window *widgets){ yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); textdomain(LocaleName); main_config.load_mode=1; - yon_interface_update(widgets); + on_update_clicked(NULL,widgets); + } void on_config_global_load(GtkWidget *, main_window *widgets){ @@ -106,7 +111,8 @@ void on_config_global_load(GtkWidget *, main_window *widgets){ yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); textdomain(LocaleName); main_config.load_mode=0; - yon_interface_update(widgets); + on_update_clicked(NULL,widgets); + } void on_config_custom_load(GtkWidget *,main_window *widgets){ @@ -115,7 +121,8 @@ void on_config_custom_load(GtkWidget *,main_window *widgets){ yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); textdomain(LocaleName); main_config.load_mode=3; - yon_interface_update(widgets); + on_update_clicked(NULL,widgets); + } gboolean yon_tab_create_tags(kernels_tab *tab){ @@ -125,31 +132,47 @@ gboolean yon_tab_create_tags(kernels_tab *tab){ } g_list_free(list); if (!getuid()){ - if (tab->module_installed){ + switch(tab->module_installed){ + case 1:{ yon_tag_add(GTK_BOX(tab->install_tags_box),MODULE_INSTALLED_LABEL,"tag_green",NULL); gtk_image_set_from_icon_name(GTK_IMAGE(tab->module_icon),module_icon_path,GTK_ICON_SIZE_BUTTON); - gtk_widget_show(tab->remove_module_button); - gtk_widget_show(tab->update_module_button); - - gtk_widget_hide(tab->install_module_button); - } else { - gtk_widget_hide(tab->remove_module_button); - gtk_widget_hide(tab->update_module_button); - - gtk_widget_show(tab->install_module_button); + gtk_widget_show(tab->remove_module_button); + gtk_widget_show(tab->update_module_button); + gtk_widget_hide(tab->install_module_button); + gtk_widget_set_tooltip_text(tab->module_icon,MODULE_INSTALLED_LABEL); + } break; + case 0:{ + gtk_widget_hide(tab->remove_module_button); + gtk_widget_hide(tab->update_module_button); + gtk_widget_show(tab->install_module_button); + } break; + case -1: { + gtk_widget_hide(tab->remove_module_button); + gtk_widget_hide(tab->update_module_button); + gtk_widget_hide(tab->install_module_button); + gtk_widget_hide(tab->module_label); + } break; } - { - if (tab->package_installed){ + switch (tab->package_installed){ + case 1: { yon_tag_add(GTK_BOX(tab->install_tags_box),PACKAGE_INSTALLED_LABEL,"tag_green",NULL); gtk_image_set_from_icon_name(GTK_IMAGE(tab->package_icon),package_icon_path,GTK_ICON_SIZE_BUTTON); gtk_widget_hide(tab->install_package_button); gtk_widget_show(tab->remove_package_button); gtk_widget_show(tab->update_package_button); - } else { + gtk_widget_set_tooltip_text(tab->package_icon,PACKAGE_INSTALLED_LABEL); + } break; + case 0:{ gtk_widget_show(tab->install_package_button); gtk_widget_hide(tab->remove_package_button); gtk_widget_hide(tab->update_package_button); + }break; + case -1:{ + gtk_widget_hide(tab->remove_package_button); + gtk_widget_hide(tab->update_package_button); + gtk_widget_hide(tab->install_package_button); + gtk_widget_hide(tab->package_label); } } if (tab->package_installed||tab->module_installed){ @@ -157,7 +180,9 @@ gboolean yon_tab_create_tags(kernels_tab *tab){ char *launched = config(KERNEL_BOOT_parameter); int boot_size; config_str boot_run = yon_config_load(get_active_kernel_command,&boot_size); - yon_char_remove_last_symbol(boot_run[0],'\n'); + if (boot_size>0){ + yon_char_remove_last_symbol(boot_run[0],'\n'); + } if ((!(launched&&!strcmp(tab->package,launched))&&(strcmp(tab->package,boot_run[0])))){ gtk_widget_show(tab->launch_button); @@ -166,14 +191,10 @@ gboolean yon_tab_create_tags(kernels_tab *tab){ if(!getuid()){ if (boot_run&&!strcmp(boot_run[0],tab->package)){ yon_tag_add(GTK_BOX(tab->install_tags_box),RUNNING_LABEL,"tag_green",NULL); - gtk_widget_hide(tab->update_module_button); - gtk_widget_hide(tab->update_package_button); gtk_widget_hide(tab->launch_button); } else if (!yon_char_is_empty(launched)&&!strcmp(launched,tab->package)){ yon_tag_add(GTK_BOX(tab->install_tags_box),BOOT_RUN_LABEL,"tag_orange",NULL); gtk_widget_hide(tab->launch_button); - gtk_widget_hide(tab->update_module_button); - gtk_widget_hide(tab->update_package_button); } } } @@ -188,6 +209,10 @@ gboolean yon_tab_create_tags(kernels_tab *tab){ yon_tag_add(GTK_BOX(tab->install_tags_box),UNKNOWN_LABEL,"tag_grey",NULL); } gtk_widget_show(tab->main_box); + + g_mutex_lock(&main_config.update_mutex); + main_config.update_active--; + g_mutex_unlock(&main_config.update_mutex); return G_SOURCE_REMOVE; } @@ -200,85 +225,108 @@ char *yon_package_string_set(char *target){ } 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 = 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_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_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); - - 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); - + 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); + } + 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); + } + 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){ - yon_ubl_status_box_render(LOADING_LABEL,BACKGROUND_IMAGE_INFO_TYPE); - if (!main_config.kernel_tabs){ - GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelsPackageBox)); - for (guint i=0;iKernelsPackageBox)); + if (g_list_length(list)>0){ + for (guint i=0;iAdditionsPackageBox)); - 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); - { - GList *list = gtk_container_get_children(GTK_CONTAINER(tab->run_tags_box)); - for (guint i=0;iKernelsPackageBox),kernels[i],widgets); + g_thread_new("tags_install_tread",(GThreadFunc)yon_tab_set_installed,tab); + { + GList *list = gtk_container_get_children(GTK_CONTAINER(tab->run_tags_box)); + for (guint i=0;imain_box),0); } - g_list_free(list);} - gtk_widget_set_can_focus(gtk_widget_get_parent(tab->main_box),0); - } - yon_char_parsed_free(kernels,kernels_size); - kernels = yon_resource_open_file(kernels_addon_path, &kernels_size); - for (int i=1;iAdditionsPackageBox),kernels[i],widgets); - g_thread_new("tags_install_tread",(GThreadFunc)yon_tab_set_installed,tab); - gtk_widget_set_can_focus(gtk_widget_get_parent(tab->main_box),0); - } - textdomain(template_ui_LocaleName); - switch (main_config.load_mode){ - case 0: yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - break; - case 1: yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - break; - case 3: yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - break; + yon_char_parsed_free(kernels,kernels_size); + kernels = yon_resource_open_file(kernels_addon_path, &kernels_size); + for (int i=1;iAdditionsPackageBox),kernels[i],widgets); + g_thread_new("tags_install_tread",(GThreadFunc)yon_tab_set_installed,tab); + gtk_widget_set_can_focus(gtk_widget_get_parent(tab->main_box),0); + } + textdomain(template_ui_LocaleName); + switch (main_config.load_mode){ + case 0: yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + case 1: yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + case 3: yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + } + textdomain(LocaleName); } - textdomain(LocaleName); return NULL; } @@ -344,7 +392,8 @@ gboolean on_command_execute_success(GtkWidget *,gint status,main_window *widgets g_mutex_unlock(&main_config.progress_mutex); if (!status){ yon_ubl_status_box_render(OPERATION_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - yon_interface_update(widgets); + on_update_clicked(NULL,widgets); + } else { yon_ubl_status_box_render(OPERATION_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } @@ -393,7 +442,8 @@ gboolean yon_terminal_get_progress(main_window *widgets){ 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),on_command_execute_success,widgets); + yon_terminal_integrated_start_shell(widgets->InstallTerminal,yon_debug_output("%s\n",command),NULL,NULL); + 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)); vte_terminal_set_size(VTE_TERMINAL(widgets->InstallTerminal),columns,20); @@ -477,7 +527,11 @@ dialog_window *yon_dialog_window_new(){ void on_module_install_clicked(GtkWidget *self,dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); - char *action_text = MODULE_INSTALL_CONFIRMATION_LABEL(tab->name); + char *action_text = NULL; + if (self == tab->update_module_button) + action_text = KERNEL_MODULE_UPDATE_CONFIRMATION_LABEL(tab->name); + else + action_text = KERNEL_MODULE_INSTALL_CONFIRMATION_LABEL(tab->name); if (!gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){ dialog_window *window = yon_dialog_window_new(); yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); @@ -504,7 +558,10 @@ void on_module_install_clicked(GtkWidget *self,dictionary *dict){ } else { dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); - data->action_text = MODULE_INSTALL_CONFIRMATION_LABEL(tab->name); + if (self == tab->update_module_button) + data->action_text = ADDITION_MODULE_UPDATE_CONFIRMATION_LABEL(tab->name); + else + data->action_text = ADDITION_MODULE_INSTALL_CONFIRMATION_LABEL(tab->name); data->function = NULL; data->data = NULL; if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ @@ -519,7 +576,11 @@ void on_module_install_clicked(GtkWidget *self,dictionary *dict){ void on_package_install_clicked(GtkWidget *self,dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); - char *action_text = MODULE_INSTALL_CONFIRMATION_LABEL(tab->name); + char *action_text = NULL; + if (self == tab->update_module_button) + action_text = KERNEL_PACKAGE_UPDATE_CONFIRMATION_LABEL(tab->name); + else + action_text = KERNEL_PACKAGE_INSTALL_CONFIRMATION_LABEL(tab->name); if (!gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))){ dialog_window *window = yon_dialog_window_new(); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_package_install_accept),dict); @@ -546,7 +607,10 @@ void on_package_install_clicked(GtkWidget *self,dictionary *dict){ } else { dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); - data->action_text = MODULE_INSTALL_CONFIRMATION_LABEL(tab->name); + if (self == tab->update_package_button) + data->action_text = ADDITION_PACKAGE_UPDATE_CONFIRMATION_LABEL(tab->name); + else + data->action_text = ADDITION_PACKAGE_INSTALL_CONFIRMATION_LABEL(tab->name); data->function = NULL; data->data = NULL; if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ @@ -569,8 +633,33 @@ void on_module_remove_done(GtkWidget *self, int state, kernels_tab *tab){ void on_module_remove_clicked(GtkWidget *self,dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); + int size; + config_str cnf = yon_config_load(SAVE_MODE_GET_COMMAND,&size); + yon_char_remove_last_symbol(cnf[0],'\n'); + SAVE_MODE_TYPE type = yon_ubl_save_mode_get_type(cnf[0]); + int installed_kernels=0; + dictionary *cur_ker=NULL; + for_dictionaries(cur_ker,main_config.kernel_tabs){ + switch(type){ + case SAVE_MODE_RAM_HOME: + case SAVE_MODE_SANDBOX:{ + if (((kernels_tab*)cur_ker->data)->module_installed){ + installed_kernels++; + } break; + default: + if (((kernels_tab*)cur_ker->data)->package_installed||((kernels_tab*)cur_ker->data)->module_installed){ + installed_kernels++; + } + + } break; + } + } dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); - data->action_text = MODULE_REMOVE_CONFIRMATION_LABEL(tab->name); + if (installed_kernels>1){ + data->action_text = KERNEL_MODULE_REMOVE_CONFIRMATION_LABEL(tab->name); + } else if (installed_kernels==1){ + data->action_text = KERNEL_REMOVE_LAST_CONFIRMATION_LABEL(tab->name); + } data->function = NULL; data->data = NULL; if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ @@ -588,8 +677,33 @@ void on_module_remove_clicked(GtkWidget *self,dictionary *dict){ void on_package_remove_clicked(GtkWidget *self,dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); kernels_tab *tab = yon_dictionary_get_data(dict->first->next,kernels_tab*); + int size; + config_str cnf = yon_config_load(SAVE_MODE_GET_COMMAND,&size); + yon_char_remove_last_symbol(cnf[0],'\n'); + SAVE_MODE_TYPE type = yon_ubl_save_mode_get_type(cnf[0]); + int installed_kernels=0; + dictionary *cur_ker=NULL; + for_dictionaries(cur_ker,main_config.kernel_tabs){ + switch(type){ + case SAVE_MODE_RAM_HOME: + case SAVE_MODE_SANDBOX:{ + if (((kernels_tab*)cur_ker->data)->module_installed){ + installed_kernels++; + } break; + default: + if (((kernels_tab*)cur_ker->data)->package_installed||((kernels_tab*)cur_ker->data)->module_installed){ + installed_kernels++; + } + + } break; + } + } dialog_confirmation_data *data = malloc(sizeof(dialog_confirmation_data)); - data->action_text = PACKAGE_REMOVE_CONFIRMATION_LABEL(tab->name); + if (installed_kernels>1){ + data->action_text = KERNEL_PACKAGE_REMOVE_CONFIRMATION_LABEL(tab->name); + } else if (installed_kernels==1){ + data->action_text = KERNEL_REMOVE_LAST_CONFIRMATION_LABEL(tab->name); + } data->function = NULL; data->data = NULL; int resp = yon_confirmation_dialog_call(self,data); @@ -611,7 +725,8 @@ void on_launch_cliked(GtkWidget *self,dictionary *dict){ data->data = NULL; if (yon_confirmation_dialog_call(self,data) == GTK_RESPONSE_ACCEPT){ yon_config_set(KERNEL_BOOT_parameter,tab->package); - yon_interface_update(widgets); + on_update_clicked(NULL,widgets); + } } @@ -657,7 +772,10 @@ kernels_tab *yon_tab_row_new(GtkListBox *target, char *target_string, main_windo g_signal_connect(G_OBJECT(tab->remove_package_button),"clicked",G_CALLBACK(on_package_remove_clicked),dict); g_signal_connect(G_OBJECT(tab->changelog_button),"clicked",G_CALLBACK(on_changelog_clicked),tab); g_signal_connect(G_OBJECT(tab->launch_button),"clicked",G_CALLBACK(on_launch_cliked),dict); + g_signal_connect(G_OBJECT(tab->module_label),"activate-link",G_CALLBACK(on_info_clicked),tab); + g_signal_connect(G_OBJECT(tab->package_label),"activate-link",G_CALLBACK(on_info_clicked),tab); + if(getuid()){ gtk_widget_set_sensitive(tab->launch_button,0); gtk_widget_set_sensitive(tab->remove_module_button,0); @@ -671,8 +789,8 @@ kernels_tab *yon_tab_row_new(GtkListBox *target, char *target_string, main_windo tab->module = yon_char_new(parsed[1]); tab->package = yon_char_new(parsed[2]); char *name = yon_char_unite("",tab->name,"",NULL); - char *module = yon_char_unite("",MODULE_LABEL," ",tab->module,"",NULL); - char *package = yon_char_unite("",PACKAGE_LABEL," ",tab->package,"",NULL); + char *module = yon_char_unite("",MODULE_LABEL," ",tab->module,"",NULL); + char *package = yon_char_unite("",PACKAGE_LABEL," ",tab->package,"",NULL); yon_dictionary_add_or_create_if_exists_with_data(main_config.kernel_tabs,tab->package,tab); @@ -759,14 +877,17 @@ additions_kernels_tab *yon_additions_tab_row_new(GtkListBox *target, char *targe g_signal_connect(G_OBJECT(tab->install_package_button),"clicked",G_CALLBACK(on_package_install_clicked),dict); g_signal_connect(G_OBJECT(tab->remove_module_button),"clicked",G_CALLBACK(on_module_remove_clicked),dict); g_signal_connect(G_OBJECT(tab->remove_package_button),"clicked",G_CALLBACK(on_package_remove_clicked),dict); + g_signal_connect(G_OBJECT(tab->module_label),"activate-link",G_CALLBACK(on_info_clicked),tab); + g_signal_connect(G_OBJECT(tab->package_label),"activate-link",G_CALLBACK(on_info_clicked),tab); + gtk_list_box_insert(target,tab->main_box,-1); tab->name = yon_char_new(parsed[0]); tab->module = yon_char_new(parsed[1]); tab->package = yon_char_new(parsed[2]); char *name = yon_char_unite("",tab->name,"",NULL); - char *module = yon_char_unite("",MODULE_LABEL," ",tab->module,"",NULL); - char *package = yon_char_unite("",PACKAGE_LABEL," ",tab->package,"",NULL); + char *module = yon_char_unite("",MODULE_LABEL," ",tab->module,"",NULL); + char *package = yon_char_unite("",PACKAGE_LABEL," ",tab->package,"",NULL); yon_dictionary_add_or_create_if_exists_with_data(main_config.addition_tabs,tab->package,tab); @@ -804,58 +925,51 @@ void config_init(){ main_config.load_mode=1; main_config.save_config=1; main_config.kernel_tabs=NULL; + main_config.addition_tabs=NULL; main_config.progress_active=0; + main_config.update_active=0; } void on_update_clicked(GtkWidget *, main_window *widgets){ - yon_dictionary_free_all(main_config.kernel_tabs,free); - yon_dictionary_free_all(main_config.addition_tabs,free); - main_config.kernel_tabs=NULL; - main_config.addition_tabs=NULL; - + int lock=0; + g_mutex_lock(&main_config.update_mutex); + lock = main_config.update_active; + g_mutex_unlock(&main_config.update_mutex); + if (!lock){ + yon_dictionary_free_all(main_config.kernel_tabs,free); + yon_dictionary_free_all(main_config.addition_tabs,free); + main_config.kernel_tabs=NULL; + main_config.addition_tabs=NULL; yon_interface_update(widgets); -} -void on_selection_changed(GtkWidget *, GtkListBoxRow* row, main_window *widgets){ - if (row){ - gtk_widget_set_sensitive(widgets->InfoButton,1); - } else { - gtk_widget_set_sensitive(widgets->InfoButton,0); } } -void on_info_clicked(GtkWidget *, main_window *widgets){ +void on_info_clicked(GtkWidget *self, char *, kernels_tab *tab){ info_window *window = yon_info_window_new(); - yon_gtk_window_setup(GTK_WINDOW(window->window),GTK_WINDOW(widgets->Window),INFO_TITLE_LABEL,icon_path,"info_window"); - GtkWidget *current_tree=NULL; - if (gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->MainNotebook))==0){ - current_tree = widgets->KernelsPackageBox; + yon_gtk_window_setup(GTK_WINDOW(window->window),NULL,INFO_TITLE_LABEL,icon_path,"info_window"); + char *package=NULL; + if (self == tab->module_label){ + package = yon_char_new(tab->module); } else { - current_tree = widgets->AdditionsPackageBox; + package = yon_char_new(tab->package); } - GtkListBoxRow *target = gtk_list_box_get_selected_row(GTK_LIST_BOX(current_tree)); - if (target){ - GList *list = gtk_container_get_children(GTK_CONTAINER(target)); - GList *list2 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list,0))); - GList *list3 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list2,0))); - GList *list4 = gtk_container_get_children(GTK_CONTAINER(g_list_nth_data(list3,2))); - char * target_str = yon_char_new((char*)gtk_label_get_text(GTK_LABEL(g_list_nth_data(list4,1)))); - int size; - char *package=NULL; - if ((package = strstr(target_str,": "))){ - package+=2; - if (strstr(package,",")){ - package = yon_char_replace(package,","," "); - } - } - config_str info = yon_config_load(get_package_info_command(package),&size); - if (size!=-1){ - char *final_text = yon_char_parsed_to_string(info,size,""); - gtk_label_set_text(GTK_LABEL(window->InfoLabel),final_text); - free(final_text); - } else { - gtk_label_set_text(GTK_LABEL(window->InfoLabel),PACKAGE_NOT_FOUND_LABEL); - } + int size; + + if (strstr(package,",")){ + + char *temp = yon_char_replace(package,","," "); + free(package); + package = temp; + } + + config_str info = yon_config_load(get_package_info_command(package),&size); + if (size!=-1){ + char *final_text = yon_char_parsed_to_string(info,size,""); + gtk_label_set_text(GTK_LABEL(window->InfoLabel),final_text); + free(final_text); + } else { + gtk_label_set_text(GTK_LABEL(window->InfoLabel),PACKAGE_NOT_FOUND_LABEL); } gtk_widget_show(window->window); } @@ -972,8 +1086,6 @@ void yon_main_window_complete(main_window *widgets){ { widgets->MainNotebook = yon_gtk_builder_get_widget(builder, "MainNotebook"); widgets->UpdateButton = yon_gtk_builder_get_widget(builder, "UpdateButton"); - widgets->InfoButton = yon_gtk_builder_get_widget(builder, "InfoButton"); - widgets->LogButton = yon_gtk_builder_get_widget(builder, "LogButton"); widgets->BuildingButton = yon_gtk_builder_get_widget(builder, "BuildingButton"); widgets->KernelsUpperTree = yon_gtk_builder_get_widget(builder, "KernelsUpperTree"); widgets->KernelsTree = yon_gtk_builder_get_widget(builder, "KernelsTree"); @@ -999,11 +1111,8 @@ void yon_main_window_complete(main_window *widgets){ widgets->ButtonsSizeGroup = GTK_SIZE_GROUP(gtk_builder_get_object(builder,"ButtonsSizeGroup")); g_signal_connect(G_OBJECT(widgets->UpdateButton),"clicked",G_CALLBACK(on_update_clicked),widgets); - g_signal_connect(G_OBJECT(widgets->InfoButton),"clicked",G_CALLBACK(on_info_clicked),widgets); g_signal_connect(G_OBJECT(widgets->BuildingButton),"clicked",G_CALLBACK(on_building_clicked),widgets); g_signal_connect(G_OBJECT(widgets->MoreButton),"clicked",G_CALLBACK(on_terminal_revealer_open),widgets); - g_signal_connect(G_OBJECT(widgets->KernelsPackageBox),"row-selected",G_CALLBACK(on_selection_changed),widgets); - g_signal_connect(G_OBJECT(widgets->AdditionsPackageBox),"row-selected",G_CALLBACK(on_selection_changed),widgets); // g_signal_connect(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_command_execute_success),widgets); g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_save),widgets); @@ -1014,6 +1123,11 @@ void yon_main_window_complete(main_window *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); + int paned_pos=0; + if (yon_window_config_get_parameter("settings","paned_pos",&paned_pos,YON_TYPE_INT)) { + gtk_paned_set_position(GTK_PANED(widgets->TerminalPaned),paned_pos); + } + yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size); if (getuid()){ gtk_widget_set_sensitive(widgets->BuildingButton,0); @@ -1025,10 +1139,11 @@ void yon_main_window_complete(main_window *widgets){ glong columns = vte_terminal_get_column_count(VTE_TERMINAL(widgets->InstallTerminal)); vte_terminal_set_size(VTE_TERMINAL(widgets->InstallTerminal),columns,20); + yon_gtk_widget_set_scroll_window_for_scroll(widgets->InstallTerminal,GTK_SCROLLBAR(widgets->TerminalScroll)); gtk_paned_add2(GTK_PANED(widgets->TerminalPaned),widgets->TerminalRevealer); - yon_interface_update(widgets); + on_update_clicked(NULL,widgets); yon_save_window_set_postsave_function(on_save_done,widgets); } yon_load_proceed(YON_CONFIG_LOCAL); diff --git a/source/ubl-settings-kernel.h b/source/ubl-settings-kernel.h index c55fec5..53a111d 100644 --- a/source/ubl-settings-kernel.h +++ b/source/ubl-settings-kernel.h @@ -83,13 +83,14 @@ typedef struct { int progress_active; config_str launch_arguments; int launch_size; + + int update_active; + GMutex update_mutex; } config; typedef struct { template_window_fields GtkWidget *UpdateButton; - GtkWidget *InfoButton; - GtkWidget *LogButton; GtkWidget *BuildingButton; GtkWidget *KernelsUpperTree; GtkWidget *KernelsTree; @@ -261,7 +262,7 @@ void on_update_clicked(GtkWidget *, main_window *widgets); void on_selection_changed(GtkWidget *self,GtkListBoxRow* row,main_window *widgets); -void on_info_clicked(GtkWidget *, main_window *widgets); +void on_info_clicked(GtkWidget *, char *, kernels_tab *tab); void on_changelog_clicked(GtkWidget *, kernels_tab *tab); diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 10680ae..7fc60dc 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -61,8 +61,20 @@ #define OPERATION_IN_PROGRESS_LABEL _("Terminal operation in process") #define PACKAGE_REMOVED_BUT_NOT_DISABLED_LABEL _("The package with the module has been removed, but the module is not disabled from the system, as it is used by other system programs. After rebooting, the module will be disabled and removed.") -#define MODULE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel")," ",target,"?",NULL) -#define PACKAGE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install package")," ",target,"?",NULL) -#define MODULE_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove module")," ",target,"?",NULL) -#define PACKAGE_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove package")," ",target,"?",NULL) -#define LAUNCH_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to launch")," ",target," ",_("for boot?\n\nChanges will be applied after system restart"),NULL) \ No newline at end of file +#define KERNEL_MODULE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel module")," ",target,"?",NULL) +#define KERNEL_PACKAGE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel package")," ",target,"?",NULL) +#define KERNEL_MODULE_UPDATE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to update kernel module")," ",target,"?",NULL) +#define KERNEL_PACKAGE_UPDATE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to update kernel package")," ",target,"?",NULL) +#define KERNEL_MODULE_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove kernel module")," ",target,"?",NULL) +#define KERNEL_REMOVE_LAST_CONFIRMATION_LABEL(target) yon_char_unite(_("The kernel is the only one in the system. If you remove it, it will become impossible to boot. Do you really want to remove")," ",target,"?",NULL) +#define KERNEL_PACKAGE_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove kernel package")," ",target,"?",NULL) +#define ADDITION_MODULE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel addition package")," ",target,"?",NULL) +#define ADDITION_PACKAGE_INSTALL_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to install kernel addition package")," ",target,"?",NULL) +#define ADDITION_MODULE_UPDATE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to update kernel addition module")," ",target,"?",NULL) +#define ADDITION_PACKAGE_UPDATE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to update kernel addition package")," ",target,"?",NULL) +#define ADDITION_MODULE_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove kernel addition module")," ",target,"?",NULL) +#define ADDITION_PACKAGE_REMOVE_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to remove kernel addition package")," ",target,"?",NULL) +#define LAUNCH_CONFIRMATION_LABEL(target) yon_char_unite(_("Are you sure want to launch")," ",target," ",_("for boot?\n\nChanges will be applied after system restart"),NULL) + +#define UPDATE_MODULE_LABEL _("Update module") +#define UPDATE_PACKAGE_LABEL _("Update package") \ No newline at end of file diff --git a/ubl-settings-kernel-additions-table-row.glade b/ubl-settings-kernel-additions-table-row.glade index bff6294..be18cdd 100644 --- a/ubl-settings-kernel-additions-table-row.glade +++ b/ubl-settings-kernel-additions-table-row.glade @@ -98,7 +98,7 @@ 0 - True + False True 1 @@ -138,7 +138,7 @@ 0 - True + False True 1 @@ -210,6 +210,7 @@ True True + Update module 5 image1 + False False diff --git a/ubl-settings-kernel.pot b/ubl-settings-kernel.pot index 9e759ff..9251b21 100644 --- a/ubl-settings-kernel.pot +++ b/ubl-settings-kernel.pot @@ -214,28 +214,70 @@ msgid "" msgstr "" #: source/ubl-strings.h:64 -msgid "Are you sure want to install kernel" +msgid "Are you sure want to install kernel module" msgstr "" #: source/ubl-strings.h:65 -msgid "Are you sure want to install package" +msgid "Are you sure want to install kernel package" msgstr "" #: source/ubl-strings.h:66 -msgid "Are you sure want to remove module" +msgid "Are you sure want to update kernel module" msgstr "" #: source/ubl-strings.h:67 -msgid "Are you sure want to remove package" +msgid "Are you sure want to update kernel package" msgstr "" #: source/ubl-strings.h:68 +msgid "Are you sure want to remove kernel module" +msgstr "" + +#: source/ubl-strings.h:69 +msgid "" +"The kernel is the only one in the system. If you remove it, it will become " +"impossible to boot. Do you really want to remove" +msgstr "" + +#: source/ubl-strings.h:70 +msgid "Are you sure want to remove kernel package" +msgstr "" + +#: source/ubl-strings.h:71 source/ubl-strings.h:72 +msgid "Are you sure want to install kernel addition package" +msgstr "" + +#: source/ubl-strings.h:73 +msgid "Are you sure want to update kernel addition module" +msgstr "" + +#: source/ubl-strings.h:74 +msgid "Are you sure want to update kernel addition package" +msgstr "" + +#: source/ubl-strings.h:75 +msgid "Are you sure want to remove kernel addition module" +msgstr "" + +#: source/ubl-strings.h:76 +msgid "Are you sure want to remove kernel addition package" +msgstr "" + +#: source/ubl-strings.h:77 msgid "Are you sure want to launch" msgstr "" -#: source/ubl-strings.h:68 +#: source/ubl-strings.h:77 msgid "" "for boot?\n" "\n" "Changes will be applied after system restart" msgstr "" + +#: source/ubl-strings.h:79 +msgid "Update module" +msgstr "" + +#: source/ubl-strings.h:80 +msgid "Update package" +msgstr "" diff --git a/ubl-settings-kernel_ru.po b/ubl-settings-kernel_ru.po index 8e92a22..81dc4ac 100644 --- a/ubl-settings-kernel_ru.po +++ b/ubl-settings-kernel_ru.po @@ -218,26 +218,60 @@ msgstr "" "отключен и удалён." #: source/ubl-strings.h:64 -msgid "Are you sure want to install kernel" +msgid "Are you sure want to install kernel module" msgstr "Вы хотите установить в систему ядро" #: source/ubl-strings.h:65 -msgid "Are you sure want to install package" +msgid "Are you sure want to install kernel package" msgstr "Вы хотите установить в систему пакет с ядром" #: source/ubl-strings.h:66 -msgid "Are you sure want to remove module" -msgstr "Вы действительно хотите удалить из системы пакет с модулем ядра" +msgid "Are you sure want to update kernel module" +msgstr "Вы хотите обновить пакет с модулем ядра" #: source/ubl-strings.h:67 -msgid "Are you sure want to remove package" -msgstr "Вы действительно хотите удалить из системы пакет с ядром" +msgid "Are you sure want to update kernel package" +msgstr "Вы действительно хотите обновить пакет с ядром " #: source/ubl-strings.h:68 +msgid "Are you sure want to remove kernel module" +msgstr "Вы действительно хотите удалить из системы пакет с модулем ядра" + +#: source/ubl-strings.h:69 +msgid "" +"The kernel is the only one in the system. If you remove it, it will become " +"impossible to boot. Do you really want to remove" +msgstr "Ядро является единственным в системе. При удалении загрузка станет невозможна. Вы действительно хотите удалить" + +#: source/ubl-strings.h:70 +msgid "Are you sure want to remove kernel package" +msgstr "Вы действительно хотите удалить из системы пакет с ядром" + +#: source/ubl-strings.h:71 source/ubl-strings.h:72 +msgid "Are you sure want to install kernel addition package" +msgstr "Вы хотите установить в систему пакет с модулем дополнения" + +#: source/ubl-strings.h:73 +msgid "Are you sure want to update kernel addition module" +msgstr "Вы хотите обновить пакет с модулем дополнения" + +#: source/ubl-strings.h:74 +msgid "Are you sure want to update kernel addition package" +msgstr "Вы действительно хотите обновить пакет с дополнением" + +#: source/ubl-strings.h:75 +msgid "Are you sure want to remove kernel addition module" +msgstr "Вы действительно хотите удалить из системы пакет с модулем дополнения" + +#: source/ubl-strings.h:76 +msgid "Are you sure want to remove kernel addition package" +msgstr "Вы действительно хотите удалить из системы пакет с дополнением" + +#: source/ubl-strings.h:77 msgid "Are you sure want to launch" msgstr "Выбрать ядро" -#: source/ubl-strings.h:68 +#: source/ubl-strings.h:77 msgid "" "for boot?\n" "\n" @@ -246,3 +280,11 @@ msgstr "" "загрузочным?\n" "\n" "Изменения вступят в силу после перезагрузки." + +#: source/ubl-strings.h:79 +msgid "Update module" +msgstr "Обновить модуль" + +#: source/ubl-strings.h:80 +msgid "Update package" +msgstr "Обновить пакет"