diff --git a/source/ubl-settings-video-driver.c b/source/ubl-settings-video-driver.c index 392a93b..b6240f2 100644 --- a/source/ubl-settings-video-driver.c +++ b/source/ubl-settings-video-driver.c @@ -71,7 +71,16 @@ void on_pacman_db_unlock(void){ } void on_terminal_done(GtkWidget *, int , main_window *widgets){ - vte_terminal_feed_child(VTE_TERMINAL(widgets->InstallTerminal),"^C",2); + // GPid pid = (GPid)g_object_get_data(G_OBJECT(widgets->InstallTerminal),"pid"); + // if (!pid) return; + const char cancel_signal = 3; + char *command = yon_char_new(" "); + command[0]=cancel_signal; + char *tmp = yon_char_unite(command,"exit 0\n",NULL); + free(command); + vte_terminal_feed_child(VTE_TERMINAL(widgets->InstallTerminal),tmp,strlen(tmp)); + free(tmp); + // vte_terminal_feed(VTE_TERMINAL(widgets->InstallTerminal),"tput reset; tput cup 0 0; tput ed; exit 0",1); } void on_terminal_more(GtkWidget *, main_window *widgets){ diff --git a/source/ubl-settings-video-install.c b/source/ubl-settings-video-install.c index f090b5e..4913169 100644 --- a/source/ubl-settings-video-install.c +++ b/source/ubl-settings-video-install.c @@ -1,5 +1,14 @@ #include "ubl-settings-video.h" +char *yon_char_extend(char *target, char symbol, size_t length){ + if (!target||strlen(target)>=length) return target; + int size = sizeof(char)*length+1; + char *newstring = malloc(size); + memset(newstring,0,size); + memset(newstring,symbol,length); + memcpy(newstring,target,strlen(target)); + return newstring; +} void on_terminal_revealer_open(GtkWidget *, main_window *widgets){ int opened = gtk_widget_get_visible(widgets->TerminalPaned); @@ -19,8 +28,6 @@ void on_terminal_revealer_open(GtkWidget *, main_window *widgets){ gtk_widget_show(widgets->TerminalPaned); gtk_widget_show(widgets->TerminalMoveBox); - - } break; case 1: { //closes gtk_button_set_label(GTK_BUTTON(widgets->MoreButton),MORE_LABEL); @@ -61,8 +68,8 @@ void on_install_activate(GtkWidget *self, main_window *widgets){ if (is_installed){ data->action_text = REMOVE_CONFIRMATION_LABEL(install_target); } else { - data->action_text = self == driver->ModuleInstalledCheck?yon_char_unite(INSTALL_CONFIRMATION_LABEL(install_target),"\n",INSTALL_ATTENTION_LABEL,NULL): - INSTALL_CONFIRMATION_LABEL(install_target); + data->action_text = self == driver->ModuleInstalledCheck?INSTALL_CONFIRMATION_LABEL(install_target): + yon_char_unite(INSTALL_CONFIRMATION_LABEL(install_target),"\n",INSTALL_ATTENTION_LABEL,NULL); } char *command = NULL; if (is_installed){ @@ -81,12 +88,12 @@ void on_install_activate(GtkWidget *self, main_window *widgets){ vte_terminal_reset(VTE_TERMINAL(widgets->InstallTerminal),0,1); g_signal_connect_after(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_install_check),driver); yon_install_buttons_set_sensitive(widgets,0); - yon_terminal_integrated_start_shell(widgets->InstallTerminal,command,NULL,NULL); + yon_terminal_integrated_start_shell(widgets->InstallTerminal,yon_debug_output("%s\n",command),NULL,NULL); // g_signal_connect(G_OBJECT(widgets->InstallTerminal),"contents-changed",G_CALLBACK(on_terminal_check_progress),widgets); - if (!gtk_widget_get_visible(widgets->TerminalPaned)){ - on_terminal_revealer_open(NULL,widgets); - } - g_timeout_add(500,(GSourceFunc)on_terminal_check_progress,widgets); + if (!gtk_widget_get_visible(widgets->TerminalPaned)){ + on_terminal_revealer_open(NULL,widgets); + } + g_timeout_add(500,(GSourceFunc)on_terminal_check_progress,widgets); } void on_install_check(GtkWidget *self,gint ,driver_struct *driver){ @@ -95,4 +102,12 @@ void on_install_check(GtkWidget *self,gint ,driver_struct *driver){ yon_driver_struct_update(widgets,driver); g_signal_handlers_disconnect_by_func(G_OBJECT(self),G_CALLBACK(on_install_check),driver); +} + + +void on_driver_child_ready(VteTerminal *terminal, GPid pid, GError *, gpointer ){ + + if (!terminal) return; + if (pid == -1) printf("Error\n\n\n"); + // else g_object_set_data(G_OBJECT(terminal),"pid",(void*)pid); } \ No newline at end of file diff --git a/source/ubl-settings-video-monitor.c b/source/ubl-settings-video-monitor.c index a0f71d8..e3ef44c 100644 --- a/source/ubl-settings-video-monitor.c +++ b/source/ubl-settings-video-monitor.c @@ -260,7 +260,8 @@ void on_port_chosen_changed(GtkWidget *, monitor_edit_window *window){ int size; config_str parsed = yon_char_parse(main_config.resolutions_sorted[i],&size,";"); if (!yon_char_is_empty(parsed[0])){ - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->ResolutionCombo),parsed[0],g_hash_table_lookup(main_config.resolutions,parsed[0])); + char *cur_res = g_hash_table_lookup(main_config.resolutions,parsed[0]); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->ResolutionCombo),parsed[0],cur_res); } yon_char_parsed_free(parsed,size); } diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index 77d0a83..dcbcce1 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -111,12 +111,12 @@ void yon_interface_save(){ break; case 1:yon_config_register(INTEGRATEDVGA,INTEGRATEDVGA_command,"no"); break; - case 2:yon_config_register(INTEGRATEDVGA,INTEGRATEDVGA_command,"yes "); + case 2:yon_config_register(INTEGRATEDVGA,INTEGRATEDVGA_command,"yes"); break; } } -void yon_interface_update(){ +void yon_interface_update(){ g_hash_table_remove_all(main_config.ports_table); yon_monitor_set_resolutions(); g_hash_table_remove_all(main_config.resolutions); @@ -151,23 +151,23 @@ void yon_interface_update(){ else if (!yon_char_is_empty(autodrivers)&&!strcmp(autodrivers,"no")) gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->AutoDriverCombo),1); else - gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->AutoDriverCombo),0); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(main_config.widgets->AutoDriverCombo)," "); if (!yon_char_is_empty(freedrivers)&&!strcmp(freedrivers,"yes")) gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FreeDriverCombo),1); else if (!yon_char_is_empty(freedrivers)&&!strcmp(freedrivers,"nouveau")) gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FreeDriverCombo),2); else if (!yon_char_is_empty(freedrivers)&&!strcmp(freedrivers,"radeon")) - gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FreeDriverCombo),3); + gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FreeDriverCombo),3); else if (!yon_char_is_empty(freedrivers)&&!strcmp(freedrivers,"no")) gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FreeDriverCombo),4); else - gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FreeDriverCombo),0); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(main_config.widgets->FreeDriverCombo)," "); if (!yon_char_is_empty(dpi)&&!strcmp(dpi,"auto")) gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->DisplayScalingCombo),1); else if (yon_char_is_empty(dpi)) - gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->DisplayScalingCombo),0); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(main_config.widgets->DisplayScalingCombo)," "); else{ if (!strcmp(dpi,"2K")||!strcmp(dpi,"4K")){ gtk_combo_box_set_active_id(GTK_COMBO_BOX(main_config.widgets),dpi); @@ -181,14 +181,14 @@ void yon_interface_update(){ else if (!yon_char_is_empty(failsafenvidia)&&!strcmp(failsafenvidia,"no")) gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FailsafeNvidiaCombo),1); else - gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FailsafeNvidiaCombo),0); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(main_config.widgets->FailsafeNvidiaCombo)," "); if (!yon_char_is_empty(failsafeati)&&!strcmp(failsafeati,"fbdev")) gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FailsafeAMDCombo),2); else if (!yon_char_is_empty(failsafeati)&&!strcmp(failsafeati,"no")) gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FailsafeAMDCombo),1); else - gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FailsafeAMDCombo),0); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(main_config.widgets->FailsafeAMDCombo)," "); if (!yon_char_is_empty(optirun)){ if (strcmp(optirun,"no")){ @@ -198,9 +198,9 @@ void yon_interface_update(){ gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->OptirunCombo),1); } } else if (yon_char_is_empty(optirun)) - gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->OptirunCombo),0); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(main_config.widgets->OptirunCombo)," "); else - gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->OptirunCombo),0); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(main_config.widgets->OptirunCombo)," "); if (!yon_char_is_empty(primusrun)){ if (strcmp(primusrun,"no")){ @@ -210,23 +210,23 @@ void yon_interface_update(){ gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->PrimusrunCombo),1); } } else if (yon_char_is_empty(primusrun)) - gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->PrimusrunCombo),0); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(main_config.widgets->PrimusrunCombo)," "); else - gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->PrimusrunCombo),0); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(main_config.widgets->PrimusrunCombo)," "); if (!yon_char_is_empty(dpms)&&!strcmp(dpms,"dpms")) gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->DontSwitchDisplaysOffCombo),2); else if (!yon_char_is_empty(dpms)&&!strcmp(dpms,"nodpms")) gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->DontSwitchDisplaysOffCombo),1); else - gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->DontSwitchDisplaysOffCombo),0); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(main_config.widgets->DontSwitchDisplaysOffCombo)," "); if (!yon_char_is_empty(discrete)&&!strcmp(discrete,"yes")) gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->DisplayDiscreteOnly),2); else if (!yon_char_is_empty(discrete)&&!strcmp(discrete,"no")) gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->DisplayDiscreteOnly),1); else - gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->DisplayDiscreteOnly),0); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(main_config.widgets->DisplayDiscreteOnly)," "); yon_monitor_view_update(); } @@ -249,7 +249,14 @@ void yon_load_proceed(YON_CONFIG_TYPE type){ case YON_CONFIG_CUSTOM: char *path = NULL; path=yon_custom_config_init(GTK_FILE_CHOOSER_ACTION_OPEN); + yon_char_remove_brackets(path); if (!yon_char_is_empty(path)){ + if ((access(path,0)==F_OK&&access(path,4)!=F_OK)){ + if (yon_status_box_is_set()){ + yon_ubl_status_box_render(ACCESS_DENIED_LABEL(path),BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + } yon_config_clean(); yon_config_load_config(type,config_get_command(path),NULL); yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); @@ -393,12 +400,17 @@ void yon_proprietary_get_thread(GtkWidget *,main_window *widgets){ void yon_all_resolutions_update(){ main_config.resolutions_sorted = yon_resource_open_file(get_resolutions_supportable_command,&main_config.resolutions_size); - for (int i=1;iMoreButton),"clicked",G_CALLBACK(on_terminal_revealer_open),widgets); g_signal_connect(G_OBJECT(widgets->TerminalCancelButton),"clicked",G_CALLBACK(on_command_cancel),widgets); g_signal_connect(G_OBJECT(widgets->UnlockPacmanButton),"clicked",G_CALLBACK(on_pacman_db_unlock),NULL); + // g_signal_connect(G_OBJECT(widgets->InstallTerminal),"child-ready",G_CALLBACK(on_driver_child_ready),NULL); char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); yon_window_config_load(path); gtk_overlay_add_overlay(GTK_OVERLAY(widgets->MainOverlay),widgets->MainSpinner); @@ -875,6 +888,7 @@ template_main_window *yon_main_window_complete(main_window *widgets){ { yon_combo_box_set_default(GTK_COMBO_BOX_TEXT(widgets->PrimusrunCombo),PRIMUSRUN_command,yon_primusrun_default); } + while(gtk_events_pending()) gtk_main_iteration(); yon_adapter_window_setup(widgets); yon_save_window_set_postsave_function(on_save_done,widgets); diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index 6d9a0c2..45409f1 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -69,6 +69,8 @@ END {\n\ }\ '" +#define table_format_command(target) yon_char_unite("tail +2 <<< '",target,"' | column -t -s';'",NULL) + #define get_resolutions_command "xrandr |grep -noP \"\\d+x+\\d+\"" #define get_resolution_ports_command "xrandr |grep -nwP \"connected\" |grep -oE \"[-0-9a-zA-Z:]{1,} connected\" |grep -oE \"[-0-9a-zA-Z:]{1,} \"" @@ -76,9 +78,9 @@ END {\n\ #define get_resolutions_supportable_command "resource:///com/ublinux/csv/resolutions.csv" -#define install_proprietary_command(target) yon_char_append("echo y| pacman --quiet --needed -Sy ",target) +#define install_proprietary_command(target) yon_char_append("pacinstall --install --yolo ",target) -#define delete_proprietary_command(target) yon_char_append("pacman -R --noconfirm ",target) +#define delete_proprietary_command(target) yon_char_append("pacinstall --remove --yolo ",target) #define get_info_proprietary_command(target) yon_char_append("pamac-manager --details=",target) @@ -128,7 +130,7 @@ END {\n\ #define XORG_PARAMETER "XORG_MONITOR" -#define config_get_command(source) yon_char_unite("ubconfig --source ",source," get [video] XORG_MONITOR[*] VGADRV_AUTO VGADRV_NOFREE XORG_EXT XORG_DPI FAILSAFEATI FAILSAFENVIDIA OPTIRUN PRIMUSRUN INTEGRATEDVGA",NULL),yon_char_unite("ubconfig --source ",source," get [system] ENVIRONMENT[profile:__GL_YIELD] ENVIRONMENT[profile:KWIN_TRIPLE_BUFFER]",NULL) +#define config_get_command(source) yon_char_unite("ubconfig --source ",source," -ea get [video] XORG_MONITOR[*] VGADRV_AUTO VGADRV_NOFREE XORG_EXT XORG_DPI FAILSAFEATI FAILSAFENVIDIA OPTIRUN PRIMUSRUN INTEGRATEDVGA -- [system] ENVIRONMENT[profile:__GL_YIELD] ENVIRONMENT[profile:KWIN_TRIPLE_BUFFER]",NULL) #define config_get_default_command "" #define config_get_global_only_parameters "" @@ -472,5 +474,7 @@ char *yon_primusrun_default(char *target); void yon_all_resolutions_update(); void yon_monitor_port_manual(GtkToggleButton *self,monitor_edit_window *monitors); int yon_string_compare(char **a, char **b); +char *yon_char_extend(char *target, char symbol, size_t length); +void on_driver_child_ready(VteTerminal *terminal, GPid pid, GError *, gpointer ); #endif \ No newline at end of file