From a308e6d23e5ee01de46f907aebce8946f6108abe Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 14 Jun 2024 11:24:31 +0600 Subject: [PATCH] Added callback for installing and removing toggle buttons --- source/ubl-settings-video.c | 95 +++++++++++++++++++++++++------------ source/ubl-settings-video.h | 9 ++-- source/ubl-strings.h | 6 ++- ubl-settings-video.glade | 10 +++- 4 files changed, 83 insertions(+), 37 deletions(-) diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index 7edbd2d..cce6be1 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -101,7 +101,7 @@ void on_driver_pack_install(GtkWidget *self,main_window *widgets){ GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->DriversTree)); if(gtk_tree_selection_get_selected(selection,&list_s,&iter)){ gtk_tree_model_get(list_s,&iter,1,&name,-1); - yon_terminal_start(widgets,yon_char_append(install_proprietary_command,name)); + yon_terminal_start(widgets,install_proprietary_command(name)); } else { yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } @@ -114,7 +114,7 @@ void on_driver_pack_delete(GtkWidget *self,main_window *widgets){ GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->DriversTree)); if(gtk_tree_selection_get_selected(selection,&list_s,&iter)){ gtk_tree_model_get(list_s,&iter,1,&name,-1); - yon_terminal_start(widgets,yon_char_append(delete_proprietary_command,name)); + yon_terminal_start(widgets,delete_proprietary_command(name)); } else { yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } @@ -130,16 +130,9 @@ void on_driver_pack_selection_change(GtkWidget *self, main_window *widgets){ int installed=0; gtk_tree_model_get(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)),&iter,0,&installed,-1); if (installed==1){ - // gtk_widget_set_sensitive(widgets->InstallButton,0); - // gtk_widget_set_sensitive(widgets->DeleteButton,1); - } else { - // gtk_widget_set_sensitive(widgets->InstallButton,1); - // gtk_widget_set_sensitive(widgets->DeleteButton,0); - } + } } else { gtk_widget_set_sensitive(widgets->InfoButton,0); - // gtk_widget_set_sensitive(widgets->InstallButton,0); - // gtk_widget_set_sensitive(widgets->DeleteButton,0); } } @@ -149,32 +142,56 @@ void on_driver_pack_info(GtkWidget *self, main_window *widgets){ pthread_t tid; pthread_attr_init(&attr); GtkTreeIter iter; - char *name; + char *module, *package; GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->DriversTree)); if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){ - gtk_tree_model_get(list_s,&iter,1,&name,-1); - pthread_create(&tid,&attr,(void*)yon_launch,yon_char_append(get_info_proprietary_command,name)); + gtk_tree_model_get(list_s,&iter,7,&module,8,&package,-1); + char *command = get_info_proprietary_command(yon_char_is_empty(module)?package:module); + pthread_create(&tid,&attr,(void*)yon_launch,command); yon_ubl_status_box_render(INFO_PROCESS_LABEL,BACKGROUND_IMAGE_INFO_TYPE); } else { yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } } -void on_pack_install_activate(){ - -} - -void on_module_install_activate(){ - -} - -void on_pack_remove_activate(){ - +void on_pack_install_activate(GtkCellRendererToggle* self,gchar* path,main_window *widgets){ + GtkTreeIter iter; + gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(main_config.list),&iter,path); + char *package; + int installed; + gtk_tree_model_get(GTK_TREE_MODEL(main_config.list),&iter,1,&installed,8,&package,-1); + if (!installed){ + if (!yon_char_is_empty(package)){ + char *command = install_proprietary_command(package); + yon_terminal_start(widgets,command); + } + } else { + if (!yon_char_is_empty(package)){ + char *command = delete_proprietary_command(package); + yon_terminal_start(widgets,command); + } + } } -void on_module_remove_activate(){ +void on_module_install_activate(GtkCellRendererToggle* self,gchar* path,main_window *widgets){ + GtkTreeIter iter; + gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(main_config.list),&iter,path); + char *package; + int installed; + gtk_tree_model_get(GTK_TREE_MODEL(main_config.list),&iter,0,&installed,7,&package,-1); + if (!installed){ + if (!yon_char_is_empty(package)){ + char *command = install_proprietary_command(package); + yon_terminal_start(widgets,command); + } + } else { + if (!yon_char_is_empty(package)){ + char *command = delete_proprietary_command(package); + yon_terminal_start(widgets,command); + } + } } void on_port_chosen_changed(GtkWidget *self, monitor_edit_window *window){ @@ -902,14 +919,21 @@ void yon_monitor_view_update(){ } } -void yon_proprietary_local_get(){ +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); 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); + } for (int i=0;iKernelsCombo),kernels_installed[i]); } int size; @@ -935,11 +959,16 @@ void yon_proprietary_local_get(){ textdomain(template_ui_LocaleName); yon_ubl_status_box_render(SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); textdomain(LocaleName); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); + g_thread_exit (NULL); } -void yon_proprietary_get_thread(){ +void yon_proprietary_get_thread(GtkWidget *self,main_window *widgets){ yon_ubl_status_box_render(PROPRIETARY_LOADING_LABEL,BACKGROUND_IMAGE_INFO_TYPE); - GThread *thread = g_thread_new("drivers_loading",(GThreadFunc)(yon_proprietary_local_get),NULL); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),NULL); + GThread *thread = g_thread_new("drivers_loading",(GThreadFunc)(yon_proprietary_local_get),widgets); + + // yon_proprietary_local_get(widgets); } void yon_monitor_view_dictionary_destroy(void *window){ @@ -1156,7 +1185,7 @@ void yon_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target){ } void on_database_update(void *self,void *widgets){ - yon_terminal_window_launch(GTK_WINDOW(((main_window*)widgets)->Window),install_proprietary_command); + yon_terminal_window_launch(GTK_WINDOW(((main_window*)widgets)->Window),install_proprietary_command("")); } /** void yon_setup_widgets(main_window *widgets) @@ -1197,6 +1226,7 @@ template_main_window *yon_main_window_complete(main_window *widgets){ widgets->LoadDriversButton = yon_gtk_builder_get_widget(builder,"LoadDriversButton"); widgets->DriversTree = yon_gtk_builder_get_widget(builder,"DriversTree"); + widgets->KernelsCombo = yon_gtk_builder_get_widget(builder,"KernelsCombo"); widgets->DriverModulesTab = GTK_WIDGET(gtk_builder_get_object(builder, "DriverModulesTab")); widgets->DriversTab = GTK_WIDGET(gtk_builder_get_object(builder, "DriversTab")); @@ -1211,13 +1241,16 @@ template_main_window *yon_main_window_complete(main_window *widgets){ widgets->InformationLabel = GTK_WIDGET(gtk_builder_get_object(builder, "InformationLabel")); widgets->InformationLabel2 = GTK_WIDGET(gtk_builder_get_object(builder, "InformationLabel2")); + widgets->PackageRenderer = GTK_CELL_RENDERER(gtk_builder_get_object(builder, "PackageRenderer")); + widgets->ModuleRenderer = GTK_CELL_RENDERER(gtk_builder_get_object(builder, "ModuleRenderer")); + main_config.list = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore6")); main_config.list2 = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore1")); g_signal_connect(G_OBJECT(widgets->LoadDriversButton), "clicked", G_CALLBACK(yon_proprietary_get_thread), widgets); - // g_signal_connect(G_OBJECT(widgets->DeleteButton), "clicked", G_CALLBACK(on_driver_pack_delete), widgets); - // g_signal_connect(G_OBJECT(widgets->InstallButton), "clicked", G_CALLBACK(on_driver_pack_install), widgets); + g_signal_connect(G_OBJECT(widgets->PackageRenderer), "toggled", G_CALLBACK(on_pack_install_activate), widgets); + g_signal_connect(G_OBJECT(widgets->ModuleRenderer), "toggled", G_CALLBACK(on_module_install_activate), widgets); g_signal_connect(G_OBJECT(widgets->InfoButton), "clicked", G_CALLBACK(on_driver_pack_info), widgets); g_signal_connect(G_OBJECT(widgets->DriversTree), "cursor-changed", G_CALLBACK(on_driver_pack_selection_change), widgets); @@ -1292,7 +1325,7 @@ int main(int argc, char *argv[]){ yon_confirmation_dialog_call(widgets->HeadOverlay,data); } - yon_proprietary_get_thread(); + yon_proprietary_get_thread(NULL,(main_window*)widgets); // on_config_fill_interface(&widgets); yon_monitor_set_resolutions(); gtk_main(); diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index 82df60a..4d2b1d3 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -69,11 +69,11 @@ #define remove_drivers_local_command "/usr/bin/ubconfig --target system remove video " -#define install_proprietary_command "pacman --quiet --needed --noconfirm -Sy " +#define install_proprietary_command(target) yon_char_append("pacman --quiet --needed --noconfirm -Sy ",target) -#define delete_proprietary_command "pacman -R --noconfirm " +#define delete_proprietary_command(target) yon_char_append("pacman -R --noconfirm ",target) -#define get_info_proprietary_command "pamac-manager --details=" +#define get_info_proprietary_command(target) yon_char_append("pamac-manager --details=",target) #define get_version_proprietary_command "grep \"VERSION_ID=\" /etc/os-release | cut -d= -f2" @@ -179,6 +179,9 @@ typedef struct GtkWidget *FrameGapCombo; GtkWidget *DriversTree; + GtkCellRenderer *ModuleRenderer; + GtkCellRenderer *PackageRenderer; + GtkWidget *KernelsCombo; GtkWidget *InfoButton; GtkWidget *DriverModulesTab; diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 4535f58..c24e9c6 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -184,4 +184,8 @@ #define DESCR37_LABEL _("X.org 3dfx Voodoo1/Voodoo2 2D video driver") #define DESCR38_LABEL _("X.org X11 qxl video driver") -#define DATABASE_UNACCESSIBLE_LABEL _("Database files must be updated") \ No newline at end of file +#define DATABASE_UNACCESSIBLE_LABEL _("Database files must be updated") + +#define KERNELS_SUPPORTED_UNFOUND_LABEL _("Warning: Couldn't find any supported kernel version") + +#define ALL_INSTALLED_KERNELS_LABEL _("Default (All installed)") \ No newline at end of file diff --git a/ubl-settings-video.glade b/ubl-settings-video.glade index 7ded75f..1ca9a0f 100644 --- a/ubl-settings-video.glade +++ b/ubl-settings-video.glade @@ -1071,7 +1071,7 @@ - + True False 0 @@ -1153,6 +1153,9 @@ True True liststore1 + + + Installed @@ -1192,11 +1195,14 @@ both True 4 + + + Module - + 0