From b67c090ed412c2ee8efb4e97c847a2e5dbfc190e Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 12 Apr 2023 13:56:13 +0000 Subject: [PATCH] Main interactions done, proprietary drivers management in process --- .gitignore | 3 +- Makefile | 1 + source/CMakeLists.txt | 3 +- source/ubl-settings-video.c | 1052 ++++++++++++++++++++++++----------- source/ubl-settings-video.h | 66 ++- source/ubl-utils.c | 949 ++++++++++++++++++++----------- source/ubl-utils.h | 124 ++--- ubl-settings-video.glade | 587 ++++++++++--------- ubl-settings-video.pot | 178 +++--- video-drivers.csv | 8 + 10 files changed, 1905 insertions(+), 1066 deletions(-) create mode 100644 video-drivers.csv diff --git a/.gitignore b/.gitignore index 7eaca04..1ce2845 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ ubl-settings-video.glade~ *ubl-settings-video.glade# compile/ ubl-settings-video_ru.po~ -ubl-settings-video-n.pot \ No newline at end of file +ubl-settings-video-n.pot +vgcore.* \ No newline at end of file diff --git a/Makefile b/Makefile index 42867fb..99ecc79 100644 --- a/Makefile +++ b/Makefile @@ -25,6 +25,7 @@ all: init build init: @echo "Initialize ..."; \ sed -r "s/(version_application = ).*/\1\"$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2)\";/" -i source/ubl-settings-video.h; \ + gcc source/ubl-settings-video.c source/ubl-utils.c -o ubl-settings-video `pkg-config --cflags --libs gtk+-3.0` -g; \ echo "-- Build path: ${CMAKE_BUILD_DIR}" depend: diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 0829c09..009e8d4 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -17,9 +17,8 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin set(SOURCE_FILES ubl-settings-video.c - ubl-settings-video.h ubl-utils.c - ubl-utils.h) +) set(LIBRARIES ${GTK_LIBRARIES} diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index 87c8c1a..b5faa06 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -1,361 +1,770 @@ #include "ubl-settings-video.h" -#include "ubl-utils.h" - config videoconfig; -void yon_on_plug_added(GtkSocket* self, gpointer user_data){ - +void yon_on_plug_added(GtkSocket *self, gpointer user_data) +{ } -void yon_on_plug_removed(GtkSocket* self, gpointer user_data){ - +void yon_on_plug_removed(GtkSocket *self, gpointer user_data) +{ } -void on_close_subwindow(GtkWidget *self){ +void on_close_subwindow(GtkWidget *self) +{ gtk_widget_destroy(gtk_widget_get_toplevel(self)); } -void on_proprietary_driver_window_open(GtkWidget *self){ - GtkBuilder *builder=gtk_builder_new_from_file(glade_path); - GtkWidget *window=yon_gtk_builder_get_widget(builder,"ProprietaryDriverChooseWindow"); - GtkWidget *closeButton=yon_gtk_builder_get_widget(builder,"ProprietaryCloseButton"); - GtkWidget *acceptButton=yon_gtk_builder_get_widget(builder,"ProprietaryAcceptButton"); - GtkWidget *columnDriver=yon_gtk_builder_get_widget(builder,"ProprietaryDriverColumn"); - GtkWidget *columnDescription=yon_gtk_builder_get_widget(builder,"ProprietaryDescriptionColumn"); - gtk_button_set_label(GTK_BUTTON(closeButton),_("Cancel")); - gtk_button_set_label(GTK_BUTTON(acceptButton),_("Accept")); - gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(columnDriver),_("Driver")); - gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(columnDescription),_("Description")); - gtk_widget_show(window); - g_signal_connect(G_OBJECT(closeButton), "clicked", G_CALLBACK(on_close_subwindow), NULL); +void on_save_window_configuration(GtkWidget *self, MonitorSettings *monitor){ + char *freq=NULL; + char *res=NULL; + char *rot=NULL; + char *entr=NULL; + char *def=NULL; + def=_("Default settings"); + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(monitor->templateMonitorConfigurationMainRadio))==1) + yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->main=1; + if (strcmp((freq=yon_char_new((char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(monitor->templateMonitorConfigurationFrequencyCombo)))),def)!=0) + yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->frequency=freq; + else yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->frequency=NULL; + if (strcmp((res=yon_char_new((char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(monitor->templateMonitorConfigurationResolutionCombo)))),def)!=0) + yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->resolution=res; + else yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->resolution=NULL; + if (strcmp((rot=yon_char_new((char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(monitor->templateMonitorConfigurationRotationCombo)))),def)!=0) + yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->rotation=rot; + else yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->rotation=NULL; + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(monitor->templateMonitorConfigurationParameterLineCheck))){ + entr=yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(monitor->templateMonitorConfigurationParameterLineEntry))); + yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->stringparameters=entr; + } else { + char *str=NULL; + str = ""; + if (yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->frequency!=NULL) + str=yon_char_get_augumented(str,yon_char_get_augumented(yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->frequency,",")); + if (yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->resolution!=NULL) + str=yon_char_get_augumented(str,yon_char_get_augumented(yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->resolution,",")); + if (yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->rotation!=NULL) + if (strcmp(yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->rotation,_("Right"))==0) + str=yon_char_get_augumented(str,"rotation:right,"); + else if (strcmp(yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->rotation,_("Left"))==0) + str=yon_char_get_augumented(str,"rotation:left,"); + else if (strcmp(yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->rotation,_("Invert"))==0) + str=yon_char_get_augumented(str,"rotation:invert,"); + else + str=yon_char_get_augumented(str,"rotation:normal,"); + + if (yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->main!=0) + str=yon_char_get_augumented(str,"primary,"); + if (strcmp(str,"")!=0) + yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->stringparameters=str; + + } + dictionary *dict=NULL; + for_dictionaries (dict,videoconfig.videoconfig){ + MonitorSettings *monitorsett=yon_dictionary_get_data(dict,MonitorSettings*); + if (monitorsett->curconfig==monitor->curconfig){ + yon_parse_monitor(monitorsett->curconfig,yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->stringparameters); + gtk_label_set_text(GTK_LABEL(monitorsett->templateMonitorInfoResolutionLabel),yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->resolution); + if (yon_dictionary_get_data(monitorsett->curconfig,monitorconfig*)->main==0) + gtk_label_set_text(GTK_LABEL(monitorsett->templateMonitorInfoNameLabel), yon_char_get_augumented("Monitor ", ((monitorconfig *)monitorsett->curconfig->data)->port)); + if (yon_dictionary_get_data(monitorsett->curconfig,monitorconfig*)->main==1) + gtk_label_set_text(GTK_LABEL(monitorsett->templateMonitorInfoNameLabel), yon_char_get_augumented("Monitor ", yon_char_get_augumented(((monitorconfig *)monitorsett->curconfig->data)->port,"*"))); + + } + } + on_close_subwindow(self); +}; + +void on_save_driver_configuration(GtkWidget *self,combo_tree *widgets){ + GtkTreeIter iter; + char *name; + GtkTreeModel *list_s=GTK_TREE_MODEL(videoconfig.list); + GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->tree)); + gtk_tree_selection_get_selected(selection,&list_s,&iter); + gtk_tree_model_get(list_s,&iter,0,&name,-1); + int ret = yon_gtk_combo_box_text_find(widgets->combo,name); + if (ret!=-1) + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->combo),ret); + on_close_subwindow(self); } -void on_sensitive_change(GtkWidget *self, GtkWidget *toggle){ - int state=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); - - gtk_widget_set_sensitive(toggle,state); +void on_sensitive_change(GtkWidget *self, GtkWidget *toggle) +{ + int state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); + + gtk_widget_set_sensitive(toggle, state); } -void on_auto_choose_drivers(GtkWidget *self, widgets_dict *widgets){ - int state=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); - - gtk_widget_set_sensitive(widgets->mainDriverFailsafeNvidiaLabel,!state); - gtk_widget_set_sensitive(widgets->mainDriverProprietaryDriverCombo,!state); - gtk_widget_set_sensitive(widgets->mainDriverProprietaryDriverButton,!state); - gtk_widget_set_sensitive(widgets->mainDriverProprietaryDriverLabel,!state); - gtk_widget_set_sensitive(widgets->mainDriverFailsafeAMDCombo,!state); - gtk_widget_set_sensitive(widgets->mainDriverFailsafeAMDLabel,!state); - gtk_widget_set_sensitive(widgets->mainDriverFailsafeNvidiaCombo,!state); +void on_sensitive_change_reversed(GtkWidget *self, GtkWidget *toggle) +{ + int state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); + + gtk_widget_set_sensitive(toggle, !state); } -void on_closed_configuration(GtkWidget *self, MonitorSettings *monitors){ +void on_auto_choose_drivers(GtkWidget *self, widgets_dict *widgets) +{ + int state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); + + gtk_widget_set_sensitive(widgets->mainDriverFailsafeNvidiaLabel, !state); + gtk_widget_set_sensitive(widgets->mainDriverProprietaryDriverCombo, !state); + gtk_widget_set_sensitive(widgets->mainDriverProprietaryDriverButton, !state); + gtk_widget_set_sensitive(widgets->mainDriverProprietaryDriverLabel, !state); + gtk_widget_set_sensitive(widgets->mainDriverFailsafeAMDCombo, !state); + gtk_widget_set_sensitive(widgets->mainDriverFailsafeAMDLabel, !state); + gtk_widget_set_sensitive(widgets->mainDriverFailsafeNvidiaCombo, !state); +} + +void on_closed_configuration(GtkWidget *self, MonitorSettings *monitors) +{ gtk_widget_destroy(monitors->templateMonitorConfigurationWindow); } -void on_save_configuration_local(GtkWidget *self){ +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_get_augumented(str, yon_char_get_augumented(" FAILSAFENVIDIA=", videoconfig.failsafenVidia)); + if (strcmp(videoconfig.failsafeATI, dntus)!=0) + str = yon_char_get_augumented(str, yon_char_get_augumented(" FAILSAFEATI=", videoconfig.failsafeATI)); + } + if (strcmp(videoconfig.optirun, dntus)!=0&&strcmp(videoconfig.optirun, "")!=0) + str = yon_char_get_augumented(str, yon_char_get_augumented(" OPTIRUN=", videoconfig.optirun)); + if (strcmp(videoconfig.primusrun, dntus)!=0&&strcmp(videoconfig.primusrun, "")!=0) + str = yon_char_get_augumented(str, yon_char_get_augumented(" PRIMUSRUN=", videoconfig.primusrun)); + + dictionary *dict=NULL; + for_dictionaries(dict,videoconfig.monitors){ + if (yon_dictionary_get_data(dict,monitorconfig*)->stringparameters){ + + str=yon_char_get_augumented(str, yon_config_make_save_parameter_with_multiple_arguments(yon_dictionary_get_data(dict,monitorconfig*)->stringparameters,yon_char_get_augumented(yon_char_get_augumented("XORG_MONITOR[",dict->key),"]"),",")); + + } + } + if (strcmp(str,command)!=0) + return str; + else return NULL; } -void on_save_configuration_global(GtkWidget *self){ +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_get_augumented(str, " FAILSAFENVIDIA"); + str = yon_char_get_augumented(str, " FAILSAFATI"); + str = yon_char_get_augumented(str, " OPTIRUN"); + str = yon_char_get_augumented(str, " PRIMUSRUN"); + dictionary *dict=NULL; + for_dictionaries(dict,videoconfig.monitors){ + str = yon_char_get_augumented(str, yon_char_get_augumented(" XORG_MONITOR[", yon_char_get_augumented(dict->key, "]"))); + } + if (strcmp(str,command)!=0) + return str; + else return NULL; } -void on_load_configuration_local(GtkWidget *self){ +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); + delstr=yon_configuration_get_remove_command(remove_drivers_local_command); + if (delstr){ + yon_config_save(delstr); + } + if (str){ + printf(str); + yon_config_save(str); + yon_ubl_status_box_render(widgets->mainStatusBox, widgets->mainStatusIcon, widgets->mainStatusLabel, _("Local configuration saving succseeded."), BACKGROUND_IMAGE_SUCCESS_TYPE); + } + // else + // yon_ubl_status_box_render(widgets->mainStatusBox, widgets->mainStatusIcon, widgets->mainStatusLabel, _("Local configuration saving failed."), BACKGROUND_IMAGE_FAIL_TYPE); } -void on_load_configuration_global(GtkWidget *self){ +void on_configuration_save_local_global(GtkWidget *self, widgets_dict *widgets) +{ + on_configuration_save_global(self, widgets); + on_configuration_save_local(self, widgets); + yon_ubl_status_box_render(widgets->mainStatusBox, widgets->mainStatusIcon, widgets->mainStatusLabel, _("Local and global configuration saving succseeded."), BACKGROUND_IMAGE_SUCCESS_TYPE); } -void on_accept_monitor_settings(GtkWidget *self){ +void on_configuration_save_global(GtkWidget *self, widgets_dict *widgets) +{ + yon_ubl_status_box_render(widgets->mainStatusBox, widgets->mainStatusIcon, widgets->mainStatusLabel, _("Global configuration saving succseeded."), BACKGROUND_IMAGE_SUCCESS_TYPE); + yon_update_config(widgets); + char *str = NULL; + if (videoconfig.failsafenVidia) + str = yon_char_get_augumented(save_drivers_global_command, yon_char_get_augumented(" ", videoconfig.failsafenVidia)); + if (videoconfig.failsafeATI) + str = yon_char_get_augumented(str, yon_char_get_augumented(" ", videoconfig.failsafeATI)); + if (videoconfig.optirun) + str = yon_char_get_augumented(str, yon_char_get_augumented(" ", videoconfig.optirun)); + if (videoconfig.primusrun) + str = yon_char_get_augumented(str, yon_char_get_augumented(" ", videoconfig.primusrun)); + printf(str); + yon_config_save(str); +} +void yon_update_config(widgets_dict *widgets) +{ + videoconfig.optirun = yon_char_get_augumented("", (char *)gtk_entry_get_text(GTK_ENTRY(widgets->mainExtraLaunchOptirunEntry))); + videoconfig.primusrun = yon_char_get_augumented("", (char *)gtk_entry_get_text(GTK_ENTRY(widgets->mainExtraLaunchPrismusunEntry))); + // videoconfig.proprietary = yon_char_get_augumented("", gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverProprietaryDriverCombo))); + videoconfig.failsafenVidia = yon_char_get_augumented("", gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo))); + videoconfig.failsafeATI = yon_char_get_augumented("", gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeAMDCombo))); } -void on_check_optisun(GtkWidget *self){ +void on_configuration_load_local(GtkWidget *self, widgets_dict *widgets) +{ + yon_ubl_status_box_render(widgets->mainStatusBox, widgets->mainStatusIcon, widgets->mainStatusLabel, _("Local configuration loading succseeded."), BACKGROUND_IMAGE_SUCCESS_TYPE); + char *command = load_drivers_local_command; + dictionary *dct; + for_dictionaries(dct, videoconfig.monitors) + { + command = yon_char_get_augumented(command, (yon_char_get_augumented(" XORG_MONITOR[", yon_char_get_augumented(((monitorconfig *)dct->data)->port, "]")))); + } + int size = 0; + char **rtn = yon_ubl_load_global_config(command, &size); + char *param = NULL; + yon_config_init(rtn, size); + on_config_fill_interface(widgets); } -void on_check_primusrun(GtkWidget *self){ +void on_configuration_load_global(GtkWidget *self, widgets_dict *widgets) +{ + yon_ubl_status_box_render(widgets->mainStatusBox, widgets->mainStatusIcon, widgets->mainStatusLabel, _("Global configuration loading succseeded."), BACKGROUND_IMAGE_SUCCESS_TYPE); + char *command = load_drivers_global_command; + dictionary *dct; + for_dictionaries(dct, videoconfig.monitors) + { + command = yon_char_get_augumented(command, (yon_char_get_augumented(" XORG_MONITOR[", yon_char_get_augumented(((monitorconfig *)dct->data)->port, "]")))); + } + int size = 0; + char **rtn = yon_ubl_load_global_config(command, &size); + char *param = NULL; + yon_config_init(rtn, size); + on_config_fill_interface(widgets); } -void on_check_discrete_only(GtkWidget *self){ +int yon_config_init(char **parameters, int size) +{ + char *param = NULL; + dictionary *dct = NULL; + videoconfig.failsafenVidia = yon_config_get_parameter(parameters, size, "FAILSAFENVIDIA"); + videoconfig.failsafeATI = yon_config_get_parameter(parameters, size, "FAILSAFEATI"); + // videoconfig.proprietary = yon_config_get_parameter(parameters, size, "FAILSAFENVIDIA"); + videoconfig.optirun = yon_config_get_parameter(parameters, size, "OPTIRUN"); + videoconfig.primusrun = yon_config_get_parameter(parameters, size, "PRIMUSRUN"); + for_dictionaries(dct, videoconfig.monitors) + { + char *prm = yon_char_get_augumented(yon_char_get_augumented("XORG_MONITOR[", dct->key), "]"); + param = yon_config_get_parameter(parameters, size, prm); + if (param) + { + yon_parse_monitor(dct, param); + } + else{ + yon_dictionary_get_data(dct,monitorconfig*)->frequency=NULL; + yon_dictionary_get_data(dct,monitorconfig*)->resolution=NULL; + yon_dictionary_get_data(dct,monitorconfig*)->main=0; + yon_dictionary_get_data(dct,monitorconfig*)->rotation=NULL; + yon_dictionary_get_data(dct,monitorconfig*)->stringparameters=NULL; + } + yon_monitor_set_resolutions(dct); + } + if (videoconfig.videoconfig) + for_dictionaries(dct, videoconfig.videoconfig){ + MonitorSettings *settings=yon_dictionary_get_data(dct,MonitorSettings*); + if (((monitorconfig*)settings->curconfig->data)->port){ + if(yon_dictionary_get_data(settings->curconfig,monitorconfig*)->main==0) + gtk_label_set_text(GTK_LABEL(settings->templateMonitorInfoNameLabel),yon_char_get_augumented("Monitor ",((monitorconfig*)settings->curconfig->data)->port)); + if(yon_dictionary_get_data(settings->curconfig,monitorconfig*)->main==1) + gtk_label_set_text(GTK_LABEL(settings->templateMonitorInfoNameLabel),yon_char_get_augumented("Monitor ",yon_char_get_augumented(((monitorconfig*)settings->curconfig->data)->port,"*"))); + } + if (((monitorconfig*)settings->curconfig->data)->resolution) + gtk_label_set_text(GTK_LABEL(settings->templateMonitorInfoResolutionLabel),((monitorconfig*)settings->curconfig->data)->resolution); + else + gtk_label_set_text(GTK_LABEL(settings->templateMonitorInfoResolutionLabel),_("Default settings")); + + } } -void on_about(){ - GtkBuilder *builder=gtk_builder_new_from_file(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),_("UBlinux Video Configuration")); - gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window),version_application); - gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(window),_("Progect Home Page")); - gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window),_("Videocard and monitor configuration manager")); - gtk_widget_set_visible(hideButtonBox,0); +void on_about() +{ + GtkBuilder *builder = gtk_builder_new_from_file(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), _("UBlinux Video Configuration")); + gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(window), version_application); + gtk_about_dialog_set_website_label(GTK_ABOUT_DIALOG(window), _("Progect Home Page")); + gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window), _("Videocard and monitor configuration manager")); + gtk_widget_set_visible(hideButtonBox, 0); gtk_widget_show(window); +} +void yon_parse_monitor(dictionary *monitor, char *string_of_settings) +{ + int size=0; + yon_dictionary_get_data(monitor,monitorconfig*)->stringparameters=string_of_settings; + char *param_string=yon_char_new(string_of_settings); + yon_char_divide_search(param_string,"=",1); + char **rtn = yon_char_parse(param_string,&size,","); + int check_code=-1; + if ((check_code=yon_char_parsed_check_exist(rtn,size,"primary"))!=-1){ + yon_dictionary_get_data(monitor,monitorconfig*)->main=1; + rtn=yon_char_parsed_shrink(rtn,&size,check_code); + } + else + yon_dictionary_get_data(monitor,monitorconfig*)->main=0; + + if ((check_code=yon_char_parsed_check_exist(rtn,size,"rotation"))!=-1){ + yon_dictionary_get_data(monitor,monitorconfig*)->rotation=rtn[check_code]; + rtn=yon_char_parsed_shrink(rtn,&size,check_code); + } + else + yon_dictionary_get_data(monitor,monitorconfig*)->rotation=0; + + for(int i=0;iresolution=yon_char_new(rtn[i]); + } } -void yon_parse_monitor(dictionary *monitor,char *string_of_settings){ - char *result=NULL; - if ((strstr(string_of_settings,","))){ - result=yon_char_divide_search(string_of_settings,",",1); - ((monitorconfig*)monitor->data)->resolution=result; +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); } - char *tmp=NULL; - if (tmp=strstr(string_of_settings,"rotate:")) ((monitorconfig*)monitor->data)->rotation=tmp; + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->mainDriverProprietaryDriverCombo)); + // str = videoconfig.proprietary->key; + + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverProprietaryDriverCombo), _("Don't use")); + int size=0; + char ** rtn = yon_config_load(get_proprietary_drivers_command,&size); + for (int driv=0;drivmainDriverProprietaryDriverCombo),drivr); + } + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverProprietaryDriverCombo), 0); + 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), _("Don't use")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo), _("fbdev")); + 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), _("Don't use")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeAMDCombo), _("fbdev")); + if (str) + { + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverFailsafeAMDCombo), 1); + } + else + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverFailsafeAMDCombo), 0); + dictionary *dict = NULL; } -void yon_default_configs(){ +dictionary *yon_proprieary_get(){ + int size=0; + char **rtn = yon_config_load(get_proprietary_drivers_command,&size); + + for (int i=0;ikey,1,(char*)dict->data,-1); + } } -void yon_setup_config(){ +void yon_setup_config() +{ FILE *videoports = popen(get_ports_command, "r"); char str[1000]; - while (fgets(str,1000,videoports)){ - printf("%s\n",str); - char *strng=yon_char_divide_search(str,"\n",0); - monitorconfig *monitor=NULL; - monitor=malloc(sizeof(monitorconfig)); - monitor->port=yon_char_new(strng); - if (!videoconfig.monitors) { - videoconfig.monitors=yon_dictionary_create_with_data(strng,monitor);} - else { - videoconfig.monitors=yon_dictionary_create_with_data_connected(videoconfig.monitors,strng,monitor); + while (fgets(str, 1000, videoports)) + { + printf("%s\n", str); + char *strng = yon_char_divide_search(str, "\n", 0); + monitorconfig *monitor = NULL; + monitor = malloc(sizeof(monitorconfig)); + monitor->port = yon_char_new(strng); + monitor->frequency=NULL; + monitor->frequency=NULL; + monitor->main=0; + monitor->resolution=NULL; + monitor->rotation=NULL; + monitor->stringparameters=NULL; + monitor->resolutionCapabilities=NULL; + videoconfig.list=NULL; + if (!videoconfig.monitors) + { + videoconfig.monitors = yon_dictionary_create_with_data(strng, monitor); + } + else + { + videoconfig.monitors = yon_dictionary_create_with_data_connected(videoconfig.monitors, strng, monitor); } - memset(str,0,1000); + memset(str, 0, 1000); } - char *command=load_drivers_local_command; + int size = 0; + + char *command = load_drivers_local_command; dictionary *dct; - for_dictionaries(dct,videoconfig.monitors){ - command=yon_char_get_augumented(command,(yon_char_get_augumented(" XORG_MONITOR[",yon_char_get_augumented(((monitorconfig*)dct->data)->port,"]")))); + for_dictionaries(dct, videoconfig.monitors) + { + command = yon_char_get_augumented(command, (yon_char_get_augumented(" XORG_MONITOR[", yon_char_get_augumented(((monitorconfig *)dct->data)->port, "]")))); } - FILE *local = popen(command, "r"); - char result[1000]; - memset(result,0,1000); - if (fgets(result,1000,local)&&strcmp(result,"(null)\n")!=0) - videoconfig.failsafenVidia=result; - else if (strcmp(result,"")==0) { yon_default_configs(); return; } - else videoconfig.failsafenVidia=NULL; - memset(result,0,1000); - if (fgets(result,1000,local)&&strcmp(result,"(null)\n")!=0) - videoconfig.failsafeATI=result; - else videoconfig.failsafeATI=NULL; - memset(result,0,1000); - if (fgets(result,1000,local)&&strcmp(result,"(null)\n")!=0) - videoconfig.optirun=result; - else videoconfig.optirun=NULL; - memset(result,0,1000); - if (fgets(result,1000,local)&&strcmp(result,"(null)\n")!=0) - videoconfig.primusrun=result; - else videoconfig.primusrun=NULL; - for_dictionaries(dct,videoconfig.monitors){ - fgets(result,1000,local); - if (strcmp(result,"(null)\n")!=0||strcmp(result,"")!=0){ - char *curmonitor=strstr(result,"=")+1; - yon_parse_monitor(dct,curmonitor); + char **rtn = yon_ubl_load_global_config(command, &size); + char *param = NULL; + + yon_config_init(rtn, size); + // on_config_fill_interface(widgets); + // (param=yon_config_get_parameter(rtn,size,"OPTIRUN")) + if ((param = yon_config_get_parameter(rtn, size, "FAILSAFENVIDIA"))) + videoconfig.failsafenVidia = yon_char_new(param); + else + videoconfig.failsafenVidia = NULL; + if ((param = yon_config_get_parameter(rtn, size, "FAILSAFEATI"))) + videoconfig.failsafeATI = yon_char_new(param); + else + videoconfig.failsafeATI = NULL; + if ((param = yon_config_get_parameter(rtn, size, "OPTIRUN"))) + videoconfig.optirun = yon_char_new(param); + else + videoconfig.optirun = NULL; + if ((param = yon_config_get_parameter(rtn, size, "PRIMUSRUN"))) + videoconfig.primusrun = yon_char_new(param); + else + videoconfig.primusrun = NULL; + + for_dictionaries(dct, videoconfig.monitors) + { + char *prm = yon_char_get_augumented(yon_char_get_augumented("XORG_MONITOR[", dct->key), "]"); + param = yon_config_get_parameter(rtn, size, prm); + if (param) + { + yon_parse_monitor(dct, param); } } + yon_proprieary_get(); } -void on_apps_chooser_open (GtkWidget *self,widgets_dict *widgets, int mode){ - GtkBuilder *builder=gtk_builder_new_from_file(glade_path);\ - // FILE *output=popen(""); - +void on_apps_chooser_open(GtkWidget *self, widgets_dict *widgets, int mode) +{ + GtkBuilder *builder = gtk_builder_new_from_file(glade_path); // FILE *output=popen(""); + printf("not implemented yet\n"); } -void yon_fill_ui(widgets_dict *widgets){ - if (!videoconfig.proprietary||strstr(videoconfig.proprietary,"\n")==0) - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverProprietaryDriverCombo),0); - - if (!videoconfig.failsafenVidia||strstr(videoconfig.failsafenVidia,"\n")==0) - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverFailsafeNvidiaCombo),0); - - if (!videoconfig.failsafeATI||strstr(videoconfig.failsafeATI,"\n")==0) - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverFailsafeAMDCombo),0); - - if (!videoconfig.optirun||strstr(videoconfig.optirun,"\n")==0) - gtk_entry_set_text(GTK_ENTRY(widgets->mainExtraLaunchOptirunEntry),videoconfig.optirun); - - if (!videoconfig.primusrun||strstr(videoconfig.primusrun,"\n")==0) - gtk_entry_set_text(GTK_ENTRY(widgets->mainExtraLaunchPrismusunEntry),videoconfig.primusrun); - - if (videoconfig.gapfix==0) - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainExtraFixGapCombo),0); - +driver_window *on_driver_window_open(GtkWidget *self, GtkWidget *comboe) +{ + GtkBuilder *builder = gtk_builder_new_from_file(glade_path); + driver_window *widgets = NULL; + widgets = malloc(sizeof(driver_window)); + widgets->window = yon_gtk_builder_get_widget(builder, "ProprietaryDriverChooseWindow"); + + widgets->propriearyTreeView = yon_gtk_builder_get_widget(builder, "propriearyTreeView"); + 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->ProprietaryCloseButton = yon_gtk_builder_get_widget(builder, "ProprietaryCloseButton"); + widgets->ProprietaryAcceptButton = yon_gtk_builder_get_widget(builder, "ProprietaryAcceptButton"); + if(!videoconfig.list) + videoconfig.list = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore6")); + gtk_list_store_clear(videoconfig.list); + yon_gtk_list_store_fill_with_proprietaries(videoconfig.list); + gtk_button_set_label(GTK_BUTTON(widgets->ProprietaryCloseButton), _("Cancel")); + gtk_button_set_label(GTK_BUTTON(widgets->ProprietaryAcceptButton), _("Accept")); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->propriearyTreeView),GTK_TREE_MODEL(videoconfig.list)); + gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(widgets->ProprietaryDriverColumn), _("Driver")); + gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(widgets->ProprietaryDescriptionColumn), _("Description")); + gtk_widget_show(widgets->window); + g_signal_connect(G_OBJECT(widgets->ProprietaryCloseButton), "clicked", G_CALLBACK(on_close_subwindow), NULL); + combo_tree *trcm=NULL; + trcm=malloc(sizeof(combo_tree)); + trcm->combo=comboe; + trcm->tree=widgets->propriearyTreeView; + g_signal_connect(G_OBJECT(widgets->ProprietaryAcceptButton), "clicked", G_CALLBACK(on_save_driver_configuration), trcm); } -void on_confugure_monitor_settings(GtkWidget *self, MonitorSettings *settings){ - int monitors_n=yon_check_for_monitors(); +void on_confugure_monitor_settings(GtkWidget *self, MonitorSettings *settings) +{ + int monitors_n = yon_check_for_monitors(); MonitorSettings *monitors = NULL; - monitors=malloc(sizeof(MonitorSettings)); - GtkBuilder *builder=gtk_builder_new_from_file(glade_path); - monitors->templateMonitorConfigurationWindow=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationWindow")); - monitors->templateMonitorConfigurationBox=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationBox")); - monitors->templateMonitorConfigurationMonitorLabel=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationMonitorLabel")); - monitors->templateMonitorConfigurationResolutionLabel=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationResolutionLabel")); - monitors->templateMonitorConfigurationResolutionCombo=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationResolutionCombo")); - monitors->templateMonitorConfigurationFrequencyLabel=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationFrequencyLabel")); - monitors->templateMonitorConfigurationFrequencyCombo=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationFrequencyCombo")); - monitors->templateMonitorConfigurationRotationCombo=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationRotationCombo")); - monitors->templateMonitorConfigurationRotationLabel=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationRotationLabel")); - monitors->templateMonitorConfigurationMainRadio=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationMainRadio")); - monitors->templateMonitorConfigurationParameterLineCheck=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationParameterLineCheck")); - monitors->templateMonitorConfigurationParameterLineEntry=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationParameterLineEntry")); - monitors->templateMonitorConfigurationDoNotSwitchOffLabel=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationDoNotSwitchOffLabel")); - monitors->templateMonitorConfigurationDoNotSwitchOffCheck=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationDoNotSwitchOffCheck")); - monitors->templateMonitorConfigurationCancelButton=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationCancelButton")); - monitors->templateMonitorConfigurationSaveButton=GTK_WIDGET(gtk_builder_get_object(builder,"templateMonitorConfigurationSaveButton")); + monitors = malloc(sizeof(MonitorSettings)); + GtkBuilder *builder = gtk_builder_new_from_file(glade_path); + monitors->templateMonitorConfigurationWindow = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationWindow")); + monitors->templateMonitorConfigurationBox = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationBox")); + monitors->templateMonitorConfigurationMonitorLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationMonitorLabel")); + monitors->templateMonitorConfigurationResolutionLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationResolutionLabel")); + monitors->templateMonitorConfigurationResolutionCombo = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationResolutionCombo")); + monitors->templateMonitorConfigurationFrequencyLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationFrequencyLabel")); + monitors->templateMonitorConfigurationFrequencyCombo = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationFrequencyCombo")); + monitors->templateMonitorConfigurationRotationCombo = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationRotationCombo")); + monitors->templateMonitorConfigurationRotationLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationRotationLabel")); + monitors->templateMonitorConfigurationMainRadio = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationMainRadio")); + monitors->templateMonitorConfigurationParameterLineCheck = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationParameterLineCheck")); + monitors->templateMonitorConfigurationParameterLineEntry = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationParameterLineEntry")); + monitors->templateMonitorConfigurationDoNotSwitchOffLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationDoNotSwitchOffLabel")); + monitors->templateMonitorConfigurationDoNotSwitchOffCheck = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationDoNotSwitchOffCheck")); + monitors->templateMonitorConfigurationCancelButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationCancelButton")); + monitors->templateMonitorConfigurationSaveButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationSaveButton")); + monitors->curconfig=settings->curconfig; + + 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->templateMonitorConfigurationCancelButton), "clicked", G_CALLBACK(on_closed_configuration), monitors); - // g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationSaveButton), "clicked", G_CALLBACK(on_save_configuration), monitors); - // if (i!=0) - // gtk_radio_button_join_group(GTK_RADIO_BUTTON(monitors[i].templateMonitorConfigurationMainRadio),GTK_RADIO_BUTTON(monitors[i-1].templateMonitorConfigurationMainRadio)); - - gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationMonitorLabel),_("Monitor: ")); - gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationResolutionLabel),_("Resolution (px): ")); - gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationFrequencyLabel),_("Frequency (Hz): ")); - gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationRotationLabel),_("Rotation: ")); + g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationSaveButton), "clicked", G_CALLBACK(on_save_window_configuration), monitors); + + gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationMonitorLabel), _("Monitor: ")); + gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationResolutionLabel), _("Resolution (px): ")); + gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationFrequencyLabel), _("Frequency (Hz): ")); + gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationRotationLabel), _("Rotation: ")); // gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationDoNotSwitchOffLabel),_("Do not switch display off")); - gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationMainRadio),_("Main monitor")); - gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationParameterLineCheck),_("through parameter line:")); - // gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationDoNotSwitchOffCheck),_("DPMS off")); - gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationCancelButton),_("Cancel")); + gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationMainRadio), _("Main monitor")); + gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationParameterLineCheck), _("through parameter line:")); + gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationCancelButton), _("Cancel")); gtk_widget_show(monitors->templateMonitorConfigurationWindow); - char *addln=NULL; - if (!settings->curconfig||!((monitorconfig*)settings->curconfig->data)->resolution) addln=_("Default settings"); - else addln=((monitorconfig*)settings->curconfig->data)->resolution; - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationResolutionCombo),addln); - gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationResolutionCombo),0); + char *addln = NULL; + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(monitors->templateMonitorConfigurationMainRadio),((monitorconfig*)settings->curconfig->data)->main); + + addln = _("Default settings"); + int chosen=-1; + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationResolutionCombo), addln); + gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationResolutionCombo), 0); - if (!settings->curconfig||!((monitorconfig*)settings->curconfig->data)->frequency) addln=_("Default settings"); - else addln=((monitorconfig*)settings->curconfig->data)->frequency; - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationFrequencyCombo),_("Default settings")); - gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationFrequencyCombo),0); + addln = _("Default settings"); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationFrequencyCombo), _("Default settings")); + gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationFrequencyCombo), 0); - if (!settings->curconfig||!((monitorconfig*)settings->curconfig->data)->rotation) addln=_("Default settings"); - else addln=((monitorconfig*)settings->curconfig->data)->rotation; - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationRotationCombo),_("Default settings")); - gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationRotationCombo),0); + addln = _("Default settings"); + + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationRotationCombo), _("Default settings")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationRotationCombo), _("Left")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationRotationCombo), _("Right")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationRotationCombo), _("Invert")); + gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationRotationCombo), 0); + + + if (yon_dictionary_get_data(settings->curconfig,monitorconfig*)->resolutionCapabilities) + for (int res=0;rescurconfig,monitorconfig*)->resolution_size;res++){ + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationResolutionCombo),yon_dictionary_get_data(settings->curconfig,monitorconfig*)->resolutionCapabilities[res]); + } + if(yon_dictionary_get_data(settings->curconfig,monitorconfig*)->stringparameters){ + char *entry_text=yon_char_new(yon_dictionary_get_data(settings->curconfig,monitorconfig*)->stringparameters); + yon_char_divide_search(entry_text,"=",1); + gtk_entry_set_text(GTK_ENTRY(monitors->templateMonitorConfigurationParameterLineEntry),entry_text); + } + if (((monitorconfig *)settings->curconfig->data)->resolution) + if ((chosen=yon_gtk_combo_box_text_find(monitors->templateMonitorConfigurationResolutionCombo,((monitorconfig *)settings->curconfig->data)->resolution))!=-1) + gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationResolutionCombo),chosen); } -MonitorSettings *yon_setup_monitor_settings(){ - int monitors_n=yon_check_for_monitors(); +MonitorSettings *yon_setup_monitor_settings() +{ + int monitors_n = yon_check_for_monitors(); MonitorSettings *monitors = NULL; - monitors=malloc(sizeof(MonitorSettings)*monitors_n); + monitors = malloc(sizeof(MonitorSettings) * monitors_n); // videoconfig.videoconfig=videoconfig.videoconfig->first; - for (int i=0;idata)->port)); - char *res=yon_char_get_augumented(((monitorconfig*)monitors[i].curconfig->data)->resolution,""); - if (!res) res=_("Default settings"); - gtk_label_set_text(GTK_LABEL(monitors[i].templateMonitorInfoResolutionLabel),res); - gtk_overlay_add_overlay(GTK_OVERLAY(monitors[i].templateMonitorscreenOverlay),monitors[i].templateMonitorInfoBox); + for (int i = 0; i < monitors_n; i++) + { + GtkBuilder *builder = gtk_builder_new_from_file(glade_path); + monitors[i].templateMonitorscreenOverlay = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorscreenOverlay")); + monitors[i].templateMonitorInfoBox = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoBox")); + monitors[i].templateMonitorInfoNameLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoNameLabel")); + monitors[i].templateMonitorInfoResolutionLabel = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoResolutionLabel")); + monitors[i].templateMonitorInfoConfigureButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoConfigureButton")); + monitors[i].curconfig = yon_dictionary_get_nth(videoconfig.monitors, i); + printf("%d\n", i); + if (yon_dictionary_get_data(monitors[i].curconfig,monitorconfig*)->main==0) + gtk_label_set_text(GTK_LABEL(monitors[i].templateMonitorInfoNameLabel), yon_char_get_augumented("Monitor ", ((monitorconfig *)monitors[i].curconfig->data)->port)); + if (yon_dictionary_get_data(monitors[i].curconfig,monitorconfig*)->main==1) + gtk_label_set_text(GTK_LABEL(monitors[i].templateMonitorInfoNameLabel), yon_char_get_augumented("Monitor ", yon_char_get_augumented(((monitorconfig *)monitors[i].curconfig->data)->port,"*"))); + char *res = yon_char_get_augumented(((monitorconfig *)monitors[i].curconfig->data)->resolution, ""); + if (!res) + res = _("Default settings"); + gtk_label_set_text(GTK_LABEL(monitors[i].templateMonitorInfoResolutionLabel), res); + gtk_overlay_add_overlay(GTK_OVERLAY(monitors[i].templateMonitorscreenOverlay), monitors[i].templateMonitorInfoBox); g_signal_connect(G_OBJECT(monitors[i].templateMonitorInfoConfigureButton), "clicked", G_CALLBACK(on_confugure_monitor_settings), &monitors[i]); - - if(videoconfig.monitors->next) - videoconfig.monitors=videoconfig.monitors->next; + if (i==0) + videoconfig.videoconfig = yon_dictionary_create_with_data(((monitorconfig *)monitors[i].curconfig->data)->port,&monitors[i]); + else + videoconfig.videoconfig = yon_dictionary_create_with_data_connected(videoconfig.videoconfig,((monitorconfig *)monitors[i].curconfig->data)->port,&monitors[i]); + if (videoconfig.monitors->next) + videoconfig.monitors = videoconfig.monitors->next; } return monitors; } -int yon_check_for_monitors(){ - GdkScreen *screen=gdk_screen_get_default(); - int monitors=gdk_display_get_n_monitors(gdk_screen_get_display(screen)); +int yon_char_get_if_resolution(char *parsed_string){ + char *left=NULL, *right=NULL; + right=yon_char_new(parsed_string); + left=yon_char_divide_search(right,"x",1); + if (left&&right) + if (atoi(left)&&atoi(right)) + return 1; + return 0; +} + +int yon_check_for_monitors() +{ + GdkScreen *screen = gdk_screen_get_default(); + int monitors = gdk_display_get_n_monitors(gdk_screen_get_display(screen)); return monitors; } -dictionary *yon_dictionary_pack_monitors(MonitorSettings *monitors, int size){ - dictionary *dict=yon_dictionary_create_with_data("0",monitors[0].templateMonitorConfigurationBox); - for (int i=1;ibuilder=gtk_builder_new_from_file(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->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->mainDriverProprietaryDriverLabel=yon_gtk_builder_get_widget(widgets->builder,"mainDriverProprietaryDriverLabel"); - widgets->mainDriverFailsafeNvidiaLabel=yon_gtk_builder_get_widget(widgets->builder,"mainDriverFailsafeNvidiaLabel"); - widgets->mainDriverFailsafeAMDLabel=yon_gtk_builder_get_widget(widgets->builder,"mainDriverFailsafeAMDLabel"); - widgets->mainDriverProprietaryDriverCombo=yon_gtk_builder_get_widget(widgets->builder,"mainDriverProprietaryDriverCombo"); - widgets->mainExtraFixGapCombo=yon_gtk_builder_get_widget(widgets->builder,"mainExtraFixGapCombo"); - widgets->mainDriverProprietaryDriverButton=yon_gtk_builder_get_widget(widgets->builder,"mainDriverProprietaryDriverButton"); - 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"); +void yon_monitor_set_resolutions(dictionary *dict){ + yon_dictionary_get_data(dict,monitorconfig*)->resolutionCapabilities=malloc(0); + FILE *resolutions = popen(get_resolutions_command, "r"); + char res[1000]; + memset(res,0,1000); + int size=0; + int last_string=0; + while (fgets(res,1000,resolutions)){ + + int string_n = atoi(yon_char_divide_search(res,":",1)); + if (last_string==0) last_string=string_n-1; + if (last_string==string_n-1){ + yon_dictionary_get_data(dict,monitorconfig*)->resolutionCapabilities=realloc(yon_dictionary_get_data(dict,monitorconfig*)->resolutionCapabilities,(sizeof(char*))*(size+2)); + yon_dictionary_get_data(dict,monitorconfig*)->resolutionCapabilities[size]=yon_char_divide_search(yon_char_new(res),"\n",1); + size++; + last_string=string_n; + } else { + yon_dictionary_get_data(dict,monitorconfig*)->resolution_size=size; + break; + } + } +} + +void yon_setup_widgets(widgets_dict *widgets) +{ + widgets->builder = gtk_builder_new_from_file(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->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->mainDriverProprietaryDriverLabel = yon_gtk_builder_get_widget(widgets->builder, "mainDriverProprietaryDriverLabel"); + widgets->mainDriverFailsafeNvidiaLabel = yon_gtk_builder_get_widget(widgets->builder, "mainDriverFailsafeNvidiaLabel"); + widgets->mainDriverFailsafeAMDLabel = yon_gtk_builder_get_widget(widgets->builder, "mainDriverFailsafeAMDLabel"); + widgets->mainDriverProprietaryDriverCombo = yon_gtk_builder_get_widget(widgets->builder, "mainDriverProprietaryDriverCombo"); + widgets->mainExtraFixGapCombo = yon_gtk_builder_get_widget(widgets->builder, "mainExtraFixGapCombo"); + widgets->mainDriverProprietaryDriverButton = yon_gtk_builder_get_widget(widgets->builder, "mainDriverProprietaryDriverButton"); + 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"); 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); @@ -365,82 +774,89 @@ void yon_setup_widgets(widgets_dict *widgets){ 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->mainDriverProprietaryDriverButton), "clicked", G_CALLBACK(on_proprietary_driver_window_open), NULL); + g_signal_connect(G_OBJECT(widgets->mainDriverProprietaryDriverButton), "clicked", G_CALLBACK(on_driver_window_open), widgets->mainDriverProprietaryDriverCombo); g_signal_connect(G_OBJECT(widgets->extraOptirunChooseAppsButton), "clicked", G_CALLBACK(on_apps_chooser_open), widgets); g_signal_connect(G_OBJECT(widgets->extraPrimusunChooseAppsButton), "clicked", G_CALLBACK(on_apps_chooser_open), widgets); g_signal_connect(G_OBJECT(widgets->mainHeaderSettingsAboutMenuItem), "activate", G_CALLBACK(on_about), NULL); - - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverProprietaryDriverCombo),_("Don't use")); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo),_("Off")); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo),_("fbdev")); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeAMDCombo),_("Off")); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeAMDCombo),_("fbdev")); - - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainExtraFixGapCombo),_("1st variant. May cause perfomance drops in video games")); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainExtraFixGapCombo),_("2nd variant. May not work on specific video cards")); - gtk_label_set_text(GTK_LABEL(widgets->headInfoLabel),_("Video output configuration")); - gtk_label_set_text(GTK_LABEL(widgets->mainDriverProprietaryDriverLabel),_("Proprietary driver: ")); - gtk_label_set_text(GTK_LABEL(widgets->mainDriverFailsafeNvidiaLabel),_("Failsafe driver nVidia: ")); - gtk_label_set_text(GTK_LABEL(widgets->mainDriverFailsafeAMDLabel),_("Failsafe driver AMD/ATI: ")); - gtk_label_set_text(GTK_LABEL(widgets->mainDriverFrameLabel),_("Driver")); + g_signal_connect(G_OBJECT(widgets->mainHeaderSettingsDocumentationMenuItem), "activate", G_CALLBACK(on_about), 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->mainDriverProprietaryDriverCombo), _("Don't use")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo), _("Off")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo), _("fbdev")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeAMDCombo), _("Off")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeAMDCombo), _("fbdev")); + + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainExtraFixGapCombo), _("1st variant. May cause perfomance drops in video games")); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainExtraFixGapCombo), _("2nd variant. May not work on specific video cards")); + gtk_label_set_text(GTK_LABEL(widgets->headInfoLabel), _("Video output configuration")); + gtk_label_set_text(GTK_LABEL(widgets->mainDriverProprietaryDriverLabel), _("Proprietary driver: ")); + gtk_label_set_text(GTK_LABEL(widgets->mainDriverFailsafeNvidiaLabel), _("Failsafe driver nVidia: ")); + gtk_label_set_text(GTK_LABEL(widgets->mainDriverFailsafeAMDLabel), _("Failsafe driver AMD/ATI: ")); + gtk_label_set_text(GTK_LABEL(widgets->mainDriverFrameLabel), _("Driver")); // gtk_label_set_text(GTK_LABEL(widgets->monitorConfigurationMethodLabel),_("Configuration method")); - gtk_label_set_text(GTK_LABEL(widgets->mainMonitorConfigurationFrameLabel),_("Monitor configuration")); - gtk_label_set_text(GTK_LABEL(widgets->mainHybridGraphicsFrameLabel),_("Hybrid graphics")); - gtk_label_set_text(GTK_LABEL(widgets->mainExtraFixGapLabel),_("Fix frame gap (nVidia)")); - gtk_label_set_text(GTK_LABEL(widgets->mainExtraFrameLabel),_("Extra")); - gtk_label_set_text(GTK_LABEL(widgets->mainHeaderTitleLabel),_("UBlinux Video Configuration")); - gtk_label_set_text(GTK_LABEL(widgets->mainHeaderConfigLoadLabel),_("Load")); - gtk_label_set_text(GTK_LABEL(widgets->mainHeaderSaveConfigurationLabel),_("Save")); - - gtk_button_set_label(GTK_BUTTON(widgets->mainHybridGraphicsDiscreteCheck),_("On")); - gtk_button_set_label(GTK_BUTTON(widgets->mainDriverAutomaticallyChooseCheck),_("Automatically choose and use driver")); - gtk_button_set_label(GTK_BUTTON(widgets->mainExtraLaunchOptirunCheck),_("Launch programms through optirun (nVidia): ")); - gtk_button_set_label(GTK_BUTTON(widgets->mainExtraLaunchPrismusunCheck),_("Launch programs through primusun (nVidia): ")); - gtk_button_set_label(GTK_BUTTON(widgets->mainHybridGraphicsDiscreteCheck),_("discrete video only (AMD/ATI)")); - - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderLoadGlobalMenuItem),_("Load from global configuration")); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderLoadLocalMenuItem),_("Load from local configuration")); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSaveGlobalLocalMenuItem),_("Save to global an local configuration")); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSaveGlobalMenuItem),_("Save to global configuration")); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSaveLocalMenuItem),_("Save to local configuration")); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSettingsDocumentationMenuItem),_("Documentation")); - gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSettingsAboutMenuItem),_("About")); - + gtk_label_set_text(GTK_LABEL(widgets->mainMonitorConfigurationFrameLabel), _("Monitor configuration")); + gtk_label_set_text(GTK_LABEL(widgets->mainHybridGraphicsFrameLabel), _("Hybrid graphics")); + gtk_label_set_text(GTK_LABEL(widgets->mainExtraFixGapLabel), _("Fix frame gap (nVidia)")); + gtk_label_set_text(GTK_LABEL(widgets->mainExtraFrameLabel), _("Extra")); + gtk_label_set_text(GTK_LABEL(widgets->mainHeaderTitleLabel), _("UBlinux Video Configuration")); + gtk_label_set_text(GTK_LABEL(widgets->mainHeaderConfigLoadLabel), _("Load")); + gtk_label_set_text(GTK_LABEL(widgets->mainHeaderSaveConfigurationLabel), _("Save")); + + gtk_button_set_label(GTK_BUTTON(widgets->mainHybridGraphicsDiscreteCheck), _("On")); + gtk_button_set_label(GTK_BUTTON(widgets->mainDriverAutomaticallyChooseCheck), _("Automatically choose and use driver")); + gtk_button_set_label(GTK_BUTTON(widgets->mainExtraLaunchOptirunCheck), _("Launch programms through optirun (nVidia): ")); + gtk_button_set_label(GTK_BUTTON(widgets->mainExtraLaunchPrismusunCheck), _("Launch programs through primusun (nVidia): ")); + gtk_button_set_label(GTK_BUTTON(widgets->mainHybridGraphicsDiscreteCheck), _("discrete video only (AMD/ATI)")); + + gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderLoadGlobalMenuItem), _("Load from global configuration")); + gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderLoadLocalMenuItem), _("Load from local configuration")); + gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSaveGlobalLocalMenuItem), _("Save to global an local configuration")); + gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSaveGlobalMenuItem), _("Save to global configuration")); + gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSaveLocalMenuItem), _("Save to local configuration")); + gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSettingsDocumentationMenuItem), _("Documentation")); + gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSettingsAboutMenuItem), _("About")); // gtk_button_set_label(GTK_BUTTON(widgets->mainExtraLaunchThroughButton),_("Change")); - yon_ubl_header_setup(widgets->mainHeadOverlay,widgets->headBox,widgets->mainHeadBackgroundImage, banner_path); + yon_ubl_header_setup(widgets->mainHeadOverlay, widgets->headBox, widgets->mainHeadBackgroundImage, banner_path); // gtk_overlay_add_overlay(GTK_OVERLAY(widgets->mainHeadOverlay),widgets->headBox); // gtk_image_set_from_file(GTK_IMAGE(widgets->mainHeadBackgroundImage),banner_path); MonitorSettings *monitors = yon_setup_monitor_settings(); - videoconfig.monitors=yon_dictionary_pack_monitors(monitors,yon_check_for_monitors()); - widgets->overlays=yon_dictionary_pack_overlays(monitors,yon_check_for_monitors()); - yon_dictionary_gtk_pack_start_multiple_widgets(widgets->overlays,widgets->mainMonitorVisualConfigurationBox,0,0,0); + // videoconfig.monitors=yon_dictionary_pack_monitors(monitors,yon_check_for_monitors()); + widgets->overlays = yon_dictionary_pack_overlays(monitors, yon_check_for_monitors()); + yon_dictionary_gtk_pack_start_multiple_widgets(widgets->overlays, widgets->mainMonitorVisualConfigurationBox, 0, 0, 0); // yon_dictionary_gtk_pack_start_multiple_widgets(widgets->monitors,widgets->mainMonitorConfigurationBox,0,0,0); - } -int main(int argc, char *argv[]){ +int main(int argc, char *argv[]) +{ - local=setlocale(LC_ALL, ""); - textdomain (LocaleName); + local = setlocale(LC_ALL, ""); + textdomain(LocaleName); gtk_init(&argc, &argv); GError error; // xfconf_init (&error); // display_channel = xfconf_channel_new ("displays"); - videoconfig.applist=yon_apps_scan_and_parse_desktops(&videoconfig.appsize); yon_setup_config(); widgets_dict widgets; yon_setup_widgets(&widgets); gtk_widget_show(widgets.MainWindow); - yon_fill_ui(&widgets); - yon_ubl_status_box_render(widgets.mainStatusBox,widgets.mainStatusIcon,widgets.mainStatusLabel,"com.ublinux.ubl-settings-video.checked",_("Configuration has been loaded"),BACKGROUND_IMAGE_SUCCESS_TYPE); - GtkCssProvider *css=gtk_css_provider_new(); - gtk_css_provider_load_from_path(css,CssPath,NULL); + // yon_fill_ui(&widgets); + yon_ubl_status_box_render(widgets.mainStatusBox, widgets.mainStatusIcon, widgets.mainStatusLabel, _("Configuration has been loaded"), BACKGROUND_IMAGE_SUCCESS_TYPE); + on_config_fill_interface(&widgets); + GtkCssProvider *css = gtk_css_provider_new(); + gtk_css_provider_load_from_path(css, CssPath, NULL); gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), - GTK_STYLE_PROVIDER(css), - -1); + GTK_STYLE_PROVIDER(css), + -1); gtk_main(); return 0; } \ No newline at end of file diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index 3f34972..905f35f 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -16,7 +16,7 @@ #define banner_path "/usr/share/ubl-settings-video/ui/ubl-settings-video-banner.png" #define glade_path "/usr/share/ubl-settings-video/ui/ubl-settings-video.glade" -#define LocalePath "/usr/share/locale" +#define LocalePath "/usr/share/locale" #define LocaleName "ubl-settings-video" #define CssPath "/usr/share/ubl-settings-video/css/ubl-settings-video.css" #define StatusLoadGlobalFailed _("Failed to load global configuration") @@ -27,31 +27,42 @@ #define get_ports_command "xrandr |grep -E \"^[A-Z0-9]* connected\" |cut -d' ' -f1" +#define get_resolutions_command "xrandr |grep -noP \"\\d+x+\\d+\"" + +#define get_proprietary_drivers_command "" + +#define get_frequences_command "xrandr |grep -v -n \"[a-z][a-z]\" |sed 's/ * / /g' |cut -d' ' -f1,3-" + #define load_drivers_command "/usr/bin/ubconfig --default --source " #define load_drivers_global_command "/usr/bin/ubconfig --default --source global get video FAILSAFENVIDIA FAILSAFEATI OPTIRUN PRIMUSRUN " -#define save_drivers_global_command "/usr/bin/ubconfig --target global set video FAILSAFENVIDIA=%s FAILSAFEATI=%s OPTIRUN=%s PRIMUSRUN=%s " +#define save_drivers_global_command "/usr/bin/ubconfig --target global set video " #define load_drivers_local_command "/usr/bin/ubconfig --default --source system get video FAILSAFENVIDIA FAILSAFEATI OPTIRUN PRIMUSRUN " -#define save_drivers_local_command "/usr/bin/ubconfig --target system set video FAILSAFENVIDIA=%s FAILSAFEATI=%s OPTIRUN=%s PRIMUSRUN=%s " +#define save_drivers_local_command "pkexec /usr/bin/ubconfig --target system set video " -char *local; +#define remove_drivers_global_command "/usr/bin/ubconfig --target system remove video " -typedef char* string; +#define remove_drivers_local_command "/usr/bin/ubconfig --target global remove video " -string version_application = "1.0"; +char *local; + +typedef char *string; +string version_application = "1.0"; #define _(String) gettext(String) -typedef struct { +typedef struct +{ int autoChooseDrivers; dictionary *videoconfig; dictionary *monitors; - char *proprietary; + dictionary *proprietary; + GtkListStore *list; char *failsafenVidia; char *failsafeATI; int descreteOnly; @@ -59,20 +70,27 @@ typedef struct { char *primusrun; int gapfix; int optiorprimus; - apps *applist; - int appsize; } config; -typedef struct { + +typedef struct +{ int main; char *port; char *resolution; - char *resolutionCapabilities; + char **resolutionCapabilities; char *frequency; char *rotation; char *stringparameters; + int resolution_size; } monitorconfig; typedef struct { + GtkWidget *combo; + GtkWidget *tree; +} combo_tree; + +typedef struct +{ dictionary *monitors; dictionary *overlays; GtkBuilder *builder; @@ -145,7 +163,8 @@ typedef struct { GtkWidget *templateMonitorConfigurationDoNotSwitchOffCheck; } widgets_dict; -typedef struct { +typedef struct +{ GtkWidget *templateMonitorConfigurationWindow; GtkWidget *templateMonitorConfigurationBox; GtkWidget *templateMonitorConfigurationMonitorLabel; @@ -171,8 +190,18 @@ typedef struct { dictionary *curconfig; } MonitorSettings; +typedef struct +{ + GtkWidget *window; + GtkWidget *propriearyTreeView; + GtkTreeViewColumn *ProprietaryDriverColumn; + GtkTreeViewColumn *ProprietaryDescriptionColumn; + GtkListStore *list; + GtkWidget *ProprietaryCloseButton; + GtkWidget *ProprietaryAcceptButton; +} driver_window; int yon_check_for_monitors(); MonitorSettings *yon_setup_monitor_settings(); @@ -180,5 +209,14 @@ dictionary *yon_dictionary_pack_monitors(MonitorSettings *monitors, int size); dictionary *yon_dictionary_pack_overlays(MonitorSettings *monitors, int size); void on_closed_configuration(GtkWidget *self, MonitorSettings *monitors); void on_save_configuration(GtkWidget self, MonitorSettings *monitors); - +int yon_config_init(char **parameters, int size); +void yon_parse_monitor(dictionary *monitor, char *string_of_settings); +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); +int yon_char_get_if_resolution(char *parsed_string); +void yon_monitor_set_resolutions(dictionary *dict); #endif \ No newline at end of file diff --git a/source/ubl-utils.c b/source/ubl-utils.c index d2088df..b56e513 100644 --- a/source/ubl-utils.c +++ b/source/ubl-utils.c @@ -1,14 +1,16 @@ #include "ubl-utils.h" #ifndef UBL_UTILS -typedef enum { +typedef enum +{ DICTIONARY_ACTION_WIDGETS_TYPE, DICTIONARY_IVGRAPHICALS_TYPE, DICTIONARY_OTHER_TYPE } DICT_TYPE; -typedef struct dictionary { +typedef struct dictionary +{ char *key; void *data; struct dictionary *next; @@ -17,23 +19,26 @@ typedef struct dictionary { DICT_TYPE data_type; } dictionary; -typedef struct apps{ - char *Name; - int Type; - char *Categories; - char *Exec; - char *Icon; - int Pluggable; - int DualPluggable; - } apps; - -typedef struct { +typedef struct apps +{ + char *Name; + int Type; + char *Categories; + char *Exec; + char *Icon; + int Pluggable; + int DualPluggable; +} apps; + +typedef struct +{ char *command; int *exitcode; } thread_output; #ifdef __GTK_H__ -typedef struct IVGrapgicals{ +typedef struct IVGrapgicals +{ char *sectionName; char *categories; GtkListStore *LV; @@ -46,354 +51,520 @@ typedef struct IVGrapgicals{ #endif #endif - -//dictionary functions - -/** - * yon_dictionary_create_empty: - * Creates and returns empty dictionary -*/ -dictionary *yon_dictionary_create_empty(){ - 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; +// dictionary functions + +/**[EN] + * yon_dictionary_create_empty(): + * Creates and returns empty dictionary + */ +dictionary *yon_dictionary_create_empty() +{ + 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; } -void yon_dictionary_switch_to_last(dictionary **dict){ - if ((*dict)->next!=NULL) - for ((*dict)=(*dict)->first;(*dict)->next!=NULL;(*dict)=(*dict)->next){} +void yon_dictionary_switch_to_last(dictionary **dict) +{ + if ((*dict)->next != NULL) + for ((*dict) = (*dict)->first; (*dict)->next != NULL; (*dict) = (*dict)->next) + { + } } -dictionary * yon_dictionary_create_conneced(dictionary *targetdict){ - targetdict=yon_dictionary_get_last(targetdict); - targetdict->next=yon_dictionary_create_empty(); - targetdict->next->prev=targetdict; - targetdict->next->first=targetdict->first; - targetdict->next->data_type=DICTIONARY_OTHER_TYPE; +dictionary *yon_dictionary_create_conneced(dictionary *targetdict) +{ + targetdict = yon_dictionary_get_last(targetdict); + targetdict->next = yon_dictionary_create_empty(); + targetdict->next->prev = targetdict; + targetdict->next->first = targetdict->first; + targetdict->next->data_type = DICTIONARY_OTHER_TYPE; return targetdict->next; } -dictionary *yon_dictionary_get_last(dictionary *dict){ - dictionary *dct=NULL; - for (dct=dict->first;dct->next!=NULL;dct=dct->next){} +dictionary *yon_dictionary_get_last(dictionary *dict) +{ + dictionary *dct = NULL; + for (dct = dict->first; dct->next != NULL; dct = dct->next) + { + } return dct; } -dictionary *yon_dictionary_switch_places(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; +dictionary *yon_dictionary_switch_places(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 + { + 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 { + } + 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; + 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; + } + 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; } } } } } -void yon_dictionary_make_first(dictionary *dict){ - for (dictionary *dct=dict->first;dct!=NULL;dct=dct->next){ - dct->first=dict; +void yon_dictionary_make_first(dictionary *dict) +{ + for (dictionary *dct = dict->first; dct != NULL; dct = dct->next) + { + dct->first = dict; } } -void yon_dictionary_make_nth(dictionary *dict, int nth){ - dictionary *dct=dict->first; - for (int i=0;inext;} +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; -} - -dictionary *yon_dictionary_create_with_data(char *key, void *data){ - dictionary *dct=yon_dictionary_create_empty(); - dct->key=yon_char_new(key); - dct->data=data; - dct->data_type=DICTIONARY_OTHER_TYPE; + dictionary *prev = dct->prev; + prev->next = dict; + dict->prev = prev; + dict->next = dct; + dct->prev = dict; +} + +dictionary *yon_dictionary_create_with_data(char *key, void *data) +{ + dictionary *dct = yon_dictionary_create_empty(); + dct->key = yon_char_new(key); + dct->data = data; + dct->data_type = DICTIONARY_OTHER_TYPE; return dct; } -dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data){ - dictionary *dct=yon_dictionary_create_conneced(dict); - dct->key=yon_char_new(key); - dct->data=data; - dct->data_type=DICTIONARY_OTHER_TYPE; +dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data) +{ + dictionary *dct = yon_dictionary_create_conneced(dict); + dct->key = yon_char_new(key); + dct->data = data; + dct->data_type = DICTIONARY_OTHER_TYPE; return dct; } -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; +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; } -dictionary *yon_dictionary_find(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; +dictionary *yon_dictionary_find(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; } - -dictionary *yon_dictionary_rip(dictionary *dict){ - if (!dict->next){ - dictionary *prev=dict->prev; - if (prev){ - prev->next=NULL; - return prev; - } else return dict; +dictionary *yon_dictionary_rip(dictionary *dict) +{ + 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){ + else if (!dict->prev) + { + dictionary *next = dict->next; + if (next) + { yon_dictionary_make_first(next); - next->prev=NULL; + next->prev = NULL; return next; } - else return dict; + else + return dict; } - else { - dictionary *next=dict->next, *prev=dict->prev; - next->prev=prev; - prev->next=next; + else + { + dictionary *next = dict->next, *prev = dict->prev; + next->prev = prev; + prev->next = next; return next; } } -dictionary *yon_dictionary_get_nth(dictionary *dict, int place){ - dict=dict->first; - int i=0; - for (i=0;inext) - dict=dict->next; - else break; - if (i==place) return dict; - else return NULL; +dictionary *yon_dictionary_get_nth(dictionary *dict, int place) +{ + 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; } -//char functions +// char functions -/** +/**[EN] + * * creates new char string by combining two char strings. -*/ -char *yon_char_get_augumented(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); + */ +char *yon_char_get_augumented(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 - 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){ - char *newchar=malloc(strlen(chr)+1); - memset(newchar,0,strlen(chr)+1); - memcpy(newchar,chr,strlen(chr)); + */ +char *yon_char_new(char *chr) +{ + char *newchar = malloc(strlen(chr) + 1); + memset(newchar, 0, strlen(chr) + 1); + memcpy(newchar, chr, strlen(chr)); return newchar; } -/** +/**[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); + */ +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; } -/** +/**[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)); + */ +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; } -/** - * searches string dividepos in source string and divides it, +/**[EN] + * char *yon_char_divide_search(char *source, char *dividepos, int delete_divider) + * searches string [dividepos] in [source] string and divides it, * returning left part of divided string and - * inserting right part to source string. - * if delete_divider is 0, left part will contain delete_divider substring, else - * it will stay in right part. -*/ -char *yon_char_divide_search(char *source, char* dividepos, int delete_divider){ - char *cut=strstr(source,dividepos); - int leng=strlen(source)-strlen(cut); - cut=yon_char_divide(source,leng); - return cut; + * inserting right part to [source] string. + * if [delete_divider] is 0, left part will contain [delete_divider] substring, else + * if [delete_divider] is 1 it will stay in right part, else + * if [delete_divider] is -1 it will be deleted from string. + * + * [RU] + * char *yon_char_divide_search(char *source, char *dividepos, int delete_divider) + * Ищет строку [dividepos] в строке [source] и делит её в этом месте, + * возвращая левую часть разделённой строки и устанавливает в [source] правую часть. + * Если [delete_divider] равен 0, [dividepos] останется в левой строке, иначе + * если [delete_divider] равен 1, [dividepos] останется в правой строке, иначе + * если [delete_divider] равен -1, [dividepos] удаляется из строки. + */ +char *yon_char_divide_search(char *source, char *dividepos, int delete_divider) +{ + if (source&÷pos){ + char *cut = strstr(source, dividepos); + if (cut) + { + int leng = strlen(source) - strlen(cut); + cut = yon_char_divide(source, leng); + return cut; + } + else + return NULL; + } } -/** - * converts int to char. +/**[EN] + * char *yon_char_from_int(int int_to_convert) + * converts int to char*. + * + * [RU] + * char *yon_char_from_int(int int_to_convert) + * Конвертирует int в char* + */ +char *yon_char_from_int(int int_to_convert) +{ + int i = 1; + float convert_check = (float)int_to_convert; + for (i = 1; convert_check > 10; i++) + { + convert_check = convert_check / 10; + } + char *ch = malloc(i * sizeof(char) + 1); + sprintf(ch, "%d", int_to_convert); + return ch; +} + +/**[EN] + * char **yon_char_parse(char *parameters, int *size, char *divider) + * Parses string [parameters], divided by [divider], + * then returns parsed string array and sets [size] to + * size of returned array */ -char *yon_char_from_int(int int_to_convert){ +char **yon_char_parse(char *parameters, int *size, char *divider){ + char **string=NULL; int i=1; - float convert_check=(float)int_to_convert; - for (i=1;convert_check>10;i++){ - convert_check=convert_check/10; + string=malloc(sizeof(char*)); + char *paramline=yon_char_new(parameters); + char *param; + while ((param=yon_char_divide_search(paramline,divider,1))){ + string=realloc(string,sizeof(char*)*i); + string[i-1]=yon_char_new(param); + i++; } - char *ch=malloc(i*sizeof(char)+1); - sprintf(ch,"%d",int_to_convert); - return ch; + string=realloc(string,sizeof(char*)*i); + string[i-1]=yon_char_new(paramline); + i++; + printf("%d\n",i); + *size=i-1; + return string; + } +char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete){ + char **new_char_parsed=NULL; + new_char_parsed=malloc(sizeof(char*)*(*size)-2); + int sz=0; + for (int i=0;i<*size-2;i++){ + if (i!=item_to_delete){ + new_char_parsed[i]=yon_char_new(char_string[i]); + sz++; + } + + } + *size=sz; + return new_char_parsed; +} -//parsing functions +/**[EN] + * + * Checks if [parameters] string array of length [size] + * has [param] element; +*/ +int yon_char_parsed_check_exist(char **parameters, int size, char *param){ + + for (int i=0;id_name); - file=fopen(path,"r"); - if (strlen(de->d_name)>9) + char *path = yon_char_get_augumented(DesktopPath, de->d_name); + file = fopen(path, "r"); + if (strlen(de->d_name) > 9) { - char *extension=strstr(path,"."); - if (extension!=NULL) + char *extension = strstr(path, "."); + if (extension != NULL) { - if (strcmp(extension,".desktop")==0) + 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); + 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); } - 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].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; + 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].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].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; + } + else + { + applist = (apps *)realloc(applist, (size + 1) * sizeof(apps)); + 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++; } } @@ -401,94 +572,166 @@ apps *yon_apps_scan_and_parse_desktops(int *sizef){ } } } - *sizef=size; + *sizef = size; return applist; }; - -void yon_apps_sort(apps *applist,int size){ +void yon_apps_sort(apps *applist, int size) +{ apps tmp; - if (size>2) + if (size > 2) { - for (int i=1;icommand=path; - thread->exitcode=malloc(sizeof(int)); +int yon_launch_app(char *name) +{ + char *path = name; + thread_output *thread = malloc(sizeof(thread_output)); + thread->command = path; + thread->exitcode = malloc(sizeof(int)); pthread_t thread_id; - pthread_create(&thread_id, NULL, (void*)yon_launch, thread); + pthread_create(&thread_id, NULL, (void *)yon_launch, thread); return *thread->exitcode; }; - -int yon_launch_app_with_arguments(char *name, char *args){ - char *path=yon_char_get_augumented("/usr/bin/",name); - path=yon_char_get_augumented(path," "); - path=yon_char_get_augumented(path,args); +int yon_launch_app_with_arguments(char *name, char *args) +{ + char *path = yon_char_get_augumented("/usr/bin/", name); + path = yon_char_get_augumented(path, " "); + path = yon_char_get_augumented(path, args); pthread_t thread_id; - thread_output *thread=malloc(sizeof(thread_output)); - thread->command=path; - thread->exitcode=malloc(sizeof(int)); - pthread_create(&thread_id, NULL, (void*)yon_launch, thread); + thread_output *thread = malloc(sizeof(thread_output)); + thread->command = path; + thread->exitcode = malloc(sizeof(int)); + pthread_create(&thread_id, NULL, (void *)yon_launch, thread); return *thread->exitcode; }; - -int yon_launch(thread_output *thread){ - int a=0; - a=system(thread->command); - *thread->exitcode=a; +int yon_launch(thread_output *thread) +{ + int a = 0; + a = system(thread->command); + *thread->exitcode = a; return *thread->exitcode; } - -//Gtk functions +// Gtk functions #ifdef __GTK_H__ @@ -500,7 +743,7 @@ int yon_launch(thread_output *thread){ // GtkWidget *PackBox=gtk_box_new(GTK_ORIENTATION_VERTICAL,5); // GtkWidget *ButtonsBox=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); // GtkWidget *ButtonsPlaceBox=gtk_box_new(GTK_ORIENTATION_HORIZONTAL,5); - + // GtkWidget *CancelButton=gtk_button_new_with_label("Cancel"); // GtkWidget *AcceptButton=gtk_button_new_with_label("Accept"); // gtk_container_add(GTK_CONTAINER(chooserWindow),Box); @@ -525,7 +768,7 @@ int yon_launch(thread_output *thread){ * - templateAppsPack - setted up container for every template widget; * - templateAppsImage - image for rendering section image; * - templateAppsLabel - label for rendering section name; -*/ + */ // dictionary *yon_iv_segment_create(dictionary *connect_to, char *name, char *categories, char *segment_icon_name){ // IVSegment *segment=malloc(sizeof(IVSegment)); // segment->name=name; @@ -570,7 +813,7 @@ int yon_launch(thread_output *thread){ // gtk_box_pack_start(GTK_BOX(Box),((IVSegment*)nd->data)->Expander,0,0,0); // } // return Box; - + // } // GtkWidget *yon_gtk_socket_create_new_with_connect(GtkWidget *container, gpointer data){ @@ -583,38 +826,64 @@ int yon_launch(thread_output *thread){ // return socket; // }; -int yon_dictionary_gtk_pack_start_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding){ - for (dictionary *dct=dict->first; dct!=NULL;dct=dct->next){ - gtk_box_pack_start(GTK_BOX(destination),(GtkWidget*)dct->data,expand,fill,padding); + +int yon_gtk_combo_box_text_find(GtkWidget *combo_box, char *text_to_find){ + int active=gtk_combo_box_get_active(GTK_COMBO_BOX(combo_box)); + char *str="-1"; + for (int i=0;strcmp(str,"")!=0;i++){ + gtk_combo_box_set_active(GTK_COMBO_BOX(combo_box),i); + str=gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo_box)); + if (!str) return -1; + if (strcmp(text_to_find,str)==0) return i; + } + return -1; +} + +int yon_dictionary_gtk_pack_start_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding) +{ + for (dictionary *dct = dict->first; dct != NULL; dct = dct->next) + { + gtk_box_pack_start(GTK_BOX(destination), (GtkWidget *)dct->data, expand, fill, padding); } return 1; } -int yon_dictionary_gtk_pack_end_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding){ - for (dictionary *dct=dict->first; dct!=NULL;dct=dct->next){ - gtk_box_pack_end(GTK_BOX(destination),(GtkWidget*)dct->data,expand,fill,padding); +int yon_dictionary_gtk_pack_end_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding) +{ + for (dictionary *dct = dict->first; dct != NULL; dct = dct->next) + { + gtk_box_pack_end(GTK_BOX(destination), (GtkWidget *)dct->data, expand, fill, padding); } return 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(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_status_box_render(GtkWidget *StatusBox, GtkWidget *StatusIcon, GtkWidget *StatusLabel, char *IconName, char* StatusText, BACKGROUND_IMAGE_TYPE BackgroundClass){ - GtkIconTheme *ictheme=gtk_icon_theme_get_default(); - GError *err=NULL; - gtk_image_set_from_pixbuf(GTK_IMAGE(StatusIcon),gtk_icon_theme_load_icon_for_scale(ictheme,IconName,25,1,GTK_ICON_LOOKUP_FORCE_SIZE,&err)); - if (err){ - printf("%s\n",err->message); +void _yon_ubl_status_box_render(GtkWidget *StatusBox, GtkWidget *StatusIcon, GtkWidget *StatusLabel, char *StatusText, BACKGROUND_IMAGE_TYPE BackgroundClass) +{ + GtkIconTheme *ictheme = gtk_icon_theme_get_default(); + GError *err = NULL; + if (err) + { + printf("%s\n", err->message); g_error_free(err); } - gtk_label_set_text(GTK_LABEL(StatusLabel),StatusText); - if (BackgroundClass==BACKGROUND_IMAGE_SUCCESS_TYPE){ - gtk_style_context_add_class(gtk_widget_get_style_context(StatusBox),"boxInfoMessOK"); - } else if (BackgroundClass==BACKGROUND_IMAGE_FAIL_TYPE){ - gtk_style_context_add_class(gtk_widget_get_style_context(StatusBox),"boxInfoMessError"); + gtk_label_set_text(GTK_LABEL(StatusLabel), StatusText); + if (BackgroundClass == BACKGROUND_IMAGE_SUCCESS_TYPE) + { + gtk_style_context_remove_class(gtk_widget_get_style_context(StatusBox), "boxInfoMessError"); + gtk_style_context_add_class(gtk_widget_get_style_context(StatusBox), "boxInfoMessOK"); + gtk_image_set_from_pixbuf(GTK_IMAGE(StatusIcon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.ubl-settings-video.checked", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, &err)); + } + else if (BackgroundClass == BACKGROUND_IMAGE_FAIL_TYPE) + { + gtk_style_context_remove_class(gtk_widget_get_style_context(StatusBox), "boxInfoMessOK"); + gtk_style_context_add_class(gtk_widget_get_style_context(StatusBox), "boxInfoMessError"); + gtk_image_set_from_pixbuf(GTK_IMAGE(StatusIcon), gtk_icon_theme_load_icon_for_scale(ictheme, "com.ublinux.ubl-settings-video.warning", 25, 1, GTK_ICON_LOOKUP_FORCE_SIZE, &err)); } } #endif \ No newline at end of file diff --git a/source/ubl-utils.h b/source/ubl-utils.h index d0c1049..ce50a8d 100644 --- a/source/ubl-utils.h +++ b/source/ubl-utils.h @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -12,43 +13,32 @@ #define DesktopPath "/usr/share/applications/" -#define for_dictionaries(obj,obj1) for(obj=obj1->first;obj!=NULL;obj=obj->next) +#define for_dictionaries(obj, obj1) for (obj = obj1->first; obj != NULL; obj = obj->next) -#define yon_ubl_set_global_config_load_command(command) config_commands.global_config_load_command=command -#define yon_ubl_set_global_config_save_command(command) config_commands.global_config_save_command=command -#define yon_ubl_set_local_config_load_command(command) config_commands.local_config_load_command=command -#define yon_ubl_set_local_config_save_command(command) config_commands.local_config_save_command=command +#define yon_ubl_set_config_save_data_pointer(command) config_commands.config_save_data = command -#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) -#define yon_ubl_load_global_config() yon_config_load(config_commands.global_config_load_command) -#define yon_ubl_load_local_config() yon_config_load(config_commands.local_config_load_command) -#define yon_ubl_save_global_config() yon_config_save(config_commands.global_config_save_command) -#define yon_ubl_save_local_config() yon_config_save(config_commands.local_config_save_command) - - -struct config_commands{ -char *global_config_load_command; -char *global_config_save_command; -char *local_config_load_command; -char *local_config_save_command; -char **config_save_data; -}; - -typedef enum { - DICTIONARY_ACTION_WIDGETS_TYPE, - DICTIONARY_IVGRAPHICALS_TYPE, +typedef enum +{ + #ifdef __GTK_H__ + DICTIONARY_GTK_WIDGETS_TYPE, + #endif DICTIONARY_OTHER_TYPE } DICT_TYPE; - -typedef struct { +typedef struct +{ char *command; int *exitcode; } thread_output; -typedef struct dictionary { +typedef struct dictionary +{ char *key; void *data; struct dictionary *next; @@ -57,26 +47,29 @@ typedef struct dictionary { DICT_TYPE data_type; } dictionary; -typedef struct apps{ - char *Name; - int Type; - char *Categories; - char *Exec; - char *Icon; - int Pluggable; - int DualPluggable; - } apps; +typedef struct apps +{ + char *Name; + int Type; + char *Categories; + char *Exec; + char *Icon; + int Pluggable; + int DualPluggable; +} apps; +// dictionary functions -//dictionary functions + +#define yon_dictionary_get_data(dictionary, type) ((type)dictionary->data) dictionary *yon_dictionary_create_empty(); -dictionary * yon_dictionary_create_conneced(dictionary *targetdict); +dictionary *yon_dictionary_create_conneced(dictionary *targetdict); dictionary *yon_dictionary_get_last(dictionary *dict); -dictionary *yon_dictionary_switch_places(dictionary *dict,int aim); +dictionary *yon_dictionary_switch_places(dictionary *dict, int aim); void yon_dictionary_make_first(dictionary *dict); @@ -94,7 +87,7 @@ dictionary *yon_dictionary_rip(dictionary *dict); dictionary *yon_dictionary_get_nth(dictionary *dict, int place); -//char functions +// char functions char *yon_char_get_augumented(char *source, char *append); @@ -104,59 +97,62 @@ 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_divide_search(char *source, char *dividepos, int delete_divider); char *yon_char_from_int(int int_to_convert); +char **yon_char_parse(char *parameters, int *size, char *divider); +char **yon_char_parsed_shrink(char **char_string, int *size, int item_to_delete); -//parsing functions - -apps *yon_apps_scan_and_parse_desktops(int *sizef); +int yon_char_parsed_check_exist(char **parameters, int size, char *param); +// parsing functions -void yon_apps_sort(apps *applist,int size); +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); +apps *yon_apps_get_by_name(apps *applist, char *name, int size); -char *yon_config_load(char *command); +char **yon_config_load(char *command, int *str_len); int yon_config_save(char *command); -//terminal-using functions +char *yon_config_get_parameter(char **parameters, int size, char *param); +char *yon_config_make_save_parameter_with_multiple_arguments(char *parameter_string, char *config_parameter, char *divider); +// terminal-using functions int yon_launch_app(char *name); - int yon_launch_app_with_arguments(char *name, char *args); - int yon_launch(thread_output *thread); -//Gtk functions +// Gtk functions #ifdef __GTK_H__ -#define yon_gtk_builder_get_widget(obj,obj2) GTK_WIDGET(gtk_builder_get_object(obj,obj2)) - +#define yon_gtk_builder_get_widget(obj, obj2) GTK_WIDGET(gtk_builder_get_object(obj, obj2)) -typedef struct { +typedef struct +{ GtkWidget *Icon; GtkWidget *Label; GtkWidget *IconView; GtkListStore *List; } expander_icon_view; - // GtkWidget *yon_gtk_app_chooser_apps_create(); // dictionary *yon_gtk_app_chooser_create(); // expander_icon_view yon_gtk_icon_view_expander_create(GtkWidget *pack, ...); +int yon_gtk_combo_box_text_find(GtkWidget *combo_box, char *text_to_find); + GtkWidget *yon_gtk_socket_create_new_with_connect(GtkWidget *container, gpointer data); int yon_gtk_icon_view_hide_empty(dictionary *icon_view_segment); @@ -164,25 +160,25 @@ int yon_gtk_icon_view_hide_empty(dictionary *icon_view_segment); int yon_dictionary_gtk_pack_start_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding); int yon_dictionary_gtk_pack_end_multiple_widgets(dictionary *dict, GtkWidget *destination, gboolean expand, gboolean fill, int padding); -//uninitialised - -void yon_on_plug_added(GtkSocket* self, gpointer user_data); -void yon_on_plug_removed(GtkSocket* self, gpointer user_data); +// uninitialised +void yon_on_plug_added(GtkSocket *self, gpointer user_data); +void yon_on_plug_removed(GtkSocket *self, gpointer user_data); #endif -typedef enum { +typedef enum +{ BACKGROUND_IMAGE_SUCCESS_TYPE, BACKGROUND_IMAGE_FAIL_TYPE } BACKGROUND_IMAGE_TYPE; #ifdef __cplusplus -#define yon_ubl_header_setup(overlay,head,image,imag_path) _yon_ubl_header_setup(GTK_WIDGET(overlay.gobj()),GTK_WIDGET(head.gobj()),GTK_WIDGET(image.gobj()),(char*)imag_path) -#define yon_ubl_status_box_render(statusbox, statusicon, statuslabel, iconname, statustext, backgroundclass) _yon_ubl_status_box_render(GTK_WIDGET(statusbox.gobj()), GTK_WIDGET(statusicon.gobj()), GTK_WIDGET(statuslabel.gobj()), (char*)iconname, (char*)statustext, backgroundclass) +#define yon_ubl_header_setup(overlay, head, image, imag_path) _yon_ubl_header_setup(GTK_WIDGET(overlay.gobj()), GTK_WIDGET(head.gobj()), GTK_WIDGET(image.gobj()), (char *)imag_path) +#define yon_ubl_status_box_render(statusbox, statusicon, statuslabel, iconname, statustext, backgroundclass) _yon_ubl_status_box_render(GTK_WIDGET(statusbox.gobj()), GTK_WIDGET(statusicon.gobj()), GTK_WIDGET(statuslabel.gobj()), (char *)iconname, (char *)statustext, backgroundclass) #else -#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_status_box_render(statusbox, statusicon, statuslabel, iconname, statustext, backgroundclass) _yon_ubl_status_box_render(statusbox, statusicon, statuslabel, iconname, statustext, backgroundclass) +#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_status_box_render(statusbox, statusicon, statuslabel, statustext, backgroundclass) _yon_ubl_status_box_render(statusbox, statusicon, statuslabel, statustext, backgroundclass) #endif void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path); -void _yon_ubl_status_box_render(GtkWidget *StatusBox, GtkWidget *StatusIcon, GtkWidget *StatusLabel, char *IconName, char* StatusText, BACKGROUND_IMAGE_TYPE BackgroundClass); +void _yon_ubl_status_box_render(GtkWidget *StatusBox, GtkWidget *StatusIcon, GtkWidget *StatusLabel, char *StatusText, BACKGROUND_IMAGE_TYPE BackgroundClass); #endif \ No newline at end of file diff --git a/ubl-settings-video.glade b/ubl-settings-video.glade index 2ee72e6..8b3dea4 100644 --- a/ubl-settings-video.glade +++ b/ubl-settings-video.glade @@ -342,6 +342,16 @@ False document-edit-symbolic + + True + False + dialog-information-symbolic + + + True + False + user-trash-symbolic + True False @@ -360,7 +370,6 @@ True False - center center 3 3 @@ -408,7 +417,7 @@ True - True + False True end image3 @@ -440,11 +449,6 @@ False process-stop-symbolic - - True - False - emblem-ok-symbolic - True False @@ -1323,6 +1327,187 @@ + + True + False + go-bottom-symbolic + + + 450 + 300 + False + com.ublinux.ubl-settings-video + + + True + False + 5 + 5 + 5 + 5 + vertical + 5 + + + True + False + 5 + + + True + True + liststore6 + 0 + True + 2 + + + + + + Package + + + + + Driver + + + + 0 + + + + + + + Description + + + + 1 + + + + + + + Supported Devices + + + + + True + True + 0 + + + + + True + False + center + vertical + 5 + + + True + True + True + image9 + + + False + True + 0 + + + + + True + True + True + image11 + + + False + True + 1 + + + + + True + True + True + image10 + + + False + True + 2 + + + + + False + True + 1 + + + + + True + True + 0 + + + + + True + False + 5 + + + + + + True + False + 5 + True + + + Close + True + True + True + image6 + + + False + True + 0 + + + + + False + True + end + 1 + + + + + False + True + 2 + + + + + @@ -1336,13 +1521,6 @@ - - - g89 - Settings - Settings - - True @@ -1435,120 +1613,6 @@ - - 450 - 300 - False - com.ublinux.ubl-settings-video - - - True - False - 5 - 5 - 5 - 5 - vertical - 5 - - - True - True - liststore6 - True - 2 - - - - - - Driver - - - - 0 - - - - - - - Description - - - - 1 - - - - - - - True - True - 0 - - - - - True - False - 5 - - - - - - True - False - 5 - True - - - Cancel - True - True - True - image6 - - - False - True - 0 - - - - - Accept - True - True - True - image7 - - - False - True - 1 - - - - - False - True - end - 1 - - - - - False - True - 1 - - - - - radiobutton True @@ -1562,33 +1626,74 @@ True com.ublinux.ubl-settings-video - + True False vertical - + True False - 5 - 5 5 5 5 5 vertical - 5 - + True False + 5 + 5 + vertical 5 - + True False - start - Monitor: + 5 + + + True + False + start + Monitor: + + + False + True + 0 + + + + + True + False + 0 + + + False + True + 1 + + + + + Main monitor + True + True + False + 15 + 15 + True + radioMainMonitor + + + False + True + 2 + + False @@ -1597,82 +1702,90 @@ - - True - False - 0 - - - False - True - 1 - - - - - Main monitor - True - True - False - 15 - 15 - True - radioMainMonitor - - - False - True - 2 - - - - - False - True - 0 - - - - - True - False - 5 - - + True False - Resolution (px): - 0 + 5 + + + True + False + Resolution (px): + 0 + + + False + True + 0 + + + + + True + False + center + 0 + + + True + True + 1 + + + + + True + False + 5 + + + True + False + Frequency (Hz) + + + False + True + 0 + + + + + True + False + center + + + False + True + 1 + + + + + False + True + 2 + + False True - 0 - - - - - True - False - center - 0 - - - True - True 1 - + True False 5 - + True False - Frequency (Hz) + Rotation + 0 False @@ -1681,17 +1794,30 @@ - + True False - center - False + True True 1 + + + True + False + + + + + + False + True + 2 + + False @@ -1699,67 +1825,29 @@ 2 - - - False - True - 1 - - - - - True - False - 5 - - - True - False - Rotation - 0 - - - False - True - 0 - - - - - True - False - - - True - True - 1 - - - + True False - - - False True - 2 + 5 False True - 2 + 0 True False + 5 5 5 @@ -1793,18 +1881,7 @@ False True - 3 - - - - - True - False - - - False - True - 5 + 1 @@ -1861,7 +1938,7 @@ False True end - 6 + 2 diff --git a/ubl-settings-video.pot b/ubl-settings-video.pot index 369eeae..5fd3d71 100644 --- a/ubl-settings-video.pot +++ b/ubl-settings-video.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-04-04 17:42+0000\n" +"POT-Creation-Date: 2023-04-05 10:05+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,154 +17,188 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: source/ubl-settings-video.c:151 -msgid "About" +#: source/ubl-settings-video.c:26 source/ubl-settings-video.c:223 +msgid "Cancel" msgstr "" -#: source/ubl-settings-video.c:143 -msgid "Automatically choose and use driver" +#: source/ubl-settings-video.c:27 +msgid "Accept" msgstr "" -#: source/ubl-settings-video.c:153 -msgid "Change" +#: source/ubl-settings-video.c:28 source/ubl-settings-video.c:386 +msgid "Driver" msgstr "" -#: source/ubl-settings-video.c:131 -msgid "Configuration method" +#: source/ubl-settings-video.c:29 +msgid "Description" msgstr "" -#: source/ubl-settings-video.c:41 -msgid "DPMS off" +#: source/ubl-settings-video.c:87 source/ubl-settings-video.c:392 +msgid "UBlinux Video Configuration" msgstr "" -#: source/ubl-settings-video.c:37 -msgid "Do not switch display off" +#: source/ubl-settings-video.c:89 +msgid "Progect Home Page" msgstr "" -#: source/ubl-settings-video.c:150 -msgid "Documentation" +#: source/ubl-settings-video.c:90 +msgid "Videocard and monitor configuration manager" msgstr "" -#: source/ubl-settings-video.c:130 -msgid "Driver" +#: source/ubl-settings-video.c:215 +msgid "Monitor: " msgstr "" -#: source/ubl-settings-video.c:136 -msgid "Extra" +#: source/ubl-settings-video.c:216 +msgid "Resolution (px): " msgstr "" -#: source/ubl-settings-video.h:16 -msgid "Failed to load global configuration" +#: source/ubl-settings-video.c:217 +msgid "Frequency (Hz): " msgstr "" -#: source/ubl-settings-video.h:17 -msgid "Failed to load local configuration" +#: source/ubl-settings-video.c:218 +msgid "Rotation: " msgstr "" -#: source/ubl-settings-video.c:129 -msgid "Failsafe driver AMD/ATI: " +#: source/ubl-settings-video.c:220 +msgid "Main monitor" msgstr "" -#: source/ubl-settings-video.c:128 -msgid "Failsafe driver nVidia: " +#: source/ubl-settings-video.c:221 +msgid "through parameter line:" msgstr "" -#: source/ubl-settings-video.c:135 -msgid "Fix frame gap (nVidia)" +#: source/ubl-settings-video.c:226 source/ubl-settings-video.c:231 +#: source/ubl-settings-video.c:233 source/ubl-settings-video.c:236 +#: source/ubl-settings-video.c:238 source/ubl-settings-video.c:258 +msgid "Default settings" msgstr "" -#: source/ubl-settings-video.c:35 -msgid "Frequency (Hz): " +#: source/ubl-settings-video.c:374 +msgid "Don't use" msgstr "" -#: source/ubl-settings-video.c:134 -msgid "Hybrid graphics" +#: source/ubl-settings-video.c:375 source/ubl-settings-video.c:377 +msgid "Off" msgstr "" -#: source/ubl-settings-video.c:125 -msgid "Launch programms through (nVidia)" +#: source/ubl-settings-video.c:376 source/ubl-settings-video.c:378 +msgid "fbdev" msgstr "" -#: source/ubl-settings-video.c:138 -msgid "Load" +#: source/ubl-settings-video.c:380 +msgid "1st variant. May cause perfomance drops in video games" msgstr "" -#: source/ubl-settings-video.c:145 -msgid "Load from global configuration" +#: source/ubl-settings-video.c:381 +msgid "2nd variant. May not work on specific video cards" msgstr "" -#: source/ubl-settings-video.c:146 -msgid "Load from local configuration" +#: source/ubl-settings-video.c:382 +msgid "Video output configuration" msgstr "" -#: source/ubl-settings-video.c:39 -msgid "Main monitor" +#: source/ubl-settings-video.c:383 +msgid "Proprietary driver: " msgstr "" -#: source/ubl-settings-video.c:141 -msgid "Manual configuration" +#: source/ubl-settings-video.c:384 +msgid "Failsafe driver nVidia: " msgstr "" -#: source/ubl-settings-video.c:132 +#: source/ubl-settings-video.c:385 +msgid "Failsafe driver AMD/ATI: " +msgstr "" + +#: source/ubl-settings-video.c:388 msgid "Monitor configuration" msgstr "" -#: source/ubl-settings-video.c:33 -msgid "Monitor: " +#: source/ubl-settings-video.c:389 +msgid "Hybrid graphics" +msgstr "" + +#: source/ubl-settings-video.c:390 +msgid "Fix frame gap (nVidia)" msgstr "" -#: source/ubl-settings-video.c:142 +#: source/ubl-settings-video.c:391 +msgid "Extra" +msgstr "" + +#: source/ubl-settings-video.c:393 +msgid "Load" +msgstr "" + +#: source/ubl-settings-video.c:394 +msgid "Save" +msgstr "" + +#: source/ubl-settings-video.c:396 msgid "On" msgstr "" -#: source/ubl-settings-video.c:127 -msgid "Proprietary driver: " +#: source/ubl-settings-video.c:397 +msgid "Automatically choose and use driver" msgstr "" -#: source/ubl-settings-video.c:34 -msgid "Resolution (px): " +#: source/ubl-settings-video.c:398 +msgid "Launch programms through optirun (nVidia): " msgstr "" -#: source/ubl-settings-video.c:36 -msgid "Rotation: " +#: source/ubl-settings-video.c:399 +msgid "Launch programs through primusun (nVidia): " msgstr "" -#: source/ubl-settings-video.c:139 -msgid "Save" +#: source/ubl-settings-video.c:400 +msgid "discrete video only (AMD/ATI)" +msgstr "" + +#: source/ubl-settings-video.c:402 +msgid "Load from global configuration" msgstr "" -#: source/ubl-settings-video.c:147 +#: source/ubl-settings-video.c:403 +msgid "Load from local configuration" +msgstr "" + +#: source/ubl-settings-video.c:404 msgid "Save to global an local configuration" msgstr "" -#: source/ubl-settings-video.c:148 +#: source/ubl-settings-video.c:405 msgid "Save to global configuration" msgstr "" -#: source/ubl-settings-video.c:149 +#: source/ubl-settings-video.c:406 msgid "Save to local configuration" msgstr "" -#: source/ubl-settings-video.h:19 -msgid "Saving to global configuration Succeeded" +#: source/ubl-settings-video.c:407 +msgid "Documentation" msgstr "" -#: source/ubl-settings-video.h:20 -msgid "Saving to local configuration Succeeded" +#: source/ubl-settings-video.c:408 +msgid "About" msgstr "" -#: source/ubl-settings-video.c:137 -msgid "UBlinux Video Configuration" +#: source/ubl-settings-video.c:438 +msgid "Configuration has been loaded" msgstr "" -#: source/ubl-settings-video.c:126 -msgid "Video output configuration" +#: source/ubl-settings-video.h:22 +msgid "Failed to load global configuration" msgstr "" -#: source/ubl-settings-video.c:133 -msgid "discrete video only (AMD/ATI)" +#: source/ubl-settings-video.h:23 +msgid "Failed to load local configuration" msgstr "" -#: source/ubl-settings-video.c:40 -msgid "through parameter line:" +#: source/ubl-settings-video.h:25 +msgid "Saving to global configuration Succeeded" +msgstr "" + +#: source/ubl-settings-video.h:26 +msgid "Saving to local configuration Succeeded" msgstr "" diff --git a/video-drivers.csv b/video-drivers.csv new file mode 100644 index 0000000..e79c785 --- /dev/null +++ b/video-drivers.csv @@ -0,0 +1,8 @@ +VERSION_ID:DRV_PAСKAGE:DRV_NAME:DRV_DESCRIPTION:DRV_SUPPORT +:ubm-nvidia-340:nvidia-340:Пакет с модулем драйвера и утилиты NVIDIA 340xx:Драйвер видеокарт nVidia серий 8XXX, 9XXX, 1XX, 2XX, 3XX, 4XX, 5XX, 6XX, 7XX +:ubm-nvidia-390:nvidia-390:Пакет с модулем драйвера и утилиты NVIDIA 390xx:Драйвер видеокарт nVidia серий 4XX, 5XX, 6XX, 7XX, 9XX, 10XX +:ubm-nvidia-430:nvidia-430:Пакет с модулем включает в себя драйвер NVIDIA 430xx и утилиты:Драйвер видеокарт nVidia серий 6XX, 7XX, 9XX, 10XX, 16XX +:ubm-nvidia-470:nvidia-470:Пакет с модулем драйвера и утилиты NVIDIA 470xx:Драйвер видеокарт nVidia серий NVS, Quadro Sync, Quadro NVS, Quadro Blade/Embedded, Quadro, Quadro RTX, NVIDIA RTX +:ubm-nvidia-510:nvidia-510:Пакет с модулем драйвера и утилиты NVIDIA 510xx:Драйвер видеокарт nVidia серий NVS, Quadro Sync, Quadro NVS, Quadro Blade/Embedded, Quadro, Quadro RTX, NVIDIA RTX +:ubm-nvidia-515:nvidia-515:Пакет с модулем драйвера и утилиты NVIDIA 515xx:Драйвер видеокарт nVidia серий NVS, Quadro Sync, Quadro NVS, Quadro Blade/Embedded, Quadro, Quadro RTX, NVIDIA RTX +:ubm-nvidia-optimus:nvidia-optimus:Пакет с модулем включает в себя NVIDIA Optimus: