#include "ubl-settings-video.h" config main_config; void on_terminal_done(GtkWidget *terminal, int size, main_window *widgets){ gtk_widget_destroy(terminal); } void on_terminal_more(GtkWidget *self, main_window *widgets){ int active = gtk_revealer_get_child_revealed(GTK_REVEALER(widgets->TerminalMoreRevieler)); if (active ==1) active = 0; else active=1; gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalMoreRevieler),active); } void on_terminal_destroy(GtkWidget *self, main_window *widgets){ gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalRevealer),0); gtk_widget_destroy(widgets->TerminalRevealer); yon_proprietary_local_get(); yon_ubl_status_box_render(PROPRIETARY_OPETAION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer user_data) { if (!terminal) return; if (pid == -1) printf("Error\n\n\n"); else vte_terminal_feed_child(VTE_TERMINAL(terminal),(char*)user_data,strlen((char*)user_data)); } void on_terminal_check_progress(VteTerminal *terminal, main_window *widgets){ char *text = vte_terminal_get_text(terminal,NULL,NULL,NULL); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel),(double)yon_char_find_count(text,"::")/4); } void yon_terminal_start(main_window *widgets, char *usr_command){ char **command=new_arr(char*,2); gchar **envp = g_get_environ(); command[0]=(gchar *)g_strdup(g_environ_getenv(envp, "SHELL")); command[1]=NULL; char **env=new_arr(char*,2); env[0]=""; env[1]=NULL; GtkBuilder *builder=gtk_builder_new_from_resource(glade_path); widgets->TerminalBox = yon_gtk_builder_get_widget(builder, "TerminalBox"); widgets->TerminalRevealer = yon_gtk_builder_get_widget(builder, "TerminalRevealer"); widgets->TerminalMoreRevieler = yon_gtk_builder_get_widget(builder, "TerminalMoreRevieler"); widgets->TerminalMoreButton = yon_gtk_builder_get_widget(builder, "TerminalMoreButton"); widgets->TerminalScroll = yon_gtk_builder_get_widget(builder, "TerminalScroll"); widgets->TerminalInfoLabel = yon_gtk_builder_get_widget(builder, "TerminalInfoLabel"); GtkWidget *terminal = yon_gtk_builder_get_widget(builder, "TerminalTerminal"); gtk_button_set_label(GTK_BUTTON(widgets->TerminalMoreButton),MORE_LABEL); vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); gtk_widget_set_app_paintable(terminal,1); gtk_style_context_add_class(gtk_widget_get_style_context(terminal),"opacited"); gtk_style_context_add_class(gtk_widget_get_style_context(terminal),"workingbg"); gtk_overlay_add_overlay(GTK_OVERLAY(widgets->TerminalOverlay),widgets->TerminalRevealer); g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(on_terminal_done), widgets); g_signal_connect(G_OBJECT(terminal), "contents-changed", G_CALLBACK(on_terminal_check_progress), widgets); g_signal_connect(G_OBJECT(widgets->TerminalMoreButton), "clicked", G_CALLBACK(on_terminal_more), widgets); g_signal_connect(G_OBJECT(terminal), "destroy", G_CALLBACK(on_terminal_destroy), widgets); gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalRevealer),1); VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL); vte_terminal_set_pty(VTE_TERMINAL(terminal),pty); char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",usr_command," ; sleep 5;exit 0","\n",NULL); vte_terminal_spawn_async(VTE_TERMINAL(terminal), VTE_PTY_DEFAULT, NULL, command, NULL, 0, NULL, NULL, NULL, -1, NULL, child_ready, install_command); vte_pty_spawn_async(pty, NULL, command, NULL, 0, NULL, NULL, NULL, -1, NULL, NULL, NULL); vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), 100); vte_terminal_set_scroll_on_output(VTE_TERMINAL(terminal), TRUE); vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE); gtk_widget_show_all(widgets->TerminalRevealer); } void on_driver_pack_install(GtkWidget *self,main_window *widgets){ GtkTreeIter iter; char *name; GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->proprietaryTreeView)); 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)); } else { yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } } void on_driver_install(GtkWidget *self,main_window *widgets){ GtkTreeIter iter; char *name; GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->driversTreeView)); if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){ gtk_tree_model_get(list_s,&iter,2,&name,-1); yon_terminal_start(widgets,yon_char_append(install_proprietary_command,name)); gtk_list_store_set(main_config.list,&iter,0,1,-1); } else { yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } } void on_driver_pack_delete(GtkWidget *self,main_window *widgets){ GtkTreeIter iter; char *name; GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->proprietaryTreeView)); 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)); } else { yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } } void on_driver_pack_selection_change(GtkWidget *self, main_window *widgets){ GtkTreeIter iter; char *name; GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->proprietaryTreeView)); if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){ int installed=0; gtk_tree_model_get(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->proprietaryTreeView)),&iter,0,&installed,-1); if (installed==1){ gtk_widget_set_sensitive(widgets->proprietaryInstallButton,0); gtk_widget_set_sensitive(widgets->proprietaryDeleteButton,1); } else { gtk_widget_set_sensitive(widgets->proprietaryInstallButton,1); gtk_widget_set_sensitive(widgets->proprietaryDeleteButton,0); } } } void on_driver_selection_change(GtkWidget *self, main_window *widgets){ GtkTreeIter iter; char *name; GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->driversTreeView)); if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){ int installed=0; char *module, *package; gtk_tree_model_get(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->driversTreeView)),&iter,0,&installed,1,&module,2,&package,-1); char *target; if (strcmp(module,"")) target = module; else target = package; if (yon_char_parsed_check_exist(drivers_always_active,drivers_always_active_size,target)>-1){ gtk_widget_set_sensitive(widgets->driversInstallButton,0); gtk_widget_set_sensitive(widgets->driversDeleteButton,0); } else if (installed==1){ gtk_widget_set_sensitive(widgets->driversInstallButton,0); gtk_widget_set_sensitive(widgets->driversDeleteButton,1); } else { gtk_widget_set_sensitive(widgets->driversInstallButton,1); gtk_widget_set_sensitive(widgets->driversDeleteButton,0); } } } void on_driver_delete(GtkWidget *self,main_window *widgets){ GtkTreeIter iter; char *name; GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->driversTreeView)); if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){ gtk_tree_model_get(list_s,&iter,2,&name,-1); yon_terminal_start(widgets,yon_char_append(delete_proprietary_command,name)); gtk_list_store_set(main_config.list,&iter,0,0,-1); } else { yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } } void on_driver_pack_info(GtkWidget *self, main_window *widgets){ pthread_attr_t attr; pthread_t tid; pthread_attr_init(&attr); GtkTreeIter iter; char *name; GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->proprietaryTreeView)); 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)); 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_driver_info(GtkWidget *self,main_window *widgets){ pthread_attr_t attr; pthread_t tid; pthread_attr_init(&attr); GtkTreeIter iter; char *name; GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->driversTreeView)); if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){ gtk_tree_model_get(list_s,&iter,2,&name,-1); pthread_create(&tid,&attr,(void*)yon_launch,yon_char_append(get_info_proprietary_command,name)); 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_port_chosen_changed(GtkWidget *self, monitor_edit_window *window){ dictionary *dict=NULL; for (int i=0;iresolutionssize;i++){ free(window->resolutions); } window->resolutions=NULL; window->resolutionssize=0; int portid=gtk_combo_box_get_active(GTK_COMBO_BOX(window->PortCombo)); if (portid){ gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->ResolutionCombo)); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->ResolutionCombo),PARAMETER_DEFAULT_LABEL); gtk_combo_box_set_active(GTK_COMBO_BOX(window->ResolutionCombo),0); gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->PositionPortCombo)); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->PositionPortCombo),PARAMETER_DEFAULT_LABEL); gtk_combo_box_set_active(GTK_COMBO_BOX(window->PositionPortCombo),0); char *port_name = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->PortCombo)); gtk_window_set_title(GTK_WINDOW(window->MainWindow),PORT_EDIT_LABEL(port_name)); dict=yon_dictionary_get(&main_config.supported_resolutions,port_name); if (dict){ int size; config_str resolutions = yon_file_open(get_resolutions_supportable_command,&size); resolutions = yon_char_parsed_rip(resolutions,&size,0); for (int i=0;isize;i++){ char *check_line; for (int j=1;jline[i])){ found = j; break; } } if (found>-1){ char *current = yon_char_new(resolutions[found]); int parsed_size; config_str parsed = yon_char_parse(current,&parsed_size,";"); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->ResolutionCombo),yon_char_parsed_to_string(parsed,parsed_size," ")); yon_char_parsed_free(parsed,parsed_size); } else gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->ResolutionCombo),res->line[i]); } } for (int i=0;iPositionPortCombo),main_config.ports[i]); } } } } void on_sensitive_change(GtkWidget *self, GtkWidget *toggle) { int state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); gtk_widget_set_sensitive(toggle, state); } void on_sensitive_change_reversed(GtkWidget *self, GtkWidget *toggle) { int state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); gtk_widget_set_sensitive(toggle, !state); } void on_auto_choose_drivers(GtkWidget *self, main_window *widgets) { int state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); main_config.autoChooseDrivers=state; // gtk_widget_set_sensitive(widgets->mainDriverFailsafeNvidiaLabel, !state); // gtk_widget_set_sensitive(widgets->mainDriverFailsafeAMDCombo, !state); // gtk_widget_set_sensitive(widgets->mainDriverFailsafeAMDLabel, !state); // gtk_widget_set_sensitive(widgets->mainDriverFailsafeNvidiaCombo, !state); } void on_resolutions_unsupported_show(GtkToggleButton *self, monitor_edit_window *window){ gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->ResolutionCombo)); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->ResolutionCombo),PARAMETER_DEFAULT_LABEL); gtk_combo_box_set_active(GTK_COMBO_BOX(window->ResolutionCombo),0); if (gtk_toggle_button_get_active(self)){ int size; config_str resolutions = yon_file_open(get_resolutions_supportable_command,&size); // yon_gtk_combo_box_text_fill(window->ResolutionCombo,main_config.resolutions,main_config.resolutionssize); for (int i=1;iResolutionCombo),yon_char_parsed_to_string(parsed,parsed_size," ")); yon_char_parsed_free(parsed,parsed_size); } yon_char_parsed_free(resolutions,size); } else { on_port_chosen_changed(window->PortCombo,window); // yon_gtk_combo_box_text_fill(window->ResolutionCombo,((monitorconfig*)window->config->data)->resolutionCapabilities,((monitorconfig*)window->config->data)->resolution_size); } } void on_save_done(main_window *widgets, config_str output, int size){ if (widgets) {}; char *final_output = yon_char_parsed_to_string(output,size,""); printf("%s\n",final_output); free(final_output); yon_char_parsed_free(output,size); textdomain(template_ui_LocaleName); switch (main_config.save_config){ case 0: yon_ubl_status_box_render(GLOBAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); break; case 1: yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); break; case 2: yon_ubl_status_box_render(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); break; } textdomain(LocaleName); } void yon_interface_save(){ char *autodrivers = NULL; char *freedrivers = NULL; char *dpms= NULL; char *dpi = NULL; char *failsafenvidia = NULL; char *failsafeati = NULL; char *optirun = NULL; char *primusrun = NULL; switch (gtk_combo_box_get_active(GTK_COMBO_BOX(main_config.widgets->AutoDriverCombo))){ case 0: yon_config_remove_by_key(VGADRV_AUTO); break; case 1: yon_config_register(VGADRV_AUTO,VGADRV_AUTO_command,"no"); break; case 2: yon_config_register(VGADRV_AUTO,VGADRV_AUTO_command,"yes"); break; } switch (gtk_combo_box_get_active(GTK_COMBO_BOX(main_config.widgets->FreeDriverCombo))){ case 0: yon_config_remove_by_key(VGADRV_NOFREE); break; case 1: yon_config_register(VGADRV_NOFREE,VGADRV_NOFREE_command,"yes"); break; case 2: yon_config_register(VGADRV_NOFREE,VGADRV_NOFREE_command,"nouveau"); break; case 3: yon_config_register(VGADRV_NOFREE,VGADRV_NOFREE_command,"radeon"); break; case 4: yon_config_register(VGADRV_NOFREE,VGADRV_NOFREE_command,"no"); break; } switch (gtk_combo_box_get_active(GTK_COMBO_BOX(main_config.widgets->FailsafeAMDCombo))){ case 0: yon_config_remove_by_key(FAILSAFEATI); break; case 1: yon_config_register(FAILSAFEATI,FAILSAFEATI_command,"no"); break; case 2: yon_config_register(FAILSAFEATI,FAILSAFEATI_command,"fbdev"); break; } switch (gtk_combo_box_get_active(GTK_COMBO_BOX(main_config.widgets->FailsafeNvidiaCombo))){ case 0: yon_config_remove_by_key(FAILSAFENVIDIA); break; case 1: yon_config_register(FAILSAFENVIDIA,FAILSAFENVIDIA_command,"no"); break; case 2: yon_config_register(FAILSAFENVIDIA,FAILSAFENVIDIA_command,"fbdev"); break; } switch (gtk_combo_box_get_active(GTK_COMBO_BOX(main_config.widgets->DontSwitchDisplaysOffCombo))){ case 0: yon_config_remove_by_key(XORG_EXT); break; case 1: yon_config_register(XORG_EXT,XORG_EXT_command,"nodpms"); break; case 2: yon_config_register(XORG_EXT,XORG_EXT_command,"dpms"); break; } switch (gtk_combo_box_get_active(GTK_COMBO_BOX(main_config.widgets->DisplayScalingCombo))){ case 0: yon_config_remove_by_key(XORG_DPI); break; case 1: yon_config_register(XORG_DPI,XORG_DPI_command,"auto"); break; default: dpi = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(main_config.widgets->DisplayScalingCombo)); yon_char_divide_search_self(dpi," ",-1); yon_config_register(XORG_DPI,XORG_DPI_command,dpi); break; } switch (gtk_combo_box_get_active(GTK_COMBO_BOX(main_config.widgets->OptirunCombo))){ case 0: yon_config_remove_by_key(OPTIRUN); break; case 1: yon_config_register(OPTIRUN,OPTIRUN_command,"no"); break; case 2: if (!yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(main_config.widgets->OptirunEntry)))) yon_config_register(OPTIRUN,OPTIRUN_command,(char*)gtk_entry_get_text(GTK_ENTRY(main_config.widgets->OptirunEntry))); break; } switch (gtk_combo_box_get_active(GTK_COMBO_BOX(main_config.widgets->PrimusrunCombo))){ case 0: yon_config_remove_by_key(PRIMUSRUN); break; case 1: yon_config_register(PRIMUSRUN,PRIMUSRUN_command,"no"); break; case 2: if (!yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(main_config.widgets->PrimusrunEntry)))) yon_config_register(PRIMUSRUN,PRIMUSRUN_command,(char*)gtk_entry_get_text(GTK_ENTRY(main_config.widgets->PrimusrunEntry))); break; } switch (gtk_combo_box_get_active(GTK_COMBO_BOX(main_config.widgets->FrameGapCombo))){ case 0: yon_config_remove_by_key(GL_YIELD); yon_config_remove_by_key(KWIN_TRIPLE_BUFFER); break; case 2: yon_config_register(GL_YIELD,GL_YIELD_command,"USLEEP"); yon_config_remove_by_key(KWIN_TRIPLE_BUFFER); break; case 3: yon_config_register(KWIN_TRIPLE_BUFFER,KWIN_TRIPLE_BUFFER_command,"1"); yon_config_remove_by_key(GL_YIELD); break; } switch (gtk_combo_box_get_active(GTK_COMBO_BOX(main_config.widgets->DisplayDiscreteOnly))){ case 0: yon_config_remove_by_key(INTEGRATEDVGA); break; case 1:yon_config_register(INTEGRATEDVGA,INTEGRATEDVGA_command,"no"); break; case 2:yon_config_register(INTEGRATEDVGA,INTEGRATEDVGA_command,"yes "); break; } } void yon_interface_update(){ if (main_config.ports&&main_config.portssize>0){ yon_char_parsed_free(main_config.ports,main_config.portssize); } main_config.ports=yon_config_load(get_ports_command,&main_config.portssize); for (int i=0;iAutoDriverCombo),2); 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); 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); 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); 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); else{ if (!strcmp(dpi,"2K")||!strcmp(dpi,"4K")){ gtk_combo_box_set_active_id(GTK_COMBO_BOX(main_config.widgets),dpi); } else { yon_gtk_combo_box_text_find(main_config.widgets->DisplayScalingCombo,dpi); } } if (!yon_char_is_empty(failsafenvidia)&&!strcmp(failsafenvidia,"fbdev")) gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FailsafeNvidiaCombo),2); 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); 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); if (!yon_char_is_empty(optirun)){ if (strcmp(optirun,"no")){ gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->OptirunCombo),2); gtk_entry_set_text(GTK_ENTRY(main_config.widgets->OptirunEntry),optirun); } else { 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); else gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->OptirunCombo),0); if (!yon_char_is_empty(primusrun)){ if (strcmp(primusrun,"no")){ gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->PrimusrunCombo),2); gtk_entry_set_text(GTK_ENTRY(main_config.widgets->PrimusrunEntry),primusrun); } else { 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); else gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->PrimusrunCombo),0); 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); 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); // if (!yon_char_is_empty(gapfix1)) // gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FailsafeNvidiaCombo),2); // else if (!yon_char_is_empty(gapfix2)) // gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FailsafeNvidiaCombo),3); // else // gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FailsafeNvidiaCombo),1); yon_monitor_view_update(); } void yon_load_proceed(YON_CONFIG_TYPE type){ yon_config_clean(); if (!yon_char_is_empty(config_get_default_command)) yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); if (type==YON_CONFIG_GLOBAL){ yon_config_load_config(type,config_get_global_command,NULL); } else if (type==YON_CONFIG_LOCAL){ yon_config_load_config(type,config_get_local_command,NULL); } else if (type==YON_CONFIG_CUSTOM){ char *path=""; textdomain(template_ui_LocaleName); GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); yon_gtk_window_setup(GTK_WINDOW(dialog),NULL,TITLE_LABEL,icon_name,"FileChooserWindow"); textdomain(LocaleName); gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-video"); gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL); GtkFileFilter *filter = gtk_file_filter_new(); gtk_file_filter_add_pattern(filter,"*.ini"); gtk_file_filter_set_name(filter, "*.ini"); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); gtk_widget_show(dialog); int response = gtk_dialog_run(GTK_DIALOG(dialog)); if (response == GTK_RESPONSE_ACCEPT){ char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); if (!yon_char_is_empty(file)){ path=yon_char_unite("'",file,"'",NULL); free(file); } gtk_widget_destroy(dialog); } else { gtk_widget_destroy(dialog); } yon_config_load_config(type,yon_config_get_custom_command(path),NULL); } } void on_config_local_load(GtkWidget *self,main_window *widgets){ if (self){} yon_load_proceed(YON_CONFIG_LOCAL); main_config.load_mode=1; yon_interface_update(); } void on_config_global_load(GtkWidget *self,main_window *widgets){ if (self){} yon_load_proceed(YON_CONFIG_GLOBAL); main_config.load_mode=0; yon_interface_update(); } void on_config_custom_load(GtkWidget *self,main_window *widgets){ if (self){} yon_load_proceed(YON_CONFIG_CUSTOM); main_config.load_mode=3; yon_interface_update(); } void on_config_global_local_save(){ main_config.save_config=3; yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL); } void on_config_local_save(){ yon_interface_save(); main_config.save_config=1; yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_local_command,NULL); } void on_config_global_save(){ yon_interface_save(); main_config.save_config=0; yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL); } void on_config_custom_save(GtkWidget *self, main_window *widgets){ yon_interface_save(); if (self&&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){}; } // functions /**void on_monitor_delete(GtkWidget *self,monitor_data windowd) * [EN] */ void on_monitor_delete(GtkWidget *self,monitor_data *window){ if(window){ GtkWidget *target = gtk_widget_get_parent(window->ScreenOverlay); GtkWidget *flow_box = gtk_widget_get_parent(target); gtk_container_remove(GTK_CONTAINER(flow_box),target); const char *target_monitor = gtk_label_get_text(GTK_LABEL(window->NameLabel)); if (!yon_char_is_empty(target_monitor)){ yon_config_remove_by_key(XORG_MONITOR((char*)target_monitor)); } free(window); } } /**void on_monitor_switch(GtkWidget *self,monitor_data *window) * [EN] */ void on_monitor_switch(GtkWidget *self,monitor_data *window){ if(window){ int enable = 0; gtk_widget_set_sensitive(window->MonitorImage,!enable); } } /**void on_monitor_add(GtkWidget *self,monitor_data *window) * [EN] */ void on_monitor_add(GtkWidget *self,main_window *widgets){ if(widgets){ yon_monitor_new(widgets,0); } } void on_monitor_config_save(GtkWidget *self, monitor_edit_window *window){ int enabled=0; char *target=NULL; int main_display=0; char *resolution = NULL; char *rotate = NULL; char *position = NULL; int switch_off=0; int modeline_cvt = 0; int cvt_reduced = 0; int modeline_gtf = 0; int do_not_switch_off = 0; enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->EnableCheck)); if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->PortCombo))){ target = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->PortCombo)); main_display = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->MainCheck)); if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ResolutionCombo))) resolution = yon_char_divide_search(yon_char_new(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->ResolutionCombo)))," ",-1); int rot = gtk_combo_box_get_active(GTK_COMBO_BOX(window->RotationCombo)); rotate = yon_char_append("rotation:",rot == 0?"normal":rot==1?"left":rot==2?"right":"invert"); int pos = gtk_combo_box_get_active(GTK_COMBO_BOX(window->PositionPosCombo)); if (pos&>k_combo_box_get_active(GTK_COMBO_BOX(window->PositionPortCombo))){ position = yon_char_append(pos==1?"lo:":pos==2?"ro:":pos==3?"ab:":"be",gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->PositionPortCombo))); } switch_off = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DoNotSwitchOffCheck)); modeline_cvt = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->ModelineCVTCheck)); cvt_reduced = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UseCVTReducedCheck)); modeline_gtf = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->ModelineGTFCheck)); do_not_switch_off = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DoNotSwitchOffCheck)); int final_size; config_str final_parsed=NULL; if (resolution) yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,resolution); if (modeline_cvt) yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"cvt"); if (modeline_gtf) yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"gtf"); if (cvt_reduced) yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"reduced"); if (enabled) yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"enable"); if (!enabled) yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"disable"); if (main_display) yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"primary"); if (do_not_switch_off){ yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"dpms"); }else{ yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"nodpms"); } if (position) yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,position); if (rotate) yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,rotate); char *final_string = yon_char_parsed_to_string(final_parsed,final_size,","); yon_config_register(XORG_MONITOR(target),XORG_MONITOR_get_command,final_string); on_subwindow_close(window->MainWindow); } else { yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),MISSING_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_highlight_incorrect(window->PortCombo); } yon_monitor_view_update(); } void yon_monitor_parse(monitor_edit_window *window, char *string){ int parsed_size; config_str parsed = yon_char_parse(string,&parsed_size,","); if (parsed_size>0){ int resolution = yon_gtk_combo_box_text_find(window->ResolutionCombo,parsed[0]); gtk_combo_box_set_active(GTK_COMBO_BOX(window->ResolutionCombo),resolution); for (int i=1; iModelineCVTCheck),1); } else if (!strcmp(parsed[i],"gtf")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->ModelineGTFCheck),1); } else if (!strcmp(parsed[i],"reduced")||!strcmp(parsed[i],"r")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UseCVTReducedCheck),1); } else if (!strcmp(parsed[i],"dpms")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DoNotSwitchOffCheck),1); } else if (!strcmp(parsed[i],"nodpms")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DoNotSwitchOffCheck),0); } else if (!strcmp(parsed[i],"enable")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->EnableCheck),1); } else if (!strcmp(parsed[i],"disable")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->EnableCheck),0); } else if (!strcmp(parsed[i],"ignore")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->ModelineCVTCheck),1); } else if (!strcmp(parsed[i],"primary")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->MainCheck),1); } else if (strstr(parsed[i],"lo:")||strstr(parsed[i],"LeftOf:")){ char *location = yon_char_divide_search(parsed[i],":",-1); int target = yon_gtk_combo_box_text_find(window->PositionPortCombo,parsed[i]); gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),target); gtk_combo_box_set_active(GTK_COMBO_BOX(window->PositionPosCombo),1); } else if (strstr(parsed[i],"ro:")||strstr(parsed[i],"RightOf:")){ char *location = yon_char_divide_search(parsed[i],":",-1); yon_gtk_combo_box_text_find(window->PositionPortCombo,parsed[i]); gtk_combo_box_set_active(GTK_COMBO_BOX(window->PositionPosCombo),2); } else if (strstr(parsed[i],"ab:")||strstr(parsed[i],"Above:")){ char *location = yon_char_divide_search(parsed[i],":",-1); yon_gtk_combo_box_text_find(window->PositionPortCombo,parsed[i]); gtk_combo_box_set_active(GTK_COMBO_BOX(window->PositionPosCombo),3); } else if (strstr(parsed[i],"bee:")||strstr(parsed[i],"Below:")){ char *location = yon_char_divide_search(parsed[i],":",-1); yon_gtk_combo_box_text_find(window->PositionPortCombo,parsed[i]); gtk_combo_box_set_active(GTK_COMBO_BOX(window->PositionPosCombo),4); } else if (strstr(parsed[i],"rotate:")){ char *location = yon_char_divide_search(parsed[i],":",-1); if (strcmp(parsed[i],"normal")){ gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),0); } else if (strcmp(parsed[i],"left")){ gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),1); } else if (strcmp(parsed[i],"right")){ gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),2); } else if (strcmp(parsed[i],"invert")){ gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),3); } } } } } void on_monitor_configure(GtkWidget *self,monitor_data *window){ if(window){ monitor_edit_window *monitors = new(monitor_edit_window); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_configuration); monitors->MainWindow = GTK_WIDGET(gtk_builder_get_object(builder, "MainWindow")); monitors->StatusBox = GTK_WIDGET(gtk_builder_get_object(builder, "StatusBox")); monitors->HeadLabel = GTK_WIDGET(gtk_builder_get_object(builder, "HeadLabel")); monitors->EnableConfigurationBox = GTK_WIDGET(gtk_builder_get_object(builder, "EnableConfigurationBox")); monitors->InterfaceConfigurationBox = GTK_WIDGET(gtk_builder_get_object(builder, "InterfaceConfigurationBox")); monitors->EnableCheck = GTK_WIDGET(gtk_builder_get_object(builder, "EnableCheck")); monitors->PortCombo = GTK_WIDGET(gtk_builder_get_object(builder, "PortCombo")); monitors->MainCheck = GTK_WIDGET(gtk_builder_get_object(builder, "MainCheck")); monitors->ResolutionCombo = GTK_WIDGET(gtk_builder_get_object(builder, "ResolutionCombo")); monitors->UnsupportedCheck = GTK_WIDGET(gtk_builder_get_object(builder, "UnsupportedCheck")); monitors->FrequencyCombo = GTK_WIDGET(gtk_builder_get_object(builder, "FrequencyCombo")); monitors->RotationCombo = GTK_WIDGET(gtk_builder_get_object(builder, "RotationCombo")); monitors->PositionPosCombo = GTK_WIDGET(gtk_builder_get_object(builder, "PositionPosCombo")); monitors->PositionPortCombo = GTK_WIDGET(gtk_builder_get_object(builder, "PositionPortCombo")); monitors->DoNotSwitchOffCheck = GTK_WIDGET(gtk_builder_get_object(builder, "DoNotSwitchOffCheck")); monitors->ModelineCVTCheck = GTK_WIDGET(gtk_builder_get_object(builder, "ModelineCVTCheck")); monitors->UseCVTReducedCheck = GTK_WIDGET(gtk_builder_get_object(builder, "UseCVTReducedCheck")); monitors->ModelineGTFCheck = GTK_WIDGET(gtk_builder_get_object(builder, "ModelineGTFCheck")); monitors->ParameterLineCheck = GTK_WIDGET(gtk_builder_get_object(builder, "ParameterLineCheck")); monitors->ParameterLineEntry = GTK_WIDGET(gtk_builder_get_object(builder, "ParameterLineEntry")); monitors->CancelButton = GTK_WIDGET(gtk_builder_get_object(builder, "CancelButton")); monitors->SaveButton = GTK_WIDGET(gtk_builder_get_object(builder, "SaveButton")); g_signal_connect(G_OBJECT(monitors->CancelButton), "clicked", G_CALLBACK(on_subwindow_close), NULL); g_signal_connect(G_OBJECT(monitors->SaveButton), "clicked", G_CALLBACK(on_monitor_config_save), monitors); g_signal_connect(G_OBJECT(monitors->ParameterLineCheck), "toggled", G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed), monitors->InterfaceConfigurationBox); g_signal_connect(G_OBJECT(monitors->ParameterLineCheck), "toggled", G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button), monitors->ParameterLineEntry); g_signal_connect(G_OBJECT(monitors->UnsupportedCheck), "toggled", G_CALLBACK(on_resolutions_unsupported_show),monitors); g_signal_connect(G_OBJECT(monitors->PortCombo), "changed", G_CALLBACK(on_port_chosen_changed),monitors); yon_gtk_window_setup(GTK_WINDOW(monitors->MainWindow),GTK_WINDOW(main_config.widgets->Window),TITLE_LABEL,"com.ublinux.ubl-settings-video","VieoConfigWindow"); char *target = (char*)gtk_label_get_text(GTK_LABEL(window->NameLabel)); monitors->curport=NULL; dictionary *dict=NULL; int config_size; config_str config_ports = yon_config_get_all_by_key(XORG_PARAMETER,&config_size); for (int i=0;i-1){ monitor_data *window = yon_monitor_new(main_config.widgets,0); free(yon_char_divide(current,strlen(XORG_PARAMETER))); current[strlen(current)-1]='\0'; gtk_label_set_text(GTK_LABEL(window->NameLabel),current); int parsed_size; config_str parsed = yon_char_parse(parameters[i],&parsed_size,","); if (parsed_size>0){ if (strstr(parsed[0],"x")){ gtk_label_set_text(GTK_LABEL(window->ResoulutionLabel),parsed[0]); } } if (yon_char_parsed_check_exist(parsed,parsed_size,"enable")>-1){ gtk_widget_set_sensitive(window->MonitorImage,1); } yon_char_parsed_free(parsed,parsed_size); } } } void yon_proprietary_local_get(){ gtk_list_store_clear(main_config.list); gtk_list_store_clear(main_config.list2); int drivers_size=0; int size; config_str rtn=NULL; rtn = yon_file_open(get_proprietary_drivers_info_path,&size); config_str drivers=yon_config_load(get_proprietary_installed_command,&drivers_size); for (int i=0;i-1; gtk_list_store_append(main_config.list,&iter); gtk_list_store_set(main_config.list,&iter,0,status,1,current[1],2,current[2],3,current[3],4,_(current[4]),5,_(current[5]),-1); } else if (strcmp(current[2],"")){ int status= yon_char_parsed_check_exist(drivers,drivers_size,current[2])>-1; gtk_list_store_append(main_config.list2,&iter); gtk_list_store_set(main_config.list2,&iter,0,status,1,current[2],2,current[2],3,current[3],4,_(current[4]),5,_(current[5]),-1); } } } void yon_monitor_view_dictionary_destroy(void *window){ monitor_data *monitor=(monitor_data*)window; gtk_widget_destroy(monitor->ScreenOverlay); } monitor_data *yon_monitor_new(main_window *widgets,int dull){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_monitor); monitor_data *window = new(monitor_data); window->ScreenOverlay=yon_gtk_builder_get_widget(builder,"ScreenOverlay"); window->MonitorImage=yon_gtk_builder_get_widget(builder,"MonitorImage"); window->MonitorInfoBox=yon_gtk_builder_get_widget(builder,"MonitorInfoBox"); window->NameLabel=yon_gtk_builder_get_widget(builder,"NameLabel"); window->ResoulutionLabel=yon_gtk_builder_get_widget(builder,"ResoulutionLabel"); window->DeleteButton=yon_gtk_builder_get_widget(builder,"DeleteButton"); window->SwitchButton=yon_gtk_builder_get_widget(builder,"SwitchButton"); window->ConfigureButton=yon_gtk_builder_get_widget(builder,"ConfigureButton"); window->AddButton=yon_gtk_builder_get_widget(builder,"AddButton"); gtk_overlay_add_overlay(GTK_OVERLAY(window->ScreenOverlay),window->MonitorInfoBox); if (!dull){ gtk_widget_hide(window->AddButton); g_signal_connect(G_OBJECT(window->ConfigureButton), "clicked", G_CALLBACK(on_monitor_configure), window); g_signal_connect(G_OBJECT(window->DeleteButton), "clicked", G_CALLBACK(on_monitor_delete), window); g_signal_connect(G_OBJECT(window->SwitchButton), "clicked", G_CALLBACK(on_monitor_switch), window); } else { gtk_widget_show(window->AddButton); gtk_widget_hide(window->DeleteButton); gtk_widget_hide(window->SwitchButton); gtk_widget_hide(window->ConfigureButton); g_signal_connect(G_OBJECT(window->AddButton), "clicked", G_CALLBACK(on_monitor_add), widgets); } GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->MonitorsBox)); gtk_flow_box_insert(GTK_FLOW_BOX(widgets->MonitorsBox),window->ScreenOverlay,g_list_length(list)-1); g_list_free(list); return window; } void yon_monitor_set_resolutions(){ dictionary *dact=NULL; int size_connected=0; config_str connected_ports = yon_config_load(get_resolution_ports_command,&size_connected); int resolutions_size=0; config_str resolutions = yon_config_load(get_resolutions_command,&resolutions_size); for (int i=0;iline=resol; supported->size=0; yon_dictionary_add_or_create_if_exists_with_data(main_config.supported_resolutions,connected_ports[i],supported); } config_str final=NULL; for(int i=0;idata)){ equals=1; port_for_res=NULL; } if (cur_pos>*((int*)dct->data)&&equals==0) port_for_res=yon_char_new(dct->key); } if(port_for_res){ dct=yon_dictionary_get(&main_config.supported_resolutions,port_for_res); resolution_supported *sup=yon_dictionary_get_data(dct,resolution_supported*); sup->size++; sup->line=realloc(sup->line,sizeof(char*)*sup->size); sup->line[sup->size-1]=yon_char_new(yon_char_divide_search(resolutions[i],"\n",-1)); } } } void yon_adapter_window_setup(main_window *widgets){ int size=0; gtk_overlay_add_overlay(GTK_OVERLAY(widgets->InformationOverlay),widgets->InformationCompanyLogoImage); config_str rtn = yon_config_load(get_adapter_info_json,&size); struct json_object *jsobject = json_tokener_parse(yon_char_parsed_to_string(rtn,size,""));{ struct json_object *item_obj = json_object_array_get_idx(jsobject, 0); struct json_object *unit_obj; const char *desc=""; if (json_object_object_get_ex(item_obj, "description", &unit_obj)) { desc = json_object_get_string(unit_obj); } const char *product =""; if (json_object_object_get_ex(item_obj, "product", &unit_obj)) { product = json_object_get_string(unit_obj); } const char *vendor=""; if (json_object_object_get_ex(item_obj, "vendor", &unit_obj)) { vendor = json_object_get_string(unit_obj); } const char *driver_use=""; if (json_object_object_get_ex(item_obj, "configuration", &unit_obj)) { if (json_object_object_get_ex(unit_obj, "driver", &unit_obj)) driver_use = json_object_get_string(unit_obj); } const char *driver_all=""; int loaded_size; config_str loaded = yon_config_load(get_drivers_for_card_command,&loaded_size); for (int i=0;i",DESCRIPTION_LABEL,": ",_(desc), "\n",VENDOR_LABEL,": ",vendor, "\n",MODEL_LABEL,": ",product, "\n",USED_KERNEL_DRIVER_LABEL,": ",driver_use, "\n",AVALIABLE_KERNEL_DRIVERS_LABEL,": ",driver_all,"",NULL); gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel),final_text); if (strstr(vendor,"Intel")){ GtkIconTheme *icthm=gtk_icon_theme_get_default(); gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.intel-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); } else if (strstr(vendor,"NVIDIA")){ GtkIconTheme *icthm=gtk_icon_theme_get_default(); gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.nvidia-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); } else if (strstr(vendor,"AMD")||strstr(vendor,"Advanced Micro Devices")){ GtkIconTheme *icthm=gtk_icon_theme_get_default(); gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.amd-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); } else if (strstr(vendor,"VMware")){ GtkIconTheme *icthm=gtk_icon_theme_get_default(); gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.vmware-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); } else { gtk_widget_destroy(widgets->InformationCompanyLogoImage); } } gtk_overlay_add_overlay(GTK_OVERLAY(widgets->InformationOverlay2),widgets->InformationCompanyLogoImage2); struct json_object *item_obj = json_object_array_get_idx(jsobject, 1); if (item_obj){ struct json_object *unit_obj; const char *desc=""; if (json_object_object_get_ex(item_obj, "description", &unit_obj)) { desc = json_object_get_string(unit_obj); } const char *product =""; if (json_object_object_get_ex(item_obj, "product", &unit_obj)) { product = json_object_get_string(unit_obj); } const char *vendor=""; if (json_object_object_get_ex(item_obj, "vendor", &unit_obj)) { vendor = json_object_get_string(unit_obj); } const char *driver_use=""; if (json_object_object_get_ex(item_obj, "configuration", &unit_obj)) { if (json_object_object_get_ex(unit_obj, "driver", &unit_obj)) driver_use = json_object_get_string(unit_obj); } const char *driver_all=""; int loaded_size; config_str loaded = yon_config_load(get_drivers_for_card_command,&loaded_size); for (int i=0;i",DESCRIPTION_LABEL,": ",_(desc), "\n",VENDOR_LABEL,": ",vendor, "\n",MODEL_LABEL,": ",product, "\n",USED_KERNEL_DRIVER_LABEL,": ",driver_use, "\n",AVALIABLE_KERNEL_DRIVERS_LABEL,": ",driver_all,"",NULL); gtk_label_set_markup(GTK_LABEL(widgets->InformationLabel2),final_text); if (strstr(vendor,"Intel")){ GtkIconTheme *icthm=gtk_icon_theme_get_default(); gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage2),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.intel-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); } else if (strstr(vendor,"NVIDIA")){ GtkIconTheme *icthm=gtk_icon_theme_get_default(); gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage2),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.nvidia-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); } else if (strstr(vendor,"AMD"),strstr(vendor,"Advanced Micro Devices")){ GtkIconTheme *icthm=gtk_icon_theme_get_default(); gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage2),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.amd-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); } else if (strstr(vendor,"VMware")){ GtkIconTheme *icthm=gtk_icon_theme_get_default(); gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage2),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.vmware-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); } else { gtk_widget_destroy(widgets->InformationCompanyLogoImage2); } } else { gtk_widget_hide(widgets->InformationOverlay2); // gtk_widget_hide(GTK_WIDGET(gtk_builder_get_object(widgets->builder,"InformationLabel2"))); } } void yon_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target){ int active = gtk_combo_box_get_active(toggle); gtk_widget_set_sensitive(target,active>1 ? 1 : 0); } /** void yon_setup_widgets(main_window *widgets) * [EN] * Sets up every element on main window * [RU] * * */ void yon_main_window_complete(main_window *widgets){ widgets = yon_remalloc(widgets,sizeof(main_window)); main_config.widgets=widgets; GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"BoxMain"),1,1,0); // Custom widgets configuration { widgets->AutoDriverCombo = yon_gtk_builder_get_widget(builder,"AutoDriverCombo"); widgets->FreeDriverCombo = yon_gtk_builder_get_widget(builder,"FreeDriverCombo"); widgets->FailsafeNvidiaCombo = yon_gtk_builder_get_widget(builder,"FailsafeNvidiaCombo"); widgets->FailsafeAMDCombo = yon_gtk_builder_get_widget(builder,"FailsafeAMDCombo"); widgets->MonitorsBox = yon_gtk_builder_get_widget(builder,"MonitorsBox"); widgets->DontSwitchDisplaysOffCombo = yon_gtk_builder_get_widget(builder,"DontSwitchDisplaysOffCombo"); widgets->DisplayScalingCombo = yon_gtk_builder_get_widget(builder,"DisplayScalingCombo"); widgets->DisplayDiscreteOnly = yon_gtk_builder_get_widget(builder,"DisplayDiscreteOnly"); widgets->OptirunCombo = yon_gtk_builder_get_widget(builder,"OptirunCombo"); widgets->OptirunEntry = yon_gtk_builder_get_widget(builder,"OptirunEntry"); widgets->OptirunButton = yon_gtk_builder_get_widget(builder,"OptirunButton"); widgets->PrimusrunCombo = yon_gtk_builder_get_widget(builder,"PrimusrunCombo"); widgets->PrimusrunEntry = yon_gtk_builder_get_widget(builder,"PrimusrunEntry"); widgets->PrimusrunButton = yon_gtk_builder_get_widget(builder,"PrimusrunButton"); widgets->FrameGapCombo = yon_gtk_builder_get_widget(builder,"FrameGapCombo"); widgets->proprietaryTreeView = yon_gtk_builder_get_widget(builder, "proprietaryTreeView"); widgets->proprietaryInfoButton = yon_gtk_builder_get_widget(builder, "proprietaryInfoButton"); widgets->proprietaryDeleteButton = yon_gtk_builder_get_widget(builder, "proprietaryDeleteButton"); widgets->proprietaryInstallButton = yon_gtk_builder_get_widget(builder, "proprietaryInstallButton"); widgets->proprietaryTreeSelection = GTK_TREE_SELECTION(gtk_builder_get_object(builder, "proprietaryTreeSelection")); widgets->driversTreeView = yon_gtk_builder_get_widget(builder, "driversTreeView"); widgets->driversInfoButton = yon_gtk_builder_get_widget(builder, "driversInfoButton"); widgets->driversDeleteButton = yon_gtk_builder_get_widget(builder, "driversDeleteButton"); widgets->driversInstallButton = yon_gtk_builder_get_widget(builder, "driversInstallButton"); widgets->TerminalOverlay = yon_gtk_builder_get_widget(builder, "TerminalOverlay"); widgets->MenusTab = yon_gtk_builder_get_widget(builder, "MenusTab"); widgets->driversTreeSelection = GTK_TREE_SELECTION(gtk_builder_get_object(builder, "driversTreeSelection")); widgets->LoadDriversButton = yon_gtk_builder_get_widget(builder,"LoadDriversButton"); widgets->LoadDriversButton1 = yon_gtk_builder_get_widget(builder,"LoadDriversButton1"); widgets->proprietaryNotebook = yon_gtk_builder_get_widget(builder,"notebook1"); widgets->proprietartInstalledColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder, "proprietartInstalledColumn")); widgets->ProprietaryPackageColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder, "ProprietaryPackageColumn")); widgets->ProprietaryDriverColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder, "ProprietaryDriverColumn")); widgets->ProprietaryDescriptionColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder, "ProprietaryDescriptionColumn")); widgets->ProprietarySupportedColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder, "ProprietarySupportedColumn")); widgets->DriverModulesTab = GTK_WIDGET(gtk_builder_get_object(builder, "DriverModulesTab")); widgets->DriversTab = GTK_WIDGET(gtk_builder_get_object(builder, "DriversTab")); widgets->MainTabLabel = GTK_WIDGET(gtk_builder_get_object(builder, "MainTabLabel")); widgets->DriversTabLabel = GTK_WIDGET(gtk_builder_get_object(builder, "DriversTabLabel")); widgets->InformationTabLabel = GTK_WIDGET(gtk_builder_get_object(builder, "InformationTabLabel")); widgets->InformationFrameLabel = GTK_WIDGET(gtk_builder_get_object(builder, "InformationFrameLabel")); widgets->InformationOverlay = GTK_WIDGET(gtk_builder_get_object(builder, "InformationOverlay")); widgets->InformationCompanyLogoImage = GTK_WIDGET(gtk_builder_get_object(builder, "InformationCompanyLogoImage")); widgets->InformationOverlay2 = GTK_WIDGET(gtk_builder_get_object(builder, "InformationOverlay2")); widgets->InformationCompanyLogoImage2 = GTK_WIDGET(gtk_builder_get_object(builder, "InformationCompanyLogoImage2")); widgets->InformationLabel = GTK_WIDGET(gtk_builder_get_object(builder, "InformationLabel")); widgets->InformationLabel2 = GTK_WIDGET(gtk_builder_get_object(builder, "InformationLabel2")); widgets->driverInstalledColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder, "driverInstalledColumn")); widgets->driverPackageColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder, "driverPackageColumn")); widgets->driverDriverColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder, "driverDriverColumn")); widgets->driverDescriptionColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder, "driverDescriptionColumn")); widgets->driverSupportedColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder, "driverSupportedColumn")); 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_local_get), widgets); g_signal_connect(G_OBJECT(widgets->LoadDriversButton1), "clicked", G_CALLBACK(yon_proprietary_local_get), widgets); 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->proprietaryTreeView), "cursor-changed", G_CALLBACK(on_driver_pack_selection_change), widgets); g_signal_connect(G_OBJECT(widgets->driversTreeView), "cursor-changed", G_CALLBACK(on_driver_selection_change), 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->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets); g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_global_local_save),NULL); g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),NULL); g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),NULL); g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),NULL); g_signal_connect(G_OBJECT(widgets->OptirunCombo),"changed",G_CALLBACK(yon_set_sensitive_from_combo_box),widgets->OptirunEntry); g_signal_connect(G_OBJECT(widgets->PrimusrunCombo),"changed",G_CALLBACK(yon_set_sensitive_from_combo_box),widgets->PrimusrunEntry); // yon_monitor_view_setup(widgets->mainMonitorVisualConfigurationBox); yon_adapter_window_setup(widgets); } yon_save_window_set_postsave_function(on_save_done,widgets); on_config_local_load(NULL,widgets); } /**config_init() * [EN] * * [RU] * Функция инициализации всех параметров конфигурации */ void config_init(){ main_config.always_open_documentation=0; main_config.socket_id=-1; main_config.save_socket_id=-1; main_config.load_socket_id=-1; main_config.lock_help=0; main_config.lock_help=0; main_config.lock_load_global=0; main_config.lock_save_global=0; main_config.lock_save_local=0; main_config.load_mode=1; } int main(int argc, char *argv[]){ local=setlocale(LC_ALL, ""); textdomain (LocaleName); config_init(); yon_ubl_connect_config((_template_config*)&main_config); yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK); config_str unfound = NULL; int size=0; yon_ubl_setup_arguments(argc,argv,&unfound,&size,NULL); gtk_init(&argc, &argv); template_main_window *widgets = yon_ubl_window_setup(); yon_main_window_complete((main_window*)widgets); char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); yon_window_config_load(path); if (getuid()!=0){ textdomain(template_ui_LocaleName); yon_ubl_status_box_render(ROOT_WARNING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); textdomain(LocaleName); } yon_proprietary_local_get(); // on_config_fill_interface(&widgets); yon_monitor_set_resolutions(); gtk_main(); return 0; }