From d8383c3197b4830d2fb3028669b466826bda503b Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 28 Apr 2023 16:39:50 +0600 Subject: [PATCH 1/2] driver processes outputs are shown in status bar --- source/ubl-settings-video.c | 318 ++++++++++++++++++++---------------- source/ubl-settings-video.h | 6 + 2 files changed, 179 insertions(+), 145 deletions(-) diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index 4161d57..2f0ea9b 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -18,7 +18,9 @@ void on_subwindow_close(GtkWidget *self) void on_monitor_config_save(GtkWidget *self, monitor_edit_window *window){ monitorconfig *config = yon_dictionary_get_data(window->config,monitorconfig*); if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationPortCombo))==0){ - _yon_ubl_status_box_render(videoconfig.status_render.box,videoconfig.status_render.icon,videoconfig.status_render.label,MONITOR_PORT_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + videoconfig.status_render.text_to_render=MONITOR_PORT_ERROR_LABEL; + videoconfig.status_render.type=BACKGROUND_IMAGE_FAIL_TYPE; + yon_ubl_status_box_render(&videoconfig.status_render); return; } config->main=0; @@ -32,7 +34,9 @@ void on_monitor_config_save(GtkWidget *self, monitor_edit_window *window){ config->port=NULL; config->resolution=NULL; config->frequency=NULL; - _yon_ubl_status_box_render(videoconfig.status_render.box,videoconfig.status_render.icon,videoconfig.status_render.label,MONITOR_PORT_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); + videoconfig.status_render.text_to_render=MONITOR_PORT_SUCCESS_LABEL; + videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE; + yon_ubl_status_box_render(&videoconfig.status_render); config->port = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationPortCombo)); window->config->key = yon_char_new(config->port); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationParameterLineCheck))==0){ @@ -68,73 +72,85 @@ void on_monitor_config_save(GtkWidget *self, monitor_edit_window *window){ on_subwindow_close(self); } -// void on_save_window_configuration(GtkWidget *self, MonitorSettings *monitor){ -// char *port=NULL; -// port=gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(monitor->templateMonitorConfigurationPortCombo)); -// if (!monitor->curconfig){ -// monitorconfig *confi = new(monitorconfig); -// if (!videoconfig.monitors) videoconfig.monitors=yon_dictionary_create_with_data(port,confi); -// else videoconfig.monitors=yon_dictionary_create_with_data_connected(videoconfig.monitors,port,confi); -// monitor->curconfig=videoconfig.monitors; -// } -// char *freq=NULL; -// char *res=NULL; -// char *rot=NULL; -// char *entr=NULL; -// char *def=NULL; -// def=_("Default settings"); -// if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(monitor->templateMonitorConfigurationMainRadio))==1) -// yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->main=1; -// if (strcmp((freq=yon_char_new((char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(monitor->templateMonitorConfigurationFrequencyCombo)))),def)!=0) -// yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->frequency=freq; -// else yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->frequency=NULL; -// if (strcmp((res=yon_char_new((char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(monitor->templateMonitorConfigurationResolutionCombo)))),def)!=0) -// yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->resolution=res; -// else yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->resolution=NULL; -// if (strcmp((rot=yon_char_new((char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(monitor->templateMonitorConfigurationRotationCombo)))),def)!=0) -// yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->rotation=rot; -// else yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->rotation=NULL; -// if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(monitor->templateMonitorConfigurationParameterLineCheck))){ -// entr=yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(monitor->templateMonitorConfigurationParameterLineEntry))); -// yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->stringparameters=entr; -// } else { -// char *str=NULL; -// str = ""; -// if (yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->frequency!=NULL) -// str=yon_char_get_augumented(str,yon_char_get_augumented(yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->frequency,",")); -// if (yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->resolution!=NULL) -// str=yon_char_get_augumented(str,yon_char_get_augumented(yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->resolution,",")); -// if (yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->rotation!=NULL) -// if (strcmp(yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->rotation,_("Right"))==0) -// str=yon_char_get_augumented(str,"rotation:right,"); -// else if (strcmp(yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->rotation,_("Left"))==0) -// str=yon_char_get_augumented(str,"rotation:left,"); -// else if (strcmp(yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->rotation,_("Invert"))==0) -// str=yon_char_get_augumented(str,"rotation:invert,"); -// else -// str=yon_char_get_augumented(str,"rotation:normal,"); - -// if (yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->main!=0) -// str=yon_char_get_augumented(str,"primary,"); -// if (strcmp(str,"")!=0) -// yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->stringparameters=str; - -// } -// dictionary *dict=NULL; -// // for_dictionaries (dict,videoconfig.videoconfig){ -// // MonitorSettings *monitorsett=yon_dictionary_get_data(dict,MonitorSettings*); -// // if (monitorsett->curconfig==monitor->curconfig){ -// // yon_parse_monitor(monitorsett->curconfig,yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->stringparameters); -// // gtk_label_set_text(GTK_LABEL(monitorsett->templateMonitorInfoResolutionLabel),yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->resolution); -// // if (yon_dictionary_get_data(monitorsett->curconfig,monitorconfig*)->main==0) -// // gtk_label_set_text(GTK_LABEL(monitorsett->templateMonitorInfoNameLabel), yon_char_get_augumented("Monitor ", ((monitorconfig *)monitorsett->curconfig->data)->port)); -// // if (yon_dictionary_get_data(monitorsett->curconfig,monitorconfig*)->main==1) -// // gtk_label_set_text(GTK_LABEL(monitorsett->templateMonitorInfoNameLabel), yon_char_get_augumented("Monitor ", yon_char_get_augumented(((monitorconfig *)monitorsett->curconfig->data)->port,"*"))); - -// // } -// // } -// on_subwindow_close(self); -// }; +void on_driver_pack_install(GtkWidget *self,widgets_dict *widgets){ + GtkTreeIter iter; + char *name; + GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->proprietaryTreeView)); + gtk_tree_selection_get_selected(selection,&list_s,&iter); + gtk_tree_model_get(list_s,&iter,1,&name,-1); + pthread_t tid; + pthread_create(&tid,NULL,(void*)yon_launch_with_output,(void*)yon_char_get_augumented(install_proprietary_command,name)); + +} + +void on_driver_install(GtkWidget *self,widgets_dict *widgets){ + + GtkTreeIter iter; + char *name; + GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->driversTreeView)); + gtk_tree_selection_get_selected(selection,&list_s,&iter); + gtk_tree_model_get(list_s,&iter,1,&name,-1); + pthread_t tid; + pthread_create(&tid,NULL,(void*)yon_launch_with_output,(void*)yon_char_get_augumented(install_proprietary_command,name)); + +} + +void on_driver_pack_delete(GtkWidget *self,widgets_dict *widgets){ + + GtkTreeIter iter; + char *name; + GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->proprietaryTreeView)); + gtk_tree_selection_get_selected(selection,&list_s,&iter); + gtk_tree_model_get(list_s,&iter,1,&name,-1); + pthread_t tid; + pthread_create(&tid,NULL,(void*)yon_launch_with_output,(void*)yon_char_get_augumented(delete_proprietary_command,name)); + +} + +void on_driver_delete(GtkWidget *self,widgets_dict *widgets){ + + GtkTreeIter iter; + char *name; + GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->driversTreeView)); + gtk_tree_selection_get_selected(selection,&list_s,&iter); + gtk_tree_model_get(list_s,&iter,1,&name,-1); + pthread_t tid; + pthread_create(&tid,NULL,(void*)yon_launch_with_output,(void*)yon_char_get_augumented(delete_proprietary_command,name)); + +} + +void on_driver_pack_info(GtkWidget *self, widgets_dict *widgets){ + + pthread_attr_t attr; + pthread_t tid; + pthread_attr_init(&attr); + GtkTreeIter iter; + char *name; + GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->proprietaryTreeView)); + 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_app,yon_char_get_augumented(get_info_proprietary_command,name)); +} + +void on_driver_info(GtkWidget *self,widgets_dict *widgets){ + + pthread_attr_t attr; + pthread_t tid; + pthread_attr_init(&attr); + GtkTreeIter iter; + char *name; + GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->driversTreeView)); + 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_app,yon_char_get_augumented(get_info_proprietary_command,name)); + +} void on_port_chosen_changed(GtkWidget *self, monitor_edit_window *window){ monitorconfig* config = yon_dictionary_get_data(window->config,monitorconfig*); @@ -286,7 +302,10 @@ void on_configuration_save_local(GtkWidget *self, widgets_dict *widgets) if (str){ printf(str); yon_config_save(str); - yon_ubl_status_box_render(widgets->mainStatusBox, widgets->mainStatusIcon, widgets->mainStatusLabel, _("Local configuration saving succseeded."), BACKGROUND_IMAGE_SUCCESS_TYPE); + + videoconfig.status_render.text_to_render=LOCAL_SAVE_SUCCESS; + videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE; + yon_ubl_status_box_render(&videoconfig.status_render); } // else // yon_ubl_status_box_render(widgets->mainStatusBox, widgets->mainStatusIcon, widgets->mainStatusLabel, _("Local configuration saving failed."), BACKGROUND_IMAGE_FAIL_TYPE); @@ -296,12 +315,16 @@ void on_configuration_save_local_global(GtkWidget *self, widgets_dict *widgets) { on_configuration_save_global(self, widgets); on_configuration_save_local(self, widgets); - yon_ubl_status_box_render(widgets->mainStatusBox, widgets->mainStatusIcon, widgets->mainStatusLabel, _("Local and global configuration saving succseeded."), BACKGROUND_IMAGE_SUCCESS_TYPE); + videoconfig.status_render.text_to_render=GLOBAL_LOCAL_SAVE_SUCCESS; + videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE; + yon_ubl_status_box_render(&videoconfig.status_render); } void on_configuration_save_global(GtkWidget *self, widgets_dict *widgets) { - yon_ubl_status_box_render(widgets->mainStatusBox, widgets->mainStatusIcon, widgets->mainStatusLabel, _("Global configuration saving succseeded."), BACKGROUND_IMAGE_SUCCESS_TYPE); + videoconfig.status_render.text_to_render=GLOBAL_SAVE_SUCCESS; + videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE; + yon_ubl_status_box_render(&videoconfig.status_render); yon_update_config(widgets); char *str = NULL; if (videoconfig.failsafenVidia) @@ -326,7 +349,9 @@ void yon_update_config(widgets_dict *widgets) void on_configuration_load_local(GtkWidget *self, widgets_dict *widgets) { - yon_ubl_status_box_render(widgets->mainStatusBox, widgets->mainStatusIcon, widgets->mainStatusLabel, _("Local configuration loading succseeded."), BACKGROUND_IMAGE_SUCCESS_TYPE); + videoconfig.status_render.text_to_render=LOCAL_LOAD_SUCCESS; + videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE; + yon_ubl_status_box_render(&videoconfig.status_render); char *command = load_drivers_local_command; dictionary *dct; for_dictionaries(dct, videoconfig.monitors) @@ -342,7 +367,9 @@ void on_configuration_load_local(GtkWidget *self, widgets_dict *widgets) void on_configuration_load_global(GtkWidget *self, widgets_dict *widgets) { - yon_ubl_status_box_render(widgets->mainStatusBox, widgets->mainStatusIcon, widgets->mainStatusLabel, _("Global configuration loading succseeded."), BACKGROUND_IMAGE_SUCCESS_TYPE); + videoconfig.status_render.text_to_render=GLOBAL_LOAD_SUCCESS; + videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE; + yon_ubl_status_box_render(&videoconfig.status_render); char *command = load_drivers_global_command; dictionary *dct; for_dictionaries(dct, videoconfig.monitors) @@ -531,6 +558,34 @@ void yon_monitor_window_update(monitor_edit_window *window){ } +void yon_popen(thread_input *input){ + *(FILE**)input->data=popen(input->command,"r"); +} + +void yon_launch_with_output(char *command){ + pthread_t tid; + FILE *output =NULL; + FILE **output_file=&output; + thread_input input; + input.command=command; + input.data=output_file; + pthread_create(&tid,NULL,(void*)yon_popen,&input); + char **output_strings = NULL; + output_strings = malloc(sizeof(char)); + int i = 0; + char str[1000]; + memset(str, 0, 1000); + while (1){ + if (output){ + if (fgets(str, 1000, output)){ + videoconfig.status_render.text_to_render=str; + videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE; + _yon_ubl_status_box_render(&videoconfig.status_render); + } + } + } +} + /**void yon_monitor_view_draw_all(GtkWidget *cnt) * [EN] */ @@ -999,76 +1054,6 @@ void yon_monitor_config_update(monitorconfig* monitor, char *port, char *config_ } } -// MonitorSettings *yon_setup_monitor_settings() -// { -// int monitors_n = videoconfig.portssize; -// MonitorSettings *monitors = NULL; -// monitors = malloc(sizeof(MonitorSettings) * (monitors_n+1)); -// // videoconfig.videoconfig=videoconfig.videoconfig->first; -// int i=0; -// if (videoconfig.monitors){ -// for (i = 0; i < monitors_n; i++) -// { -// GtkBuilder *builder = gtk_builder_new_from_file(glade_path); -// monitors[i].templateMonitorscreenOverlay = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorscreenOverlay")); -// monitors[i].templateMonitorInfoBox = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoBox")); -// monitors[i].templateMonitorInfoNameLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoNameLabel")); -// monitors[i].templateMonitorImage = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorImage")); -// monitors[i].templateMonitorInfoResolutionLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoResolutionLabel")); -// monitors[i].templateMonitorInfoConfigureButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoConfigureButton")); -// monitors[i].templateMonitorDeleteButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorDeleteButton")); -// monitors[i].templateMonitorSwitchButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorSwitchButton")); -// monitors[i].curconfig = yon_dictionary_get_nth(videoconfig.monitors, i); -// printf("%d\n", i); -// if (yon_dictionary_get_data(monitors[i].curconfig,monitorconfig*)->main==0) -// gtk_label_set_text(GTK_LABEL(monitors[i].templateMonitorInfoNameLabel), yon_char_get_augumented("Monitor ", ((monitorconfig *)monitors[i].curconfig->data)->port)); -// if (yon_dictionary_get_data(monitors[i].curconfig,monitorconfig*)->main==1) -// gtk_label_set_text(GTK_LABEL(monitors[i].templateMonitorInfoNameLabel), yon_char_get_augumented("Monitor ", yon_char_get_augumented(((monitorconfig *)monitors[i].curconfig->data)->port,"*"))); -// char *res = yon_char_get_augumented(((monitorconfig *)monitors[i].curconfig->data)->resolution, ""); -// if (yon_dictionary_get_data(monitors[i].curconfig,monitorconfig*)->enable==1) -// gtk_widget_set_sensitive(monitors[i].templateMonitorImage,1); -// if (!res) -// res = _("Default settings"); -// gtk_label_set_text(GTK_LABEL(monitors[i].templateMonitorInfoResolutionLabel), res); -// gtk_overlay_add_overlay(GTK_OVERLAY(monitors[i].templateMonitorscreenOverlay), monitors[i].templateMonitorInfoBox); -// g_signal_connect(G_OBJECT(monitors[i].templateMonitorInfoConfigureButton), "clicked", G_CALLBACK(on_confugure_monitor_settings), &monitors[i]); -// g_signal_connect(G_OBJECT(monitors[i].templateMonitorDeleteButton), "clicked", G_CALLBACK(on_confugure_monitor_settings), &monitors[i]); -// g_signal_connect(G_OBJECT(monitors[i].templateMonitorSwitchButton), "clicked", G_CALLBACK(on_confugure_monitor_settings), &monitors[i]); -// if (i==0) -// videoconfig.videoconfig = yon_dictionary_create_with_data(((monitorconfig *)monitors[i].curconfig->data)->port,&monitors[i]); -// else -// videoconfig.videoconfig = yon_dictionary_create_with_data_connected(videoconfig.videoconfig,((monitorconfig *)monitors[i].curconfig->data)->port,&monitors[i]); -// if (videoconfig.monitors->next) -// videoconfig.monitors = videoconfig.monitors->next; -// } -// } -// GtkBuilder *builder = gtk_builder_new_from_file(glade_path); -// monitors[i].templateMonitorscreenOverlay = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorscreenOverlay")); -// monitors[i].templateMonitorInfoBox = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoBox")); -// monitors[i].templateMonitorInfoNameLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoNameLabel")); -// monitors[i].templateMonitorImage = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorImage")); -// monitors[i].templateMonitorInfoResolutionLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoResolutionLabel")); -// monitors[i].templateMonitorInfoConfigureButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoConfigureButton")); -// monitors[i].templateMonitorDeleteButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorDeleteButton")); -// monitors[i].templateMonitorSwitchButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorSwitchButton")); -// monitors[i].templateMonitorInfoAddButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoAddButton")); -// gtk_widget_show(monitors[i].templateMonitorInfoAddButton); -// gtk_widget_hide(monitors[i].templateMonitorSwitchButton); -// gtk_widget_hide(monitors[i].templateMonitorDeleteButton); -// gtk_widget_hide(monitors[i].templateMonitorInfoConfigureButton); -// monitors[i].curconfig = NULL; -// gtk_label_set_text(GTK_LABEL(monitors[i].templateMonitorInfoNameLabel), ""); -// gtk_widget_set_sensitive(monitors[i].templateMonitorImage,0); -// gtk_label_set_text(GTK_LABEL(monitors[i].templateMonitorInfoResolutionLabel), ""); -// gtk_overlay_add_overlay(GTK_OVERLAY(monitors[i].templateMonitorscreenOverlay), monitors[i].templateMonitorInfoBox); -// g_signal_connect(G_OBJECT(monitors[i].templateMonitorInfoAddButton), "clicked", G_CALLBACK(on_confugure_monitor_settings), &monitors[i]); -// if (i==0) -// videoconfig.videoconfig = yon_dictionary_create_with_data("TEMPLATE",&monitors[i]); -// else -// videoconfig.videoconfig = yon_dictionary_create_with_data_connected(videoconfig.videoconfig,"TEMPLATE",&monitors[i]); -// return monitors; -// } - int yon_char_get_if_resolution(char *parsed_string){ char *left=NULL, *right=NULL; right=yon_char_new(parsed_string); @@ -1230,8 +1215,42 @@ void yon_setup_widgets(widgets_dict *widgets) widgets->templateMonitorConfigurationDoNotSwitchOffLabel = yon_gtk_builder_get_widget(widgets->builder, "templateMonitorConfigurationDoNotSwitchOffLabel"); widgets->templateMonitorConfigurationDoNotSwitchOffCheck = yon_gtk_builder_get_widget(widgets->builder, "templateMonitorConfigurationDoNotSwitchOffCheck"); + widgets->proprietaryTreeView = yon_gtk_builder_get_widget(widgets->builder, "proprietaryTreeView"); + widgets->proprietaryInfoButton = yon_gtk_builder_get_widget(widgets->builder, "proprietaryInfoButton"); + widgets->proprietaryDeleteButton = yon_gtk_builder_get_widget(widgets->builder, "proprietaryDeleteButton"); + widgets->proprietaryInstallButton = yon_gtk_builder_get_widget(widgets->builder, "proprietaryInstallButton"); + widgets->proprietaryTreeSelection = GTK_TREE_SELECTION(gtk_builder_get_object(widgets->builder, "proprietaryTreeSelection")); + widgets->driversTreeView = yon_gtk_builder_get_widget(widgets->builder, "driversTreeView"); + widgets->driversInfoButton = yon_gtk_builder_get_widget(widgets->builder, "driversInfoButton"); + widgets->driversDeleteButton = yon_gtk_builder_get_widget(widgets->builder, "driversDeleteButton"); + widgets->driversInstallButton = yon_gtk_builder_get_widget(widgets->builder, "driversInstallButton"); + widgets->driversTreeSelection = GTK_TREE_SELECTION(gtk_builder_get_object(widgets->builder, "driversTreeSelection")); + + widgets->proprietartInstalledColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "proprietartInstalledColumn")); + widgets->ProprietaryPackageColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "ProprietaryPackageColumn")); + widgets->ProprietaryDriverColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "ProprietaryDriverColumn")); + widgets->ProprietaryDescriptionColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "ProprietaryDescriptionColumn")); + widgets->ProprietarySupportedColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "ProprietarySupportedColumn")); + + widgets->driverInstalledColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "driverInstalledColumn")); + widgets->driverPackageColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "driverPackageColumn")); + widgets->driverDriverColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "driverDriverColumn")); + widgets->driverDescriptionColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "driverDescriptionColumn")); + widgets->driverSupportedColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(widgets->builder, "driverSupportedColumn")); + + videoconfig.list = GTK_LIST_STORE(gtk_builder_get_object(widgets-> builder, "liststore6")); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->proprietaryTreeView),GTK_TREE_MODEL(videoconfig.list)); + + g_signal_connect(G_OBJECT(widgets->proprietaryDeleteButton), "clicked", G_CALLBACK(on_driver_pack_delete), widgets); + g_signal_connect(G_OBJECT(widgets->proprietaryInstallButton), "clicked", G_CALLBACK(on_driver_pack_install), widgets); + g_signal_connect(G_OBJECT(widgets->proprietaryInfoButton), "clicked", G_CALLBACK(on_driver_pack_info), widgets); + + g_signal_connect(G_OBJECT(widgets->driversDeleteButton), "clicked", G_CALLBACK(on_driver_delete), widgets); + g_signal_connect(G_OBJECT(widgets->driversInstallButton), "clicked", G_CALLBACK(on_driver_install), widgets); + g_signal_connect(G_OBJECT(widgets->driversInfoButton), "clicked", G_CALLBACK(on_driver_info), widgets); + g_signal_connect(G_OBJECT(widgets->mainDriverAutomaticallyChooseCheck), "toggled", G_CALLBACK(on_auto_choose_drivers), widgets); // g_signal_connect(G_OBJECT(widgets->mainHybridGraphicsDiscreteCheck), "toggled", G_CALLBACK(on_sensitive_change), widgets); g_signal_connect(G_OBJECT(widgets->mainExtraLaunchOptirunCheck), "toggled", G_CALLBACK(on_sensitive_change), widgets->mainExtraLaunchOptirunEntry); @@ -1239,6 +1258,7 @@ void yon_setup_widgets(widgets_dict *widgets) g_signal_connect(G_OBJECT(widgets->mainExtraLaunchOptirunCheck), "toggled", G_CALLBACK(on_sensitive_change), widgets->extraOptirunChooseAppsButton); g_signal_connect(G_OBJECT(widgets->mainExtraLaunchPrismusunCheck), "toggled", G_CALLBACK(on_sensitive_change), widgets->extraPrimusunChooseAppsButton); + g_signal_connect(G_OBJECT(widgets->MainWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL); // g_signal_connect(G_OBJECT(widgets->extraOptirunChooseAppsButton), "clicked", G_CALLBACK(on_apps_chooser_open), widgets); // g_signal_connect(G_OBJECT(widgets->extraPrimusunChooseAppsButton), "clicked", G_CALLBACK(on_apps_chooser_open), widgets); @@ -1286,6 +1306,12 @@ void yon_setup_widgets(widgets_dict *widgets) gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSaveLocalMenuItem), _("Save to local configuration")); gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSettingsDocumentationMenuItem), _("Documentation")); gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSettingsAboutMenuItem), _("About")); + + gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(widgets->ProprietaryDriverColumn), _("Installed")); + gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(widgets->ProprietaryDriverColumn), _("Package")); + gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(widgets->ProprietaryDriverColumn), _("Supported Devices")); + gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(widgets->ProprietaryDriverColumn), _("Driver")); + gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(widgets->ProprietaryDescriptionColumn), _("Description")); // gtk_button_set_label(GTK_BUTTON(widgets->mainExtraLaunchThroughButton),_("Change")); yon_ubl_header_setup(widgets->mainHeadOverlay, widgets->headBox, widgets->mainHeadBackgroundImage, banner_path); // gtk_overlay_add_overlay(GTK_OVERLAY(widgets->mainHeadOverlay),widgets->headBox); @@ -1317,7 +1343,9 @@ int main(int argc, char *argv[]) yon_gtk_list_store_fill_with_proprietaries(videoconfig.list); gtk_widget_show(widgets.MainWindow); // yon_fill_ui(&widgets); - yon_ubl_status_box_render(widgets.mainStatusBox, widgets.mainStatusIcon, widgets.mainStatusLabel, _("Configuration has been loaded"), BACKGROUND_IMAGE_SUCCESS_TYPE); + videoconfig.status_render.text_to_render=LOCAL_LOAD_SUCCESS; + videoconfig.status_render.type=BACKGROUND_IMAGE_SUCCESS_TYPE; + yon_ubl_status_box_render(&videoconfig.status_render); on_config_fill_interface(&widgets); yon_monitor_set_resolutions(); GtkCssProvider *css = gtk_css_provider_new(); diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index f286018..4708913 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -62,6 +62,11 @@ #define XORG_MONITOR(port) yon_char_get_augumented(" XORG_MONITOR[",yon_char_get_augumented(port,"] ")) +typedef struct{ + char* command; + void *data; +} thread_input; + char *local; typedef char *string; @@ -308,4 +313,5 @@ void on_monitor_delete(GtkWidget *self,monitor_view windowd); void yon_monitor_view_update(); void yon_monitor_window_update(monitor_edit_window *window); char *yon_monitor_make_string(monitorconfig* config); +void yon_launch_with_output(char *command); #endif \ No newline at end of file From b4acaaaf680ea821717ae27f2b70ffb4837eaca4 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 28 Apr 2023 16:40:29 +0600 Subject: [PATCH 2/2] library updates --- source/ubl-utils.c | 27 +++++++++++++++++---------- source/ubl-utils.h | 19 ++++++++++++++++--- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/source/ubl-utils.c b/source/ubl-utils.c index fd78093..fb74917 100644 --- a/source/ubl-utils.c +++ b/source/ubl-utils.c @@ -907,8 +907,9 @@ void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image gtk_image_set_from_file(GTK_IMAGE(Image), image_path); } -void _yon_ubl_status_box_render(GtkWidget *StatusBox, GtkWidget *StatusIcon, GtkWidget *StatusLabel, char *StatusText, BACKGROUND_IMAGE_TYPE BackgroundClass) +void _yon_ubl_status_box_render(render_data *datav) { + render_data data = *(render_data*)datav; GtkIconTheme *ictheme = gtk_icon_theme_get_default(); GError *err = NULL; if (err) @@ -916,18 +917,24 @@ void _yon_ubl_status_box_render(GtkWidget *StatusBox, GtkWidget *StatusIcon, Gtk printf("%s\n", err->message); g_error_free(err); } - gtk_label_set_text(GTK_LABEL(StatusLabel), StatusText); - if (BackgroundClass == BACKGROUND_IMAGE_SUCCESS_TYPE) + if (data.type == BACKGROUND_IMAGE_SUCCESS_TYPE||! data.type) { - gtk_style_context_remove_class(gtk_widget_get_style_context(StatusBox), "boxInfoMessError"); - gtk_style_context_add_class(gtk_widget_get_style_context(StatusBox), "boxInfoMessOK"); - gtk_image_set_from_pixbuf(GTK_IMAGE(StatusIcon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.ubl-settings-video.checked", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, &err)); + gtk_style_context_remove_class(gtk_widget_get_style_context(data.box), "boxInfoMessError"); + gtk_style_context_add_class(gtk_widget_get_style_context(data.box), "boxInfoMessOK"); + gtk_image_set_from_pixbuf(GTK_IMAGE(data.icon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.ubl-settings-video.checked", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, &err)); } - else if (BackgroundClass == BACKGROUND_IMAGE_FAIL_TYPE) + else if (data.type == BACKGROUND_IMAGE_FAIL_TYPE) { - gtk_style_context_remove_class(gtk_widget_get_style_context(StatusBox), "boxInfoMessOK"); - gtk_style_context_add_class(gtk_widget_get_style_context(StatusBox), "boxInfoMessError"); - gtk_image_set_from_pixbuf(GTK_IMAGE(StatusIcon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.ubl-settings-video.warning", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, &err)); + gtk_style_context_remove_class(gtk_widget_get_style_context(data.box), "boxInfoMessOK"); + gtk_style_context_add_class(gtk_widget_get_style_context(data.box), "boxInfoMessError"); + gtk_image_set_from_pixbuf(GTK_IMAGE(data.icon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.ubl-settings-video.warning", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, &err)); } + if (data.text_to_render) + gtk_label_set_text(GTK_LABEL(data.label), data.text_to_render); + else + for (int i=0;i