|
|
|
|
@ -53,7 +53,7 @@ void on_monitor_config_save(GtkWidget *self, monitor_edit_window *window){
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationResolutionCombo))!=0) {
|
|
|
|
|
config->resolution = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationResolutionCombo));
|
|
|
|
|
config->resolution =yon_char_divide_search((char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationResolutionCombo)),";",-1);
|
|
|
|
|
int rotation = gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationRotationCombo));
|
|
|
|
|
if (rotation==1) config->rotation=rotation;
|
|
|
|
|
else if (rotation==2) config->rotation=rotation;
|
|
|
|
|
@ -403,21 +403,23 @@ void on_configuration_save_local_global(GtkWidget *self, widgets_dict *widgets)
|
|
|
|
|
|
|
|
|
|
void on_configuration_save_global(GtkWidget *self, widgets_dict *widgets)
|
|
|
|
|
{
|
|
|
|
|
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)
|
|
|
|
|
str = yon_char_get_augumented(save_drivers_global_command, yon_char_get_augumented(" ", videoconfig.failsafenVidia));
|
|
|
|
|
if (videoconfig.failsafeATI)
|
|
|
|
|
str = yon_char_get_augumented(str, yon_char_get_augumented(" ", videoconfig.failsafeATI));
|
|
|
|
|
if (videoconfig.optirun)
|
|
|
|
|
str = yon_char_get_augumented(str, yon_char_get_augumented(" ", videoconfig.optirun));
|
|
|
|
|
if (videoconfig.primusrun)
|
|
|
|
|
str = yon_char_get_augumented(str, yon_char_get_augumented(" ", videoconfig.primusrun));
|
|
|
|
|
// printf(str);
|
|
|
|
|
yon_config_save(str);
|
|
|
|
|
char *str=NULL;
|
|
|
|
|
char *delstr=NULL;
|
|
|
|
|
str=yon_configuration_get_save_command(save_drivers_global_command);
|
|
|
|
|
delstr=yon_configuration_get_remove_command(remove_drivers_global_command);
|
|
|
|
|
if (delstr){
|
|
|
|
|
printf("%s\n\n",delstr);
|
|
|
|
|
yon_config_save(delstr);
|
|
|
|
|
}
|
|
|
|
|
if (str){
|
|
|
|
|
printf("%s\n\n",str);
|
|
|
|
|
yon_config_save(str);
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void yon_update_config(widgets_dict *widgets)
|
|
|
|
|
@ -430,38 +432,29 @@ void yon_update_config(widgets_dict *widgets)
|
|
|
|
|
|
|
|
|
|
void on_configuration_load_local(GtkWidget *self, widgets_dict *widgets)
|
|
|
|
|
{
|
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
|
command = yon_char_get_augumented(command, (yon_char_get_augumented(" XORG_MONITOR[", yon_char_get_augumented(((monitorconfig *)dct->data)->port, "]"))));
|
|
|
|
|
}
|
|
|
|
|
int size = 0;
|
|
|
|
|
char **rtn = yon_ubl_load_global_config(command, &size);
|
|
|
|
|
char *param = NULL;
|
|
|
|
|
// yon_config_init(rtn, size);
|
|
|
|
|
// 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(int i=0;i<videoconfig.portssize;i++)
|
|
|
|
|
// {
|
|
|
|
|
// command = yon_char_unite(command," ",XORG_MONITOR(videoconfig.ports[i]),NULL);
|
|
|
|
|
// }
|
|
|
|
|
// int size = 0;
|
|
|
|
|
// char **rtn = yon_ubl_load_global_config(command, &size);
|
|
|
|
|
// char *param = NULL;
|
|
|
|
|
yon_setup_config(load_drivers_local_command);
|
|
|
|
|
on_config_fill_interface(widgets);
|
|
|
|
|
yon_monitor_view_setup(widgets->mainMonitorVisualConfigurationBox);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void on_configuration_load_global(GtkWidget *self, widgets_dict *widgets)
|
|
|
|
|
{
|
|
|
|
|
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)
|
|
|
|
|
{
|
|
|
|
|
command = yon_char_get_augumented(command, (yon_char_get_augumented(" XORG_MONITOR[", yon_char_get_augumented(((monitorconfig *)dct->data)->port, "]"))));
|
|
|
|
|
}
|
|
|
|
|
int size = 0;
|
|
|
|
|
char **rtn = yon_ubl_load_global_config(command, &size);
|
|
|
|
|
char *param = NULL;
|
|
|
|
|
// yon_config_init(rtn, size);
|
|
|
|
|
|
|
|
|
|
yon_setup_config(load_drivers_global_command);
|
|
|
|
|
on_config_fill_interface(widgets);
|
|
|
|
|
yon_monitor_view_setup(widgets->mainMonitorVisualConfigurationBox);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**void on_monitor_delete(GtkWidget *self,monitor_view windowd)
|
|
|
|
|
@ -722,7 +715,7 @@ void yon_monitor_view_update(){
|
|
|
|
|
else if (params->stringparameters){
|
|
|
|
|
int size=0;
|
|
|
|
|
config_str rtn=yon_char_parse(params->stringparameters,&size,",");
|
|
|
|
|
char *res=yon_char_parsed_get_resolution(rtn,size);
|
|
|
|
|
char *res=yon_char_divide_search(yon_char_new(yon_char_parsed_get_resolution(rtn,size))," ",-1);
|
|
|
|
|
if (res&&strcmp(res,"")!=0)
|
|
|
|
|
gtk_label_set_text(GTK_LABEL(monitor->templateMonitorInfoResolutionLabel),res);
|
|
|
|
|
else
|
|
|
|
|
@ -913,7 +906,7 @@ void on_config_fill_interface(widgets_dict *widgets)
|
|
|
|
|
str = videoconfig.failsafenVidia;
|
|
|
|
|
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo), DONT_USE_LABEL);
|
|
|
|
|
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo), FBDEV_LABEL);
|
|
|
|
|
if (str&&videoconfig.autoChooseDrivers==0)
|
|
|
|
|
if (str)
|
|
|
|
|
{
|
|
|
|
|
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverFailsafeNvidiaCombo), 1);
|
|
|
|
|
}
|
|
|
|
|
@ -924,7 +917,7 @@ void on_config_fill_interface(widgets_dict *widgets)
|
|
|
|
|
str = videoconfig.failsafeATI;
|
|
|
|
|
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeAMDCombo), DONT_USE_LABEL);
|
|
|
|
|
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeAMDCombo), FBDEV_LABEL);
|
|
|
|
|
if (str&&videoconfig.autoChooseDrivers==0)
|
|
|
|
|
if (str)
|
|
|
|
|
{
|
|
|
|
|
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverFailsafeAMDCombo), 1);
|
|
|
|
|
}
|
|
|
|
|
@ -933,6 +926,8 @@ void on_config_fill_interface(widgets_dict *widgets)
|
|
|
|
|
if (videoconfig.autoChooseDrivers==1){
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->mainDriverAutomaticallyChooseCheck),1);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->mainDriverAutomaticallyChooseCheck),0);
|
|
|
|
|
dictionary *dict = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -950,9 +945,9 @@ dictionary *yon_proprieary_get(){
|
|
|
|
|
for (int i=0;i<size;i++){
|
|
|
|
|
rtn[i] = yon_char_divide_search(rtn[i],"\n",-1);
|
|
|
|
|
char *key=yon_char_new(rtn[i]);
|
|
|
|
|
if (key[0]==':')
|
|
|
|
|
yon_char_divide_search(key,":",-1);
|
|
|
|
|
key = yon_char_divide_search(key,":",-1);
|
|
|
|
|
if (key[0]==';')
|
|
|
|
|
yon_char_divide_search(key,";",-1);
|
|
|
|
|
key = yon_char_divide_search(key,";",-1);
|
|
|
|
|
char *driver_name=yon_char_divide_search(yon_char_new(drivers[drivers_found])," ",-1);
|
|
|
|
|
if (strcmp(key,driver_name)==0)
|
|
|
|
|
if (i==0) videoconfig.proprietary=yon_dictionary_create_with_data(drivers[drivers_found],rtn[i]);
|
|
|
|
|
@ -971,7 +966,7 @@ void yon_gtk_list_store_fill_with_proprietaries(GtkListStore *list){
|
|
|
|
|
for_dictionaries(dict,videoconfig.proprietary){
|
|
|
|
|
GtkTreeIter iter;
|
|
|
|
|
int size=0;
|
|
|
|
|
config_str str = yon_char_parse((char*)dict->data,&size,":");
|
|
|
|
|
config_str str = yon_char_parse((char*)dict->data,&size,";");
|
|
|
|
|
gtk_list_store_append(list,&iter);
|
|
|
|
|
gtk_list_store_set(list,&iter,1,str[0],2,str[1],3,str[2],4,str[3],-1);
|
|
|
|
|
if (strstr(dict->key," installed"))
|
|
|
|
|
@ -989,13 +984,41 @@ char *yon_char_remove_brackets(char* source){
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void yon_monitor_view_dictionary_destroy(void *window){
|
|
|
|
|
monitor_window *monitor=(monitor_window*)window;
|
|
|
|
|
gtk_widget_destroy(monitor->templateMonitorscreenOverlay);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**void yon_setup_config(char *configcommand)
|
|
|
|
|
* [EN]
|
|
|
|
|
*/
|
|
|
|
|
void yon_setup_config(char *configcommand)
|
|
|
|
|
{
|
|
|
|
|
videoconfig.monitors=NULL;
|
|
|
|
|
if(videoconfig.monitor_visuals)
|
|
|
|
|
yon_dictionary_free_all(videoconfig.monitor_visuals,yon_monitor_view_dictionary_destroy);
|
|
|
|
|
videoconfig.monitor_visuals=NULL;
|
|
|
|
|
videoconfig.autoChooseDrivers=0;
|
|
|
|
|
videoconfig.configsize=0;
|
|
|
|
|
videoconfig.descreteOnly=0;
|
|
|
|
|
videoconfig.failsafeATI=NULL;
|
|
|
|
|
videoconfig.failsafenVidia=NULL;
|
|
|
|
|
videoconfig.gapfix=0;
|
|
|
|
|
videoconfig.loaded_config=NULL;
|
|
|
|
|
if(videoconfig.optirun)
|
|
|
|
|
free(videoconfig.optirun);
|
|
|
|
|
videoconfig.optirun=NULL;
|
|
|
|
|
if (videoconfig.primusrun)
|
|
|
|
|
free(videoconfig.primusrun);
|
|
|
|
|
videoconfig.primusrun=NULL;
|
|
|
|
|
if (videoconfig.ports)
|
|
|
|
|
for (int i=0;i<videoconfig.portssize;i++)
|
|
|
|
|
free(videoconfig.ports[i]);
|
|
|
|
|
videoconfig.ports=NULL;
|
|
|
|
|
videoconfig.portssize=0;
|
|
|
|
|
|
|
|
|
|
videoconfig.ports=yon_config_load(get_ports_command,&videoconfig.portssize);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int size = 0;
|
|
|
|
|
|
|
|
|
|
@ -1011,7 +1034,7 @@ void yon_setup_config(char *configcommand)
|
|
|
|
|
param=yon_config_get_parameter(videoconfig.loaded_config,videoconfig.configsize,"VGADRV_AUTO");
|
|
|
|
|
if (param){
|
|
|
|
|
yon_char_divide_search(param,"=",-1);
|
|
|
|
|
if (strcmp(param,"")!=0)
|
|
|
|
|
if (strcmp(param,"NO")!=0)
|
|
|
|
|
videoconfig.autoChooseDrivers=1;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
@ -1272,6 +1295,7 @@ void yon_adapter_window_setup(widgets_dict *widgets){
|
|
|
|
|
gtk_widget_destroy(widgets->InformationCompanyLogoImage);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** void yon_setup_widgets(widgets_dict *widgets)
|
|
|
|
|
* [EN]
|
|
|
|
|
* Sets up every element on main window
|
|
|
|
|
@ -1345,6 +1369,10 @@ 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->PlugBox = yon_gtk_builder_get_widget(widgets->builder, "mainPlugBox");
|
|
|
|
|
widgets->PlugSaveBox = yon_gtk_builder_get_widget(widgets->builder, "plugLoadButton");
|
|
|
|
|
widgets->PlugLoadBox = yon_gtk_builder_get_widget(widgets->builder, "plugSaveButton");
|
|
|
|
|
|
|
|
|
|
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");
|
|
|
|
|
@ -1466,13 +1494,94 @@ void yon_setup_widgets(widgets_dict *widgets)
|
|
|
|
|
videoconfig.status_render.icon=widgets->mainStatusIcon;
|
|
|
|
|
videoconfig.status_render.label=widgets->mainStatusLabel;
|
|
|
|
|
videoconfig.status_render.box=widgets->mainStatusBox;
|
|
|
|
|
if (videoconfig.lock_load_global==1)
|
|
|
|
|
gtk_widget_set_sensitive(widgets->mainHeaderLoadGlobalMenuItem,0);
|
|
|
|
|
if (videoconfig.lock_save_global==1)
|
|
|
|
|
gtk_widget_set_sensitive(widgets->mainHeaderSaveGlobalMenuItem,0);
|
|
|
|
|
if (videoconfig.lock_save_local==1)
|
|
|
|
|
gtk_widget_set_sensitive(widgets->mainHeaderSaveLocalMenuItem,0);
|
|
|
|
|
if (videoconfig.lock_save_global==1||videoconfig.lock_save_local==1)
|
|
|
|
|
gtk_widget_set_sensitive(widgets->mainHeaderSaveGlobalLocalMenuItem,0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main(int argc, char *argv[])
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
local = setlocale(LC_ALL, "");
|
|
|
|
|
textdomain(LocaleName);
|
|
|
|
|
{
|
|
|
|
|
int show_help=0;
|
|
|
|
|
videoconfig.socket_id=-1;
|
|
|
|
|
videoconfig.save_socket_id=-1;
|
|
|
|
|
videoconfig.load_socket_id=-1;
|
|
|
|
|
videoconfig.lock_help=-1;
|
|
|
|
|
videoconfig.lock_load_global=-1;
|
|
|
|
|
videoconfig.lock_save_global=-1;
|
|
|
|
|
videoconfig.lock_save_local=-1;
|
|
|
|
|
local = setlocale(LC_ALL, "");
|
|
|
|
|
for (int i=0;i<argc;i++)
|
|
|
|
|
printf("%s\n",argv[i]);
|
|
|
|
|
textdomain(LocaleName);
|
|
|
|
|
int option_index=0;
|
|
|
|
|
struct option long_options[] = {
|
|
|
|
|
{"help", 0, 0, 'h'},
|
|
|
|
|
{"version", 0, 0, 'V'},
|
|
|
|
|
{"lock-help", 0,0, 1},
|
|
|
|
|
// {"lock-settings", 0,0, -16},
|
|
|
|
|
{"lock-save", 0,0, 2},
|
|
|
|
|
{"lock-save-local", 0,0, 3},
|
|
|
|
|
{"lock-save-global", 0,0, 4},
|
|
|
|
|
{"lock-load-global", 0,0, 5},
|
|
|
|
|
{"socket-id", 1, 0, 's'},
|
|
|
|
|
{"socket-ext-id", 1,0, 'e'},
|
|
|
|
|
{"socket-trd-id", 1,0, 't'},
|
|
|
|
|
{ NULL, 0, NULL, 0 }
|
|
|
|
|
};
|
|
|
|
|
for (int i=0;i<argc;i++){
|
|
|
|
|
int argument=getopt_long(argc,argv,"hVvs:e:t:",long_options,&option_index);
|
|
|
|
|
switch(argument){
|
|
|
|
|
case 'h':
|
|
|
|
|
show_help=1;
|
|
|
|
|
break;
|
|
|
|
|
case 'v':
|
|
|
|
|
case 'V':
|
|
|
|
|
printf("%s\n",VERSION_LABEL);
|
|
|
|
|
exit(0);
|
|
|
|
|
break;
|
|
|
|
|
case 's':
|
|
|
|
|
if(optarg)
|
|
|
|
|
videoconfig.socket_id=atoi(optarg);
|
|
|
|
|
break;
|
|
|
|
|
case 'e':
|
|
|
|
|
if(optarg)
|
|
|
|
|
videoconfig.load_socket_id=atoi(optarg);
|
|
|
|
|
break;
|
|
|
|
|
case 't':
|
|
|
|
|
if(optarg)
|
|
|
|
|
videoconfig.save_socket_id=atoi(optarg);
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
videoconfig.lock_help=1;
|
|
|
|
|
break;
|
|
|
|
|
// case -16:
|
|
|
|
|
// break;
|
|
|
|
|
case 2:
|
|
|
|
|
videoconfig.lock_save_local=1;
|
|
|
|
|
videoconfig.lock_save_global=1;
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
videoconfig.lock_save_local=1;
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
videoconfig.lock_save_global=1;
|
|
|
|
|
break;
|
|
|
|
|
case 5:
|
|
|
|
|
videoconfig.lock_load_global=1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (show_help==1&&videoconfig.lock_help==-1){
|
|
|
|
|
printf("%s\n",HELP_LABEL);
|
|
|
|
|
exit(0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
gtk_init(&argc, &argv);
|
|
|
|
|
|
|
|
|
|
GError error;
|
|
|
|
|
@ -1480,11 +1589,11 @@ int main(int argc, char *argv[])
|
|
|
|
|
widgets_dict widgets;
|
|
|
|
|
yon_setup_widgets(&widgets);
|
|
|
|
|
yon_gtk_list_store_fill_with_proprietaries(videoconfig.list);
|
|
|
|
|
yon_gtk_list_store_fill_with_proprietaries(videoconfig.modulelist);
|
|
|
|
|
// yon_gtk_list_store_fill_with_proprietaries(videoconfig.modulelist);
|
|
|
|
|
gtk_widget_show(widgets.MainWindow);
|
|
|
|
|
// yon_fill_ui(&widgets);
|
|
|
|
|
videoconfig.status_render.text_to_render=LOCAL_LOAD_SUCCESS;
|
|
|
|
|
videoconfig.status_render.type=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();
|
|
|
|
|
@ -1495,6 +1604,7 @@ int main(int argc, char *argv[])
|
|
|
|
|
GTK_STYLE_PROVIDER(css),
|
|
|
|
|
-1);
|
|
|
|
|
yon_monitor_view_update();
|
|
|
|
|
yon_ubl_setup_sockets(widgets.PlugBox,widgets.PlugLoadBox,widgets.PlugSaveBox,videoconfig.socket_id,videoconfig.load_socket_id,videoconfig.save_socket_id);
|
|
|
|
|
gtk_main();
|
|
|
|
|
return 0;
|
|
|
|
|
}
|