From b91e2e358c0fc7553dea6361ffa04111801a8881 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 18 Apr 2024 11:06:52 +0600 Subject: [PATCH] update --- .gitignore | 3 +- resolutions.csv | 14 +- source/CMakeLists.txt | 7 +- source/ubl-settings-video.c | 2102 ++++++++------------- source/ubl-settings-video.h | 381 ++-- source/ubl-strings.h | 13 +- source/ubl-utils.c | 2234 ---------------------- source/ubl-utils.h | 401 ---- ubl-settings-video-configuration.glade | 638 ++++--- ubl-settings-video-monitor.glade | 50 +- ubl-settings-video.glade | 2387 +++++++++--------------- 11 files changed, 2253 insertions(+), 5977 deletions(-) delete mode 100644 source/ubl-utils.c delete mode 100644 source/ubl-utils.h diff --git a/.gitignore b/.gitignore index e2a882b..7dd730a 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ source/ubl-settings-video-cm.h .install.sh terminal-commands source/ubl-settings-app-chooser.* -*~ \ No newline at end of file +*~ +*# \ No newline at end of file diff --git a/resolutions.csv b/resolutions.csv index 8de3633..b31d501 100644 --- a/resolutions.csv +++ b/resolutions.csv @@ -1,8 +1,10 @@ -640x480 ;4:3;VGA -800x480 ;5:3;WVGA -800x600 ;4:3;SVGA -854x480 ;16:9;FWVGA -960x540 ;19:9;qHD +RESOLUTION;ASPECT_RATIO;DESC +720x400;5:3;VGA +640x480;4:3;VGA +800x480;5:3;WVGA +800x600;4:3;SVGA +854x480;16:9;FWVGA +960x540;19:9;qHD 1024x600;128:75;WSVGA 1024x768;4:3;XGA 1152x864;4:3;XGA+ @@ -22,6 +24,6 @@ 1920x1080;16:9;FHD 1920x1200;16:10;WUXGA 2048x1080;19:10;2K DCI -2048x1152;16:9;,QWXGA +2048x1152;16:9;QWXGA 2560x1080;21:9;UWHD 2560x1440;16:9;QHD diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 7e921c4..a344161 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -80,8 +80,6 @@ set(SOURCE_FILES ubl-settings-video.c ubl-settings-video.h ubl-strings.h - ubl-utils.h - ubl-utils.c ${CMAKE_CURRENT_BINARY_DIR}/ubl-cmake.h ) @@ -90,7 +88,10 @@ set(LIBRARIES ${WEBKIT_LIBRARIES} ${VTE291_LIBRARIES} ${JSON_LIBRARIES} - pthread) + pthread + ublsettings + ublsettings-gtk3 + ublsettingsui-gtk3) add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}) diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index 66e7183..40e4404 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -1,102 +1,24 @@ #include "ubl-settings-video.h" -config videoconfig; +config main_config; -// void on_apps_chooser_open(GtkWidget *self){ -// int size=0; -// config_str categories=yon_char_parsed_new(NULL,&size,"GTK",NULL); -// config_str names=yon_char_parsed_new(NULL,&size,"XFCE",NULL); -// config_str icons=yon_char_parsed_new(NULL,&size,"org.xfce.panel.Launcher",NULL); -// yon_app_chooser_show(categories,names,icons,size); -// } - -void on_subwindow_close(GtkWidget *self) -{ - gtk_widget_destroy(gtk_widget_get_toplevel(self)); -} - -void on_resized(GtkWidget *window, GdkEventConfigure *event){ - float time_passed = (float)clock()/(float)CLOCKS_PER_SEC; - if (time_passed>2){ - int width = gdk_window_get_width(gtk_widget_get_window(videoconfig.pack_box)); - int children_width = 138*g_list_length(gtk_container_get_children(GTK_CONTAINER((GtkWidget*)videoconfig.monitor_output_layers->first->data))); - if (widthchildren_width+150) - yon_monitor_view_draw_all(); - } - -} - -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(MONITOR_PORT_ERROR_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); - return; - } - config->main=0; - config->enable=0; - config->position=0; - config->rotation=0; - config->dpms=0; - config->cvt=0; - config->reduced=0; - config->position_port=NULL; - config->port=NULL; - config->resolution=NULL; - config->frequency=0; - yon_ubl_status_box_render(MONITOR_PORT_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); - 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){ - config->main = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationMainCheck)); - config->enable = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationEnableCheck)); - config->dpms = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationModelineCVTCheck)); - config->cvt = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationModelineCVTCheck)); - config->reduced = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationUseCVTReducedCheck)); - config->gtf = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationModelineGTFCheck)); - if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationPositionPosCombo))!=0 - &>k_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationPositionPortCombo))!=0){ - config->position = gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationPositionPosCombo)); - config->position_port = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationPositionPortCombo)); - - } - if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationFrequencyCombo))>0) - config->frequency=gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationFrequencyCombo)); - if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationResolutionCombo))!=0) { - 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; - else if (rotation==3) config->rotation=rotation; - else config->rotation=0; - } - if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationResolutionCombo))!=0) { - char *frequency = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationFrequencyCombo)); - } - yon_monitor_make_string(config); - } else { - char *stringparameters = (char*)gtk_entry_get_text(GTK_ENTRY(window->templateMonitorConfigurationParameterLineEntry)); - } - yon_monitor_view_update(); - on_subwindow_close(self); -} - -void on_terminal_done(GtkWidget *terminal, int size, widgets_dict *widgets){ +void on_terminal_done(GtkWidget *terminal, int size, main_window *widgets){ gtk_widget_destroy(terminal); } -void on_terminal_more(GtkWidget *self, widgets_dict *widgets){ +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, widgets_dict *widgets){ +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_proprieary_get(); - yon_gtk_list_store_fill_with_proprietaries(videoconfig.list); + yon_gtk_list_store_fill_with_proprietaries(main_config.list); yon_ubl_status_box_render(PROPRIETARY_OPETAION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } @@ -107,12 +29,12 @@ static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer else vte_terminal_feed_child(VTE_TERMINAL(terminal),(char*)user_data,strlen((char*)user_data)); } -void on_terminal_check_progress(VteTerminal *terminal, widgets_dict *widgets){ +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(widgets_dict *widgets, char *usr_command){ +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")); @@ -173,11 +95,11 @@ void yon_terminal_start(widgets_dict *widgets, char *usr_command){ gtk_widget_show_all(widgets->TerminalRevealer); } -void on_driver_pack_install(GtkWidget *self,widgets_dict *widgets){ +void on_driver_pack_install(GtkWidget *self,main_window *widgets){ yon_ubl_status_box_render(PROPRIETARY_INSTALLING_IN_PROGRESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); GtkTreeIter iter; char *name; - GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list); + 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); @@ -187,26 +109,26 @@ void on_driver_pack_install(GtkWidget *self,widgets_dict *widgets){ } } -void on_driver_install(GtkWidget *self,widgets_dict *widgets){ +void on_driver_install(GtkWidget *self,main_window *widgets){ yon_ubl_status_box_render(PROPRIETARY_INSTALLING_IN_PROGRESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); GtkTreeIter iter; char *name; - GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list); + 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(videoconfig.list,&iter,0,1,-1); + 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,widgets_dict *widgets){ +void on_driver_pack_delete(GtkWidget *self,main_window *widgets){ yon_ubl_status_box_render(PROPRIETARY_DELETING_IN_PROGRESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); GtkTreeIter iter; char *name; - GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list); + 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); @@ -216,10 +138,10 @@ void on_driver_pack_delete(GtkWidget *self,widgets_dict *widgets){ } } -void on_driver_pack_selection_change(GtkWidget *self, widgets_dict *widgets){ +void on_driver_pack_selection_change(GtkWidget *self, main_window *widgets){ GtkTreeIter iter; char *name; - GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list); + 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; @@ -234,10 +156,10 @@ void on_driver_pack_selection_change(GtkWidget *self, widgets_dict *widgets){ } } -void on_driver_selection_change(GtkWidget *self, widgets_dict *widgets){ +void on_driver_selection_change(GtkWidget *self, main_window *widgets){ GtkTreeIter iter; char *name; - GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list); + 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; @@ -263,29 +185,29 @@ void on_driver_selection_change(GtkWidget *self, widgets_dict *widgets){ } -void on_driver_delete(GtkWidget *self,widgets_dict *widgets){ +void on_driver_delete(GtkWidget *self,main_window *widgets){ yon_ubl_status_box_render(PROPRIETARY_DELETING_IN_PROGRESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); GtkTreeIter iter; char *name; - GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list); + 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(videoconfig.list,&iter,0,0,-1); + 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, widgets_dict *widgets){ +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(videoconfig.list); + 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); @@ -295,14 +217,14 @@ void on_driver_pack_info(GtkWidget *self, widgets_dict *widgets){ } } -void on_driver_info(GtkWidget *self,widgets_dict *widgets){ +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(videoconfig.list); + 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); @@ -313,45 +235,58 @@ void on_driver_info(GtkWidget *self,widgets_dict *widgets){ } void on_port_chosen_changed(GtkWidget *self, monitor_edit_window *window){ - if (yon_dictionary_get_data(window->config,monitorconfig*)->show_usupported==0){ - monitorconfig* config = yon_dictionary_get_data(window->config,monitorconfig*); - 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->templateMonitorConfigurationPortCombo)); - if (portid!=0) - window->curport=videoconfig.ports[portid-1]; - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationResolutionCombo)); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationResolutionCombo),PARAMETER_DEFAULT_LABEL); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationResolutionCombo),0); - - if (window->curport){ - gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(window->mainMonitorConfigurationBox)),window->curport); - dict=yon_dictionary_get(&videoconfig.supported_resolutions,window->curport); - if (dict){ - resolution_supported *res = yon_dictionary_get_data(dict,resolution_supported*); - int found_size=0; - for (int i=0;isize;i++){ - char *check_line; - for (int j=0;jline[i])){ - found_size++; - if(!config->resolutionCapabilities) config->resolutionCapabilities=new(char*); - else config->resolutionCapabilities=realloc(config->resolutionCapabilities,sizeof(char*)*found_size); - config->resolutionCapabilities[found_size-1]=videoconfig.resolutions[j]; - config->resolution_size=found_size; - } + 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; } } - yon_gtk_combo_box_text_fill(window->templateMonitorConfigurationResolutionCombo,config->resolutionCapabilities, config->resolution_size); + 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) @@ -368,726 +303,611 @@ void on_sensitive_change_reversed(GtkWidget *self, GtkWidget *toggle) gtk_widget_set_sensitive(toggle, !state); } -void on_auto_choose_drivers(GtkWidget *self, widgets_dict *widgets) +void on_auto_choose_drivers(GtkWidget *self, main_window *widgets) { int state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); - videoconfig.autoChooseDrivers=state; + 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); } -char *yon_configuration_get_save_command(char *command){ - char *str = NULL; - char *dntus = NULL; - dntus=_("Don't use"); - str=yon_char_new(command); - if (videoconfig.autoChooseDrivers==0){ - if (strcmp(videoconfig.failsafenVidia, dntus)!=0) - str = yon_char_append(str, yon_char_append(" FAILSAFENVIDIA=", videoconfig.failsafenVidia)); - else - str = yon_char_append(str," FAILSAFENVIDIA=\"\""); - if (strcmp(videoconfig.failsafeATI, dntus)!=0) - str = yon_char_append(str, yon_char_append(" FAILSAFEATI=", videoconfig.failsafeATI)); - else - str = yon_char_append(str," FAILSAFEATI=\"\""); - str=yon_char_append(str," VGADRV_AUTO=no"); +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 { - str = yon_char_unite(str, " FAILSAFENVIDIA=\"\" FAILSAFEATI=\"\" VGADRV_AUTO=yes", NULL); - + 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); } - if (videoconfig.optirun&&strcmp(videoconfig.optirun, dntus)!=0&&strcmp(videoconfig.optirun, "")!=0) - str = yon_char_append(str, yon_char_unite(" OPTIRUN=","\"",videoconfig.optirun,"\"",NULL)); - else - str = yon_char_append(str, yon_char_unite(" OPTIRUN=\"\"",NULL)); - if (videoconfig.primusrun&&strcmp(videoconfig.primusrun, dntus)!=0&&strcmp(videoconfig.primusrun, "")!=0) - str = yon_char_append(str, yon_char_unite(" PRIMUSRUN=","\"", videoconfig.primusrun,"\"",NULL)); - else - str = yon_char_append(str, yon_char_unite(" PRIMUSRUN=\"\"",NULL)); - - dictionary *dict=NULL; - for (int i=0;istringparameters){ - str=yon_char_unite(str," XORG_MONITOR[",dict->key,"]=\"",yon_dictionary_get_data(dict,monitorconfig*)->stringparameters,"\"", NULL); - } - } - - if (strcmp(str,command)!=0) - return str; - else return NULL; } -void on_resolutions_unsupported_show(GtkWidget *self, monitor_edit_window *window){ - ((monitorconfig*)window->config->data)->show_usupported = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationResolutionCombo)); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationResolutionCombo),PARAMETER_DEFAULT_LABEL); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationResolutionCombo),0); - if (((monitorconfig*)window->config->data)->show_usupported==1){ - yon_gtk_combo_box_text_fill(window->templateMonitorConfigurationResolutionCombo,videoconfig.resolutions,videoconfig.resolutionssize); - } else { - yon_gtk_combo_box_text_fill(window->templateMonitorConfigurationResolutionCombo,((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; } } -char *yon_configuration_get_remove_command(char *command){ - char *str = NULL; - char *dntus = NULL; - dntus=_("Don't use"); - str=yon_char_new(command); - str = yon_char_append(str, " FAILSAFENVIDIA"); - str = yon_char_append(str, " FAILSAFATI"); - str = yon_char_append(str, " OPTIRUN"); - str = yon_char_append(str, " PRIMUSRUN"); - dictionary *dict=NULL; - for(int i=0;i0){ + 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->FailsafeAMDCombo),1); + else if (yon_char_is_empty(dpi)) + gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->FailsafeAMDCombo),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 (strcmp(str,command)!=0) - return str; - else return NULL; + + 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)){ + 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 if (yon_char_is_empty(optirun)) + gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->OptirunCombo),1); + else + gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->OptirunCombo),0); + + if (!yon_char_is_empty(primusrun)){ + 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 if (yon_char_is_empty(primusrun)) + gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->PrimusrunCombo),1); + else + gtk_combo_box_set_active(GTK_COMBO_BOX(main_config.widgets->PrimusrunCombo),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); + textdomain(LocaleName); + gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-services"); + 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=file; + } + gtk_widget_destroy(dialog); + } else { + gtk_widget_destroy(dialog); + } + yon_config_load_config(type,yon_config_get_custom_command(path),NULL); + } } -void on_configuration_save_local(GtkWidget *self, widgets_dict *widgets) -{ - yon_update_config(widgets); - char *str=NULL; - char *delstr=NULL; - str=yon_configuration_get_save_command(save_drivers_local_command); - if (str){ - yon_launch(str); - yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); - } +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_configuration_save_local_global(GtkWidget *self, widgets_dict *widgets) -{ - on_configuration_save_global_local(self, widgets); - yon_ubl_status_box_render(GLOBAL_LOCAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); +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_configuration_save_global_local(GtkWidget *self, widgets_dict *widgets) -{ - yon_update_config(widgets); - char *str=NULL; - char *delstr=NULL; - str=yon_configuration_get_save_command(save_drivers_global_local_command); - if (str){ - yon_launch(str); - yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); - } +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_configuration_save_global(GtkWidget *self, widgets_dict *widgets) -{ - yon_update_config(widgets); - char *str=NULL; - char *delstr=NULL; - str=yon_configuration_get_save_command(save_drivers_global_command); - if (str){ - yon_launch(str); - yon_ubl_status_box_render(LOCAL_SAVE_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); - } +void on_config_global_local_save(){ + main_config.save_config=3; + yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL); } -void yon_update_config(widgets_dict *widgets) -{ - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->mainExtraLaunchOptirunCheck))==1) - videoconfig.optirun = yon_char_new( (char *)gtk_entry_get_text(GTK_ENTRY(widgets->mainExtraLaunchOptirunEntry))); - else videoconfig.optirun = NULL; - videoconfig.descreteOnly=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->mainHybridGraphicsDiscreteCheck)); - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->mainExtraLaunchPrismusunCheck))==1) - videoconfig.primusrun = yon_char_new( (char *)gtk_entry_get_text(GTK_ENTRY(widgets->mainExtraLaunchPrismusunEntry))); - else videoconfig.primusrun = NULL; - videoconfig.failsafenVidia = yon_char_new( gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo))); - videoconfig.failsafeATI = yon_char_new( gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeAMDCombo))); +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_configuration_load_local(GtkWidget *self, widgets_dict *widgets) -{ - yon_setup_config(load_drivers_local_command); - on_config_fill_interface(widgets); - yon_monitor_view_setup(widgets->mainMonitorVisualConfigurationBox); - yon_ubl_status_box_render(LOCAL_LOAD_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); +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_configuration_load_global(GtkWidget *self, widgets_dict *widgets) -{ - - yon_setup_config(load_drivers_global_command); - on_config_fill_interface(widgets); - yon_monitor_view_setup(widgets->mainMonitorVisualConfigurationBox); - yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS,BACKGROUND_IMAGE_SUCCESS_TYPE); +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){}; } -/**void on_monitor_delete(GtkWidget *self,monitor_view windowd) +// functions + + +/**void on_monitor_delete(GtkWidget *self,monitor_data windowd) * [EN] */ -void on_monitor_delete(GtkWidget *self,monitor_view windowd){ - monitor_window *window = yon_dictionary_get_data(windowd,monitor_window*); - if(window&&window->config){ - gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(window->templateMonitorscreenOverlay)),window->templateMonitorscreenOverlay); - videoconfig.monitor_visuals = yon_dictionary_rip(windowd); - gtk_widget_destroy(window->templateMonitorscreenOverlay); - videoconfig.monitors = yon_dictionary_rip(window->config); +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); free(window); } } -/**void on_monitor_switch(GtkWidget *self,monitor_window *window) +/**void on_monitor_switch(GtkWidget *self,monitor_data *window) * [EN] */ -void on_monitor_switch(GtkWidget *self,monitor_window *window){ - if(window&&window->config){ - int *enable = &yon_dictionary_get_data(window->config,monitorconfig*)->enable; - *enable=!*enable; - gtk_widget_set_sensitive(window->templateMonitorImage,*enable); +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_window *window) +/**void on_monitor_add(GtkWidget *self,monitor_data *window) * [EN] */ -void on_monitor_add(GtkWidget *self,monitor_window *window){ - if(window){ - videoconfig.monitors = yon_monitor_config_new(PARAMETER_DEFAULT_LABEL); - yon_monitor_view_new(videoconfig.monitors); - yon_monitor_view_draw_all(NULL); +void on_monitor_add(GtkWidget *self,main_window *widgets){ + if(widgets){ + yon_monitor_new(widgets,0); } } void on_proprietary_get(GtkWidget *self, gpointer data){ - if (videoconfig.dblock==0){ + if (main_config.dblock==0){ GtkTreeIter iter; pthread_t tid; pthread_create(&tid,NULL,(void*)yon_proprieary_get,NULL); - videoconfig.dblock=1; + main_config.dblock=1; } } -void on_monitor_configure(GtkWidget *self,monitor_window *window){ - if(window&&window->config){ - monitor_edit_window *monitors = new(monitor_edit_window); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_configuration); - monitors->templateMonitorConfigurationWindow = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationWindow")); - monitors->mainMonitorConfigurationBox = GTK_WIDGET(gtk_builder_get_object(builder, "mainMonitorConfigurationBox")); - monitors->templateMonitorConfigurationBox = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationBox")); - monitors->templateMonitorConfigurationEnableCheck = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationEnableCheck")); - monitors->templateMonitorConfigurationPortLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationPortLabel")); - monitors->templateMonitorConfigurationPortCombo = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationPortCombo")); - monitors->templateMonitorConfigurationMainCheck = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationMainCheck")); - monitors->templateMonitorConfigurationResolutionLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationResolutionLabel")); - monitors->templateMonitorConfigurationResolutionCombo = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationResolutionCombo")); - monitors->templateMonitorConfigurationShowUnsupportedCheck = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationShowUnsupportedCheck")); - monitors->templateMonitorConfigurationFrequencyLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationFrequencyLabel")); - monitors->templateMonitorConfigurationFrequencyCombo = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationFrequencyCombo")); - monitors->templateMonitorConfigurationRotationLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationRotationLabel")); - monitors->templateMonitorConfigurationRotationCombo = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationRotationCombo")); - monitors->templateMonitorConfigurationPositionLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationPositionLabel")); - monitors->templateMonitorConfigurationPositionPosCombo = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationPositionPosCombo")); - monitors->templateMonitorConfigurationPositionPortCombo = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationPositionPortCombo")); - - monitors->templateMonitorConfigurationModelineCVTCheck = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationModelineCVTCheck")); - monitors->templateMonitorConfigurationUseCVTReducedCheck = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationUseCVTReducedCheck")); - monitors->templateMonitorConfigurationModelineGTFCheck = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationModelineGTFCheck")); - monitors->templateMonitorConfigurationParameterLineCheck = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationParameterLineCheck")); - monitors->templateMonitorConfigurationParameterLineEntry = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationParameterLineEntry")); - monitors->templateMonitorConfigurationCancelButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationCancelButton")); - monitors->templateMonitorConfigurationSaveButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationSaveButton")); - monitors->templateMonitorConfigurationDoNotSwitchOffCheck = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationDoNotSwitchOffCheck")); - monitors->config=window->config; - - g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationCancelButton), "clicked", G_CALLBACK(on_subwindow_close), NULL); - g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationSaveButton), "clicked", G_CALLBACK(on_monitor_config_save), monitors); - g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationParameterLineCheck), "toggled", G_CALLBACK(on_sensitive_change_reversed), monitors->templateMonitorConfigurationBox); - g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationParameterLineCheck), "toggled", G_CALLBACK(on_sensitive_change), monitors->templateMonitorConfigurationParameterLineEntry); - g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationShowUnsupportedCheck), "toggled", G_CALLBACK(on_resolutions_unsupported_show),monitors); - g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationPortCombo), "changed", G_CALLBACK(on_port_chosen_changed),monitors); - - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(monitors->templateMonitorConfigurationEnableCheck),yon_dictionary_get_data(monitors->config,monitorconfig*)->enable==1); - - gtk_window_set_title(GTK_WINDOW(monitors->templateMonitorConfigurationWindow),SETTINGS_VIDEO_TITLE_LABEL); - - gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationPortLabel),MONITOR_PORT_LABEL); - gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationResolutionLabel),MONITOR_RESOLUTION_LABEL); - gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationFrequencyLabel),MONITOR_FREQUENCY_LABEL); - gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationRotationLabel),MONITOR_ROTATION_LABEL); - gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationPositionLabel),MONITOR_POSITION_LABEL); - - gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationEnableCheck),MONITOR_ENABLED_LABEL); - gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationMainCheck),MONITOR_MAIN_DISPLAY_LABEL); - gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationShowUnsupportedCheck),MONITOR_UNSUPPORTED_LABEL); - gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationDoNotSwitchOffCheck),MONITOR_SWITCH_OFF_LABEL); - gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationModelineCVTCheck),MONITOR_CVT_LABEL); - gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationUseCVTReducedCheck),MONITOR_REDUCED_LABEL); - gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationModelineGTFCheck),MONITOR_GTF_LABEL); - gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationParameterLineCheck),MONITOR_MANUALLY_LABEL); - gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationCancelButton),MONITOR_CANCEL_LABEL); - gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationSaveButton),MONITOR_SAVE_LABEL); - - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPortCombo),MONITOR_CHOOSE_PORT_LABEL); - monitors->curport=NULL; - dictionary *dict=NULL; - for (int i=0;istringparameters||check_if_exists==monitors->config) - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPortCombo),videoconfig.ports[i]); - - } - gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationPortCombo),0); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationResolutionCombo),PARAMETER_DEFAULT_LABEL); - gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationResolutionCombo),0); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationFrequencyCombo),PARAMETER_DEFAULT_LABEL); - gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationFrequencyCombo),0); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationRotationCombo),MONITOR_NO_ROTATION_LABEL); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationRotationCombo),MONITOR_LEFT_LABEL); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationRotationCombo),MONITOR_RIGHT_LABEL); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationRotationCombo),MONITOR_INVERTED_LABEL); - gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationRotationCombo),0); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPositionPosCombo),PARAMETER_DEFAULT_LABEL); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPositionPosCombo),MONITOR_LEFT_POS_LABEL); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPositionPosCombo),MONITOR_RIGHT_POS_LABEL); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPositionPosCombo),MONITOR_ABOVE_POS_LABEL); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPositionPosCombo),MONITOR_BELOW_POS_LABEL); - gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationPositionPosCombo),0); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPositionPortCombo),PARAMETER_DEFAULT_LABEL); - for (int i=0;iconfig->key) - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPositionPortCombo),videoconfig.ports[i]); +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; + 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))); } - gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationPositionPortCombo),0); - - yon_monitor_window_update(monitors); - - gtk_widget_show(monitors->templateMonitorConfigurationWindow); + 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)); + + 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 (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 on_read_documentation(GtkWidget *self,gpointer user_data){ - yon_ubl_browser_window_open(user_data,WEB_VIEW_TITLE_LABEL); +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); -void on_toggle(GtkWidget *self, int *changing_var){ - *changing_var = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); -} + } else if (!strcmp(parsed[i],"dpms")){ -void on_link(GtkWidget *self, char* link, gpointer user_data){ - if (GTK_IS_ABOUT_DIALOG(self)){ - gtk_widget_destroy(self); - } - if (!link) - link=UBLINUX_WIKI_LINK; - if (videoconfig.alwaysredirect==0){ - GtkBuilder *builder=gtk_builder_new_from_resource(glade_path); - GtkWidget *sureWindow=yon_gtk_builder_get_widget(builder,"HelpSureWindow"); - GtkWidget *readButton=yon_gtk_builder_get_widget(builder,"ReadHelpButton"); - GtkWidget *cancelButton=yon_gtk_builder_get_widget(builder,"CancelHelpButton"); - GtkWidget *titleLabel=yon_gtk_builder_get_widget(builder,"helpHeader"); - GtkWidget *headQuestionLabel=yon_gtk_builder_get_widget(builder,"webHeaderNameLabel"); - GtkWidget *textLabel=yon_gtk_builder_get_widget(builder,"helpText"); - GtkWidget *alwaysOpenCheck=yon_gtk_builder_get_widget(builder,"AlwaysOpenHelpCheckbox"); - - g_signal_connect(G_OBJECT(readButton),"clicked",G_CALLBACK(on_read_documentation),yon_char_new(link)); - g_signal_connect(G_OBJECT(readButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - g_signal_connect(G_OBJECT(cancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - g_signal_connect(G_OBJECT(alwaysOpenCheck),"toggled",G_CALLBACK(on_toggle),&videoconfig.alwaysredirect); - - gtk_label_set_text(GTK_LABEL(titleLabel),SETTINGS_VIDEO_TITLE_LABEL); - gtk_label_set_text(GTK_LABEL(headQuestionLabel),HELP_TITLE_LABEL); - gtk_label_set_text(GTK_LABEL(textLabel),HELP_INFO_LABEL); - gtk_button_set_label(GTK_BUTTON(alwaysOpenCheck),HELP_ALWAYS_OPEN_LABEL); - gtk_button_set_label(GTK_BUTTON(readButton),READ_DOCUMENTATION_LABEL); - gtk_button_set_label(GTK_BUTTON(cancelButton),MONITOR_CANCEL_LABEL); - - gtk_widget_show(sureWindow); - }else { - on_read_documentation(NULL,link); - } -} + } else if (!strcmp(parsed[i],"nodpms")){ -/**void on_about() - * [EN] -*/ -void on_about() -{ - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); - GtkWidget *window = yon_gtk_builder_get_widget(builder, "aboutWindow"); - GtkWidget *hideButtonBox = yon_gtk_builder_get_widget(builder, "buttonBoxHide"); - gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(window), LocaleName); - gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window), version_application); - gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(window), _("Project Home Page")); - gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(window),UBLINUX_HOMEPAGE_LINK); - gtk_window_set_title(GTK_WINDOW(window), SETTINGS_VIDEO_TITLE_LABEL); - gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window), SETTINGS_VIDEO_TITLE_LABEL); - g_signal_connect(G_OBJECT(window),"activate-link",G_CALLBACK(on_link),NULL); - gtk_widget_set_visible(hideButtonBox, 0); - gtk_widget_show(window); -} + } else if (!strcmp(parsed[i],"enable")){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->EnableCheck),1); -void yon_monitor_window_update(monitor_edit_window *window){ - if (window){ - int found = yon_char_parsed_check_exist(videoconfig.ports,videoconfig.portssize, window->config->key); - if (found==-1) - found=0; - else - found++; - gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationPortCombo),found); - on_resolutions_unsupported_show(window->templateMonitorConfigurationShowUnsupportedCheck,window); - if (((monitorconfig*)window->config->data)->resolutionCapabilities){ - // printf("%s\n",((monitorconfig*)window->config->data)->resolution); - found = yon_gtk_combo_box_text_find(window->templateMonitorConfigurationResolutionCombo, ((monitorconfig*)window->config->data)->resolution); - }else{ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationShowUnsupportedCheck),1); - found = yon_gtk_combo_box_text_find(window->templateMonitorConfigurationResolutionCombo, ((monitorconfig*)window->config->data)->resolution); - } - if (found==-1) - found=0; - gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationResolutionCombo),found); - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationFrequencyCombo)); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationFrequencyCombo),PARAMETER_DEFAULT_LABEL); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationFrequencyCombo),"60"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationFrequencyCombo),"75"); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationFrequencyCombo),0); - found = yon_gtk_combo_box_text_find(window->templateMonitorConfigurationPositionPortCombo, yon_dictionary_get_data(window->config,monitorconfig*)->position_port); - if (found==-1) - found=0; - gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationPositionPortCombo),found); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationPositionPosCombo),yon_dictionary_get_data(window->config,monitorconfig*)->position); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationRotationCombo),yon_dictionary_get_data(window->config,monitorconfig*)->rotation); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationDoNotSwitchOffCheck),yon_dictionary_get_data(window->config,monitorconfig*)->dpms); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationMainCheck),yon_dictionary_get_data(window->config,monitorconfig*)->main); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationModelineCVTCheck),yon_dictionary_get_data(window->config,monitorconfig*)->cvt); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationUseCVTReducedCheck),yon_dictionary_get_data(window->config,monitorconfig*)->reduced); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationModelineGTFCheck),yon_dictionary_get_data(window->config,monitorconfig*)->gtf); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->templateMonitorConfigurationEnableCheck),yon_dictionary_get_data(window->config,monitorconfig*)->enable); - if(yon_dictionary_get_data(window->config,monitorconfig*)->stringparameters) - gtk_entry_set_text(GTK_ENTRY(window->templateMonitorConfigurationParameterLineEntry),yon_dictionary_get_data(window->config,monitorconfig*)->stringparameters); - } + } 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); -/**void yon_monitor_view_draw_all(GtkWidget *cnt) - * [EN] -*/ -void yon_monitor_view_draw_all(){ - monitor_view dict=NULL; - GtkWidget *container=NULL; + } 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); + yon_gtk_combo_box_text_find(window->PositionPortCombo,parsed[i]); + 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); - if(videoconfig.monitor_visuals){ - for_dictionaries(dict,videoconfig.monitor_visuals){ - monitor_window *window = yon_dictionary_get_data(dict,monitor_window*); - container = gtk_widget_get_parent(window->templateMonitorscreenOverlay); - if(container){ - g_object_ref(G_OBJECT(window->templateMonitorscreenOverlay)); - gtk_container_remove(GTK_CONTAINER(container),window->templateMonitorscreenOverlay); - } - } - dictionary *boxes=NULL; - if (videoconfig.monitor_output_layers) - for_dictionaries(boxes,videoconfig.monitor_output_layers){ - gtk_widget_destroy((GtkWidget*)boxes->data); - if (boxes->prev) - free(boxes->prev); - boxes->prev=NULL; - } - free(boxes); - videoconfig.monitor_output_layers=NULL; - int overall_width=0; - yon_dictionary_add_or_create_if_exists_with_data(videoconfig.monitor_output_layers,"Box",gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0)); - gtk_box_pack_start(GTK_BOX(videoconfig.pack_box),&*(GtkWidget*)videoconfig.monitor_output_layers->data,0,0,0); - gtk_widget_show((GtkWidget*)videoconfig.monitor_output_layers->data); - for_dictionaries(dict,videoconfig.monitor_visuals){ - monitor_window *window = yon_dictionary_get_data(dict,monitor_window*); - if(dict->first==dict) {} - else { - overall_width+=138; - GtkWidget *boxpack=(GtkWidget*)videoconfig.monitor_output_layers->data; - gtk_box_pack_start(GTK_BOX(boxpack),window->templateMonitorscreenOverlay,0,0,0); - } - int width=0; - GdkWindow *cur_window = gtk_widget_get_window(videoconfig.pack_box); - if(cur_window) - width = gdk_window_get_width(cur_window); - if (overall_width+138>width){ - overall_width=0; - GtkWidget *boxpack=NULL; - yon_dictionary_add_or_create_if_exists_with_data(videoconfig.monitor_output_layers,"Box",(boxpack=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0))); - gtk_widget_show((GtkWidget*)videoconfig.monitor_output_layers->data); - gtk_box_pack_start(GTK_BOX(videoconfig.pack_box),boxpack,0,0,0); - } - - } - gtk_widget_show((GtkWidget*)videoconfig.monitor_output_layers->data); - monitor_window *window = yon_dictionary_get_data(videoconfig.monitor_visuals->first,monitor_window*); - gtk_box_pack_start(GTK_BOX(((GtkWidget*)videoconfig.monitor_output_layers->data)),window->templateMonitorscreenOverlay,0,0,0); - } - yon_monitor_view_update(); -} + } 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); -/**void yon_monitor_view_setup(GtkWidget *container) - * [EN] -*/ -void yon_monitor_view_setup(GtkWidget *container){ - if(container){ - monitor_config config=NULL; - yon_monitor_view_new(NULL); - if (videoconfig.monitors){ - for_dictionaries(config,videoconfig.monitors){ - if (yon_dictionary_get_data(config,monitorconfig*)->stringparameters) - yon_monitor_view_new(config); - } - } - yon_monitor_view_draw_all(container); - } -} + } 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 yon_monitor_view_update() - * [EN] -*/ -void yon_monitor_view_update(){ - monitor_view dict=NULL; - for_dictionaries(dict,videoconfig.monitor_visuals){ - if(dict!=videoconfig.monitor_visuals->first){ - monitor_window *monitor = yon_dictionary_get_data(dict,monitor_window*); - monitorconfig *config = yon_dictionary_get_data(monitor->config,monitorconfig*); - if (strcmp(monitor->config->key,PARAMETER_DEFAULT_LABEL)!=0) - gtk_label_set_text(GTK_LABEL(monitor->templateMonitorInfoNameLabel),yon_char_append(MONITOR_LABEL,monitor->config->key)); - else - gtk_label_set_text(GTK_LABEL(monitor->templateMonitorInfoNameLabel),yon_char_append(MONITOR_LABEL,"")); - monitorconfig *params=yon_dictionary_get_data(yon_dictionary_get_data(dict,monitor_window*)->config,monitorconfig*); - gtk_widget_set_sensitive(yon_dictionary_get_data(dict,monitor_window*)->templateMonitorImage,params->enable); - if (config->resolution){ - char *freq=""; - if (config->frequency>0){ - if (config->frequency==1) freq ="60"; - else if (config->frequency==2) freq="75"; } - gtk_label_set_text(GTK_LABEL(monitor->templateMonitorInfoResolutionLabel),yon_char_unite(config->resolution,":",freq,NULL)); - }else if (params->stringparameters){ - int size=0; - config_str rtn=yon_char_parse(params->stringparameters,&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 - gtk_label_set_text(GTK_LABEL(monitor->templateMonitorInfoResolutionLabel),PARAMETER_DEFAULT_LABEL); } - else - gtk_label_set_text(GTK_LABEL(monitor->templateMonitorInfoResolutionLabel),PARAMETER_DEFAULT_LABEL); } } } -/**char *yon_monitor_make_string(monitorconfig* config) - * [EN] -*/ -char *yon_monitor_make_string(monitorconfig* config) -{ - int first=1; - char *main=""; - if (config->main==1){ - main="primary"; - first=0; - } - - char *resolution=""; - if(config->resolution) - if (first==1){ - resolution=config->resolution; - first=0; - }else{ - resolution=yon_char_append(",",config->resolution); - } - - char *enable=""; - if (config->enable==1) - if (first==1){ - enable="enable"; - first=0; - }else{ - enable=",enable"; - } - else - if (first==1){ - enable="disable"; - first=0; - }else{ - enable=",disable"; - } - - char *position=""; - if (config->position==1) - if (first==1){ - position=yon_char_append("lo:",config->position_port); - first=0; - }else{ - position=yon_char_append(",lo:",config->position_port); - } - else if (config->position==2) - if (first==1){ - position=yon_char_append("ro:",config->position_port); - first=0; - }else{ - position=yon_char_append(",ro:",config->position_port); - } - else if (config->position==3) - if (first==1){ - position=yon_char_append("ab:",config->position_port); - first=0; - }else{ - position=yon_char_append(",ab:",config->position_port); - } - else if (config->position==4) - if (first==1){ - position=yon_char_append("be:",config->position_port); - first=0; - }else{ - position=yon_char_append(",be:",config->position_port); - } - - char *rotation=""; - if (config->rotation==0) - if (first==1){ - rotation="rotate:normal"; - first=0; - }else{ - rotation=",rotate:normal"; - } - else if (config->rotation==1) - if (first==1){ - rotation="rotate:left"; - first=0; - }else{ - rotation=",rotate:left"; - } - else if (config->rotation==2) - if (first==1){ - rotation="rotate:right"; - first=0; - }else{ - rotation=",rotate:right"; - } - else if (config->rotation==3) - if (first==1){ - rotation="rotate:invert"; - first=0; - }else{ - rotation=",rotate:invert"; - } - - char *dpms=""; - if (config->dpms==1) - if (first==1){ - dpms="dpms"; - first=0; - }else{ - dpms=",dpms"; - } +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); + + gtk_window_set_title(GTK_WINDOW(monitors->MainWindow),TITLE_LABEL); + + char *target = (char*)gtk_label_get_text(GTK_LABEL(window->NameLabel)); - char *cvt=""; - if (config->cvt==1) - if (first==1){ - cvt="cvt"; - first=0; - }else{ - cvt=",cvt"; + 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;ireduced==1) - if (first==1){ - reduced="reduced"; - first=0; - }else{ - reduced=",reduced"; + } } - - char *gtf=""; - if (config->gtf==1) - if (first==1){ - gtf="gtf"; - first=0; - }else{ - gtf=",gtf"; + if (gtk_combo_box_get_active(GTK_COMBO_BOX(monitors->PortCombo))){ + for (int i=0;iPortCombo)))) + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->PositionPortCombo),main_config.ports[i]); + } } + if (!yon_char_is_empty(target)){ + gtk_widget_set_sensitive(monitors->PortCombo,0); + g_signal_handlers_block_by_func(G_OBJECT(monitors->PortCombo),on_port_chosen_changed,monitors); + int found = yon_gtk_combo_box_text_find(monitors->PortCombo,target); + if (found>-1){ + gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->PortCombo),found-1); + g_signal_handlers_unblock_by_func(G_OBJECT(monitors->PortCombo),on_port_chosen_changed,monitors); + gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->PortCombo),found); + char *config_string = yon_config_get_by_key(XORG_MONITOR(target)); + if (!yon_char_is_empty(config_string)){ + yon_monitor_parse(monitors,config_string); + } + } + } + // yon_monitor_data_update(monitors); - char *frequency=""; - if (config->frequency){ - if (config->frequency==1) frequency="x60"; - else if (config->frequency==2) frequency="x75"; + gtk_widget_show(monitors->MainWindow); } - if (strcmp(resolution,"")!=0) - resolution=yon_char_append(resolution,frequency); - - - char *stringparameters=yon_char_unite("",main,resolution,enable,position,rotation,dpms,cvt,reduced,gtf,NULL); - config->stringparameters=yon_char_new(stringparameters); } -/**void on_config_fill_interface(widgets_dict *widgets) +/**void yon_monitor_view_update() * [EN] */ -void on_config_fill_interface(widgets_dict *widgets) -{ - gtk_widget_grab_focus(widgets->mainHeaderSettingsButton); - char *str = videoconfig.optirun; - gtk_entry_set_text(GTK_ENTRY(widgets->mainExtraLaunchOptirunEntry), ""); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->mainExtraLaunchOptirunCheck), 0); - if (str) - { - yon_char_divide_search((str = yon_char_new(videoconfig.optirun)), "=", -1); - gtk_entry_set_text(GTK_ENTRY(widgets->mainExtraLaunchOptirunEntry), str); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->mainExtraLaunchOptirunCheck), 1); - } - str = videoconfig.primusrun; - gtk_entry_set_text(GTK_ENTRY(widgets->mainExtraLaunchPrismusunEntry), ""); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->mainExtraLaunchPrismusunCheck), 0); - if (str) - { - yon_char_divide_search((str = yon_char_new(videoconfig.primusrun)), "=", 1); - gtk_entry_set_text(GTK_ENTRY(widgets->mainExtraLaunchPrismusunEntry), str); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->mainExtraLaunchPrismusunCheck), 1); - } - - - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo)); - - 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) - { - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverFailsafeNvidiaCombo), 1); - } - else - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverFailsafeNvidiaCombo), 0); - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeAMDCombo)); - - 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) - { - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverFailsafeAMDCombo), 1); +void yon_monitor_view_update(){ + GList *list = gtk_container_get_children(GTK_CONTAINER(main_config.widgets->MonitorsBox)); + for (int i=0;imainDriverFailsafeAMDCombo), 0); - if (videoconfig.autoChooseDrivers==1){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->mainDriverAutomaticallyChooseCheck),1); + g_list_free(list); + yon_monitor_new(main_config.widgets,1); + int size; + config_str parameters = yon_config_get_all_by_key(XORG_PARAMETER,&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); + } } - else - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->mainDriverAutomaticallyChooseCheck),0); - dictionary *dict = NULL; } void yon_proprietary_local_get(){ @@ -1105,19 +925,19 @@ void yon_proprietary_local_get(){ if (strcmp(current[0],"")){ int target = yon_char_parsed_check_exist(drivers,drivers_size,current[0]); if (target>-1){ - yon_dictionary_add_or_create_if_exists_with_data(videoconfig.proprietary,drivers[target],rtn[dr_desc]); + yon_dictionary_add_or_create_if_exists_with_data(main_config.proprietary,drivers[target],rtn[dr_desc]); } } else if (strcmp(current[1],"")){ int target = yon_char_parsed_check_exist(drivers,drivers_size,current[1]); if (target>-1){ - yon_dictionary_add_or_create_if_exists_with_data(videoconfig.proprietary,drivers[target],rtn[dr_desc]); + yon_dictionary_add_or_create_if_exists_with_data(main_config.proprietary,drivers[target],rtn[dr_desc]); } } } - if (videoconfig.proprietary){ - yon_gtk_list_store_fill_with_proprietaries(videoconfig.list); - videoconfig.proprietary=NULL; + if (main_config.proprietary){ + yon_gtk_list_store_fill_with_proprietaries(main_config.list); + main_config.proprietary=NULL; } } @@ -1126,15 +946,15 @@ void yon_proprietary_local_get(){ */ dictionary *yon_proprieary_get(){ yon_ubl_status_box_render(PROPRIETARY_LOADING_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); - videoconfig.proprietary=NULL; + main_config.proprietary=NULL; int drivers_size=0; int size=0; config_str drivers=NULL; config_str rtn=NULL; rtn = yon_config_load(get_proprietary_drivers_info_command,&size); - if (videoconfig.proprietary){ - yon_gtk_list_store_fill_with_proprietaries(videoconfig.list); - videoconfig.proprietary=NULL; + if (main_config.proprietary){ + yon_gtk_list_store_fill_with_proprietaries(main_config.list); + main_config.proprietary=NULL; } drivers=yon_config_load(get_proprietary_drivers_command,&drivers_size); for (int i=0;i-1){ - yon_dictionary_add_or_create_if_exists_with_data(videoconfig.proprietary,drivers[target],rtn[di]); + yon_dictionary_add_or_create_if_exists_with_data(main_config.proprietary,drivers[target],rtn[di]); } else { - yon_dictionary_add_or_create_if_exists_with_data(videoconfig.proprietary,current[0],rtn[di]); + yon_dictionary_add_or_create_if_exists_with_data(main_config.proprietary,current[0],rtn[di]); } } else if (strcmp(current[1],"")){ int target = yon_char_parsed_check_exist(drivers,drivers_size,current[1]); if (target>-1){ - yon_dictionary_add_or_create_if_exists_with_data(videoconfig.proprietary,drivers[target],rtn[di]); + yon_dictionary_add_or_create_if_exists_with_data(main_config.proprietary,drivers[target],rtn[di]); } else { - yon_dictionary_add_or_create_if_exists_with_data(videoconfig.proprietary,current[1],rtn[di]); + yon_dictionary_add_or_create_if_exists_with_data(main_config.proprietary,current[1],rtn[di]); } } } yon_char_parsed_free(current,current_size); } - if (videoconfig.proprietary){ - yon_gtk_list_store_fill_with_proprietaries(videoconfig.list); + if (main_config.proprietary){ + yon_gtk_list_store_fill_with_proprietaries(main_config.list); yon_ubl_status_box_render(PROPRIETARY_OPETAION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } else { drivers=yon_config_load(get_proprietary_drivers_local_command,&drivers_size); @@ -1178,12 +998,12 @@ dictionary *yon_proprieary_get(){ 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_new_with_data(drivers[drivers_found],rtn[i]); - else videoconfig.proprietary=yon_dictionary_append_with_data(videoconfig.proprietary,drivers[drivers_found],rtn[i]); + if (i==0) main_config.proprietary=yon_dictionary_new_with_data(drivers[drivers_found],rtn[i]); + else main_config.proprietary=yon_dictionary_append_with_data(main_config.proprietary,drivers[drivers_found],rtn[i]); } } - yon_gtk_list_store_fill_with_proprietaries(videoconfig.list); + yon_gtk_list_store_fill_with_proprietaries(main_config.list); yon_ubl_status_box_render(PROPRIETARY_USE_LOCAL_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); } else { yon_ubl_status_box_render(PROPRIETARY_LOADING_FAILED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); @@ -1196,278 +1016,72 @@ dictionary *yon_proprieary_get(){ * [EN] */ void yon_gtk_list_store_fill_with_proprietaries(GtkListStore *list){ - if(videoconfig.proprietary){ + if(main_config.proprietary){ dictionary *dict=NULL; - gtk_list_store_clear(videoconfig.list); - gtk_list_store_clear(videoconfig.list2); + gtk_list_store_clear(main_config.list); + gtk_list_store_clear(main_config.list2); int inssize=0; config_str installed=yon_config_load(get_proprietary_installed_command,&inssize); for (int i=0;idata,&size,";"); if (strcmp(str[0],"")!=0&&str[0]){ - gtk_list_store_append(videoconfig.list,&iter); - gtk_list_store_set(videoconfig.list,&iter,1,str[0],2,str[1],3,str[2],4,_(str[3]),5,_(str[4]),-1); + gtk_list_store_append(main_config.list,&iter); + gtk_list_store_set(main_config.list,&iter,1,str[0],2,str[1],3,str[2],4,_(str[3]),5,_(str[4]),-1); if (yon_char_parsed_check_exist(installed,inssize,str[0])!=-1||yon_char_parsed_check_exist(drivers_always_active,drivers_always_active_size,str[1])>-1) - gtk_list_store_set(videoconfig.list,&iter,0,1,-1); + gtk_list_store_set(main_config.list,&iter,0,1,-1); } else{ - gtk_list_store_append(videoconfig.list2,&iter); - gtk_list_store_set(videoconfig.list2,&iter,1,str[0],2,str[1],3,str[2],4,_(str[3]),5,_(str[4]),-1); + gtk_list_store_append(main_config.list2,&iter); + gtk_list_store_set(main_config.list2,&iter,1,str[0],2,str[1],3,str[2],4,_(str[3]),5,_(str[4]),-1); if (yon_char_parsed_check_exist(installed,inssize,str[1])!=-1||yon_char_parsed_check_exist(drivers_always_active,drivers_always_active_size,str[1])>-1){ - gtk_list_store_set(videoconfig.list2,&iter,0,1,-1); + gtk_list_store_set(main_config.list2,&iter,0,1,-1); } } } } } -char *yon_char_remove_brackets(char* source){ - if (source){ - char *src=yon_char_new(source); - if (src[0]=='\"') yon_char_divide_search(src,"\"",-1); - if (src[strlen(src)-1]=='\"') src=yon_char_divide_search(src,"\"",-1); - return src; - } - return NULL; -} - void yon_monitor_view_dictionary_destroy(void *window){ - monitor_window *monitor=(monitor_window*)window; - gtk_widget_destroy(monitor->templateMonitorscreenOverlay); + monitor_data *monitor=(monitor_data*)window; + gtk_widget_destroy(monitor->ScreenOverlay); } -/**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; - videoconfig.dblock=0; - 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;imain=0; - monitor->enable=0; - monitor->position=0; - monitor->port=NULL; - monitor->position_port=NULL; - monitor->resolution=NULL; - monitor->resolutionCapabilities=NULL; - monitor->frequency=0; - monitor->rotation=0; - monitor->stringparameters=NULL; - monitor->dpms=0; - monitor->resolution_size=0; - monitor->cvt=0; - monitor->reduced=0; - monitor->gtf=0; - if (videoconfig.monitors) - videoconfig.monitors=yon_dictionary_append_with_data(videoconfig.monitors,port,monitor); - else - videoconfig.monitors=yon_dictionary_new_with_data(port,monitor); - return videoconfig.monitors; - } -} - -/**void yon_monitor_config_update(monitorconfig* monitor, char *port, char *config_string) - * [EN] -*/ -void yon_monitor_config_update(monitorconfig* monitor, char *port, char *config_string){ - if (port&&config_string){ - monitor->stringparameters=yon_char_new(config_string); - int size=0; - config_str cnf = yon_char_parse(config_string,&size,","); - if (yon_char_parsed_check_exist(cnf,size,"primary")!=-1) - monitor->main=1; - if (yon_char_parsed_check_exist(cnf,size,"enable")!=-1) - monitor->enable=1; - if (yon_char_parsed_check_exist(cnf,size,"disable")!=-1) - monitor->enable=0; - if (yon_char_parsed_check_exist(cnf,size,"LeftOf:")!=-1) - monitor->position=1; - if (yon_char_parsed_check_exist(cnf,size,"lo:")!=-1) - monitor->position=1; - if (yon_char_parsed_check_exist(cnf,size,"RightOf:")!=-1) - monitor->position=2; - if (yon_char_parsed_check_exist(cnf,size,"ro:")!=-1) - monitor->position=2; - if (yon_char_parsed_check_exist(cnf,size,"Below:")!=-1) - monitor->position=4; - if (yon_char_parsed_check_exist(cnf,size,"be:")!=-1) - monitor->position=4; - if (yon_char_parsed_check_exist(cnf,size,"Above:")!=-1) - monitor->position=3; - if (yon_char_parsed_check_exist(cnf,size,"ab:")!=-1) - monitor->position=3; - if (yon_char_parsed_check_exist(cnf,size,"rotate:left")!=-1) - monitor->rotation=1; - if (yon_char_parsed_check_exist(cnf,size,"rotate:right")!=-1) - monitor->rotation=2; - if (yon_char_parsed_check_exist(cnf,size,"rotate:invert")!=-1) - monitor->rotation=3; - if (yon_char_parsed_check_exist(cnf,size,"dpms")!=-1) - monitor->dpms=1; - if (yon_char_parsed_check_exist(cnf,size,"nodpms")!=-1) - monitor->dpms=0; - if (yon_char_parsed_check_exist(cnf,size,"cvt")!=-1) - monitor->cvt=1; - if (yon_char_parsed_check_exist(cnf,size,"reduced")!=-1) - monitor->reduced=1; - if (yon_char_parsed_check_exist(cnf,size,"r,")!=-1) - monitor->reduced=1; - if (yon_char_parsed_check_exist(cnf,size,"gtf")!=-1) - monitor->gtf=1; - } -} - - -char *yon_char_parsed_get_resolution(config_str parsed_string, int size){ - char *left=NULL, *right=NULL, *freq=NULL; - for (int i=0;itemplateMonitorscreenOverlay=yon_gtk_builder_get_widget(builder,"templateMonitorscreenOverlay"); - window->templateMonitorImage=yon_gtk_builder_get_widget(builder,"templateMonitorImage"); - window->templateMonitorInfoBox=yon_gtk_builder_get_widget(builder,"templateMonitorInfoBox"); - window->templateMonitorInfoNameLabel=yon_gtk_builder_get_widget(builder,"templateMonitorInfoNameLabel"); - window->templateMonitorInfoResolutionLabel=yon_gtk_builder_get_widget(builder,"templateMonitorInfoResolutionLabel"); - window->templateMonitorDeleteButton=yon_gtk_builder_get_widget(builder,"templateMonitorDeleteButton"); - window->templateMonitorSwitchButton=yon_gtk_builder_get_widget(builder,"templateMonitorSwitchButton"); - window->templateMonitorInfoConfigureButton=yon_gtk_builder_get_widget(builder,"templateMonitorInfoConfigureButton"); - window->templateMonitorInfoAddButton=yon_gtk_builder_get_widget(builder,"templateMonitorInfoAddButton"); - window->config=NULL; - gtk_overlay_add_overlay(GTK_OVERLAY(window->templateMonitorscreenOverlay),window->templateMonitorInfoBox); - gtk_widget_set_tooltip_text(window->templateMonitorDeleteButton,DELETE_LABEL); - gtk_widget_set_tooltip_text(window->templateMonitorInfoConfigureButton,CONFIGURE_LABEL); - gtk_widget_set_tooltip_text(window->templateMonitorSwitchButton,SWITCH_LABEL); - gtk_widget_set_tooltip_text(window->templateMonitorInfoAddButton,ADD_LABEL); - if (monitor){ - window->config=monitor; - gtk_widget_hide(window->templateMonitorInfoAddButton); - g_signal_connect(G_OBJECT(window->templateMonitorInfoConfigureButton), "clicked", G_CALLBACK(on_monitor_configure), window); - if (videoconfig.monitor_visuals) videoconfig.monitor_visuals = yon_dictionary_append_with_data(videoconfig.monitor_visuals, window->config->key,window); - else videoconfig.monitor_visuals = yon_dictionary_new_with_data(window->config->key,window); - - g_signal_connect(G_OBJECT(window->templateMonitorDeleteButton), "clicked", G_CALLBACK(on_monitor_delete), videoconfig.monitor_visuals); - g_signal_connect(G_OBJECT(window->templateMonitorSwitchButton), "clicked", G_CALLBACK(on_monitor_switch), window); + 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->templateMonitorInfoAddButton); - gtk_widget_hide(window->templateMonitorDeleteButton); - gtk_widget_hide(window->templateMonitorSwitchButton); - gtk_widget_hide(window->templateMonitorInfoConfigureButton); - g_signal_connect(G_OBJECT(window->templateMonitorInfoAddButton), "clicked", G_CALLBACK(on_monitor_add), window); - if (videoconfig.monitor_visuals) videoconfig.monitor_visuals = yon_dictionary_append_with_data(videoconfig.monitor_visuals, "GENERIC",window); - else videoconfig.monitor_visuals = yon_dictionary_new_with_data("GENERIC",window); + 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(){ @@ -1487,7 +1101,7 @@ void yon_monitor_set_resolutions(){ resolution_supported *supported=new(resolution_supported); supported->line=resol; supported->size=0; - yon_dictionary_add_or_create_if_exists_with_data(videoconfig.supported_resolutions,connected_ports[i],supported); + 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;ikey); } if(port_for_res){ - dct=yon_dictionary_get(&videoconfig.supported_resolutions,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); @@ -1514,7 +1128,7 @@ void yon_monitor_set_resolutions(){ } -void yon_adapter_window_setup(widgets_dict *widgets){ +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); @@ -1548,7 +1162,7 @@ void yon_adapter_window_setup(widgets_dict *widgets){ "\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(gtk_builder_get_object(widgets->builder,"InformationLabel")),final_text); + 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)); @@ -1600,7 +1214,7 @@ void yon_adapter_window_setup(widgets_dict *widgets){ "\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(gtk_builder_get_object(widgets->builder,"InformationLabel2")),final_text); + 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)); @@ -1622,133 +1236,81 @@ void yon_adapter_window_setup(widgets_dict *widgets){ } } else { gtk_widget_hide(widgets->InformationOverlay2); - gtk_widget_hide(GTK_WIDGET(gtk_builder_get_object(widgets->builder,"InformationLabel2"))); + // gtk_widget_hide(GTK_WIDGET(gtk_builder_get_object(widgets->builder,"InformationLabel2"))); } } -/** void yon_setup_widgets(widgets_dict *widgets) +/** void yon_setup_widgets(main_window *widgets) * [EN] * Sets up every element on main window * [RU] * * */ -void yon_setup_widgets(widgets_dict *widgets) -{ - widgets->builder = gtk_builder_new_from_resource(glade_path); - widgets->appsPackWindow = yon_gtk_builder_get_widget(widgets->builder, "appsPackWindow"); - widgets->appsPackBox = yon_gtk_builder_get_widget(widgets->builder, "appsPackBox"); - widgets->MainWindow = yon_gtk_builder_get_widget(widgets->builder, "MainWindow"); - widgets->headBox = yon_gtk_builder_get_widget(widgets->builder, "headBox"); - widgets->headTitleLabel = yon_gtk_builder_get_widget(widgets->builder, "headTitleLabel"); - widgets->headInfoLabel = yon_gtk_builder_get_widget(widgets->builder, "headInfoLabel"); - widgets->mainPlugBox = yon_gtk_builder_get_widget(widgets->builder, "mainPlugBox"); - widgets->mainErrorBox = yon_gtk_builder_get_widget(widgets->builder, "mainErrorBox"); - widgets->mainHeadOverlay = yon_gtk_builder_get_widget(widgets->builder, "mainHeadOverlay"); - widgets->extraOptirunChooseAppsButton = yon_gtk_builder_get_widget(widgets->builder, "extraOptirunChooseAppsButton"); - widgets->extraPrimusunChooseAppsButton = yon_gtk_builder_get_widget(widgets->builder, "extraPrimusunChooseAppsButton"); - widgets->mainHeadBackgroundImage = yon_gtk_builder_get_widget(widgets->builder, "mainHeadBackgroundImage"); - widgets->mainDriverAutomaticallyChooseCheck = yon_gtk_builder_get_widget(widgets->builder, "mainDriverAutomaticallyChooseCheck"); - widgets->mainDriverFailsafeNvidiaLabel = yon_gtk_builder_get_widget(widgets->builder, "mainDriverFailsafeNvidiaLabel"); - widgets->mainDriverFailsafeAMDLabel = yon_gtk_builder_get_widget(widgets->builder, "mainDriverFailsafeAMDLabel"); - widgets->mainExtraFixGapCombo = yon_gtk_builder_get_widget(widgets->builder, "mainExtraFixGapCombo"); - widgets->mainDriverFailsafeNvidiaCombo = yon_gtk_builder_get_widget(widgets->builder, "mainDriverFailsafeNvidiaCombo"); - widgets->mainDriverFailsafeAMDCombo = yon_gtk_builder_get_widget(widgets->builder, "mainDriverFailsafeAMDCombo"); - widgets->mainDriverFrameLabel = yon_gtk_builder_get_widget(widgets->builder, "mainDriverFrameLabel"); - widgets->monitorConfigurationMethodLabel = yon_gtk_builder_get_widget(widgets->builder, "monitorConfigurationMethodLabel"); - widgets->monitorConfigurationMethodCombo = yon_gtk_builder_get_widget(widgets->builder, "monitorConfigurationMethodCombo"); - widgets->mainMonitorVisualConfigurationBox = yon_gtk_builder_get_widget(widgets->builder, "mainMonitorVisualConfigurationBox"); - widgets->mainMonitorConfigurationBox = yon_gtk_builder_get_widget(widgets->builder, "mainMonitorConfigurationBox"); - widgets->mainMonitorConfigurationFrameLabel = yon_gtk_builder_get_widget(widgets->builder, "mainMonitorConfigurationFrameLabel"); - widgets->mainHybridGraphicsDiscreteLabel = yon_gtk_builder_get_widget(widgets->builder, "mainHybridGraphicsDiscreteLabel"); - widgets->mainHybridGraphicsDiscreteCheck = yon_gtk_builder_get_widget(widgets->builder, "mainHybridGraphicsDiscreteCheck"); - widgets->mainHybridGraphicsFrameLabel = yon_gtk_builder_get_widget(widgets->builder, "mainHybridGraphicsFrameLabel"); - widgets->mainExtraLaunchOptirunCheck = yon_gtk_builder_get_widget(widgets->builder, "mainExtraLaunchOptirunCheck"); - widgets->mainExtraLaunchPrismusunCheck = yon_gtk_builder_get_widget(widgets->builder, "mainExtraLaunchPrismusunCheck"); - widgets->mainExtraFixGapLabel = yon_gtk_builder_get_widget(widgets->builder, "mainExtraFixGapLabel"); - widgets->mainExtraLaunchOptirunEntry = yon_gtk_builder_get_widget(widgets->builder, "mainExtraLaunchOptirunEntry"); - widgets->mainExtraLaunchPrismusunEntry = yon_gtk_builder_get_widget(widgets->builder, "mainExtraLaunchPrismusunEntry"); - widgets->mainExtraFixGapLabelCombo = yon_gtk_builder_get_widget(widgets->builder, "mainExtraFixGapLabelCombo"); - widgets->mainExtraLaunchThroughButton = yon_gtk_builder_get_widget(widgets->builder, "mainExtraLaunchThroughButton"); - widgets->mainExtraFrameLabel = yon_gtk_builder_get_widget(widgets->builder, "mainExtraFrameLabel"); - widgets->mainHeaderTitleLabel = yon_gtk_builder_get_widget(widgets->builder, "mainHeaderTitleLabel"); - widgets->mainHeaderLoadButton = yon_gtk_builder_get_widget(widgets->builder, "mainHeaderLoadButton"); - widgets->mainHeaderConfigLoadLabel = yon_gtk_builder_get_widget(widgets->builder, "mainHeaderConfigLoadLabel"); - widgets->mainHeaderSaveConfigurationLabel = yon_gtk_builder_get_widget(widgets->builder, "mainHeaderSaveConfigurationLabel"); - widgets->mainHeaderSaveButton = yon_gtk_builder_get_widget(widgets->builder, "mainHeaderSaveButton"); - widgets->mainHeaderSettingsButton = yon_gtk_builder_get_widget(widgets->builder, "mainHeaderSettingsButton"); - widgets->mainHeaderLoadGlobalMenuItem = yon_gtk_builder_get_widget(widgets->builder, "mainHeaderLoadGlobalMenuItem"); - widgets->mainHeaderLoadLocalMenuItem = yon_gtk_builder_get_widget(widgets->builder, "mainHeaderLoadLocalMenuItem"); - widgets->mainHeaderSaveGlobalLocalMenuItem = yon_gtk_builder_get_widget(widgets->builder, "mainHeaderSaveGlobalLocalMenuItem"); - widgets->mainHeaderSaveGlobalMenuItem = yon_gtk_builder_get_widget(widgets->builder, "mainHeaderSaveGlobalMenuItem"); - widgets->mainHeaderSaveLocalMenuItem = yon_gtk_builder_get_widget(widgets->builder, "mainHeaderSaveLocalMenuItem"); - widgets->mainHeaderSettingsDocumentationMenuItem = yon_gtk_builder_get_widget(widgets->builder, "mainHeaderSettingsDocumentationMenuItem"); - widgets->mainHeaderSettingsAboutMenuItem = yon_gtk_builder_get_widget(widgets->builder, "mainHeaderSettingsAboutMenuItem"); - widgets->mainStatusBox = yon_gtk_builder_get_widget(widgets->builder, "mainStatusBox"); - widgets->mainStatusIcon = yon_gtk_builder_get_widget(widgets->builder, "mainStatusIcon"); - widgets->mainStatusLabel = yon_gtk_builder_get_widget(widgets->builder, "mainStatusLabel"); - widgets->templateMonitorConfigurationBox = yon_gtk_builder_get_widget(widgets->builder, "templateMonitorConfigurationBox"); - widgets->templateMonitorConfigurationMonitorLabel = yon_gtk_builder_get_widget(widgets->builder, "templateMonitorConfigurationMonitorLabel"); - widgets->templateMonitorConfigurationResolutionLabel = yon_gtk_builder_get_widget(widgets->builder, "templateMonitorConfigurationResolutionLabel"); - widgets->templateMonitorConfigurationResolutionCombo = yon_gtk_builder_get_widget(widgets->builder, "templateMonitorConfigurationResolutionCombo"); - widgets->templateMonitorConfigurationFrequencyLabel = yon_gtk_builder_get_widget(widgets->builder, "templateMonitorConfigurationFrequencyLabel"); - widgets->templateMonitorConfigurationFrequencyCombo = yon_gtk_builder_get_widget(widgets->builder, "templateMonitorConfigurationFrequencyCombo"); - widgets->templateMonitorConfigurationRotationLabel = yon_gtk_builder_get_widget(widgets->builder, "templateMonitorConfigurationRotationLabel"); - widgets->templateMonitorConfigurationRotationCombo = yon_gtk_builder_get_widget(widgets->builder, "templateMonitorConfigurationRotationCombo"); - widgets->templateMonitorConfigurationMainRadio = yon_gtk_builder_get_widget(widgets->builder, "templateMonitorConfigurationMainRadio"); - widgets->templateMonitorConfigurationParameterLineCheck = yon_gtk_builder_get_widget(widgets->builder, "templateMonitorConfigurationParameterLineCheck"); - widgets->templateMonitorConfigurationParameterLineEntry = yon_gtk_builder_get_widget(widgets->builder, "templateMonitorConfigurationParameterLineEntry"); - 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"); - 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->TerminalOverlay = yon_gtk_builder_get_widget(widgets->builder, "TerminalOverlay"); - widgets->MenusTab = yon_gtk_builder_get_widget(widgets->builder, "MenusTab"); - widgets->driversTreeSelection = GTK_TREE_SELECTION(gtk_builder_get_object(widgets->builder, "driversTreeSelection")); - widgets->LoadDriversButton = yon_gtk_builder_get_widget(widgets->builder,"LoadDriversButton"); - widgets->proprietaryNotebook = yon_gtk_builder_get_widget(widgets->builder,"notebook1"); - - 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->DriverModulesTab = GTK_WIDGET(gtk_builder_get_object(widgets->builder, "DriverModulesTab")); - widgets->DriversTab = GTK_WIDGET(gtk_builder_get_object(widgets->builder, "DriversTab")); - widgets->MainTabLabel = GTK_WIDGET(gtk_builder_get_object(widgets->builder, "MainTabLabel")); - widgets->DriversTabLabel = GTK_WIDGET(gtk_builder_get_object(widgets->builder, "DriversTabLabel")); - widgets->InformationTabLabel = GTK_WIDGET(gtk_builder_get_object(widgets->builder, "InformationTabLabel")); - widgets->InformationFrameLabel = GTK_WIDGET(gtk_builder_get_object(widgets->builder, "InformationFrameLabel")); - widgets->InformationOverlay = GTK_WIDGET(gtk_builder_get_object(widgets->builder, "InformationOverlay")); - widgets->InformationCompanyLogoImage = GTK_WIDGET(gtk_builder_get_object(widgets->builder, "InformationCompanyLogoImage")); - widgets->InformationOverlay2 = GTK_WIDGET(gtk_builder_get_object(widgets->builder, "InformationOverlay2")); - widgets->InformationCompanyLogoImage2 = GTK_WIDGET(gtk_builder_get_object(widgets->builder, "InformationCompanyLogoImage2")); - - 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.pack_box=widgets->mainMonitorVisualConfigurationBox; - // g_signal_connect(G_OBJECT(widgets->MainWindow), "check-resize", G_CALLBACK(on_resized), NULL); - gtk_window_set_title(GTK_WINDOW(widgets->MainWindow),SETTINGS_VIDEO_TITLE_LABEL); - - videoconfig.list = GTK_LIST_STORE(gtk_builder_get_object(widgets-> builder, "liststore6")); - videoconfig.list2 = GTK_LIST_STORE(gtk_builder_get_object(widgets-> builder, "liststore1")); - - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->proprietaryTreeView),GTK_TREE_MODEL(videoconfig.list)); +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->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(on_proprietary_get), widgets); @@ -1762,196 +1324,68 @@ void yon_setup_widgets(widgets_dict *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); - g_signal_connect(G_OBJECT(widgets->mainExtraLaunchPrismusunCheck), "toggled", G_CALLBACK(on_sensitive_change), widgets->mainExtraLaunchPrismusunEntry); - 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), NULL); - // g_signal_connect(G_OBJECT(widgets->extraPrimusunChooseAppsButton), "clicked", G_CALLBACK(on_apps_chooser_open), widgets); - - g_signal_connect(G_OBJECT(widgets->mainHeaderSettingsAboutMenuItem), "activate", G_CALLBACK(on_about), NULL); - g_signal_connect(G_OBJECT(widgets->mainHeaderSettingsDocumentationMenuItem), "activate", G_CALLBACK(on_link), NULL); - - g_signal_connect(G_OBJECT(widgets->mainHeaderLoadGlobalMenuItem), "activate", G_CALLBACK(on_configuration_load_global), widgets); - g_signal_connect(G_OBJECT(widgets->mainHeaderLoadLocalMenuItem), "activate", G_CALLBACK(on_configuration_load_local), widgets); - - g_signal_connect(G_OBJECT(widgets->mainHeaderSaveGlobalLocalMenuItem), "activate", G_CALLBACK(on_configuration_save_local_global), widgets); - g_signal_connect(G_OBJECT(widgets->mainHeaderSaveGlobalMenuItem), "activate", G_CALLBACK(on_configuration_save_global), widgets); - g_signal_connect(G_OBJECT(widgets->mainHeaderSaveLocalMenuItem), "activate", G_CALLBACK(on_configuration_save_local), widgets); - - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo), OFF_LABEL); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo), FBDEV_LABEL); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeAMDCombo), OFF_LABEL); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeAMDCombo), FBDEV_LABEL); - - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainExtraFixGapCombo), SWITCHED_OFF_LABEL); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainExtraFixGapCombo), GAP_FIX_1_LABEL); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainExtraFixGapCombo), GAP_FIX_2_LABEL); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainExtraFixGapCombo),0); - gtk_label_set_text(GTK_LABEL(widgets->headTitleLabel), SETTINGS_VIDEO_TITLE_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->headInfoLabel), SETTINGS_VIDEO_TITLE_INFO_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->mainDriverFailsafeNvidiaLabel), FAILSAFE_NVIDIA_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->mainDriverFailsafeAMDLabel), FAILSAFE_ATI_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->mainDriverFrameLabel), DRIVER_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->mainMonitorConfigurationFrameLabel), MONITOR_CONFIGURATION_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->mainHybridGraphicsFrameLabel), HYBRID_GRAPHICS_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->mainExtraFixGapLabel), FIX_GAP_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->mainExtraFrameLabel), EXTRA_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->mainHeaderTitleLabel), SETTINGS_VIDEO_TITLE_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->mainHeaderConfigLoadLabel), LOAD_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->mainHeaderSaveConfigurationLabel), SAVE_LABEL); - - gtk_button_set_label(GTK_BUTTON(widgets->mainHybridGraphicsDiscreteCheck), ON_LABEL); - gtk_button_set_label(GTK_BUTTON(widgets->mainDriverAutomaticallyChooseCheck), AUTO_CHOOSE_DRIVERS_LABEL); - gtk_button_set_label(GTK_BUTTON(widgets->mainExtraLaunchOptirunCheck), LAUNCH_OPTIRUN_LABEL); - gtk_button_set_label(GTK_BUTTON(widgets->mainExtraLaunchPrismusunCheck), LAUNCH_PRIMUSRUN_LABEL); - gtk_button_set_label(GTK_BUTTON(widgets->mainHybridGraphicsDiscreteCheck), DISCRETE_ONLY_LABEL); - - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderLoadGlobalMenuItem), LOAD_GLOBAL_LABEL); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderLoadLocalMenuItem), LOAD_LOCAL_LABEL); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSaveGlobalLocalMenuItem), SAVE_GLOBAL_LOCAL_LABEL); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSaveGlobalMenuItem), SAVE_GLOBAL_LABEL); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSaveLocalMenuItem), SAVE_LOCAL_LABEL); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSettingsDocumentationMenuItem), DOCUMENTATION_LABEL); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSettingsAboutMenuItem), ABOUT_LABEL); - - - gtk_label_set_text(GTK_LABEL(widgets->DriverModulesTab), DRIVER_MODULES_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->DriversTab), DRIVERS_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->MainTabLabel), MAIN_SETTINGS_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->DriversTabLabel), DRIVERS_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->InformationTabLabel), INFORMATION_LABEL); - gtk_label_set_text(GTK_LABEL(widgets->InformationFrameLabel), DEVICES_DRIVERS_LABEL); - - gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(widgets->ProprietaryDriverColumn), INSTALLED_LABEL); - gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(widgets->ProprietaryDriverColumn), PACKAGE_LABEL); - gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(widgets->ProprietaryDriverColumn), SUPPORTED_LABEL); - gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(widgets->ProprietaryDriverColumn), DRIVER_LABEL); - gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(widgets->ProprietaryDescriptionColumn), DESCRIPTION_LABEL); - - yon_ubl_header_setup_resource(widgets->mainHeadOverlay, widgets->headBox, widgets->mainHeadBackgroundImage, banner_path); - yon_monitor_view_setup(widgets->mainMonitorVisualConfigurationBox); - - 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); + 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); + // yon_monitor_view_setup(widgets->mainMonitorVisualConfigurationBox); + + yon_adapter_window_setup(widgets); gtk_notebook_set_action_widget(GTK_NOTEBOOK(widgets->proprietaryNotebook),widgets->LoadDriversButton,GTK_PACK_END); + } + yon_save_window_set_postsave_function(on_save_done,widgets); + on_config_local_load(NULL,widgets); } -int main(int argc, char *argv[]) -{ - { - 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, ""); - 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 #endif -#include +#include #include #include #include @@ -17,13 +17,17 @@ #include #include #include -#include "ubl-utils.h" +// #include "ubl-utils.h" #include "ubl-strings.h" +#define VTE_INCLUDE +#include +#include +#include #ifndef UBL_SETINGS_VIDEO_H #define UBL_SETINGS_VIDEO_H -#define UBLINUX_WIKI_LINK " https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-video" -#define UBLINUX_HOMEPAGE_LINK _("https://wiki.ublinux.com") +#define WIKI_LINK " https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-video" +#define HOMEPAGE_LINK _("https://wiki.ublinux.com") #define icon_name "com.ublinux.ubl-settings-video" @@ -49,7 +53,7 @@ #define get_proprietary_drivers_info_command "cut -d';' -f2- /usr/share/ubl-settings-video/csv/video-drivers.csv" -#define get_resolutions_supportable_command "cut -d, -f1- /usr/share/ubl-settings-video/csv/resolutions.csv |sed 's/,/ /g'" +#define get_resolutions_supportable_command "/usr/share/ubl-settings-video/csv/resolutions.csv" #define get_frequences_command "xrandr |grep -v -n \"[a-z][a-z]\" |sed 's/ * / /g' |cut -d' ' -f1,3-" @@ -85,7 +89,44 @@ #define get_adapter_info "lshw -c display -quiet |grep -oE \"vendor:[0-9a-zA-Z ]{1,}|description:[0-9a-zA-Z ]{1,}|product:[]0-9a-zA-Z [-]{1,}\"|sed 's/: /=/g';lspci | grep -E ' VGA | Display ' | cut -d\" \" -f 1 | xargs -i lspci -v -s {} |grep -oE \"Kernel[:a-zA-Z0-9: ,_]{1,}\"|sed 's/: /=/g'|sed 's/ /-/g'" #define get_adapter_info_json "lshw -c display -quiet -json" -#define XORG_MONITOR(port) yon_char_append(" XORG_MONITOR[",yon_char_append(port,"] ")) +#define XORG_MONITOR(port) yon_char_append("XORG_MONITOR[",yon_char_append(port,"]")) +#define VGADRV_AUTO "VGADRV_AUTO" +#define VGADRV_NOFREE "VGADRV_NOFREE" +#define XORG_EXT "XORG_EXT" +#define XORG_DPI "XORG_DPI" +#define FAILSAFEATI "FAILSAFEATI" +#define FAILSAFENVIDIA "FAILSAFENVIDIA" +#define OPTIRUN "OPTIRUN" +#define PRIMUSRUN "PRIMUSRUN" +#define INTEGRATEDVGA "INTEGRATEDVGA" +#define KWIN_TRIPLE_BUFFER "\"export KWIN_TRIPLE_BUFFER" +#define GL_YIELD "\"export __GL_YIELD" + +#define VGADRV_AUTO_command "ubconfig --source global get [video] VGADRV_AUTO" +#define VGADRV_NOFREE_command "ubconfig --source global get [video] VGADRV_NOFREE" +#define XORG_EXT_command "ubconfig --source global get [video] XORG_EXT" +#define XORG_DPI_command "ubconfig --source global get [video] XORG_DPI" +#define FAILSAFEATI_command "ubconfig --source global get [video] FAILSAFEATI" +#define FAILSAFENVIDIA_command "ubconfig --source global get [video] FAILSAFENVIDIA" +#define OPTIRUN_command "ubconfig --source global get [video] OPTIRUN" +#define PRIMUSRUN_command "ubconfig --source global get [video] PRIMUSRUN" +#define INTEGRATEDVGA_command "ubconfig --source global get [video] INTEGRATEDVGA" +#define KWIN_TRIPLE_BUFFER_command "ubconfig --source global get [/etc/profile.d/ublinux.sh] \"export KWIN_TRIPLE_BUFFER\"" +#define GL_YIELD_command "ubconfig --source global get [/etc/profile.d/ublinux.sh] \"export __GL_YIELD\"" + +#define XORG_PARAMETER "XORG_MONITOR" + +#define config_get_command(target) yon_char_append("cat ",target) + +#define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get [video] XORG_MONITOR[*] VGADRV_AUTO VGADRV_NOFREE XORG_EXT XORG_DPI FAILSAFEATI FAILSAFENVIDIA OPTIRUN PRIMUSRUN INTEGRATEDVGA",NULL), yon_char_unite("ubconfig --source ",target," get [/etc/profile.d/ublinux.sh] \"export KWIN_TRIPLE_BUFFER\" \"export __GL_YIELD\"",NULL) +#define config_get_local_command "ubconfig --source system get [video] XORG_MONITOR[*] VGADRV_AUTO VGADRV_NOFREE XORG_EXT XORG_DPI FAILSAFEATI FAILSAFENVIDIA OPTIRUN PRIMUSRUN INTEGRATEDVGA", "ubconfig --source system get [/etc/profile.d/ublinux.sh] \"export KWIN_TRIPLE_BUFFER\" \"export __GL_YIELD\"" +#define config_get_global_command yon_char_new("ubconfig --source global get [video] XORG_MONITOR[*] VGADRV_AUTO VGADRV_NOFREE XORG_EXT XORG_DPI FAILSAFEATI FAILSAFENVIDIA OPTIRUN PRIMUSRUN INTEGRATEDVGA"), "ubconfig --source global get [/etc/profile.d/ublinux.sh] \"export KWIN_TRIPLE_BUFFER\" \"export __GL_YIELD\"" +#define config_get_default_command "" + +#define config_get_global_only_parameters "" +#define config_get_local_only_parameters "" + +#define XORG_MONITOR_get_command "ubconfig --source global get [video] XORG_MONITOR[*]" char *drivers_always_active[] = { "mesa","lib32-vulkan-intel","xf86-video-intel"}; int drivers_always_active_size = 3; @@ -117,7 +158,77 @@ typedef struct { typedef struct { - int alwaysredirect; + template_window_fields + GtkWidget *AutoDriverCombo; + GtkWidget *FreeDriverCombo; + GtkWidget *FailsafeNvidiaCombo; + GtkWidget *FailsafeAMDCombo; + GtkWidget *MonitorsBox; + GtkWidget *DontSwitchDisplaysOffCombo; + GtkWidget *DisplayScalingCombo; + GtkWidget *DisplayDiscreteOnly; + GtkWidget *OptirunCombo; + GtkWidget *OptirunEntry; + GtkWidget *OptirunButton; + GtkWidget *PrimusrunCombo; + GtkWidget *PrimusrunEntry; + GtkWidget *PrimusrunButton; + GtkWidget *FrameGapCombo; + + GtkWidget *proprietaryTreeView; + GtkWidget *proprietaryInfoButton; + GtkWidget *proprietaryDeleteButton; + GtkWidget *proprietaryInstallButton; + GtkTreeSelection *proprietaryTreeSelection; + GtkWidget *driversTreeView; + GtkWidget *driversInfoButton; + GtkWidget *driversDeleteButton; + GtkWidget *driversInstallButton; + GtkTreeSelection *driversTreeSelection; + + GtkTreeViewColumn *proprietartInstalledColumn; + GtkTreeViewColumn *ProprietaryPackageColumn; + GtkTreeViewColumn *ProprietaryDriverColumn; + GtkTreeViewColumn *ProprietaryDescriptionColumn; + GtkTreeViewColumn *ProprietarySupportedColumn; + + GtkTreeViewColumn *driverInstalledColumn; + GtkTreeViewColumn *driverPackageColumn; + GtkTreeViewColumn *driverDriverColumn; + GtkTreeViewColumn *driverDescriptionColumn; + GtkTreeViewColumn *driverSupportedColumn; + + GtkWidget *DriverModulesTab; + GtkWidget *DriversTab; + GtkWidget *MainTabLabel; + GtkWidget *DriversTabLabel; + GtkWidget *InformationTabLabel; + GtkWidget *InformationFrameLabel; + GtkWidget *InformationOverlay; + GtkWidget *InformationCompanyLogoImage; + GtkWidget *InformationOverlay2; + GtkWidget *InformationCompanyLogoImage2; + GtkWidget *InformationLabel; + GtkWidget *InformationLabel2; + + GtkWidget *TerminalOverlay; + GtkWidget *TerminalBox; + GtkWidget *TerminalRevealer; + GtkWidget *TerminalInfoLabel; + GtkWidget *TerminalMoreButton; + GtkWidget *TerminalScroll; + GtkWidget *TerminalMoreRevieler; + + GtkWidget *MenusTab; + + GtkWidget *LoadDriversButton; + GtkWidget *proprietaryNotebook; +} main_window; + +typedef struct +{ + template_config_fields + config_str loaded_config; int configsize; int autoChooseDrivers; @@ -139,16 +250,11 @@ typedef struct int resolutionssize; render_data status_render; - int socket_id; - int save_socket_id; - int load_socket_id; - int lock_save_local; - int lock_save_global; - int lock_load_global; - int lock_help; dictionary *monitor_output_layers; GtkWidget *pack_box; int dblock; + int save_config; + main_window *widgets; } config; typedef struct @@ -176,180 +282,48 @@ typedef struct { GtkWidget *tree; } combo_tree; -typedef struct -{ - dictionary *monitors; - dictionary *overlays; - GtkBuilder *builder; - GtkWidget *appsPackBox; - GtkWidget *appsPackWindow; - GtkWidget *extraOptirunChooseAppsButton; - GtkWidget *extraPrimusunChooseAppsButton; - GtkWidget *MainWindow; - GtkWidget *headBox; - GtkWidget *headTitleLabel; - GtkWidget *headInfoLabel; - GtkWidget *mainPlugBox; - GtkWidget *mainErrorBox; - GtkWidget *mainHeadOverlay; - GtkWidget *mainHeadBackgroundImage; - GtkWidget *mainDriverAutomaticallyChooseCheck; - GtkWidget *mainDriverProprietaryDriverLabel; - GtkWidget *mainDriverFailsafeNvidiaLabel; - GtkWidget *mainDriverFailsafeAMDLabel; - GtkWidget *mainDriverProprietaryDriverCombo; - GtkWidget *mainDriverProprietaryDriverButton; - GtkWidget *mainExtraFixGapCombo; - GtkWidget *mainDriverFailsafeNvidiaCombo; - GtkWidget *mainDriverFailsafeAMDCombo; - GtkWidget *mainDriverFrameLabel; - GtkWidget *monitorConfigurationMethodLabel; - GtkWidget *monitorConfigurationMethodCombo; - GtkWidget *mainMonitorVisualConfigurationBox; - GtkWidget *mainMonitorConfigurationBox; - GtkWidget *mainMonitorConfigurationFrameLabel; - GtkWidget *mainHybridGraphicsDiscreteLabel; - GtkWidget *mainHybridGraphicsDiscreteCheck; - GtkWidget *mainHybridGraphicsFrameLabel; - GtkWidget *mainExtraLaunchOptirunCheck; - GtkWidget *mainExtraLaunchPrismusunCheck; - GtkWidget *mainExtraFixGapLabel; - GtkWidget *mainExtraLaunchOptirunEntry; - GtkWidget *mainExtraLaunchPrismusunEntry; - GtkWidget *mainExtraLaunchThroughEntry; - GtkWidget *mainExtraFixGapLabelCombo; - GtkWidget *mainExtraLaunchThroughButton; - GtkWidget *mainExtraFrameLabel; - GtkWidget *mainHeaderTitleLabel; - GtkWidget *mainHeaderLoadButton; - GtkWidget *mainHeaderConfigLoadLabel; - GtkWidget *mainHeaderSaveConfigurationLabel; - GtkWidget *mainHeaderSaveButton; - GtkWidget *mainHeaderSettingsButton; - GtkWidget *mainHeaderLoadGlobalMenuItem; - GtkWidget *mainHeaderLoadLocalMenuItem; - GtkWidget *mainHeaderSaveGlobalLocalMenuItem; - GtkWidget *mainHeaderSaveGlobalMenuItem; - GtkWidget *mainHeaderSaveLocalMenuItem; - GtkWidget *mainHeaderSettingsDocumentationMenuItem; - GtkWidget *mainHeaderSettingsAboutMenuItem; - GtkWidget *mainStatusBox; - GtkWidget *mainStatusIcon; - GtkWidget *mainStatusLabel; - GtkWidget *templateMonitorConfigurationBox; - GtkWidget *templateMonitorConfigurationMonitorLabel; - GtkWidget *templateMonitorConfigurationResolutionLabel; - GtkWidget *templateMonitorConfigurationResolutionCombo; - GtkWidget *templateMonitorConfigurationFrequencyLabel; - GtkWidget *templateMonitorConfigurationFrequencyCombo; - GtkWidget *templateMonitorConfigurationRotationLabel; - GtkWidget *templateMonitorConfigurationRotationCombo; - GtkWidget *templateMonitorConfigurationMainRadio; - GtkWidget *templateMonitorConfigurationParameterLineCheck; - GtkWidget *templateMonitorConfigurationParameterLineEntry; - GtkWidget *templateMonitorConfigurationDoNotSwitchOffLabel; - GtkWidget *templateMonitorConfigurationDoNotSwitchOffCheck; - - GtkWidget *proprietaryTreeView; - GtkWidget *proprietaryInfoButton; - GtkWidget *proprietaryDeleteButton; - GtkWidget *proprietaryInstallButton; - GtkTreeSelection *proprietaryTreeSelection; - GtkWidget *driversTreeView; - GtkWidget *driversInfoButton; - GtkWidget *driversDeleteButton; - GtkWidget *driversInstallButton; - GtkTreeSelection *driversTreeSelection; - - GtkTreeViewColumn *proprietartInstalledColumn; - GtkTreeViewColumn *ProprietaryPackageColumn; - GtkTreeViewColumn *ProprietaryDriverColumn; - GtkTreeViewColumn *ProprietaryDescriptionColumn; - GtkTreeViewColumn *ProprietarySupportedColumn; - - GtkTreeViewColumn *driverInstalledColumn; - GtkTreeViewColumn *driverPackageColumn; - GtkTreeViewColumn *driverDriverColumn; - GtkTreeViewColumn *driverDescriptionColumn; - GtkTreeViewColumn *driverSupportedColumn; - - GtkWidget *DriverModulesTab; - GtkWidget *DriversTab; - GtkWidget *MainTabLabel; - GtkWidget *DriversTabLabel; - GtkWidget *InformationTabLabel; - GtkWidget *InformationFrameLabel; - GtkWidget *InformationOverlay; - GtkWidget *InformationCompanyLogoImage; - GtkWidget *InformationOverlay2; - GtkWidget *InformationCompanyLogoImage2; - - GtkWidget *TerminalOverlay; - GtkWidget *TerminalBox; - GtkWidget *TerminalRevealer; - GtkWidget *TerminalInfoLabel; - GtkWidget *TerminalMoreButton; - GtkWidget *TerminalScroll; - GtkWidget *TerminalMoreRevieler; - - - GtkWidget *PlugBox; - GtkWidget *PlugSaveBox; - GtkWidget *PlugLoadBox; - - GtkWidget *MenusTab; - - GtkWidget *LoadDriversButton; - GtkWidget *proprietaryNotebook; -} widgets_dict; - typedef struct { char *curport; config_str resolutions; int resolutionssize; - GtkWidget *templateMonitorConfigurationWindow; - GtkWidget *mainMonitorConfigurationBox; - GtkWidget *templateMonitorConfigurationBox; - GtkWidget *templateMonitorConfigurationEnableCheck; - GtkWidget *templateMonitorConfigurationPortLabel; - GtkWidget *templateMonitorConfigurationPortCombo; - GtkWidget *templateMonitorConfigurationMainCheck; - GtkWidget *templateMonitorConfigurationResolutionLabel; - GtkWidget *templateMonitorConfigurationResolutionCombo; - GtkWidget *templateMonitorConfigurationShowUnsupportedCheck; - GtkWidget *templateMonitorConfigurationFrequencyLabel; - GtkWidget *templateMonitorConfigurationFrequencyCombo; - GtkWidget *templateMonitorConfigurationRotationLabel; - GtkWidget *templateMonitorConfigurationRotationCombo; - GtkWidget *templateMonitorConfigurationPositionLabel; - GtkWidget *templateMonitorConfigurationPositionPosCombo; - GtkWidget *templateMonitorConfigurationPositionPortCombo; - GtkWidget *templateMonitorConfigurationDoNotSwitchOffCheck; - GtkWidget *templateMonitorConfigurationModelineCVTCheck; - GtkWidget *templateMonitorConfigurationUseCVTReducedCheck; - GtkWidget *templateMonitorConfigurationModelineGTFCheck; - GtkWidget *templateMonitorConfigurationParameterLineCheck; - GtkWidget *templateMonitorConfigurationParameterLineEntry; - GtkWidget *templateMonitorConfigurationCancelButton; - GtkWidget *templateMonitorConfigurationSaveButton; + GtkWidget *MainWindow; + GtkWidget *StatusBox; + GtkWidget *HeadLabel; + GtkWidget *EnableConfigurationBox; + GtkWidget *InterfaceConfigurationBox; + GtkWidget *EnableCheck; + GtkWidget *PortCombo; + GtkWidget *MainCheck; + GtkWidget *ResolutionCombo; + GtkWidget *UnsupportedCheck; + GtkWidget *FrequencyCombo; + GtkWidget *RotationCombo; + GtkWidget *PositionPosCombo; + GtkWidget *PositionPortCombo; + GtkWidget *DoNotSwitchOffCheck; + GtkWidget *ModelineCVTCheck; + GtkWidget *UseCVTReducedCheck; + GtkWidget *ModelineGTFCheck; + GtkWidget *ParameterLineCheck; + GtkWidget *ParameterLineEntry; + GtkWidget *CancelButton; + GtkWidget *SaveButton; - dictionary *config; } monitor_edit_window; typedef struct { - GtkWidget *templateMonitorscreenOverlay; - GtkWidget *templateMonitorImage; - GtkWidget *templateMonitorInfoBox; - GtkWidget *templateMonitorInfoNameLabel; - GtkWidget *templateMonitorInfoResolutionLabel; - GtkWidget *templateMonitorDeleteButton; - GtkWidget *templateMonitorSwitchButton; - GtkWidget *templateMonitorInfoConfigureButton; - GtkWidget *templateMonitorInfoAddButton; - monitor_config config; -} monitor_window; + GtkWidget *ScreenOverlay; + GtkWidget *MonitorImage; + GtkWidget *MonitorInfoBox; + GtkWidget *NameLabel; + GtkWidget *ResoulutionLabel; + GtkWidget *DeleteButton; + GtkWidget *SwitchButton; + GtkWidget *ConfigureButton; + GtkWidget *AddButton; +} monitor_data; typedef struct { @@ -364,34 +338,35 @@ typedef struct GtkWidget *ProprietaryAcceptButton; } driver_window; - +monitor_data *yon_monitor_new(main_window *widgets,int dull); // void on_closed_configuration(GtkWidget *self, MonitorSettings *monitors); // void on_save_configuration(GtkWidget self, MonitorSettings *monitors); -void yon_parse_monitor(); -void on_config_fill_interface(widgets_dict *widgets); -void yon_update_config(widgets_dict *widgets); -void on_configuration_save_global(GtkWidget *self, widgets_dict *widgets); -void on_configuration_save__local_global(GtkWidget *self, widgets_dict *widgets); -void on_configuration_save__local(GtkWidget *self, widgets_dict *widgets); -void yon_config_monitor_string_parse(char *parameters, int *size); -char *yon_char_parsed_get_resolution(config_str parsed_string, int size); -void yon_monitor_set_resolutions(); -monitor_config yon_monitor_config_new(char *port); -void yon_monitor_config_update(monitorconfig* monitor, char *port, char *config_string); -void yon_monitor_view_new(monitor_config monitor); -void on_configuration_save_global_local(GtkWidget *self, widgets_dict *widgets); -// void on_confugure_monitor_settings(GtkWidget *self, MonitorSettings *settings); -void yon_monitor_view_draw_all(); -void on_monitor_configure(GtkWidget *self,monitor_window *window); -void on_monitor_add(GtkWidget *self,monitor_window *window); -void on_monitor_switch(GtkWidget *self,monitor_window *window); -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_parse_monitor(); +// void on_config_fill_interface(main_window *widgets); +// void yon_update_config(main_window *widgets); +// void on_configuration_save_global(GtkWidget *self, main_window *widgets); +// void on_configuration_save__local_global(GtkWidget *self, main_window *widgets); +// void on_configuration_save__local(GtkWidget *self, main_window *widgets); +// void yon_config_monitor_string_parse(char *parameters, int *size); +// char *yon_char_parsed_get_resolution(config_str parsed_string, int size); +// void yon_monitor_set_resolutions(); +// monitor_config yon_monitor_config_new(char *port); +// void yon_monitor_config_update(monitorconfig* monitor, char *port, char *config_string); +// void yon_monitor_view_new(monitor_config monitor); +// void on_configuration_save_global_local(GtkWidget *self, main_window *widgets); +// // void on_confugure_monitor_settings(GtkWidget *self, MonitorSettings *settings); +// void yon_monitor_view_draw_all(); +// void on_monitor_configure(GtkWidget *self,monitor_window *window); +// void on_monitor_add(GtkWidget *self,monitor_window *window); +// void on_monitor_switch(GtkWidget *self,monitor_window *window); +// 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); dictionary *yon_proprieary_get(); void yon_gtk_list_store_fill_with_proprietaries(GtkListStore *list); -void yon_setup_config(char *configcommand); -void yon_monitor_view_setup(GtkWidget *container); +void yon_monitor_view_update(); +// void yon_setup_config(char *configcommand); +// void yon_monitor_view_setup(GtkWidget *container); #endif \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index b93fabe..7851041 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -2,8 +2,8 @@ #define HELP_LABEL yon_char_unite(_("ubl-settings-video version:")," ", version_application,"\n",_("Video adapter and display settings"),"\n",_("Usage:"), " ubl-settings-video ",_("[OPTIONS]"),"\n",_("Options:"),"\n\t--help, -h\t\t\t",_("Show this help"),"\n\t--version, -V\t\t\t",_("Show package version"),"\n\t--lock-help\t\t\t",_("Lock this help menu"),"\n\t--lock-save\t\t\t",_("Lock configration saving"),"\n\t--lock-save-local\t\t",_("Lock local configration saving"),"\n\t--lock-save-global\t\t",_("Lock global configration saving"),"\n\t--lock-load-global\t\t",_("Lock global configration loading"),"\n",NULL) #define PARAMETER_DEFAULT_LABEL _("Default settings") #define MONITOR_LABEL _("Monitor ") -#define SETTINGS_VIDEO_TITLE_LABEL _("Video adapter and display settings") -#define SETTINGS_VIDEO_TITLE_INFO_LABEL _("Video output settings and video card drivers installation") +#define TITLE_LABEL _("Video adapter and display settings") +#define TITLE_INFO_LABEL _("Video output settings and video card drivers installation") #define MONITOR_PORT_LABEL _("Port: ") #define MONITOR_RESOLUTION_LABEL _("Resolution (px): ") #define MONITOR_FREQUENCY_LABEL _("Frequency (Hz): ") @@ -38,7 +38,6 @@ #define HYBRID_GRAPHICS_LABEL _("Hybrid graphics") #define FIX_GAP_LABEL _("Fix frame gap (Nvidia)") #define EXTRA_LABEL _("Extra") -#define TITLE_LABEL _("UBLinux Video Configuration") #define LOAD_LABEL _("Load") #define SAVE_LABEL _("Save") #define ON_LABEL _("On") @@ -75,6 +74,7 @@ #define ADD_LABEL _("Add monitor configuration") #define SWITCH_LABEL _("Switch monitor") #define MORE_LABEL _("More") +#define PORT_EDIT_LABEL(target) yon_char_unite(_("Configuration: Monitor"),"(",target,")",NULL) #define HELP_TITLE_LABEL _("Would you like to read documentation in the Web?") #define HELP_INFO_LABEL _("You will be redirected to documentation website where documentation is\ntranslated and supported by community.") @@ -118,4 +118,9 @@ #define MODEL_LABEL _("Model") #define USED_KERNEL_DRIVER_LABEL _("Kernel driver in use") #define AVALIABLE_KERNEL_DRIVERS_LABEL _("Kernel modules") -#define LOAD_DRIVERS_LABEL _("Load drivers from database") \ No newline at end of file +#define LOAD_DRIVERS_LABEL _("Load drivers from database") +#define INTEL_DESCRIPTION_LABEL _("UBLinux package includes Intel driver and utilities") +#define AMD_MODULE_DESCRIPTION_LABEL _("UBLinux module includes AMD driver and utilities") +#define AMD_DESCRIPTION_LABEL _("UBLinux package includes AMD Vulkan driver and utilities") + +#define MISSING_IMPORTANT_LABEL _("Important field is empty") \ No newline at end of file diff --git a/source/ubl-utils.c b/source/ubl-utils.c deleted file mode 100644 index ff1c3d0..0000000 --- a/source/ubl-utils.c +++ /dev/null @@ -1,2234 +0,0 @@ -#include "ubl-utils.h" - -// dictionary functions - -/**yon_dictionary_new(): - * [EN] - * Creates and returns empty dictionary - * [RU] - * Создаёт и возвращает пустой словарь. - */ -dictionary *yon_dictionary_new() -{ - dictionary *dict = malloc(sizeof(dictionary)); - dict->data = NULL; - dict->key = NULL; - dict->next = NULL; - dict->prev = NULL; - dict->first = dict; - dict->data_type = DICTIONARY_OTHER_TYPE; - return dict; -} - -/**yon_dictionary_copy(dictionary *dict) - * [EN] - * - * [RU] - * Создаёт и возвращает копию элемента словаря [dict] -*/ -dictionary *yon_dictinoary_copy(dictionary *dict){ - dictionary *dct = yon_dictionary_new_with_data(dict->key,dict->data); - dct->data_type= dict->data_type; - return dct; -} - -/**yon_dictionary_copy_deep(dictionary *dict) - * [EN] - * - * [RU] - * Создаёт полную копию словаря [dict] и возвращает первый элемент -*/ -dictionary *yon_dictionary_copy_deep(dictionary *dict){ - dictionary *dct = NULL; - dictionary *newone=NULL; - for_dictionaries(dct,dict){ - yon_dictionary_add_or_create_if_exists_with_data(newone,dct->key,dct->data); - newone->data_type=dct->data_type; - } - return newone->first; -} - -/**int yon_dictionary_set_data(dictionary *dict, void *data) - * [EN] - * - * [RU] - * Установить элементу словаря [dict] значение [data] -*/ -int yon_dictionary_set_data(dictionary *dict, void *data){ - dict->data=data; -} - -/**int yon_dictionary_set_key(dictionary *dict, char *key) - * [EN] - * - * [RU] - * Изменяет ключ элемента словаря [dict] на [key] -*/ -int yon_dictionary_set_key(dictionary *dict, char *key){ - dict->key=key; - return 1; -} - -/** int yon_dictionary_set(dictionary *dict, char *key, void *data) - * [EN] - * - * [RU] -* Устанавливает значение ключа элемента словаря [dict] на [key] и его данные на [data] -*/ -int yon_dictionary_set(dictionary *dict, char *key, void *data){ - dict->key=key; - dict->data=data; - return 1; -} - -/**int yon_dictionary_empty(dictionary *dict) - * [EN] - * - * [RU] - * Очищает элемент словаря [dict] от данных -*/ -int yon_dictionary_empty(dictionary *dict){ - dict->data=NULL; - dict->data_type=DICTIONARY_OTHER_TYPE; - return 1; -} - -/**yon_dictionary_switch_to_last(dictionary **dict) - * [EN] - * - * [RU] - * Переключает словарь [dict] на последний элемент. -*/ -void yon_dictionary_switch_to_last(dictionary **dict) -{ - dictionary *dct=NULL, *dact=*dict; - for_dictionaries(dct,dact); -} - -/**yon_dictionary_create_conneced(dictionary *targetdict) - * [EN] - * - * [RU] - * Создаёт новый элемент словаря [targetdict] -*/ -dictionary *yon_dictionary_append(dictionary *targetdict) -{ - targetdict = yon_dictionary_get_last(targetdict); - targetdict->next = yon_dictionary_new(); - targetdict->next->prev = targetdict; - targetdict->next->first = targetdict->first; - targetdict->next->data_type = DICTIONARY_OTHER_TYPE; - return targetdict->next; -} - -/**yon_dictionary_get_last(dictionary *dict) - * [EN] - * - * [RU] - * Возвращает последний элемент словаря [dict]. - * В отличае от yon_dictionary_switch_to_last() - * словарь [dict] остаётся на прежнем элементе. -*/ -dictionary *yon_dictionary_get_last(dictionary *dict) -{ - if (dict->next){ - dictionary *dct = NULL; - for_dictionaries(dct,dict); - return dct; - } else return dict; -} - -/**yon_dictionary_switch_places(dictionary *dict, int aim) - * [EN] - * - * [RU] - * Меняет элемент словаря [dict] местами с другим элементом. - * если [aim]<0 элемент меняется местами с левым элементом; - * если [aim]>0 элемент меняется местами с правым элементом; -*/ -dictionary *yon_dictionary_swap(dictionary *dict, int aim) -{ - if (aim < 0) - { - if (dict->prev) - { - if (dict->prev->prev) - { - dictionary *next = dict->next, *prev = dict->prev, *preprev = prev->prev; - if (next) - { - preprev->next = dict; - dict->prev = preprev; - dict->next = prev; - prev->prev = dict; - prev->next = next; - next->prev = prev; - } - else - { - preprev->next = dict; - dict->prev = preprev; - dict->next = prev; - prev->prev = dict; - prev->next = NULL; - } - return prev; - } - else - { - dictionary *next = dict->next, *prev = dict->prev; - if (next) - { - yon_dictionary_make_first(dict); - dict->prev = NULL; - dict->next = prev; - prev->prev = dict; - prev->next = next; - next->prev = prev; - } - else - { - dict->prev = NULL; - dict->next = prev; - prev->prev = dict; - prev->next = NULL; - } - return prev; - } - } - } - else if (aim > 0) - { - if (dict->next) - { - if (dict->next->next) - { - dictionary *next = dict->next, *prev = dict->prev, *afnext = next->next; - if (prev) - { - prev->next = next; - next->prev = prev; - next->next = dict; - dict->prev = next; - dict->next = afnext; - afnext->prev = dict; - } - else - { - yon_dictionary_make_first(next); - next->prev = NULL; - next->next = dict; - dict->prev = next; - dict->next = afnext; - afnext->prev = dict; - } - return next; - } - else - { - dictionary *next = dict->next, *prev = dict->prev; - if (prev) - { - prev->next = next; - next->prev = prev; - next->next = dict; - dict->prev = next; - dict->next = NULL; - } - else - { - next->prev = NULL; - next->next = dict; - dict->prev = next; - dict->next = NULL; - } - } - } - } -} - -/**yon_dictionary_make_first(dictionary *dict) - * [EN] - * - * [RU] - * Устанавливает указатель первого элемента словаря [dict] - * на текущий элемент. Не использовать. -*/ -void yon_dictionary_make_first(dictionary *dict) -{ - for (dictionary *dct = dict->first; dct != NULL; dct = dct->next) - { - dct->first = dict; - } -} - -/**yon_dictionary_make_nth(dictionary *dict, int nth) - * [EN] - * - * [RU] - * Перемещает элемент словаря [dict] на позицию [nth]. -*/ -void yon_dictionary_make_nth(dictionary *dict, int nth) -{ - dictionary *dct = dict->first; - for (int i = 0; i < nth; i++) - { - if (dct == NULL) - return; - else - dct = dct->next; - } - yon_dictionary_rip(dict); - dictionary *prev = dct->prev; - prev->next = dict; - dict->prev = prev; - dict->next = dct; - dct->prev = dict; -} - -/**yon_dictionary_create_with_data(char *key, void *data) - * [EN] - * - * [RU] - * Создаёт новый словарь с ключом [key] и указателем на данные [data] -*/ -dictionary *yon_dictionary_new_with_data(char *key, void *data) -{ - dictionary *dct = yon_dictionary_new(); - dct->key = yon_char_new(key); - dct->data = data; - dct->data_type = DICTIONARY_OTHER_TYPE; - return dct; -} - -/** void *yon_dictionary_free_all(dictionary *dictionary,void *data_manipulation) - * [EN] - * Frees whole [dictionary] and activates [data_manipulation] function if not NULL with [dictionary]->data argument for each dictionary. - * [RU] - * Освобождает память для всех элементов словаря [dictionary] и активирует функцию [data_manipulation], если она была передана, с аргументом [dictionary]->data на каждый элемент словаря. -*/ -void *yon_dictionary_free_all(dictionary *dictionary_to_free,void (*data_manipulation)(void*)){ - dictionary *dict=NULL; - for_dictionaries(dict,dictionary_to_free){ - if(data_manipulation) - data_manipulation(dict->data); - if(dict->prev) - free(dict->prev); - } - free(dict); - return NULL; -} - -/**yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data) - * [EN] - * - * [RU] - * Создаёт новый элемент словаря, присоединяемый в конец словаря [dict] - * с ключом [key] и указателем на данные [data] -*/ -dictionary *yon_dictionary_append_with_data(dictionary *dict, char *key, void *data) -{ - dictionary *dct = yon_dictionary_append(dict); - dct->key = yon_char_new(key); - dct->data = data; - dct->data_type = DICTIONARY_OTHER_TYPE; - return dct; -} - -/**yon_dictionary_connect(dictionary *old, dictionary *toconnect) - * [EN] - * - * [RU] - * Присоединяет словарь [toconnect] в конец словаря [old]. -*/ -dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect) -{ - dictionary *dict = yon_dictionary_get_last(old); - dict->next = toconnect; - toconnect->prev = dict; - toconnect->first = dict->first; - return toconnect; -} - -/**yon_dictionary_get(dictionary **dict, char *key) - * [EN] - * - * [RU] - * Возвращает элемент словаря [dict] с ключом [key]. - * Если такого элемента не было обнаружено, возвращается NULL -*/ -dictionary *yon_dictionary_get(dictionary **dict, char *key) -{ - dictionary *dct = *dict; - for (dictionary *pointer = dct->first; pointer != NULL; pointer = pointer->next) - { - if (strcmp(pointer->key, key) == 0) - { - *dict = pointer; - return pointer; - } - } - return NULL; -} - -/**yon_dictionary_rip(dictionary *dict) - * [EN] - * - * [RU] - * Вырезает элемент из словаря и возвращает вырезанный элемент. -*/ -dictionary *yon_dictionary_rip(dictionary *dict) -{ - if (!dict->next&&!dict->prev) return NULL; - else if (!dict->next) - { - dictionary *prev = dict->prev; - if (prev) - { - prev->next = NULL; - return prev; - } - else - return dict; - } - else if (!dict->prev) - { - dictionary *next = dict->next; - if (next) - { - yon_dictionary_make_first(next); - next->prev = NULL; - return next; - } - else - return dict; - } - else - { - dictionary *next = dict->next, *prev = dict->prev; - next->prev = prev; - prev->next = next; - return next; - } -} - -/**yon_dictionary_get_nth(dictionary *dict, int place) - * [EN] - * - * [RU] - * Возвращает [place]-й элемент словаря [dict] -*/ -dictionary *yon_dictionary_get_nth(dictionary *dict, int place) -{ - if (dict){ - dict = dict->first; - int i = 0; - for (i = 0; i < place; i++) - if (dict->next) - dict = dict->next; - else - break; - if (i == place) - return dict; - else - return NULL; - } else return NULL; -} - -// char functions - -int yon_char_find_last(char *source, char find){ - int size = strlen(source); - int i=size; - for (;source[i]!=find&&i>0;i--); - return i; -} - -/**[EN] - * - * creates new char string by combining two char strings. - */ -char *yon_char_append(char *source, char *append) -{ - if (source && append) - { - int size = strlen(source) + strlen(append) + 1; - char *final = malloc(size); - memset(final, 0, size); - if (strstr(source, "%%")) - sprintf(final, source, append); - else - sprintf(final, "%s%s", source, append); - return final; - } - else - return NULL; -} - -/**[EN] - * - * creates new char string by copying another char. - */ -char *yon_char_new(char *chr) -{ - if (chr){ - char *newchar = malloc(strlen(chr) + 1); - memset(newchar, 0, strlen(chr) + 1); - memcpy(newchar, chr, strlen(chr)); - return newchar; - } else - return NULL; -} - -/**yon_char_unite(char *source, ...) - * [En] - * - * [RU] - * Объединяет строку [source] со всеми строками, написанными в [...] -*/ -char *yon_char_unite(char *source, ...){ - va_list arglist; - char *new_char=NULL; - char *unite_char=NULL; - new_char=yon_char_new(source); - va_start(arglist,source); - unite_char = va_arg(arglist,char*); - while(unite_char){ - new_char = yon_char_append(new_char,unite_char); - unite_char = va_arg(arglist,char*); - } - va_end(arglist); - return new_char; -} - -/**yon_cut(char *source, int size, int startpos) - * [EN] - * cuts source string by size length from startpos position. - */ -char *yon_cut(char *source, int size, int startpos) -{ - char *cut = NULL; - cut = malloc(size + 1); - memset(cut, 0, size + 1); - memcpy(cut, source + startpos, size); - return cut; -} - -/**yon_char_divide(char *source, int dividepos) - * [EN] - * divides source string in dividepos position, - * returning left part of divided string and - * inserting right part to source string. - */ -char *yon_char_divide(char *source, int dividepos) -{ - char *cut = malloc(dividepos + 1); - memset(cut, 0, dividepos + 1); - memcpy(cut, source, dividepos); - char *left = malloc(strlen(source) - strlen(cut)); - memset(left, 0, strlen(source) - strlen(cut)); - memcpy(left, source + dividepos + 1, (strlen(source) - dividepos)); - memset(source, 0, strlen(source)); - memcpy(source, left, strlen(left)); - return cut; -} - -/**yon_char_find_count(char *source, char *find) - * [EN] - * - * [RU] - * Считает количество символов [find] в строке [source] -*/ -int yon_char_find_count(char *source, char *find){ - char *working_string=yon_char_new(source); - int i=0; - int size=0; - int pos=0; - config_str rtn = yon_char_parse(working_string,&size,"\n"); - for (int j=0;j= 10; i++) - { - convert_check = convert_check / 10; - } - char *ch = g_malloc0(i * sizeof(char) + 1); - sprintf(ch, "%d", int_to_convert); - return ch; -} - -/**yon_char_from_long(int int_to_convert) - * [EN] - * converts int to char*. - * - * [RU] - * Конвертирует int в char* - */ -char *yon_char_from_long(long int_to_convert) -{ - int i = 1; - double convert_check = (double)int_to_convert; - for (i = 1; convert_check >= 10; i++) - { - convert_check = convert_check / 10; - } - char *ch = g_malloc0(i * sizeof(char) + 1); - sprintf(ch, "%ld", int_to_convert); - return ch; -} - -/**yon_char_replace(char *source, char *find, char*replace) - * [EN] - * - * [RU] - * Заменяет в строке [source] все вхождения строки [find] на [replace] -*/ -char *yon_char_replace(char *source, char *find, char*replace){ - if (!strstr(replace,find)){ - - - char *final=NULL; - char *temp=NULL; - if(!strstr(replace,find)){ - while ((final=strstr(source,find))){ - temp=malloc(strlen(source)-strlen(final)+1); - memset(temp,0,strlen(source)-strlen(final)+1); - memcpy(temp,source,strlen(source)-strlen(final)); - temp=yon_char_append(temp,replace); - source=yon_char_append(temp,final+strlen(find)); - } - - } - } - return source; -} - -/**yon_char_parse(char *parameters, int *size, char *divider) - * [EN] - * Parses string [parameters], divided by [divider], - * then returns parsed string array and sets [size] to - * size of returned array -*/ -char **yon_char_parse(char *parameters, int *size, char *divider){ - char **string=NULL; - int i=1; - string=malloc(sizeof(char*)); - char *paramline=yon_char_new(parameters); - char *param; - if (!strstr(parameters,divider)) return NULL; - while ((param=yon_char_divide_search(paramline,divider,1))){ - if (strcmp(param,paramline)==0||paramline[0]=='\0') break; - string=realloc(string,sizeof(char*)*i); - string[i-1]=yon_char_new(param); - i++; - } - string=realloc(string,sizeof(char*)*i); - string[i-1]=yon_char_new(paramline); - i++; - *size=i-1; - return string; -} - -/**yon_char_parsed_rip(char **char_string, int *size, int item_to_delete) - * [EN] - * - * [RU] - * Удаляет элемент [item_to_delete] из массива строк [char_string], размера [size] - * Возвращает получившийся массив, в [size] загружается размер нового массива. -*/ -char **yon_char_parsed_rip(char **char_string, int *size, int item_to_delete){ - if (char_string&&(*size)>0&&(*size)>item_to_delete&&item_to_delete>=0){ - char **new_char_parsed=NULL; - new_char_parsed=malloc(sizeof(char*)*((*size)-1)); - int flag = 0; - for (int i=0;i < (*size);i++){ - if (i==item_to_delete) { - flag = 1; - } - if (flag == 0) { - new_char_parsed[i]=yon_char_new(char_string[i]); - } - else if (flag == 1 && i!=item_to_delete) { - new_char_parsed[i-1]=yon_char_new(char_string[i]); - } - } - (*size)=(*size)-1; - return new_char_parsed; - } else return NULL; -} - -char *yon_char_parsed_to_string(config_str parsed, int size, char *divider_replace){ - if (parsed && size>0){ - char *final_string = ""; - char *temp; - for (int i=0;i0){ - for (int i=0;ipw_name,NULL); - else { - user_list = yon_char_parsed_append(user_list,user_size,user->pw_name); - } - } - endpwent(); - return user_list; -} - -config_str yon_ubl_get_all_processes(int *processes_size){ - config_str processes = yon_config_load(get_processes_command,processes_size); - yon_char_parsed_remove_newline_symbols(processes,processes_size); - return processes; -} - -config_str yon_ubl_get_all_slices(int *slices_size){ - config_str slices = yon_config_load(get_slices_command,slices_size); - yon_char_parsed_remove_newline_symbols(slices,slices_size); - return slices; -} - -// parsing functions - -dictionary *yon_scan_desktops(){ - dictionary *apps_dict = NULL; - DIR *directory = opendir(DesktopPath); - struct dirent *de; - while ((de = readdir(directory))) - { - FILE *file; - char *path = yon_char_append(DesktopPath, de->d_name); - file = fopen(path, "r"); - if (strstr(path,".desktop")){ - apps *application = malloc(sizeof(apps)); - GKeyFile *gfile = g_key_file_new(); - GError *err = NULL; - if (!access(path,F_OK)){ - g_key_file_load_from_file(gfile, path, G_KEY_FILE_KEEP_TRANSLATIONS, NULL); - application->Type = !strcmp(g_key_file_get_string(gfile, "Desktop Entry", "Type", &err),"Application") ? 1 : 0; - if (application->Type){ - application->Name = g_key_file_get_locale_string(gfile,"Desktop Entry", "Name",setlocale(LC_ALL, NULL),&err); - application->Categories = g_key_file_get_string(gfile,"Desktop Entry", "Categories",&err); - application->Exec = g_key_file_get_string(gfile,"Desktop Entry", "Exec",&err); - application->Icon = g_key_file_get_string(gfile,"Desktop Entry", "Icon",&err); - application->Pluggable = (g_key_file_get_boolean(gfile,"Desktop Entry", "Pluggable",NULL)|| - g_key_file_get_boolean(gfile,"Desktop Entry", "X-XfcePluggable",&err)); - application->DualPluggable = g_key_file_get_boolean(gfile,"Desktop Entry", "X-UBLPluggable",NULL); - application->Hidden = g_key_file_get_boolean(gfile,"Desktop Entry", "X-X-UBL-SettingsManager-Hidden",NULL); - if (application->Name&&application->Exec){ - if (!apps_dict){ - yon_dictionary_add_or_create_if_exists_with_data(apps_dict,application->Name,application); - } else if (!yon_dictionary_get(&apps_dict,application->Name)){ - yon_dictionary_add_or_create_if_exists_with_data(apps_dict,application->Name,application); - } else { - yon_dictionary_set_data(apps_dict,application); - } - } - } - } - } - } - if (apps_dict) return apps_dict; -} - -apps *yon_apps_scan_and_parse_desktops(int *sizef) -{ - int size = 0; - struct apps *applist; - { - DIR *directory = opendir(DesktopPath); - struct dirent *de; - while ((de = readdir(directory))) - { - FILE *file; - char *path = yon_char_append(DesktopPath, de->d_name); - file = fopen(path, "r"); - if (strlen(de->d_name) > 9) - { - char *extension = strstr(path, "."); - if (extension != NULL) - { - if (strcmp(extension, ".desktop") == 0) - { - apps tempapp; - GKeyFile *gfile = g_key_file_new(); - GError *err = NULL; - g_key_file_load_from_file(gfile, path, G_KEY_FILE_KEEP_TRANSLATIONS, NULL); - char *Type = g_key_file_get_string(gfile, "Desktop Entry", "Type", &err); - if (err) - { - printf("%s\n", err->message); - } else { - if (strcmp(Type, "Application") == 0) - tempapp.Type = 1; - else if (strcmp(Type, "pyApplication") == 0) - tempapp.Type = 2; - else - continue; - tempapp.Name = g_key_file_get_locale_string(gfile, "Desktop Entry", "Name", setlocale(LC_ALL, NULL), NULL); - if (tempapp.Name == NULL) - continue; - tempapp.Categories = g_key_file_get_string(gfile, "Desktop Entry", "Categories", NULL); - if (tempapp.Categories == NULL) - continue; - tempapp.Exec = g_key_file_get_string(gfile, "Desktop Entry", "Exec", NULL); - if (tempapp.Exec == NULL) - continue; - tempapp.Icon = g_key_file_get_string(gfile, "Desktop Entry", "Icon", NULL); - if (tempapp.Icon == NULL) - continue; - tempapp.Pluggable = g_key_file_get_boolean(gfile, "Desktop Entry", "Pluggable", NULL); - if (!tempapp.Pluggable) - tempapp.Pluggable = g_key_file_get_boolean(gfile, "Desktop Entry", "X-XfcePluggable", NULL); - if (tempapp.Pluggable) - tempapp.DualPluggable = g_key_file_get_boolean(gfile, "Desktop Entry", "X-UBLPluggable", NULL); - if (g_key_file_get_boolean(gfile, "Desktop Entry", "X-UBL-SettingsManager-Hidden", NULL) == 0) - if (size == 0) - { - applist = (apps *)malloc(size + 1 * sizeof(apps)); - applist[0].filename = yon_char_new(path); - applist[0].Name = yon_char_new(tempapp.Name); - applist[0].Categories = yon_char_new(tempapp.Categories); - applist[0].Exec = yon_char_new(tempapp.Exec); - applist[0].Icon = yon_char_new(tempapp.Icon); - applist[0].Type = tempapp.Type; - applist[0].Pluggable = tempapp.Pluggable; - applist[0].DualPluggable = tempapp.DualPluggable; - size++; - } - else - { - applist = (apps *)realloc(applist, (size + 1) * sizeof(apps)); - applist[size].filename = yon_char_new(path); - applist[size].Name = yon_char_new(tempapp.Name); - applist[size].Categories = yon_char_new(tempapp.Categories); - applist[size].Exec = yon_char_new(tempapp.Exec); - applist[size].Icon = yon_char_new(tempapp.Icon); - applist[size].Pluggable = tempapp.Pluggable; - applist[size].DualPluggable = tempapp.DualPluggable; - applist[size].Type = tempapp.Type; - size++; - } - } - g_key_file_free(gfile); - } - } - } - } - } - *sizef = size; - return applist; -}; - -void yon_apps_sort(apps *applist, int size) -{ - apps tmp; - if (size > 2) - { - for (int i = 1; i < size; i++) - { - for (int j = 1; j < size; j++) - { - if (strcmp(applist[j].Name, applist[j - 1].Name) < 0) - { - tmp = applist[j]; - applist[j] = applist[j - 1]; - applist[j - 1] = tmp; - }; - } - }; - } -}; - -apps *yon_apps_get_by_name(apps *applist, char *name, int size) -{ - for (int i = 0; i < size; i++) - { - if (strcmp(applist[i].Name, name) == 0) - return &applist[i]; - } - return NULL; -}; - -void __yon_on_app_chooser_selection(GtkTreeView *self, GtkTreeStore *store){ - GtkTreeModel *model = GTK_TREE_MODEL(store); - GtkTreeIter iter, parentiter; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(self),&model,&iter)){ - if (!gtk_tree_model_iter_parent(model,&parentiter,&iter)){ - gtk_tree_view_expand_row(self,gtk_tree_model_get_path(model,&iter),0); - if (gtk_tree_model_iter_nth_child(model,&parentiter,&iter,0)) - gtk_tree_selection_select_iter(gtk_tree_view_get_selection(self),&parentiter); - } - } else { - gtk_tree_model_get_iter_first(model,&iter); - gtk_tree_selection_select_iter(gtk_tree_view_get_selection(self),&iter); - } -} - -/**yon_app_chooser_open_with_sections(char *section_name, char *section_filter, char *section_icon, ...) - * [EN] - * - * [RU] - * Вызывает диалоговое окно выбора приложений с разделом [section_name], разделом [section_filter] и иконкой, полученной по названию [section_icon]. - * после них можно вводить любое количество пар названий раздела и названий иконок для получения дополнительных разделов, - * оканчивающиеся NULL. -*/ -char *yon_app_chooser_open_with_sections(char *section_name, char *section_filter, char *section_icon, ...){ - GtkBuilder *builder = gtk_builder_new_from_resource("/com/ublinux/ui/ublexec-application.glade"); - GtkWidget *dialog = gtk_dialog_new(); - gtk_widget_set_size_request(dialog,500,600); - gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ublexec"); - gtk_window_set_title(GTK_WINDOW(dialog),_("Applications")); - gtk_dialog_add_buttons(GTK_DIALOG(dialog),_("Cancel"),0,_("Accept"),1,NULL); - GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder,"ApplicationsWindow")); - GtkWidget *box = GTK_WIDGET(gtk_builder_get_object(builder,"box")); - GtkWidget *header = GTK_WIDGET(gtk_builder_get_object(builder,"ApplicationsHeaderBar")); - gtk_window_set_title(GTK_WINDOW(dialog),_("Application")); - gtk_window_set_titlebar(GTK_WINDOW(dialog),header); - g_object_ref(box); - gtk_container_remove(GTK_CONTAINER(window),box); - gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),box,1,1,5); - gtk_style_context_add_class(gtk_widget_get_style_context(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),"workingbg"); - GtkWidget *main_tree = GTK_WIDGET(gtk_builder_get_object(builder,"MainTree")); - GtkTreeStore *store = GTK_TREE_STORE(gtk_builder_get_object(builder,"treestore1")); - va_list args; - GtkTreeIter iter, childiter; - - g_signal_connect(G_OBJECT(main_tree),"cursor-changed",G_CALLBACK(__yon_on_app_chooser_selection),store); - - gtk_tree_store_append(GTK_TREE_STORE(store),&iter,NULL); - gtk_tree_store_set(GTK_TREE_STORE(store),&iter,0,section_icon,1,section_name,2,section_filter,-1); - va_start(args,section_icon); - char *section; - while ((section = va_arg(args,char*))){ - char *filter = va_arg(args,char*); - char *icon = va_arg(args,char*); - if (icon&&filter){ - gtk_tree_store_append(GTK_TREE_STORE(store),&iter,NULL); - gtk_tree_store_set(GTK_TREE_STORE(store),&iter,0,icon,1,section,2,filter,-1); - } - } - va_end(args); - int size; - apps *app_list = yon_apps_scan_and_parse_desktops(&size); - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store),&iter); - for (; valid; valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store),&iter)){ - char *cur_categories; - gtk_tree_model_get(GTK_TREE_MODEL(store),&iter,2,&cur_categories,-1); - for (int i=0; i0&&strcmp(app_list[i].Name,app_list[i-1].Name)){ - if (strstr(app_list[i].Icon,"/")){ - yon_char_divide(app_list[i].Icon,yon_char_find_last(app_list[i].Icon,'/')); - app_list[i].Icon = yon_char_divide(app_list[i].Icon,yon_char_find_last(app_list[i].Icon,'.')); - } - gtk_tree_store_append(store,&childiter,&iter); - gtk_tree_store_set(store,&childiter,0,app_list[i].Icon, 1,app_list[i].Name, 2, app_list[i].filename, -1); - } - } - } - } - gtk_tree_view_set_model(GTK_TREE_VIEW(main_tree),GTK_TREE_MODEL(store)); - int res = gtk_dialog_run(GTK_DIALOG(dialog)); - GtkTreeModel *model = GTK_TREE_MODEL(store); - if (res){ - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(main_tree)),&model,&childiter)){ - if (gtk_tree_model_iter_parent(model,&iter,&childiter)){ - char *path; - gtk_tree_model_get(model,&childiter,2,&path,-1); - gtk_widget_destroy(dialog); - return path; - } - } else { - gtk_widget_destroy(dialog); - return ""; - } - } else { - gtk_widget_destroy(dialog); - } - -} -//config functions - -/**yon_config_load_register(char *command) - * [EN] - * - * [RU] - * Выполняет команду [command]. - * Полученные данные парсятся и регистрируются в конфиг. -*/ -int yon_config_load_register(char *command){ - if (__yon__config__strings){ - __yon__config__strings = yon_dictionary_free_all(__yon__config__strings,NULL); - } - FILE *output = popen(command, "r"); - char **output_strings = NULL; - output_strings = malloc(sizeof(char*)); - int i = 0; - char str[4096]; - memset(str, 0, 4096); - while (fgets(str, 4096, output)) - { - if (strcmp(str, "") != 0&& strcmp(str,"(null)\n")!=0) - { - char *key = yon_char_divide_search(str,"=",-1); - char *final_str=yon_char_divide_search(str,"\n",-1); - yon_dictionary_add_or_create_if_exists_with_data(__yon__config__strings,key,yon_char_new(final_str)); - __yon__config__strings->data_type=DICTIONARY_CHAR_TYPE; - } - } - check_config - return 1; - else return 0; -} - -/**yon_config_remove_by_key(char *key) - * [EN] - * - * [RU] - * Удаляет параметр конфига по ключу [key] -*/ -int yon_config_remove_by_key(char *key){ - check_config{ - dictionary *dict = yon_dictionary_get(&__yon__config__strings,key); - if (dict){ - yon_dictionary_rip(dict); - return 1; - }else return 0; - } - return 0; -} - -/**yon_config_remove_by_data(void *data) - * [EN] - * - * [RU] - * Производит поиск по конфигу на наличие параметра со значением [data] и удаляет найденное значение из конфига. -*/ -int yon_config_remove_by_data(void *data){ - check_config{ - dictionary *dict = NULL; - for_dictionaries(dict,__yon__config__strings){ - if (dict->data==data){ - yon_dictionary_rip(dict); - return 1; - } - } - return 0; - } - return 0; -} - -/**yon_config_remove_element(char *key, char *deleted) - * [EN] - * - * [RU] - * Удаляет элемент [deleted] из массива параметров с ключом [key] -*/ -int yon_config_remove_element(char *key, char *deleted){ - check_config{ - dictionary *dict = yon_dictionary_get(&__yon__config__strings,key); - char *data = (char*)dict->data; - char *found = strstr(data,deleted); - int size=strlen(data)-strlen(found)+1; - char *new_data = malloc(size); - memset(new_data,0,size); - if (strlen(found)!=strlen(deleted)){ - memcpy(new_data,data,size-1); - new_data = yon_char_append(new_data,found+strlen(deleted)+1); - } else { - memcpy(new_data,data,size-2); - new_data = yon_char_append(new_data,found+strlen(deleted)); - } - dict->data=(void*)(new_data); - dict->flag1=1; - return 1; - } else return 0; -} - -/**yon_config_get_by_key(char *key) - * [EN] - * - * [RU] - * Возвращает значение параметра конфига с ключом [key] -*/ -void *yon_config_get_by_key(char *key){ - check_config{ - dictionary *dict = NULL; - for_dictionaries(dict, __yon__config__strings){ - if (strcmp(dict->key,key)==0){ - return dict->data; - } - } - } - return NULL; -} - -/**yon_config_get_key_by_data(char *data) - * [EN] - * - * [RU] - * Возвращает ключ параметра конфига со значением [data]. - * Если параметр с таким значением не найден, возвращается NULL -*/ -char *yon_config_get_key_by_data(char *data){ - check_config{ - dictionary *dict = NULL; - for_dictionaries(dict, __yon__config__strings){ - if (strcmp(((char*)dict->data),data)==0){ - return dict->key; - } - } - } - return NULL; -} - -/**yon_config_set(char *key, void *data) - * [EN] - * - * [RU] - * Производит поиск по конфигу и заменяет значение параметра с ключом [key] на новое значение [data]; -*/ -int yon_config_set(char *key, void *data){ - check_config{ - dictionary *dict = yon_dictionary_get(&__yon__config__strings,key); - dict->data=data; - dict->flag1=1; - return 1; - } else return 0; -} - - -/**yon_config_append(char *key, void *data) - * [EN] - * - * [RU] - * Производит поиск по конфигу и дополняет значение параметра с ключом [key] значением [data]; -*/ -int yon_config_append(char *key, char *data){ - check_config{ - dictionary *dict = yon_dictionary_get(&__yon__config__strings,key); - if (strcmp(((char*)dict->data),"")!=0) - dict->data=(void*)(yon_char_unite((char*)dict->data," ",data,NULL)); - else dict->data=(void*)data; - dict->flag1=1; - return 1; - } else return 0; -} - - -/**yon_config_clean() - * [EN] - * Erase all parameters from config; - * [RU] - * Удаляет все параметры из конфига; -*/ -int yon_config_clean(){ - check_config{ - __yon__config__strings = yon_dictionary_free_all(__yon__config__strings, NULL); - return 1; - } - else return 0; -} - -/**yon_config_register(char *key, void *data) - * [EN] - * - * [RU] - * Регистрирует новый параметр конфига. - * [key] - ключ параметра; - * [data] - значение параметра; -*/ -void yon_config_register(char *key, void *data){ - if (!__yon__config__strings||!yon_dictionary_get(&__yon__config__strings,key)){ - yon_dictionary_add_or_create_if_exists_with_data(__yon__config__strings,key,data); - } - else if (yon_dictionary_get(&__yon__config__strings,key)) __yon__config__strings->data=data; - __yon__config__strings->data_type=DICTIONARY_CHAR_TYPE; - __yon__config__strings->flag1=1; -} - -/**yon_config_load(char *command, int *str_len) - * [EN] - * - * [RU] - * Выполняет команду [command] и возвращает распаршеный результат выполнения команды. - * В [str_len] возвращается длина возвращаемого массива -*/ -config_str yon_config_load(char *command, int *str_len){ - FILE *output = popen(command, "r"); - char **output_strings = NULL; - output_strings = malloc(sizeof(char)); - int i = 0; - char str[4096]; - memset(str, 0, 4096); - while (fgets(str, 4096, output)) - { - if (strcmp(str, "") != 0) - { - output_strings = realloc(output_strings, sizeof(char *) * (i + 1)); - output_strings[i] = NULL; - output_strings[i] = yon_char_new(str); - memset(str, 0, 4096); - i++; - } - } - if (i>0){ - *str_len = i; - return output_strings; - } else{ - *str_len=-1; - return NULL; - } -} - -/**int yon_config_save_registered(char *path, char *section) - * [EN] - * Saves config with [command] - * [RU] - * Выполняет команду [command], добавляя в конец все записи конфига в таком виде: - * [ПАРАМЕТР1]="[значения1]" [ПАРАМЕТР2]="[значения2]" -*/ -int yon_config_save_registered(char *path, char *section){ - check_config{ - char *command = yon_char_unite("/usr/bin/ubconfig",path ? yon_char_append(" --target ",path):"", " set ", section,NULL); - char *remove_command = yon_char_unite("/usr/bin/ubconfig", path ? yon_char_append(" --target ",path):"", " remove ", section,NULL); - dictionary *dict = NULL; - int any_add = 0; - int any_remove = 0; - for_dictionaries(dict,__yon__config__strings){ - char *data = yon_dictionary_get_data(dict,char*); - if (dict->flag1==1&&strcmp(data,"")!=0){ - command = yon_char_unite(command, " ", dict->key,"=\"", yon_dictionary_get_data(dict,char*),"\"", NULL); - any_add=1; - } - if (strcmp(data,"")==0){ - remove_command = yon_char_unite(remove_command, " ", dict->key, NULL); - any_remove=1; - } - } - if (any_add) yon_launch(command); - if (any_remove) yon_launch(remove_command); - return 1; - } else return 1; -} - -/**yon_config_get_all(int *size) - * [EN] - * - * [RU] - * Возвращает массив со всеми параметрами конфига, оканчивающаяся NULL - * [size] - указатель, в который выгружается длина массива -*/ -config_str yon_config_get_all(int *size){ - check_config{ - *size = 1; - config_str conf = NULL; - dictionary *dict = NULL; - for_dictionaries(dict,__yon__config__strings){ - conf = yon_remalloc(conf,sizeof(char*)*(*size)); - conf[(*size)-1] = yon_char_unite(dict->key,"=",(char*)dict->data,NULL); - (*size)++; - } - conf = yon_remalloc(conf,sizeof(char*)*(*size)); - conf[*size-1] = NULL; - return conf; - } else return NULL; -} - -/**char *yon_config_get_parameter(config parameters, int size, char *param) - * [EN] - * Gets parameter [param] from parameter list [parameters] of size [size]; - * or NULL if nothing were found - * [RU] - * Возвращает параметр [param] из массива строк [parameters] размером [size] - * или NULL если такой не был найден -*/ -char *yon_config_get_parameter(config_str parameters, int size, char *param) -{ - if (param[0]==' ') - yon_char_divide_search(param," ",-1); - param=yon_char_divide_search(yon_char_new(param)," ",-1); - - char *str = NULL; - for (int j = 0; j < size; j++) - { - char *name = yon_char_divide_search(yon_char_new(parameters[j]), "=", 1); - if (name) - { - if (strcmp(name, param) == 0) - { - str = yon_char_divide_search(yon_char_new(parameters[j]), "\n", 1); - if (strcmp(str, "") != 0 && strcmp(str, "(null)") != 0) - return str; - else - return NULL; - } - } - } - return NULL; -} - - - -// terminal-using functions - -/**yon_launch_app_with_arguments(char *name, char *args) - * [EN] - * Execute [command] in separate thread; - * [RU] - * Выполнить команду [command] в отдельном потоке; -*/ -int yon_launch_app_with_arguments(char *name, char *args) -{ - char *path = yon_char_unite(name, " ", args,NULL); - pthread_t thread_id; - char *command = NULL; - command = path; - pthread_create(&thread_id, NULL, (void *)yon_launch, command); -}; - -/**yon_launch(char *command) - * [EN] - * Execute command [command] - * [RU] - * Выполнить команду [command] -*/ -void yon_launch(char *command) -{ - system(command); -} - - -/**yon_launch(char *command) - * [EN] - * Execute command [command] - * [RU] - * Выполнить команду [command] -*/ -void yon_launch_thread(char *command) -{ - pthread_t thread_id; - pthread_create(&thread_id, NULL, (void *)yon_launch, command); -} - -// Gtk functions - - -#ifdef __GTK_H__ - - -static render_data render; - -#ifdef VTE_TERMINAL - -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 yon_terminal_integrated_launch(GtkWidget *place_to_show, void *endwork_function, void* endwork_function_argument) - * [EN] - * launches terminal with specific [command], - * terminal is shown in [place_to_show] container, - * after terminal done its work [endwork_function] is called with [endwork_function_argument] argument. - * [RU] - * Запускает терминал с командой [command], - * терминал добавляется в контейнер [place_to_show] виджета, - * после завершения работы терминала вызывается функция [endwork_function] с аргументом [endwork_function_argument]. -*/ -void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, void *endwork_function, void* endwork_function_argument){ - char **commands=new_arr(char*,2); - gchar **envp = g_get_environ(); - commands[0]=(gchar *)g_strdup(g_environ_getenv(envp, "SHELL")); - commands[1]=NULL; - char **env=new_arr(char*,2); - env[0]=""; - env[1]=NULL; - GtkWidget *terminal = vte_terminal_new(); - vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); - VtePty *pty = vte_pty_new_sync(VTE_PTY_DEFAULT,NULL,NULL); - vte_terminal_set_pty(VTE_TERMINAL(terminal),pty); - gtk_container_add(GTK_CONTAINER(place_to_show),terminal); - char *install_command=yon_char_unite("tput cup 0 0 && tput ed; ",command," ; sleep 5;exit 0","\n",NULL); - if(endwork_function) - g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument); - vte_terminal_spawn_async(VTE_TERMINAL(terminal), - VTE_PTY_DEFAULT, - NULL, - commands, - NULL, - 0, - NULL, NULL, - NULL, - -1, - NULL, - child_ready, - install_command); - vte_pty_spawn_async(pty, - NULL, - commands, - NULL, - 0, - NULL, NULL, - NULL, - -1, - NULL, - NULL, - NULL); - vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), -1); - vte_terminal_set_scroll_on_output(VTE_TERMINAL(terminal), TRUE); - vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE); - gtk_widget_show_all(terminal); - } - -/**yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument) - * [EN] - * launches terminal with specific [command], - * terminal is shown in [place_to_show] container, - * after terminal done its work [endwork_function] is called with [endwork_function_argument] argument. - * [RU] - * Запускает терминал с командой [command], - * терминал добавляется в контейнер [place_to_show] виджета, - * после завершения работы терминала вызывается функция [endwork_function] с аргументом [endwork_function_argument]. -*/ -void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument){ - char **commands=new_arr(char*,2); - gchar **envp = g_get_environ(); - commands[0]=(gchar *)g_strdup(g_environ_getenv(envp, "SHELL")); - commands[1]=NULL; - char **env=new_arr(char*,2); - env[0]=""; - env[1]=NULL; - vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); - 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; ",command," ; sleep 5;exit 0","\n",NULL); - if(endwork_function) - g_signal_connect(G_OBJECT(terminal), "child-exited", G_CALLBACK(endwork_function), endwork_function_argument); - vte_terminal_spawn_async(VTE_TERMINAL(terminal), - VTE_PTY_DEFAULT, - NULL, - commands, - NULL, - 0, - NULL, NULL, - NULL, - -1, - NULL, - child_ready, - install_command); - vte_pty_spawn_async(pty, - NULL, - commands, - NULL, - 0, - NULL, NULL, - NULL, - -1, - NULL, - NULL, - NULL); - vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), -1); - vte_terminal_set_scroll_on_output(VTE_TERMINAL(terminal), TRUE); - vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(terminal), TRUE); - gtk_widget_show_all(terminal); - } -#endif - - // Window config functions - - #define check_window_config_setup if(__yon_window_config_target_window) - - typedef struct { - char *parameter_name; - enum YON_TYPE containing_type; - GtkWidget *track_widget; - char *property_name; - } __yon_listener_parameter; - - typedef struct { - char *parameter_name; - char *section; - enum YON_TYPE containing_type; - void *property; - } __yon_custom_parameter; - - struct { - int x; - int y; - int width; - int height; - int fullscreen; - dictionary *custom_listeners; - dictionary *custom_parameters; - dictionary *deleted_parameters; - } __yon_main_window_config; - - static GtkWindow *__yon_window_config_target_window = NULL; - static GKeyFile *__yon_window_config_file = NULL; - static char *__yon_window_config_path = NULL; - - void yon_window_config_save(){ - g_key_file_set_integer(__yon_window_config_file,"window","WindowPosX",__yon_main_window_config.x); - g_key_file_set_integer(__yon_window_config_file,"window","WindowPosY",__yon_main_window_config.y); - g_key_file_set_integer(__yon_window_config_file,"window","WindowWidth",__yon_main_window_config.width); - g_key_file_set_integer(__yon_window_config_file,"window","WindowHeight",__yon_main_window_config.height); - g_key_file_set_integer(__yon_window_config_file,"window","fullscreen",__yon_main_window_config.fullscreen); - dictionary *dict=NULL; - if (__yon_main_window_config.custom_listeners) - for_dictionaries(dict,__yon_main_window_config.custom_listeners){ - __yon_listener_parameter *param = yon_dictionary_get_data(dict,__yon_listener_parameter*); - GValue *val = g_malloc0(sizeof(GValue)); - g_object_get_property(G_OBJECT(param->track_widget),param->property_name,val); - switch(param->containing_type){ - case YON_TYPE_STRING: - g_key_file_set_string(__yon_window_config_file,"window",param->parameter_name, g_value_get_string(val)); - break; - case YON_TYPE_INT: - g_key_file_set_integer(__yon_window_config_file,"window",param->parameter_name, g_value_get_int(val)); - break; - case YON_TYPE_DOUBLE: - g_key_file_set_double(__yon_window_config_file,"window",param->parameter_name, g_value_get_double(val)); - break; - case YON_TYPE_BOOLEAN: - g_key_file_set_boolean(__yon_window_config_file,"window",param->parameter_name, g_value_get_boolean(val)); - break; - case YON_TYPE_OTHER:printf("\033[0;31mCannot save %s property with %s key\033[0m\n",param->property_name,param->parameter_name);break; - } - } - if (__yon_main_window_config.custom_parameters) - for_dictionaries(dict,__yon_main_window_config.custom_parameters){ - __yon_custom_parameter *param = yon_dictionary_get_data(dict,__yon_custom_parameter*); - switch (param->containing_type){ - case YON_TYPE_STRING: - g_key_file_set_string(__yon_window_config_file,param->section,param->parameter_name, (char*)param->property); - break; - case YON_TYPE_INT: - g_key_file_set_integer(__yon_window_config_file,param->section,param->parameter_name, *(int*)param->property); - break; - case YON_TYPE_DOUBLE: - g_key_file_set_double(__yon_window_config_file,param->section,param->parameter_name, *(double*)param->property); - break; - case YON_TYPE_BOOLEAN: - g_key_file_set_boolean(__yon_window_config_file,param->section,param->parameter_name, *(gboolean*)param->property); - break; - default: - break; - } - } - if (__yon_main_window_config.deleted_parameters) - for_dictionaries(dict,__yon_main_window_config.deleted_parameters){ - __yon_custom_parameter *param = yon_dictionary_get_data(dict,__yon_custom_parameter*); - g_key_file_remove_key(__yon_window_config_file,param->section,param->parameter_name,NULL); - } - g_key_file_save_to_file(__yon_window_config_file,__yon_window_config_path,NULL); - } - - void yon_get_is_fullscreen(){ - gtk_window_is_maximized(__yon_window_config_target_window); - __yon_main_window_config.fullscreen = gtk_window_is_maximized(__yon_window_config_target_window); - if (!__yon_main_window_config.fullscreen) gtk_window_get_position(__yon_window_config_target_window,&__yon_main_window_config.x,&__yon_main_window_config.y); - } - - /**yon_on_configured_window_destroy(GtkWidget* self,GdkEvent* event) - * [EN] - * - * [RU] - * Сохраняет настройки основного окна. Вызывается когда основное окно уничтожается. - */ - void yon_on_configured_window_destroy(GtkWidget* self,GdkEvent* event){ - check_window_config_setup{ - yon_get_is_fullscreen(); - yon_window_config_save(); - } - gtk_main_quit(); - } - - void __yon_window_config_on_resize(){ - int max=0; - max=gtk_window_is_maximized(__yon_window_config_target_window); - if(max==0){ - gtk_window_get_size(__yon_window_config_target_window,&__yon_main_window_config.width,&__yon_main_window_config.height); - gtk_window_get_position(__yon_window_config_target_window,&__yon_main_window_config.x,&__yon_main_window_config.y); - } - } - - /**yon_window_config_setup(GtkWindow *window) - * [EN] - * - * [RU] - * Устанавливает указатель на окно для отслеживания его положения и размера - */ - void yon_window_config_setup(GtkWindow *window){ - __yon_window_config_target_window = window; - g_signal_connect(G_OBJECT(window),"delete-event",G_CALLBACK(yon_on_configured_window_destroy),NULL); - g_signal_connect(G_OBJECT(window),"check-resize"/*"configure-event"*/,G_CALLBACK(__yon_window_config_on_resize),NULL); - } - - void _yon_maximize(void *data){ - g_usleep(G_USEC_PER_SEC/10); - if(__yon_main_window_config.fullscreen ==1) gtk_window_maximize(__yon_window_config_target_window); - } - - /**yon_window_config_load(char *path) - * [EN] - * - * [RU] - * Загружает конфиг окна и инициализирует отслеживание его параметров - */ - int yon_window_config_load(char *path){ - __yon_window_config_file = g_key_file_new(); - __yon_window_config_path=yon_char_new(path); - if (!g_key_file_load_from_file(__yon_window_config_file,__yon_window_config_path,G_KEY_FILE_NONE,NULL)){ - struct stat st; - int size; - char *path = yon_char_divide(yon_char_new(__yon_window_config_path),yon_char_find_last(__yon_window_config_path,'/')); - if (stat(path, &st) == -1) { - mkdir(path, 0777); - } - FILE *fp; - fp=fopen(__yon_window_config_path,"w"); - fclose(fp); - g_key_file_load_from_file(__yon_window_config_file,__yon_window_config_path,G_KEY_FILE_NONE,NULL); - } - __yon_main_window_config.x = g_key_file_get_integer(__yon_window_config_file,"window","WindowPosX",NULL); - __yon_main_window_config.y = g_key_file_get_integer(__yon_window_config_file,"window","WindowPosY",NULL); - __yon_main_window_config.width = g_key_file_get_integer(__yon_window_config_file,"window","WindowWidth",NULL); - __yon_main_window_config.height = g_key_file_get_integer(__yon_window_config_file,"window","WindowHeight",NULL); - __yon_main_window_config.fullscreen = g_key_file_get_integer(__yon_window_config_file,"window","fullscreen",NULL); - dictionary *dict=NULL; - if (__yon_main_window_config.custom_listeners) - for_dictionaries(dict,__yon_main_window_config.custom_listeners){ - __yon_listener_parameter *param = yon_dictionary_get_data(dict,__yon_listener_parameter*); - GValue *val = g_malloc0(sizeof(GValue)); - g_object_get_property(G_OBJECT(param->track_widget),param->property_name,val); - switch(param->containing_type){ - case YON_TYPE_STRING: - g_value_set_string(val,g_key_file_get_string(__yon_window_config_file,"window",param->parameter_name, NULL)); - break; - case YON_TYPE_INT: - g_value_set_int(val,g_key_file_get_integer(__yon_window_config_file,"window",param->parameter_name, NULL)); - break; - case YON_TYPE_DOUBLE: - g_value_set_double(val,g_key_file_get_double(__yon_window_config_file,"window",param->parameter_name, NULL)); - break; - case YON_TYPE_BOOLEAN: - gboolean res = g_key_file_get_boolean(__yon_window_config_file,"window",param->parameter_name, NULL); - g_value_set_boolean(val,res); - break; - default:printf("\033[0;31mCannot load %s property with %s key\033[0m\n",param->property_name,param->parameter_name);break; - } - g_object_set_property(G_OBJECT(param->track_widget),param->property_name,val); - } - if (__yon_main_window_config.width!=0&&__yon_main_window_config.height!=0) gtk_window_resize(__yon_window_config_target_window,__yon_main_window_config.width,__yon_main_window_config.height); - if (__yon_main_window_config.x!=0&&__yon_main_window_config.y!=0) gtk_window_move(__yon_window_config_target_window,__yon_main_window_config.x,__yon_main_window_config.y); - - - pthread_t tid; - pthread_create(&tid,NULL,(void *)_yon_maximize,NULL); - return 1; - } - - void yon_window_config_apply(){ - dictionary *dict=NULL; - gtk_window_move(__yon_window_config_target_window,__yon_main_window_config.x,__yon_main_window_config.y); - gtk_window_resize(__yon_window_config_target_window,__yon_main_window_config.width,__yon_main_window_config.height); - } - - config_str yon_window_config_get_section(char *section, gsize *size){ - config_str key = g_key_file_get_keys(__yon_window_config_file,section,size,NULL); - return key; - } - - /**yon_window_config_add_listener(GtkWidget *widget, char *param_name, char *widget_property, enum YON_TYPE val_type) - * [EN] - * - * [RU] - * Добавляет параметр виджета [widget] по названию [widget_property] для отслеживания и сохраняет его в конфиг под ключом [param_name]. - */ - void yon_window_config_add_listener(GtkWidget *widget, char *param_name, char *widget_property, enum YON_TYPE val_type){ - __yon_listener_parameter *param = NULL; - param = yon_remalloc(param,sizeof(__yon_listener_parameter)); - param->parameter_name = yon_char_new(param_name); - param->track_widget = widget; - param->property_name = yon_char_new(widget_property); - param->containing_type = val_type; - yon_dictionary_add_or_create_if_exists_with_data(__yon_main_window_config.custom_listeners,param->parameter_name,param); - } - - void yon_window_config_add_custom_parameter(char *param_name, char *section, void *tracked_value, enum YON_TYPE val_type){ - __yon_custom_parameter *param = NULL; - param = yon_remalloc(param,sizeof(__yon_custom_parameter)); - param->parameter_name = yon_char_new(param_name); - param->section=section; - param->property = tracked_value; - param->containing_type = val_type; - yon_dictionary_add_or_create_if_exists_with_data(__yon_main_window_config.custom_parameters,param->parameter_name,param); - } - - void yon_window_config_erase_custom_parameter(char *param_name, char *section){ - __yon_custom_parameter *param = NULL; - param = yon_remalloc(param,sizeof(__yon_custom_parameter)); - param->parameter_name=param_name; - param->section=section; - yon_dictionary_add_or_create_if_exists_with_data(__yon_main_window_config.deleted_parameters,param->parameter_name,param); - } - - int yon_window_config_get_parameter(char *section, char *config_parameter, void *return_value, enum YON_TYPE type){ - GError *err=NULL; - switch (type){ - case YON_TYPE_BOOLEAN: - *((int*)return_value) = g_key_file_get_boolean(__yon_window_config_file,section,config_parameter,&err); - if (err) return 0; else return 1; - break; - case YON_TYPE_INT: - *((int*)return_value) = g_key_file_get_integer(__yon_window_config_file,section,config_parameter,&err); - if (err) return 0; else return 1; - break; - case YON_TYPE_DOUBLE: - *((int*)return_value) = g_key_file_get_double(__yon_window_config_file,section,config_parameter,&err); - if (err) return 0; else return 1; - break; - case YON_TYPE_STRING: - *((char**)return_value) = g_key_file_get_string(__yon_window_config_file,section,config_parameter,&err); - if (err) return 0; else return 1; - break; - case YON_TYPE_STRING_LIST: - gsize size=0; - *((char***)return_value) = g_key_file_get_string_list(__yon_window_config_file,section,config_parameter,&size,&err); - *((char***)return_value)=yon_remalloc(return_value,size+1); - *((char***)return_value)[size]=NULL; - if (err) return 0; else return 1; - break; - } - } - -GtkWidget *yon_ubl_menu_item_about_new(char *buttonname){ - GtkWidget *menu_item = gtk_menu_item_new(); - gtk_style_context_add_class(gtk_widget_get_style_context(menu_item),"aaa"); - GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); - GtkWidget *label = gtk_label_new(buttonname); - GtkWidget *image = gtk_image_new_from_icon_name("dialog-information-symbolic",GTK_ICON_SIZE_BUTTON); - gtk_label_set_xalign(GTK_LABEL(label),0.0); - gtk_box_pack_start(GTK_BOX(box),image,0,0,5); - gtk_box_pack_start(GTK_BOX(box),label,0,0,5); - gtk_container_add(GTK_CONTAINER(menu_item),box); - gtk_widget_show_all(menu_item); - return menu_item; -} - -GtkWidget *yon_ubl_menu_item_documentation_new(char *buttonname){ - GtkWidget *menu_item = gtk_menu_item_new(); - gtk_style_context_add_class(gtk_widget_get_style_context(menu_item),"aaa"); - GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0); - GtkWidget *label = gtk_label_new(buttonname); - GtkWidget *image = gtk_image_new_from_icon_name("dialog-question-symbolic",GTK_ICON_SIZE_BUTTON); - gtk_label_set_xalign(GTK_LABEL(label),0.0); - gtk_box_pack_start(GTK_BOX(box),image,0,0,5); - gtk_box_pack_start(GTK_BOX(box),label,0,0,5); - gtk_container_add(GTK_CONTAINER(menu_item),box); - gtk_widget_show_all(menu_item); - return menu_item; -} - - -// other Gtk functions - -/**yon_gtk_combo_box_text_fill(GtkWidget *combo, config_str parameters,int size) - * [EN] - * - * [RU] - * Добавляет в Комбобокс [combo] все строки из массива строк [parameters] размера [size] -*/ -int yon_gtk_combo_box_text_fill(GtkWidget *combo, config_str parameters,int size){ - if (combo&¶meters){ - for (int i=0;i=0 ? 1 : 0); -} - -void yon_gtk_widget_set_sensitive_from_toggle_combo_box_inversed(GtkComboBox *toggle, GtkWidget *target){ - gtk_widget_set_sensitive(target,!gtk_combo_box_get_active(toggle)>=0 ? 0 : 1); -} - -void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path) -{ - gtk_overlay_add_overlay(GTK_OVERLAY(Overlay), Head); - gtk_image_set_from_file(GTK_IMAGE(Image), image_path); -} - -void _yon_ubl_header_setup_resource(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path) -{ - gtk_overlay_add_overlay(GTK_OVERLAY(Overlay), Head); - gtk_image_set_from_resource(GTK_IMAGE(Image), image_path); -} - -int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label) -{ - if(icon&&box&&label){ - render.icon=icon; - render.box=box; - render.label=label; - return 1; - } else return 0; -} - -void _yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type) -{ - render_data data = render; - GtkIconTheme *ictheme = gtk_icon_theme_get_default(); - GError *err = NULL; - if (err) - { - printf("%s\n", err->message); - g_error_free(err); - } - if (type == BACKGROUND_IMAGE_SUCCESS_TYPE||! type) - { - 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 (type == BACKGROUND_IMAGE_FAIL_TYPE) - { - 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 (text) - gtk_label_set_text(GTK_LABEL(data.label), text); -} - -void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type){ - _yon_ubl_status_box_render(text,type); -} - -/**yon_ubl_setup_sockets(GtkWidget *main_window, GtkWidget *left_window, GtkWidget *right_window, int socket_main_id, int socket_left_id, int socket_right_id) - * [EN] - * Set up plugs for using with GtkSockets insine ubl-settings-manager. - * [main_window] is container widget, which holds main application functionality. - * [left_window] is container widget, which holds widgets, have to be shown at left part of ubl-settings-manager header. - * [right_window] is container widget, which holds widgets, have to be shown at right part of ubl-settings-manager header. - * [socket_main_id] is id of socket for [main_window]. - * [socket_left_id] is id of socket for [left_window]. - * [socket_right_id] is id of socket for [right_window]. - * [RU] - * Настраивает плаги для работы с сокетами в утилите ubl-settings-manager. - * [main_window] - контейнер основного интерфейса приложения. - * [left_window] - контейнер для виджетов которые должны отображаться в левой части шапки ubl-settings-manager. - * [right_window] - контейнер для виджетов которые должны отображаться в правой части шапки ubl-settings-manager. - * [socket_main_id] - id сокета для [main_window]. - * [socket_left_id] - id сокета для [left_window]. - * [socket_right_id] - id сокета для [right_window]. -*/ -void yon_ubl_setup_sockets(GtkWidget *main_window, GtkWidget *left_window, GtkWidget *right_window, int socket_main_id, int socket_left_id, int socket_right_id){ - if (main_window&&socket_main_id>-1){ - gtk_widget_hide(gtk_widget_get_toplevel(main_window)); - GtkWidget *plug_main=gtk_plug_new(socket_main_id); - GtkWidget *plug_left=NULL; - GtkWidget *plug_right=NULL; - GtkWidget *box=NULL; - g_signal_connect(G_OBJECT(plug_main), "destroy", G_CALLBACK(gtk_main_quit),NULL); - if (socket_left_id>-1&&left_window){ - plug_left=gtk_plug_new(socket_left_id); - g_object_ref(left_window); - gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(left_window)),left_window); - gtk_container_add(GTK_CONTAINER(plug_left),left_window); - gtk_style_context_add_class(gtk_widget_get_style_context(plug_left),"primary-toolbar"); - gtk_style_context_add_class(gtk_widget_get_style_context(left_window),"button"); - gtk_style_context_add_class(gtk_widget_get_style_context(left_window),"opacited"); - gtk_style_context_add_class(gtk_widget_get_style_context(left_window),"color"); - gtk_style_context_add_class(gtk_widget_get_style_context(plug_left),"noborder"); - gtk_widget_show(plug_left); - } - else if (left_window){ - if (box==NULL){ - box=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); - gtk_box_pack_start(GTK_BOX(main_window),box,0,0,5); - gtk_box_reorder_child(GTK_BOX(main_window),box,0); - gtk_widget_show(box); - } - gtk_style_context_add_class(gtk_widget_get_style_context(left_window),"inherited"); - gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(left_window)),left_window); - gtk_box_pack_end(GTK_BOX(box),left_window,0,0,5); - } - if (socket_right_id>-1&&right_window){ - plug_right=gtk_plug_new(socket_right_id); - g_object_ref(right_window); - gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(right_window)),right_window); - gtk_container_add(GTK_CONTAINER(plug_right),right_window); - gtk_style_context_add_class(gtk_widget_get_style_context(plug_right),"primary-toolbar"); - gtk_style_context_add_class(gtk_widget_get_style_context(right_window),"button"); - gtk_style_context_add_class(gtk_widget_get_style_context(right_window),"opacited"); - gtk_style_context_add_class(gtk_widget_get_style_context(right_window),"color"); - gtk_style_context_add_class(gtk_widget_get_style_context(plug_right),"noborder"); - gtk_widget_show(plug_right); - } - else if (right_window){ - if (box==NULL){ - box=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); - gtk_box_pack_start(GTK_BOX(main_window),box,0,0,5); - gtk_box_reorder_child(GTK_BOX(main_window),box,0); - gtk_widget_show(box); - } - gtk_style_context_add_class(gtk_widget_get_style_context(right_window),"inherited"); - gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(right_window)),right_window); - gtk_box_pack_start(GTK_BOX(box),right_window,0,0,5); - } - g_object_ref(main_window); - gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(main_window)),main_window); - gtk_container_add(GTK_CONTAINER(plug_main),main_window); - gtk_widget_show(plug_main); - } -} - -#ifdef WEBKIT_FOUND - -/**yon_ubl_browser_window_open(char *link, char *browser_window_name) - * [EN] - * Launches integrated browser window, named [browser_window_name] at header with [link]. - * [RU] - * Открывает встроенный браузер с именем [browser_window_name] и показываемой страницей по ссылке [link] -*/ -void yon_ubl_browser_window_open(char *link, char *browser_window_name){ - GtkWidget *browser=gtk_window_new(GTK_WINDOW_TOPLEVEL); - GtkWidget *web_place=gtk_box_new(GTK_ORIENTATION_VERTICAL,0); - GtkWidget *header=gtk_header_bar_new(); - GtkWidget *header_label=gtk_label_new(browser_window_name); - GtkWidget *WebView=webkit_web_view_new(); - gtk_container_add(GTK_CONTAINER(browser),web_place); - gtk_window_set_titlebar(GTK_WINDOW(browser),header); - gtk_window_set_title(GTK_WINDOW(browser),browser_window_name); - gtk_widget_set_size_request(browser,800,600); - gtk_header_bar_set_custom_title(GTK_HEADER_BAR(header),header_label); - gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(header),1); - webkit_web_view_load_uri(WEBKIT_WEB_VIEW(WebView),link); - gtk_box_pack_start(GTK_BOX(web_place),WebView,1,1,0); - gtk_widget_show_all(browser); -} -#else - -/**yon_ubl_browser_window_open(char *link, char *browser_window_name) - * [EN] - * Launches browser with [link]. - * [browser_window_name] is't used. It's needed for compatibility with webkit version of that function. - * [RU] - * Открывает браузер со страницей по ссылке [link] - * [browser_window_name] не используется. Нужна для совместимости с webkit версией этой функции. -*/ -void yon_ubl_browser_window_open(char *link, char *browser_window_name){ - char *user=getenv("SUDO_USER"); - if (!user) - user=getlogin(); - char *command=yon_char_unite("sudo -u ",user," xdg-open ", link,NULL); - yon_launch_app(command); -} -#endif - -#endif \ No newline at end of file diff --git a/source/ubl-utils.h b/source/ubl-utils.h deleted file mode 100644 index af1371b..0000000 --- a/source/ubl-utils.h +++ /dev/null @@ -1,401 +0,0 @@ -#ifndef UBL_UTILS -#define UBL_UTILS -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ubl-cmake.h" -#ifdef WEBKIT_FOUND - #include -#endif - -#define _(String) gettext(String) - -#define DesktopPath "/usr/share/applications/" -#define try bool __HadError=false; -#define catch(x) ExitJmp:if(__HadError) -#define throw(x) {__HadError=true;goto ExitJmp;} -static char** array_size_pow; -#define for_dictionaries(obj, obj1) for (obj = obj1->first; obj != NULL; obj = obj->next) - -#define new(type) malloc(sizeof(type)) -#define new_arr(type,size) malloc(sizeof(type)*size) - -#define get_home_dir_command yon_char_unite("getent passwd \"",yon_ubl_root_user_get(),"\" | cut -d: -f6",NULL) - -#define get_processes_command "systemd-cgls --no-pager |grep -oE \"[-0-9A-Za-z.:]{1,}.service\"" -#define get_slices_command "systemd-cgls --no-pager |grep -oE \"[-0-9A-Za-z.:]{1,}.slice\"" - -#define yon_ubl_set_config_save_data_pointer(command) config_commands.config_save_data = command - -#define yon_ubl_load_global_config(command, size_pointer) yon_config_load(command, size_pointer) -#define yon_ubl_load_local_config(command, size_pointer) yon_config_load(command, size_pointer) -#define yon_ubl_save_global_config(command) yon_config_save(command) -#define yon_ubl_save_local_config(command) yon_config_save(command) -typedef enum -{ - #ifdef __GTK_H__ - DICTIONARY_GTK_WIDGETS_TYPE, - #endif - DICTIONARY_OTHER_TYPE=0, - DICTIONARY_CHAR_TYPE, - DICTIONARY_INT_TYPE, - DICTIONARY_BOOL_TYPE, - -} DICT_TYPE; - - -typedef struct -{ - char *command; - int *exitcode; -} thread_output; -typedef struct dictionary -{ - char *key; - void *data; - struct dictionary *next; - struct dictionary *prev; - struct dictionary *first; - DICT_TYPE data_type; - int flag1; -} dictionary; - -typedef struct apps -{ - char *filename; - char *Name; - int Type; - char *Categories; - char *Exec; - char *Icon; - int Pluggable; - int DualPluggable; - int Hidden; -} apps; - -typedef char** config_str; - -static dictionary *__yon__config__strings = NULL; -#define check_config if(__yon__config__strings&&__yon__config__strings->data_type==DICTIONARY_CHAR_TYPE) - -#define config(key) yon_config_get_by_key(key) - -#define for_config dictionary temp = NULL; for_dictionary(temp,__yon__config__strings) - -#define yon_remalloc(pointer, size) (!pointer) ? malloc(size) : realloc(pointer, size) -// dictionary functions - -/**yon_dictionary_get_data(dictionary, type) - * [EN] - * Gets data from dictionary. - * [dictionary] is dictionary, from which data should be extracted; - * [type] is type of data, [dictionary] contains. - * [RU] - * Возвращает данные из словаря. - * [dictionary] - словарь из которого достаются данные. - * [type] - тип данных, хранящихся в словаре [dictionary]. -*/ -#define yon_dictionary_get_data(dictionary, type) ((type)dictionary->data) - -/**yon_dictionary_add_or_create_if_exists_with_data(dict,key,data) - * [EN] - * - * [RU] - * Добавляет элемент словаря в конец словаря [dict] c ключом [key] и данными [data]. - * Если словарь не существует, создаёт его -*/ -#define yon_dictionary_add_or_create_if_exists_with_data(dict,key,data) {if (!dict) dict=yon_dictionary_new_with_data(key,data); \ - else dict=yon_dictionary_append_with_data(dict,key,data);} - -dictionary *yon_dictionary_new(); - -dictionary *yon_dictionary_append(dictionary *targetdict); - -dictionary *yon_dictionary_get_last(dictionary *dict); - -dictionary *yon_dictionary_swap(dictionary *dict, int aim); - -void yon_dictionary_make_first(dictionary *dict); - -void yon_dictionary_make_nth(dictionary *dict, int nth); - -dictionary *yon_dictionary_new_with_data(char *key, void *data); - -dictionary *yon_dictionary_append_with_data(dictionary *dict, char *key, void *data); - -dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect); - -dictionary *yon_dictionary_get(dictionary **dict, char *key); - -dictionary *yon_dictionary_rip(dictionary *dict); - -dictionary *yon_dictionary_get_nth(dictionary *dict, int place); - -void *yon_dictionary_free_all(dictionary *dictionary,void (data_manipulation)(void*)); - -// char functions - -#define yon_char_is_empty(string) !(string&&strcmp(string,"")) - -int yon_char_find_last(char *source, char find); - -char *yon_char_append(char *source, char *append); - -char *yon_char_new(char *chr); - -char *yon_char_unite(char *source, ...); - -char *yon_cut(char *source, int size, int startpos); - -char *yon_char_divide(char *source, int dividepos); - -char *yon_char_divide_search(char *source, char *dividepos, int delete_divider); - -char *yon_char_from_int(int int_to_convert); -char *yon_char_from_long(long int_to_convert); - -char *yon_char_replace(char *source, char *find, char*replace); - -char **yon_char_parse(char *parameters, int *size, char *divider); - -char **yon_char_parsed_rip(char **char_string, int *size, int item_to_delete); - -char *yon_char_parsed_to_string(config_str parsed, int size, char *divider_replace); - -int yon_char_parsed_check_exist(char **parameters, int size, char *param); - -void yon_char_parsed_free(config_str source, int size); - -int yon_char_find_count(char *source, char *find); - -int yon_char_parsed_includes_char_parsed (config_str source, config_str to_check, int source_size, int check_size); - -config_str yon_char_parsed_new (int *size, ...); - -void yon_char_parsed_copy(config_str *source, config_str *to_copy); - -config_str yon_char_parsed_append(config_str parsed, int *size, char *string); - -int yon_char_parsed_remove_newline_symbols(config_str parsed, int *size); - -int yon_ubl_check_root(); - -char *yon_ubl_root_user_get(); - -char *yon_ubl_user_get_home_directory(); - -config_str yon_ubl_get_all_users(int *user_size); -config_str yon_ubl_get_all_processes(int *processes_size); -config_str yon_ubl_get_all_slices(int *slices_size); - -// parsing functions - -config_str philos_list_user(int* size); - -dictionary *yon_scan_desktops(); - -apps *yon_apps_scan_and_parse_desktops(int *sizef); - -void yon_apps_sort(apps *applist, int size); - -apps *yon_apps_get_by_name(apps *applist, char *name, int size); - -char *yon_app_chooser_open_with_sections(char *section_name, char *section_filter, char *section_icon, ...); - -config_str yon_config_load(char *command, int *str_len); - -int yon_config_save_registered(char *path, char *section); - -char *yon_config_get_parameter(config_str parameters, int size, char *param); - -int yon_config_load_register(char *command); - -int yon_config_remove_by_key(char *key); - -int yon_config_remove_by_data(void *data); - -int yon_config_remove_element(char *key, char *deleted); - -void *yon_config_get_by_key(char *key); - -char *yon_config_get_key_by_data(char *data); - -int yon_config_set(char *key, void *data); - -int yon_config_clean(); - -void yon_config_register(char *key, void *data); - -config_str yon_config_get_all(); - -// terminal-using functions - -int yon_launch_app_with_arguments(char *name, char *args); - -void yon_launch(char *command); - -void yon_launch_thread(char *command); - -// Gtk functions - -#ifdef __GTK_H__ -#ifdef VTE_TERMINAL -void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, void *endwork_function, void* endwork_function_argument); - -void yon_terminal_integrated_start(GtkWidget *terminal, char* command, void *endwork_function, void* endwork_function_argument); - -#endif - -enum YON_TYPE{ - YON_TYPE_STRING, - YON_TYPE_STRING_LIST, - YON_TYPE_INT, - YON_TYPE_DOUBLE, - YON_TYPE_BOOLEAN, - YON_TYPE_OTHER -}; - -GtkWidget *yon_ubl_menu_item_about_new(char *buttonname); -GtkWidget *yon_ubl_menu_item_documentation_new(char *buttonname); - -/**yon_gtk_builder_get_widget(builder, widget_name) - * [EN] - * Returns GtkWidget from GtkBuilder *[builder]. - * [builder] is GtkBuilder*; - * [widget_name] is id of widget; -*/ -#define yon_gtk_builder_get_widget(builder, widget_name) GTK_WIDGET(gtk_builder_get_object(builder, widget_name)) - -typedef struct -{ - GtkWidget *Icon; - GtkWidget *Label; - GtkWidget *IconView; - GtkListStore *List; -} expander_icon_view; - -void yon_window_config_setup(GtkWindow *window); - -int yon_window_config_load(char *path); - -config_str yon_window_config_get_section(char *section, gsize *size); - -void yon_window_config_add_listener(GtkWidget *widget, char *param_name, char *widget_property, enum YON_TYPE val_type); - -void yon_window_config_add_custom_parameter(char *param_name, char *section, void *tracked_value, enum YON_TYPE val_type); - -void yon_window_config_erase_custom_parameter(char *param_name, char *section); - -int yon_window_config_get_parameter(char *section, char *config_parameter, void *return_value, enum YON_TYPE type); - -int yon_gtk_combo_box_text_fill(GtkWidget *combo, char **parameters,int size); - -int yon_gtk_combo_box_text_find(GtkWidget *combo_box, char *text_to_find); - -void yon_gtk_column_minimal_fixed_size_set(GtkTreeViewColumn *column); - -int yon_gtk_icon_view_hide_empty(dictionary *icon_view_segment); - -void yon_subwindow_close(GtkWidget *self); - - -int yon_dictionary_gtk_pack_start_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...); - -int yon_dictionary_gtk_pack_end_multiple_widgets(GtkBox *destination, gboolean expand, gboolean fill, int padding, ...); - -void yon_gtk_widget_set_sensitive_from_toggle_button(GtkToggleButton *toggle, GtkWidget *target); -void yon_gtk_widget_set_sensitive_from_toggle_button_inversed(GtkToggleButton *toggle, GtkWidget *target); -void yon_gtk_widget_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target); -void yon_gtk_widget_set_sensitive_from_combo_box_inversed(GtkComboBox *toggle, GtkWidget *target); - -typedef enum -{ - BACKGROUND_IMAGE_SUCCESS_TYPE, - BACKGROUND_IMAGE_FAIL_TYPE -} BACKGROUND_IMAGE_TYPE; - -typedef struct { - BACKGROUND_IMAGE_TYPE type; - GtkWidget *icon; - GtkWidget *box; - GtkWidget *label; - char* text_to_render; -} render_data; - - -/**yon_ubl_status_box_setup(render,icon,box,label) - * [EN] - * Sets up [render] structure of type render_data. - * [icon] is GtkImage widget of status box for showing status icons; - * [box] is GtkBox widget of status box for showing status color; - * [label] is GtkLabel widget of status box for showing status text; - * [RU] - * Настраивает структуру [render] типа render_data. - * [icon] - виджет типа GtkIcon в котором будут отображаться статусные иконки; - * [box] - виджет типа GtkBox в котором будет отображаться цвет статуса; - * [label] - виджет типа GtkLabel в котором будет отображаться текст статусного сообщения; -*/ -int yon_ubl_status_box_setup(GtkWidget *icon, GtkWidget *box, GtkWidget *label); - -/**yon_ubl_status_box_render(render,text,type) - * [EN] - * Renders message in status box; - * [render] is render_data structure of status box; - * [text] is text to be shown in status box; - * [type] if type of message. Can be BACKGROUND_IMAGE_FAIL_TYPE or BACKGROUND_IMAGE_SUCCESS_TYPE - * [RU] - * Отображает сообщение в статусном окне. - * [render] - структура типа render_data для нужного статусного окна; - * [text] - текст, отображаемый в статусном окне; - * [type] - тип сообщения. Может быть: - * BACKGROUND_IMAGE_FAIL_TYPE (красный фон,иконка - восклицательный знак) - * или - * BACKGROUND_IMAGE_SUCCESS_TYPE (Жёлтный фон, иконка - галка) -*/ -void yon_ubl_status_box_render(char *text, BACKGROUND_IMAGE_TYPE type); - -/**yon_ubl_header_setup(overlay, head, image, imag_path) - * [EN] - * Sets up header of app. - * [overlay] is overlay for app header; - * [head] is box of header, which connects to [overlay] - * [image] is header background image; - * [imag_path] is path of image, shown in [image] - * [RU] - * Настраивает заголовок приложения. - * [overlay] - оверлей заголовка приложения; - * [head] - шапка заголовка, присоединяемая к [overlay] - * [image] - виджет картинки для заднего фона; - * [imag_path] - путь до картинки, загружаемой в [image] -*/ -#define yon_ubl_header_setup(overlay, head, image, imag_path) _yon_ubl_header_setup(GTK_WIDGET(overlay), GTK_WIDGET(head), GTK_WIDGET(image), (char *)imag_path) -#define yon_ubl_header_setup_resource(overlay, head, image, imag_path) _yon_ubl_header_setup_resource(GTK_WIDGET(overlay), GTK_WIDGET(head), GTK_WIDGET(image), (char *)imag_path) -#endif - -void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path); - -void _yon_ubl_header_setup_resource(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path); - -void yon_ubl_setup_sockets(GtkWidget *main_window, GtkWidget *left_window, GtkWidget *right_window, int socket_main_id, int socket_left_id, int socket_right_id); -#ifdef WEBKIT_FOUND - -void yon_ubl_browser_window_open(char *link, char *browser_window_name); -#else -void yon_ubl_browser_window_open(char *link, char *browser_window_name); -#endif -#endif \ No newline at end of file diff --git a/ubl-settings-video-configuration.glade b/ubl-settings-video-configuration.glade index 14af0b1..482d650 100644 --- a/ubl-settings-video-configuration.glade +++ b/ubl-settings-video-configuration.glade @@ -2,212 +2,346 @@ - - True - False - process-stop-symbolic - - - True - False - emblem-ok-symbolic - - + False True - com.ublinux.ubl-settings-video + com.ublinux.ubl-settings-repomanager True False vertical + + + True + False + vertical + + + + + + False + True + 0 + + True False - 5 - 5 5 5 5 5 vertical - - - True - False - 5 - - - Enabled - True - True - False - True - - - False - True - 0 - - - - - False - True - 1 - - True False vertical + 5 True False - end 5 - True - - Save + + Enabled True True - True - image5 + False + True False True - end 0 - - - Cancel - True - True - True - image4 - - - False - True - end - 1 - - False True - 0 + 1 - - - False - True - end - 2 - - - - - True - False - vertical - + True False vertical 5 - + True False + vertical 5 - + True False - Port + 5 + + + True + False + Port + + + False + True + 0 + + + + + True + False + 0 + + Choose port to configure + + + + True + True + 1 + + + + + Main display + True + True + False + True + + + False + True + 2 + + False True - 0 + 1 - + True False - 0 + 5 + + + True + False + Resolution (px): + + + False + True + 0 + + + + + True + False + 0 + + Default + + + + True + True + 1 + + + + + Show unsupported + True + True + False + True + + + False + True + 2 + + - True + False True - 1 + 2 - - Main display + True - True - False - True + False + 5 + + + True + False + Frequency (Hz): + + + False + True + 0 + + + + + True + False + 0 + + Default + 60 + 75 + + + + True + True + 1 + + False True - 2 + 3 - - - False - True - 1 - - - - - True - False - 5 - + True False - Resolution (px): + 5 + + + True + False + Rotation: + + + False + True + 0 + + + + + True + False + 0 + + No rotation + Left + Right + Inversed + + + + True + True + 1 + + False True - 0 + 4 - + True False - 0 + 5 + + + True + False + Position: + + + False + True + 0 + + + + + True + False + 5 + True + + + True + False + 0 + + Default + Left of + Right of + Above + Below + + + + True + True + 0 + + + + + True + False + 0 + + Default + + + + True + True + 1 + + + + + True + True + 1 + + - True + False True - 1 + 5 - - Show unsupported + + Do not switch off display True True False @@ -216,102 +350,82 @@ False True - 2 + 6 - - - False - True - 2 - - - - - True - False - 5 - + + Create modeline for current resolution with CVT True - False - Frequency (Hz): + True + False + True False True - 0 + 7 - + + Use "CVT Reduced Blanking" True - False - 0 - - 60 - 75 - + True + False + True - True + False True - 1 + 8 - - - False - True - 3 - - - - - True - False - 5 - + + Create modeline for current resolution with GTF True - False - Rotation: + True + False + True False True - 0 + 9 - + True False - 0 - True + False True - 1 + 10 False True - 4 + 0 True False + vertical 5 - + + Configure manually through parameter line: True - False - Position: + True + False + True False @@ -320,35 +434,12 @@ - + True - False - 5 - True - - - True - False - 0 - - - True - True - 0 - - - - - True - False - 0 - - - True - True - 1 - - + False + True + center + 1920x1080 True @@ -360,116 +451,6 @@ False True - 5 - - - - - Do not switch off display - True - True - False - True - - - False - True - 6 - - - - - Create modeline for current resolution with CVT - True - True - False - True - - - False - True - 7 - - - - - Use "CVT Reduced Blanking"gshgrbehr - True - True - False - True - - - False - True - 8 - - - - - Create modeline for current resolution with GTF - True - True - False - True - - - False - True - 9 - - - - - True - False - - - False - True - 10 - - - - - False - True - 0 - - - - - True - False - 5 - 5 - vertical - 5 - - - Configure manually through parameter line: - True - True - False - True - - - False - True - 0 - - - - - True - False - True - center - 1920x1080 - - - True - True 1 @@ -477,21 +458,68 @@ False True - 1 + 3 - False + True True - 3 + 0 - True + False True - 0 + 1 + + + + + + + True + False + + + True + False + Repository manager + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-repomanager + + + + + Cancel + True + True + True + + + 1 + + + + + Save + True + True + True + + + end + 2 diff --git a/ubl-settings-video-monitor.glade b/ubl-settings-video-monitor.glade index 155909f..c21fce7 100644 --- a/ubl-settings-video-monitor.glade +++ b/ubl-settings-video-monitor.glade @@ -2,6 +2,23 @@ + + True + False + + + True + False + False + 128 + com.ublinux.ubl-settings-video.display + 6 + + + -1 + + + True False @@ -32,7 +49,7 @@ - + True False start @@ -44,7 +61,7 @@ 20 vertical - + True False True @@ -62,7 +79,7 @@ - + True False 5 @@ -87,9 +104,11 @@ True False + 7 + 7 15 - + True True True @@ -107,7 +126,7 @@ - + True True True @@ -125,7 +144,7 @@ - + True True True @@ -146,7 +165,7 @@ - + True True True @@ -172,21 +191,4 @@ - - True - False - - - True - False - False - 128 - com.ublinux.ubl-settings-video.display - 6 - - - -1 - - - diff --git a/ubl-settings-video.glade b/ubl-settings-video.glade index 1e80157..8682da1 100644 --- a/ubl-settings-video.glade +++ b/ubl-settings-video.glade @@ -4,9 +4,6 @@ - - - True False @@ -95,7 +92,6 @@ - True False @@ -123,126 +119,6 @@ - - - 800 - 558 - False - 800 - 558 - ubconfig-gui - - - True - False - vertical - - - - - - - - True - False - True - - - True - False - True - - - True - False - UBLinux Settings Web View - - - - - - True - True - 0 - - - - - - - True - False - 32 - com.ublinux.ubl-settings-video - 5 - - - - - - - - False - False - True - center - com.ublinux.ubl-settings-video - dialog - True - ubl-settings-video - 1.2 - Copyright © 2023 - UBSoft Software LLC - Settings for video output - https://wiki.ublinux.com/ - Project Home Page - Это приложение распространяется без каких-либо гарантий. -Подробнее в <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, версии 2 или позднее</a>. - UBGroup - UBGroup - com.ublinux.ubl-settings-video - True - gpl-2-0 - - - False - vertical - 2 - - - False - False - top - spread - - - False - False - 0 - - - - - - - True - False - True - - - True - False - Video adapter and display settings - - - - - - - - 300 0.7299999937415127 @@ -403,137 +279,10 @@ - - True - False - - - 90 - True - False - 5 - 5 - 5 - 5 - 6 - 6 - 69 - com.ublinux.ubl-settings-video - - - False - True - 0 - - - - - True - False - - - True - False - - - True - False - center - vertical - - - True - False - center - vertical - - - 255 - True - False - end - Video adapter and display settings - 0 - - - - - - - - True - True - 0 - - - - - 255 - True - False - start - Video output settings and videocard drivers insallation - 0 - - - - - - - - True - True - 1 - - - - - False - True - 0 - - - - - False - True - 0 - - - - - True - True - 0 - - - - - True - False - - - False - True - 1 - - - - - True - True - 1 - - - True False - document-edit-symbolic + com.ublinux.libublsettingsui-gtk3.zoom-symbolic True @@ -553,190 +302,7 @@ True False - document-edit-symbolic - - - True - False - gtk-missing-image - com.ublinux.libublsettingsui-gtk3.cancel-symbolic - - - True - False - com.ublinux.libublsettingsui-gtk3.accept-symbolic - - - 450 - False - False - dialog-question-symbolic - - - True - False - 5 - 5 - 5 - 5 - vertical - - - True - False - - - True - False - start - 20 - 20 - dialog-question-symbolic - 6 - - - False - True - 0 - - - - - True - False - 10 - vertical - 5 - - - True - False - start - Would you like to read documentation in the Web? - True - 0 - - - - - - - False - True - 0 - - - - - True - False - start - start - 10 - 10 - You will be redirected to documentation website where documentation is -translated and supported by community. - 0 - - - - False - True - 1 - - - - - Always redirect to online documentation - True - True - False - end - 10 - True - - - - False - True - end - 2 - - - - - - True - True - 1 - - - - - - True - True - 0 - - - - - - - True - False - - - True - False - Video adapter and display settings - - - - - - - - Cancel - True - True - True - image3 - - - - - - Open documentation - True - True - True - image4 - - - - end - 1 - - - - + com.ublinux.libublsettingsui-gtk3.zoom-symbolic True @@ -785,165 +351,67 @@ translated and supported by community. - - 800 - 600 + + True False - 800 - 600 - com.ublinux.ubl-settings-video + vertical - + True - False - True - vertical + True - + + 165 True - False - vertical + True + 5 + 5 + 5 + never - + True False - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 25 - - - False - True - 0 - - - - + True False - start - 5 - 5 - 5 - 5 - 6 - 6 - - - - - - - False - True - 1 - - - - - False - True - 0 - - - - - True - False - vertical - - - 81 - True - False - - - True - False - start - - - -1 - - - - - False - True - 0 - - - - - False - True - 1 - - - - - True - True - - - 165 - True - True - 5 - 5 - 5 - 5 - 5 - external + vertical - + True False + 0.019999999552965164 + in - + True False - 5 - 5 - 5 - 5 - 5 - vertical + 5 + 5 + 5 + 5 - + True False - 0.019999999552965164 - in + 5 - + True False - 5 - 5 - 5 - 5 + vertical + 5 True False - vertical + 5 - - Automatically choose and use driver + True - True - False - start - True + False + Choose driver automatically: False @@ -952,143 +420,39 @@ translated and supported by community. - + True False - 5 - - - True - False - vertical - 5 - - - True - False - start - 4 - Failsafe driver nVidia: - 0 - - - False - True - 1 - - - - - True - False - start - 4 - Failsafe driver AMD/ATI: - 0 - - - False - True - 2 - - - - - False - True - 0 - - - - - True - False - vertical - 5 - - - True - False - - - False - True - 1 - - - - - True - False - - - False - True - 2 - - - - - True - True - 1 - - + 0 + + Default + Off + On + - False + True True 1 + + False + True + 0 + - - - - - True - False - Driver - - - - - False - True - 0 - - - - - True - False - vertical - - - True - False - 0.019999999552965164 - in True False - vertical + 5 - + True False - 5 - 5 - 5 - 5 - 5 - 5 - vertical - - - + Failsafe Nvidia driver: False @@ -1096,14 +460,29 @@ translated and supported by community. 0 + + + True + False + 0 + + Default + Off + fbdev + + + + True + True + 1 + + - - - - True - False - Monitor configuration - + + False + True + 1 + @@ -1112,209 +491,65 @@ translated and supported by community. 0 - - - True - True - 1 - - - - - True - False - 0.019999999552965164 - in - + True False - 5 - 5 - 5 + vertical + 5 True False + 5 - - discrete video only (AMD/ATI) + True - True - False - 5 - True + False + Free drivers: False True + 0 + + + + + True + False + 0 + + Default + Switch nouveau and radeon off + Switch nouveau off + Switch radeon off + Switch free drvers on + + + + True + True 1 + + False + True + 0 + - - - - - True - False - 0 - Hybrid graphics - - - - - False - True - 2 - - - - - True - False - 5 - 0.019999999552965164 - in - - - True - False - 5 - 5 - 5 - 5 True False - vertical + 5 - + True False - 5 - - - True - False - vertical - 5 - - - Launch programms through optirun (nVidia): - True - True - False - True - - - False - True - 0 - - - - - Launch programs through primusun (nVidia): - True - True - False - True - - - False - True - 1 - - - - - False - True - 0 - - - - - True - False - vertical - 5 - - - True - False - True - steam - - - True - True - 0 - - - - - True - False - True - steam - - - True - True - 1 - - - - - True - True - 1 - - - - - False - vertical - 5 - - - True - False - True - True - image1 - - - False - True - 0 - - - - - True - False - True - True - image2 - - - False - True - 1 - - - - - False - True - 2 - - + Failsafe AMD/ATI driver: False @@ -1323,224 +558,122 @@ translated and supported by community. - + True False - 5 - 5 - - - True - False - 4 - Fix frame gap (nVidia): - 0 - - - False - True - 0 - - - - - True - False - 0 - False - - - True - True - 1 - - + 0 + + Default + Off + fbdev + - False + True True 1 + + False + True + 1 + - - - - True - False - Extra - + + True + True + 1 + - - False - True - 3 - + + + True + False + Driver + + + + False + True + 0 + - - - - - True - False - Main Settings - - - False - - - - - True - False - + True - True - 5 - 5 - 5 - 5 - 5 - 5 + False + vertical - + True False - 5 - 5 - 5 - 5 - 5 - vertical - 5 - - - True - True - external - - - True - True - 5 - liststore6 - 1 - vertical - True - 4 - - - - - - Installed - descending - 0 - - - - 0 - - - - - - - Package - - - - 1 - - - - - - - Driver - - - - 3 - - - - - - - autosize - Description - - - word - 150 - - - 4 - - - - - - - autosize - Supported Devices - - - word - 220 - - - 5 - - - - - - - - - True - True - 0 - - + 0.019999999552965164 + in True False - center - 5 + 5 + 5 + 5 + 5 + vertical - - Установить + True - True - True - image9 + False + True + none + False - False + True True - end 0 - - Удалить + True - True - True - image11 + False + 5 + + + True + False + Do not switch off display(-s) (DPMS global configuration): + + + False + True + 0 + + + + + True + False + 0 + + Default + Off + On + + + + False + True + 1 + + False @@ -1549,287 +682,227 @@ translated and supported by community. 1 - - - Подробнее - True - True - True - image10 - - - False - True - end - 2 - - - - False - True - 1 - - - - - - True - False - Driver Modules + + + True + False + Monitor configuration + + - False + True + True + 0 + + + True + True + 1 + + + + + True + False + 0.019999999552965164 + in - + True False - 5 - 5 - 5 - 5 - 5 - vertical - 5 + 5 + 5 + 5 - + True - True - external + False + vertical - + True - True - 5 - liststore1 - 0 - vertical - True - 4 - - - - - - Installed - - - - 0 - - - - - - - Package - - - word - 175 - - - 2 - - - - - - - Driver - - - - 3 - - - - - - - autosize - Description - - - word - 150 - - - 4 - - - - - - - autosize - Supported Devices - - - word - 220 - - - 5 - - - - + False + 0 + + Default + Automatic DPI + 96 DPI - 100% + 144 DPI - 150% (for 2K) + 192 DPI - 200% (for 4K) + + + False + True + 0 + - - True - True - 0 - + + + + + True + False + Display scaling + + + + + False + True + 2 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 True False - center 5 - - Установить + True - True - True - image6 + False + discrete video only (AMD/ATI): False True - end 0 - - Удалить + True - True - True - image7 + False + 0 + + Default + Off + On + False True - end 1 - - - Подробнее - True - True - True - image12 - - - False - True - end - 2 - - - - False - True - 1 - - - 1 - - - + + True False - Drivers + 0 + Hybrid graphics - - 1 - False - - -1 + False + True + 3 - - - 1 - - - - - True - False - Drivers - - - 1 - False - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0.009999999776482582 - in - + True False - 12 + 5 + 0.019999999552965164 + in - + True False - 15 - 15 - vertical - 20 + 5 + 5 + 5 True False + vertical + 5 - - 177 - 159 + True False - start - start + 5 + + + True + False + Launch programs through optirun (Nvidia): + 0 + + + False + True + 0 + + - + True False - start - end - 128 - com.ublinux.ubl-settings-video.video-card + 0 + + Default + Off + On + + + + False + True + 1 + + + + + True + True + + + True + True + 2 + + + + + True + True + True + image1 - -1 + False + True + 3 @@ -1840,15 +913,64 @@ translated and supported by community. - + True False - start - 30 - <span size='15pt'><span color='#1a5fb4'>sdrtjhsrtjh:</span> dfuykdftytdykkdfty</span> - True - 0 - 0 + 5 + + + True + False + Launch programs through primusun (Nvidia): + 0 + + + False + True + 0 + + + + + True + False + 0 + + Default + Off + On + + + + False + True + 1 + + + + + True + True + + + True + True + 2 + + + + + True + True + True + image2 + + + False + True + 3 + + False @@ -1856,189 +978,448 @@ translated and supported by community. 1 - - - False - True - 0 - - - - - True - False - - 177 - 159 + True False - start - start + 5 - + True False - start - end - 128 - com.ublinux.ubl-settings-video.video-card + Fix frame gap (nVidia): + 0 - -1 + False + True + 0 + + + + + True + False + 0 + + Default + Off + 1st variant. May cause perfomance drops in video games + 2nd variant. May not work on specific video cards + + + + True + True + 1 False True - 0 - - - - - True - False - start - 30 - True - 0 - 0 - - - False - True - 1 + 2 - - False - True - 1 - + + + True + False + Extra + + + + False + True + 4 + - - - True - False - 5 - 5 - Devices and Drivers - - - - - 2 - - - - - True - False - Information - - 2 - False - - - True - True - 2 - - - True - True - 0 - - - - - - - True - False - True - - - True - False - start - 5 - 5 - 5 - 5 - False - Video adapter and display settings - - - - - - + + True False - 32 - com.ublinux.ubl-settings-video + Main Settings + + False + - + True False - + True True - False - True - LoadConfigurationMenu - none + 5 + 5 + 5 + 5 + 5 + 5 True False + 5 + 5 + 5 + 5 + 5 + vertical + 5 - - True - False - Load - - - False - True - 0 - - - - + True - False - pan-down-symbolic - - - False + True + external + + + True + True + 5 + liststore6 + 1 + vertical + True + 4 + + + Installed + descending + 0 + + + + 0 + + + + + + + Package + + + + 1 + + + + + + + Driver + + + + 3 + + + + + + + autosize + Description + + + word + 150 + + + 4 + + + + + + + autosize + Supported Devices + + + word + 220 + + + 5 + + + + + + + + + True + True + 0 + + + + + True + False + center + 5 + + + Установить + True + True + True + image9 + + + False + True + end + 0 + + + + + Удалить + True + True + True + image11 + + + False + True + end + 1 + + + + + Подробнее + True + True + True + image10 + + + False + True + end + 2 + + + + + False + True + 1 + + + + + + + True + False + Driver Modules + + + False + + + + + True + False + 5 + 5 + 5 + 5 + 5 + vertical + 5 + + + True + True + external + + + True + True + 5 + liststore1 + 0 + vertical + True + 4 + + + Installed + + + + 0 + + + + + + + Package + + + word + 175 + + + 2 + + + + + + + Driver + + + + 3 + + + + + + + autosize + Description + + + word + 150 + + + 4 + + + + + + + autosize + Supported Devices + + + word + 220 + + + 5 + + + + + + + + + True + True + 0 + + + + + True + False + center + 5 + + + Установить + True + True + True + image6 + + + False + True + end + 0 + + + + + Удалить + True + True + True + image7 + + + False + True + end + 1 + + + + + Подробнее + True + True + True + image12 + + + False + True + end + 2 + + + + + False True 1 + + 1 + + + + + True + False + Drivers + + + 1 + False + + - False - True - 0 + -1 @@ -2046,32 +1427,89 @@ translated and supported by community. 1 + + + True + False + Drivers + + + 1 + False + + - + True False + 5 + 5 + 5 + 5 + 5 + 5 + 0.009999999776482582 + in - + True - True - False - True - True - SaveConfigurationMenu - none + False + 12 True False + vertical + 20 - + True False - 5 - Save - + + + 177 + 159 + True + False + start + start + + + True + False + start + end + 128 + com.ublinux.ubl-settings-video.video-card + + + -1 + + + + + False + True + 0 + + + + + True + False + start + 30 + <span size='15pt'><span color='#1a5fb4'></span> </span> + True + 0 + 0 + + + False + True + 1 + + False @@ -2080,10 +1518,53 @@ translated and supported by community. - + True False - pan-down-symbolic + + + 177 + 159 + True + False + start + start + + + True + False + start + end + 128 + com.ublinux.ubl-settings-video.video-card + + + -1 + + + + + False + True + 0 + + + + + True + False + start + 30 + True + 0 + 0 + + + False + True + 1 + + False @@ -2094,63 +1575,45 @@ translated and supported by community. - - False - True - 0 - - - + + True - True - False - True - True - SettingsMenu - none - - - + False + 5 + 5 + Devices and Drivers - - False - True - 1 - - end - 3 + 2 + + + + + True + False + Information + + + 2 + False + + True + True + 0 + - - vertical + - - - - - - - - - + + + - - - - - - - - - - both -