Main interactions done, proprietary drivers management in process

pull/6/head^2
parent 58f8eb3cde
commit b67c090ed4

1
.gitignore vendored

@ -5,3 +5,4 @@ ubl-settings-video.glade~
compile/ compile/
ubl-settings-video_ru.po~ ubl-settings-video_ru.po~
ubl-settings-video-n.pot ubl-settings-video-n.pot
vgcore.*

@ -25,6 +25,7 @@ all: init build
init: init:
@echo "Initialize ..."; \ @echo "Initialize ..."; \
sed -r "s/(version_application = ).*/\1\"$$(grep 'VERSION' ${FILE_VERSION} | cut -d" " -f2)\";/" -i source/ubl-settings-video.h; \ 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}" echo "-- Build path: ${CMAKE_BUILD_DIR}"
depend: depend:

@ -17,9 +17,8 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic -Wall -Wextra -Werror -Wmissin
set(SOURCE_FILES set(SOURCE_FILES
ubl-settings-video.c ubl-settings-video.c
ubl-settings-video.h
ubl-utils.c ubl-utils.c
ubl-utils.h) )
set(LIBRARIES set(LIBRARIES
${GTK_LIBRARIES} ${GTK_LIBRARIES}

@ -1,44 +1,110 @@
#include "ubl-settings-video.h" #include "ubl-settings-video.h"
#include "ubl-utils.h"
config videoconfig; 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)); gtk_widget_destroy(gtk_widget_get_toplevel(self));
} }
void on_proprietary_driver_window_open(GtkWidget *self){ void on_save_window_configuration(GtkWidget *self, MonitorSettings *monitor){
GtkBuilder *builder=gtk_builder_new_from_file(glade_path); char *freq=NULL;
GtkWidget *window=yon_gtk_builder_get_widget(builder,"ProprietaryDriverChooseWindow"); char *res=NULL;
GtkWidget *closeButton=yon_gtk_builder_get_widget(builder,"ProprietaryCloseButton"); char *rot=NULL;
GtkWidget *acceptButton=yon_gtk_builder_get_widget(builder,"ProprietaryAcceptButton"); char *entr=NULL;
GtkWidget *columnDriver=yon_gtk_builder_get_widget(builder,"ProprietaryDriverColumn"); char *def=NULL;
GtkWidget *columnDescription=yon_gtk_builder_get_widget(builder,"ProprietaryDescriptionColumn"); def=_("Default settings");
gtk_button_set_label(GTK_BUTTON(closeButton),_("Cancel")); if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(monitor->templateMonitorConfigurationMainRadio))==1)
gtk_button_set_label(GTK_BUTTON(acceptButton),_("Accept")); yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->main=1;
gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(columnDriver),_("Driver")); if (strcmp((freq=yon_char_new((char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(monitor->templateMonitorConfigurationFrequencyCombo)))),def)!=0)
gtk_tree_view_column_set_title(GTK_TREE_VIEW_COLUMN(columnDescription),_("Description")); yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->frequency=freq;
gtk_widget_show(window); else yon_dictionary_get_data(monitor->curconfig,monitorconfig*)->frequency=NULL;
g_signal_connect(G_OBJECT(closeButton), "clicked", G_CALLBACK(on_close_subwindow), 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){ void on_sensitive_change_reversed(GtkWidget *self, GtkWidget *toggle)
{
int state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); int state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self));
gtk_widget_set_sensitive(toggle,state); gtk_widget_set_sensitive(toggle, !state);
} }
void on_auto_choose_drivers(GtkWidget *self, widgets_dict *widgets){ void on_auto_choose_drivers(GtkWidget *self, widgets_dict *widgets)
{
int state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); int state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self));
gtk_widget_set_sensitive(widgets->mainDriverFailsafeNvidiaLabel, !state); gtk_widget_set_sensitive(widgets->mainDriverFailsafeNvidiaLabel, !state);
@ -50,37 +116,188 @@ void on_auto_choose_drivers(GtkWidget *self, widgets_dict *widgets){
gtk_widget_set_sensitive(widgets->mainDriverFailsafeNvidiaCombo, !state); gtk_widget_set_sensitive(widgets->mainDriverFailsafeNvidiaCombo, !state);
} }
void on_closed_configuration(GtkWidget *self, MonitorSettings *monitors){ void on_closed_configuration(GtkWidget *self, MonitorSettings *monitors)
{
gtk_widget_destroy(monitors->templateMonitorConfigurationWindow); 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;
}
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_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_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_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_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, "]"))));
} }
void on_save_configuration_global(GtkWidget *self){ 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_load_configuration_local(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, "]"))));
} }
void on_load_configuration_global(GtkWidget *self){ 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);
}
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{
void on_accept_monitor_settings(GtkWidget *self){ 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;
} }
void on_check_optisun(GtkWidget *self){ yon_monitor_set_resolutions(dct);
} }
void on_check_primusrun(GtkWidget *self){ 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,"*")));
} }
void on_check_discrete_only(GtkWidget *self){ 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(){ void on_about()
{
GtkBuilder *builder = gtk_builder_new_from_file(glade_path); GtkBuilder *builder = gtk_builder_new_from_file(glade_path);
GtkWidget *window = yon_gtk_builder_get_widget(builder, "aboutWindow"); GtkWidget *window = yon_gtk_builder_get_widget(builder, "aboutWindow");
GtkWidget *hideButtonBox = yon_gtk_builder_get_widget(builder, "buttonBoxHide"); GtkWidget *hideButtonBox = yon_gtk_builder_get_widget(builder, "buttonBoxHide");
@ -90,102 +307,227 @@ void on_about(){
gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window), _("Videocard and monitor configuration manager")); gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(window), _("Videocard and monitor configuration manager"));
gtk_widget_set_visible(hideButtonBox, 0); gtk_widget_set_visible(hideButtonBox, 0);
gtk_widget_show(window); 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;i<size;i++){
if (yon_char_get_if_resolution(rtn[i])==1)
yon_dictionary_get_data(monitor,monitorconfig*)->resolution=yon_char_new(rtn[i]);
}
}
void on_config_fill_interface(widgets_dict *widgets)
{
gtk_widget_grab_focus(widgets->mainHeaderSettingsButton);
char *str = videoconfig.optirun;
gtk_entry_set_text(GTK_ENTRY(widgets->mainExtraLaunchOptirunEntry), "");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->mainExtraLaunchOptirunCheck), 0);
if (str)
{
yon_char_divide_search((str = yon_char_new(videoconfig.optirun)), "=", 1);
gtk_entry_set_text(GTK_ENTRY(widgets->mainExtraLaunchOptirunEntry), str);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->mainExtraLaunchOptirunCheck), 1);
}
str = videoconfig.primusrun;
gtk_entry_set_text(GTK_ENTRY(widgets->mainExtraLaunchPrismusunEntry), "");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->mainExtraLaunchPrismusunCheck), 0);
if (str)
{
yon_char_divide_search((str = yon_char_new(videoconfig.primusrun)), "=", 1);
gtk_entry_set_text(GTK_ENTRY(widgets->mainExtraLaunchPrismusunEntry), str);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widgets->mainExtraLaunchPrismusunCheck), 1);
}
gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->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;driv<size;driv++){
char *drivr=yon_char_divide_search(rtn[driv],"\n",-1);
printf("%s\n",drivr);
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverProprietaryDriverCombo),drivr);
} }
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverProprietaryDriverCombo), 0);
gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo));
void yon_parse_monitor(dictionary *monitor,char *string_of_settings){ str = videoconfig.failsafenVidia;
char *result=NULL; gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo), _("Don't use"));
if ((strstr(string_of_settings,","))){ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->mainDriverFailsafeNvidiaCombo), _("fbdev"));
result=yon_char_divide_search(string_of_settings,",",1); if (str)
((monitorconfig*)monitor->data)->resolution=result; {
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverFailsafeNvidiaCombo), 1);
} }
char *tmp=NULL; else
if (tmp=strstr(string_of_settings,"rotate:")) ((monitorconfig*)monitor->data)->rotation=tmp; 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;i<size;i++){
rtn[i] = yon_char_divide_search(rtn[i],"\n",-1);
if (i==0) videoconfig.proprietary=yon_dictionary_create_with_data(rtn[i],rtn[i]);
else videoconfig.proprietary=yon_dictionary_create_with_data_connected(videoconfig.proprietary,rtn[i],rtn[i]);
}
}
void yon_gtk_list_store_fill_with_proprietaries(GtkListStore *list){
dictionary *dict=NULL;
for_dictionaries(dict,videoconfig.proprietary){
GtkTreeIter iter;
gtk_list_store_append(list,&iter);
gtk_list_store_set(list,&iter,0,dict->key,1,(char*)dict->data,-1);
}
} }
void yon_setup_config(){ void yon_setup_config()
{
FILE *videoports = popen(get_ports_command, "r"); FILE *videoports = popen(get_ports_command, "r");
char str[1000]; char str[1000];
while (fgets(str,1000,videoports)){ while (fgets(str, 1000, videoports))
{
printf("%s\n", str); printf("%s\n", str);
char *strng = yon_char_divide_search(str, "\n", 0); char *strng = yon_char_divide_search(str, "\n", 0);
monitorconfig *monitor = NULL; monitorconfig *monitor = NULL;
monitor = malloc(sizeof(monitorconfig)); monitor = malloc(sizeof(monitorconfig));
monitor->port = yon_char_new(strng); monitor->port = yon_char_new(strng);
if (!videoconfig.monitors) { monitor->frequency=NULL;
videoconfig.monitors=yon_dictionary_create_with_data(strng,monitor);} monitor->frequency=NULL;
else { 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); videoconfig.monitors = yon_dictionary_create_with_data_connected(videoconfig.monitors, strng, monitor);
} }
memset(str, 0, 1000); memset(str, 0, 1000);
} }
int size = 0;
char *command = load_drivers_local_command; char *command = load_drivers_local_command;
dictionary *dct; dictionary *dct;
for_dictionaries(dct,videoconfig.monitors){ 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, "]")))); 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 **rtn = yon_ubl_load_global_config(command, &size);
char result[1000]; char *param = NULL;
memset(result,0,1000);
if (fgets(result,1000,local)&&strcmp(result,"(null)\n")!=0) yon_config_init(rtn, size);
videoconfig.failsafenVidia=result; // on_config_fill_interface(widgets);
else if (strcmp(result,"")==0) { yon_default_configs(); return; } // (param=yon_config_get_parameter(rtn,size,"OPTIRUN"))
else videoconfig.failsafenVidia=NULL; if ((param = yon_config_get_parameter(rtn, size, "FAILSAFENVIDIA")))
memset(result,0,1000); videoconfig.failsafenVidia = yon_char_new(param);
if (fgets(result,1000,local)&&strcmp(result,"(null)\n")!=0) else
videoconfig.failsafeATI=result; videoconfig.failsafenVidia = NULL;
else videoconfig.failsafeATI=NULL; if ((param = yon_config_get_parameter(rtn, size, "FAILSAFEATI")))
memset(result,0,1000); videoconfig.failsafeATI = yon_char_new(param);
if (fgets(result,1000,local)&&strcmp(result,"(null)\n")!=0) else
videoconfig.optirun=result; videoconfig.failsafeATI = NULL;
else videoconfig.optirun=NULL; if ((param = yon_config_get_parameter(rtn, size, "OPTIRUN")))
memset(result,0,1000); videoconfig.optirun = yon_char_new(param);
if (fgets(result,1000,local)&&strcmp(result,"(null)\n")!=0) else
videoconfig.primusrun=result; videoconfig.optirun = NULL;
else videoconfig.primusrun=NULL; if ((param = yon_config_get_parameter(rtn, size, "PRIMUSRUN")))
for_dictionaries(dct,videoconfig.monitors){ videoconfig.primusrun = yon_char_new(param);
fgets(result,1000,local); else
if (strcmp(result,"(null)\n")!=0||strcmp(result,"")!=0){ videoconfig.primusrun = NULL;
char *curmonitor=strstr(result,"=")+1;
yon_parse_monitor(dct,curmonitor); 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)
void on_apps_chooser_open (GtkWidget *self,widgets_dict *widgets, int mode){ {
GtkBuilder *builder=gtk_builder_new_from_file(glade_path);\ yon_parse_monitor(dct, param);
// FILE *output=popen(""); }
}
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("");
printf("not implemented yet\n"); printf("not implemented yet\n");
} }
void yon_fill_ui(widgets_dict *widgets){ driver_window *on_driver_window_open(GtkWidget *self, GtkWidget *comboe)
if (!videoconfig.proprietary||strstr(videoconfig.proprietary,"\n")==0) {
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverProprietaryDriverCombo),0); GtkBuilder *builder = gtk_builder_new_from_file(glade_path);
driver_window *widgets = NULL;
if (!videoconfig.failsafenVidia||strstr(videoconfig.failsafenVidia,"\n")==0) widgets = malloc(sizeof(driver_window));
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverFailsafeNvidiaCombo),0); widgets->window = yon_gtk_builder_get_widget(builder, "ProprietaryDriverChooseWindow");
if (!videoconfig.failsafeATI||strstr(videoconfig.failsafeATI,"\n")==0) widgets->propriearyTreeView = yon_gtk_builder_get_widget(builder, "propriearyTreeView");
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainDriverFailsafeAMDCombo),0); widgets->ProprietaryDriverColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder, "ProprietaryDriverColumn"));
widgets->ProprietaryDescriptionColumn = GTK_TREE_VIEW_COLUMN(gtk_builder_get_object(builder, "ProprietaryDescriptionColumn"));
if (!videoconfig.optirun||strstr(videoconfig.optirun,"\n")==0)
gtk_entry_set_text(GTK_ENTRY(widgets->mainExtraLaunchOptirunEntry),videoconfig.optirun); widgets->ProprietaryCloseButton = yon_gtk_builder_get_widget(builder, "ProprietaryCloseButton");
widgets->ProprietaryAcceptButton = yon_gtk_builder_get_widget(builder, "ProprietaryAcceptButton");
if (!videoconfig.primusrun||strstr(videoconfig.primusrun,"\n")==0) if(!videoconfig.list)
gtk_entry_set_text(GTK_ENTRY(widgets->mainExtraLaunchPrismusunEntry),videoconfig.primusrun); videoconfig.list = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore6"));
gtk_list_store_clear(videoconfig.list);
if (videoconfig.gapfix==0) yon_gtk_list_store_fill_with_proprietaries(videoconfig.list);
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->mainExtraFixGapCombo),0); 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"));
void on_confugure_monitor_settings(GtkWidget *self, MonitorSettings *settings){ 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(); int monitors_n = yon_check_for_monitors();
MonitorSettings *monitors = NULL; MonitorSettings *monitors = NULL;
monitors = malloc(sizeof(MonitorSettings)); monitors = malloc(sizeof(MonitorSettings));
@ -206,11 +548,13 @@ void on_confugure_monitor_settings(GtkWidget *self, MonitorSettings *settings){
monitors->templateMonitorConfigurationDoNotSwitchOffCheck = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationDoNotSwitchOffCheck")); monitors->templateMonitorConfigurationDoNotSwitchOffCheck = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationDoNotSwitchOffCheck"));
monitors->templateMonitorConfigurationCancelButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationCancelButton")); monitors->templateMonitorConfigurationCancelButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationCancelButton"));
monitors->templateMonitorConfigurationSaveButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorConfigurationSaveButton")); 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->templateMonitorConfigurationCancelButton), "clicked", G_CALLBACK(on_closed_configuration), monitors);
// g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationSaveButton), "clicked", G_CALLBACK(on_save_configuration), monitors); g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationSaveButton), "clicked", G_CALLBACK(on_save_window_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->templateMonitorConfigurationMonitorLabel), _("Monitor: "));
gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationResolutionLabel), _("Resolution (px): ")); gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationResolutionLabel), _("Resolution (px): "));
@ -219,32 +563,51 @@ void on_confugure_monitor_settings(GtkWidget *self, MonitorSettings *settings){
// gtk_label_set_text(GTK_LABEL(monitors->templateMonitorConfigurationDoNotSwitchOffLabel),_("Do not switch display off")); // 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->templateMonitorConfigurationMainRadio), _("Main monitor"));
gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationParameterLineCheck), _("through parameter line:")); 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->templateMonitorConfigurationCancelButton), _("Cancel"));
gtk_widget_show(monitors->templateMonitorConfigurationWindow); gtk_widget_show(monitors->templateMonitorConfigurationWindow);
char *addln = NULL; char *addln = NULL;
if (!settings->curconfig||!((monitorconfig*)settings->curconfig->data)->resolution) addln=_("Default settings"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(monitors->templateMonitorConfigurationMainRadio),((monitorconfig*)settings->curconfig->data)->main);
else addln=((monitorconfig*)settings->curconfig->data)->resolution;
addln = _("Default settings");
int chosen=-1;
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationResolutionCombo), addln); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationResolutionCombo), addln);
gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationResolutionCombo), 0); gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationResolutionCombo), 0);
if (!settings->curconfig||!((monitorconfig*)settings->curconfig->data)->frequency) addln=_("Default settings"); 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_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationFrequencyCombo), _("Default settings"));
gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationFrequencyCombo), 0); gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationFrequencyCombo), 0);
if (!settings->curconfig||!((monitorconfig*)settings->curconfig->data)->rotation) addln=_("Default settings"); 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_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); gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationRotationCombo), 0);
if (yon_dictionary_get_data(settings->curconfig,monitorconfig*)->resolutionCapabilities)
for (int res=0;res<yon_dictionary_get_data(settings->curconfig,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(){ MonitorSettings *yon_setup_monitor_settings()
{
int monitors_n = yon_check_for_monitors(); int monitors_n = yon_check_for_monitors();
MonitorSettings *monitors = NULL; MonitorSettings *monitors = NULL;
monitors = malloc(sizeof(MonitorSettings) * monitors_n); monitors = malloc(sizeof(MonitorSettings) * monitors_n);
// videoconfig.videoconfig=videoconfig.videoconfig->first; // videoconfig.videoconfig=videoconfig.videoconfig->first;
for (int i=0;i<monitors_n;i++){ for (int i = 0; i < monitors_n; i++)
{
GtkBuilder *builder = gtk_builder_new_from_file(glade_path); GtkBuilder *builder = gtk_builder_new_from_file(glade_path);
monitors[i].templateMonitorscreenOverlay = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorscreenOverlay")); monitors[i].templateMonitorscreenOverlay = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorscreenOverlay"));
monitors[i].templateMonitorInfoBox = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoBox")); monitors[i].templateMonitorInfoBox = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoBox"));
@ -253,42 +616,88 @@ MonitorSettings *yon_setup_monitor_settings(){
monitors[i].templateMonitorInfoConfigureButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoConfigureButton")); monitors[i].templateMonitorInfoConfigureButton = GTK_WIDGET(gtk_builder_get_object(builder, "templateMonitorInfoConfigureButton"));
monitors[i].curconfig = yon_dictionary_get_nth(videoconfig.monitors, i); monitors[i].curconfig = yon_dictionary_get_nth(videoconfig.monitors, i);
printf("%d\n", 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)); 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, ""); char *res = yon_char_get_augumented(((monitorconfig *)monitors[i].curconfig->data)->resolution, "");
if (!res) res=_("Default settings"); if (!res)
res = _("Default settings");
gtk_label_set_text(GTK_LABEL(monitors[i].templateMonitorInfoResolutionLabel), res); gtk_label_set_text(GTK_LABEL(monitors[i].templateMonitorInfoResolutionLabel), res);
gtk_overlay_add_overlay(GTK_OVERLAY(monitors[i].templateMonitorscreenOverlay), monitors[i].templateMonitorInfoBox); 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]); g_signal_connect(G_OBJECT(monitors[i].templateMonitorInfoConfigureButton), "clicked", G_CALLBACK(on_confugure_monitor_settings), &monitors[i]);
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) if (videoconfig.monitors->next)
videoconfig.monitors = videoconfig.monitors->next; videoconfig.monitors = videoconfig.monitors->next;
} }
return monitors; return monitors;
} }
int yon_check_for_monitors(){ 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(); GdkScreen *screen = gdk_screen_get_default();
int monitors = gdk_display_get_n_monitors(gdk_screen_get_display(screen)); int monitors = gdk_display_get_n_monitors(gdk_screen_get_display(screen));
return monitors; return monitors;
} }
dictionary *yon_dictionary_pack_monitors(MonitorSettings *monitors, int size){ dictionary *yon_dictionary_pack_monitors(MonitorSettings *monitors, int size)
{
dictionary *dict = yon_dictionary_create_with_data("0", monitors[0].templateMonitorConfigurationBox); dictionary *dict = yon_dictionary_create_with_data("0", monitors[0].templateMonitorConfigurationBox);
for (int i=1;i<size;i++){ for (int i = 1; i < size; i++)
{
dict = yon_dictionary_create_with_data_connected(dict, yon_char_from_int(i), monitors[i].templateMonitorConfigurationBox); dict = yon_dictionary_create_with_data_connected(dict, yon_char_from_int(i), monitors[i].templateMonitorConfigurationBox);
} }
return dict; return dict;
} }
dictionary *yon_dictionary_pack_overlays(MonitorSettings *monitors, int size){ dictionary *yon_dictionary_pack_overlays(MonitorSettings *monitors, int size)
{
dictionary *dict = yon_dictionary_create_with_data("0", monitors[0].templateMonitorscreenOverlay); dictionary *dict = yon_dictionary_create_with_data("0", monitors[0].templateMonitorscreenOverlay);
for (int i=1;i<size;i++){ for (int i = 1; i < size; i++)
{
dict = yon_dictionary_create_with_data_connected(dict, yon_char_from_int(i), monitors[i].templateMonitorscreenOverlay); dict = yon_dictionary_create_with_data_connected(dict, yon_char_from_int(i), monitors[i].templateMonitorscreenOverlay);
} }
return dict; return dict;
} }
void yon_setup_widgets(widgets_dict *widgets){ 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->builder = gtk_builder_new_from_file(glade_path);
widgets->appsPackWindow = yon_gtk_builder_get_widget(widgets->builder, "appsPackWindow"); widgets->appsPackWindow = yon_gtk_builder_get_widget(widgets->builder, "appsPackWindow");
widgets->appsPackBox = yon_gtk_builder_get_widget(widgets->builder, "appsPackBox"); widgets->appsPackBox = yon_gtk_builder_get_widget(widgets->builder, "appsPackBox");
@ -365,11 +774,19 @@ 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->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->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->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->extraPrimusunChooseAppsButton), "clicked", G_CALLBACK(on_apps_chooser_open), widgets);
g_signal_connect(G_OBJECT(widgets->mainHeaderSettingsAboutMenuItem), "activate", G_CALLBACK(on_about), NULL); g_signal_connect(G_OBJECT(widgets->mainHeaderSettingsAboutMenuItem), "activate", G_CALLBACK(on_about), NULL);
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->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), _("Off"));
@ -406,21 +823,20 @@ void yon_setup_widgets(widgets_dict *widgets){
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSaveLocalMenuItem), _("Save to local 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->mainHeaderSettingsDocumentationMenuItem), _("Documentation"));
gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSettingsAboutMenuItem), _("About")); gtk_menu_item_set_label(GTK_MENU_ITEM(widgets->mainHeaderSettingsAboutMenuItem), _("About"));
// gtk_button_set_label(GTK_BUTTON(widgets->mainExtraLaunchThroughButton),_("Change")); // 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_overlay_add_overlay(GTK_OVERLAY(widgets->mainHeadOverlay),widgets->headBox);
// gtk_image_set_from_file(GTK_IMAGE(widgets->mainHeadBackgroundImage),banner_path); // gtk_image_set_from_file(GTK_IMAGE(widgets->mainHeadBackgroundImage),banner_path);
MonitorSettings *monitors = yon_setup_monitor_settings(); MonitorSettings *monitors = yon_setup_monitor_settings();
videoconfig.monitors=yon_dictionary_pack_monitors(monitors,yon_check_for_monitors()); // videoconfig.monitors=yon_dictionary_pack_monitors(monitors,yon_check_for_monitors());
widgets->overlays = yon_dictionary_pack_overlays(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->overlays, widgets->mainMonitorVisualConfigurationBox, 0, 0, 0);
// yon_dictionary_gtk_pack_start_multiple_widgets(widgets->monitors,widgets->mainMonitorConfigurationBox,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, ""); local = setlocale(LC_ALL, "");
textdomain(LocaleName); textdomain(LocaleName);
@ -429,13 +845,13 @@ int main(int argc, char *argv[]){
GError error; GError error;
// xfconf_init (&error); // xfconf_init (&error);
// display_channel = xfconf_channel_new ("displays"); // display_channel = xfconf_channel_new ("displays");
videoconfig.applist=yon_apps_scan_and_parse_desktops(&videoconfig.appsize);
yon_setup_config(); yon_setup_config();
widgets_dict widgets; widgets_dict widgets;
yon_setup_widgets(&widgets); yon_setup_widgets(&widgets);
gtk_widget_show(widgets.MainWindow); gtk_widget_show(widgets.MainWindow);
yon_fill_ui(&widgets); // 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); 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(); GtkCssProvider *css = gtk_css_provider_new();
gtk_css_provider_load_from_path(css, CssPath, NULL); gtk_css_provider_load_from_path(css, CssPath, NULL);
gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), gtk_style_context_add_provider_for_screen(gdk_screen_get_default(),

@ -27,15 +27,26 @@
#define get_ports_command "xrandr |grep -E \"^[A-Z0-9]* connected\" |cut -d' ' -f1" #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_command "/usr/bin/ubconfig --default --source "
#define load_drivers_global_command "/usr/bin/ubconfig --default --source global get video FAILSAFENVIDIA FAILSAFEATI OPTIRUN PRIMUSRUN " #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 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 "
#define remove_drivers_global_command "/usr/bin/ubconfig --target system remove video "
#define remove_drivers_local_command "/usr/bin/ubconfig --target global remove video "
char *local; char *local;
@ -43,15 +54,15 @@ typedef char* string;
string version_application = "1.0"; string version_application = "1.0";
#define _(String) gettext(String) #define _(String) gettext(String)
typedef struct { typedef struct
{
int autoChooseDrivers; int autoChooseDrivers;
dictionary *videoconfig; dictionary *videoconfig;
dictionary *monitors; dictionary *monitors;
char *proprietary; dictionary *proprietary;
GtkListStore *list;
char *failsafenVidia; char *failsafenVidia;
char *failsafeATI; char *failsafeATI;
int descreteOnly; int descreteOnly;
@ -59,20 +70,27 @@ typedef struct {
char *primusrun; char *primusrun;
int gapfix; int gapfix;
int optiorprimus; int optiorprimus;
apps *applist;
int appsize;
} config; } config;
typedef struct {
typedef struct
{
int main; int main;
char *port; char *port;
char *resolution; char *resolution;
char *resolutionCapabilities; char **resolutionCapabilities;
char *frequency; char *frequency;
char *rotation; char *rotation;
char *stringparameters; char *stringparameters;
int resolution_size;
} monitorconfig; } monitorconfig;
typedef struct { typedef struct {
GtkWidget *combo;
GtkWidget *tree;
} combo_tree;
typedef struct
{
dictionary *monitors; dictionary *monitors;
dictionary *overlays; dictionary *overlays;
GtkBuilder *builder; GtkBuilder *builder;
@ -145,7 +163,8 @@ typedef struct {
GtkWidget *templateMonitorConfigurationDoNotSwitchOffCheck; GtkWidget *templateMonitorConfigurationDoNotSwitchOffCheck;
} widgets_dict; } widgets_dict;
typedef struct { typedef struct
{
GtkWidget *templateMonitorConfigurationWindow; GtkWidget *templateMonitorConfigurationWindow;
GtkWidget *templateMonitorConfigurationBox; GtkWidget *templateMonitorConfigurationBox;
GtkWidget *templateMonitorConfigurationMonitorLabel; GtkWidget *templateMonitorConfigurationMonitorLabel;
@ -171,8 +190,18 @@ typedef struct {
dictionary *curconfig; dictionary *curconfig;
} MonitorSettings; } MonitorSettings;
typedef struct
{
GtkWidget *window;
GtkWidget *propriearyTreeView;
GtkTreeViewColumn *ProprietaryDriverColumn;
GtkTreeViewColumn *ProprietaryDescriptionColumn;
GtkListStore *list;
GtkWidget *ProprietaryCloseButton;
GtkWidget *ProprietaryAcceptButton;
} driver_window;
int yon_check_for_monitors(); int yon_check_for_monitors();
MonitorSettings *yon_setup_monitor_settings(); 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); dictionary *yon_dictionary_pack_overlays(MonitorSettings *monitors, int size);
void on_closed_configuration(GtkWidget *self, MonitorSettings *monitors); void on_closed_configuration(GtkWidget *self, MonitorSettings *monitors);
void on_save_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 #endif

@ -1,14 +1,16 @@
#include "ubl-utils.h" #include "ubl-utils.h"
#ifndef UBL_UTILS #ifndef UBL_UTILS
typedef enum { typedef enum
{
DICTIONARY_ACTION_WIDGETS_TYPE, DICTIONARY_ACTION_WIDGETS_TYPE,
DICTIONARY_IVGRAPHICALS_TYPE, DICTIONARY_IVGRAPHICALS_TYPE,
DICTIONARY_OTHER_TYPE DICTIONARY_OTHER_TYPE
} DICT_TYPE; } DICT_TYPE;
typedef struct dictionary { typedef struct dictionary
{
char *key; char *key;
void *data; void *data;
struct dictionary *next; struct dictionary *next;
@ -17,7 +19,8 @@ typedef struct dictionary {
DICT_TYPE data_type; DICT_TYPE data_type;
} dictionary; } dictionary;
typedef struct apps{ typedef struct apps
{
char *Name; char *Name;
int Type; int Type;
char *Categories; char *Categories;
@ -27,13 +30,15 @@ typedef struct apps{
int DualPluggable; int DualPluggable;
} apps; } apps;
typedef struct { typedef struct
{
char *command; char *command;
int *exitcode; int *exitcode;
} thread_output; } thread_output;
#ifdef __GTK_H__ #ifdef __GTK_H__
typedef struct IVGrapgicals{ typedef struct IVGrapgicals
{
char *sectionName; char *sectionName;
char *categories; char *categories;
GtkListStore *LV; GtkListStore *LV;
@ -46,14 +51,14 @@ typedef struct IVGrapgicals{
#endif #endif
#endif #endif
// dictionary functions // dictionary functions
/** /**[EN]
* yon_dictionary_create_empty: * yon_dictionary_create_empty():
* Creates and returns empty dictionary * Creates and returns empty dictionary
*/ */
dictionary *yon_dictionary_create_empty(){ dictionary *yon_dictionary_create_empty()
{
dictionary *dict = malloc(sizeof(dictionary)); dictionary *dict = malloc(sizeof(dictionary));
dict->data = NULL; dict->data = NULL;
dict->key = NULL; dict->key = NULL;
@ -64,12 +69,16 @@ dictionary *yon_dictionary_create_empty(){
return dict; return dict;
} }
void yon_dictionary_switch_to_last(dictionary **dict){ void yon_dictionary_switch_to_last(dictionary **dict)
{
if ((*dict)->next != NULL) if ((*dict)->next != NULL)
for ((*dict)=(*dict)->first;(*dict)->next!=NULL;(*dict)=(*dict)->next){} for ((*dict) = (*dict)->first; (*dict)->next != NULL; (*dict) = (*dict)->next)
{
}
} }
dictionary * yon_dictionary_create_conneced(dictionary *targetdict){ dictionary *yon_dictionary_create_conneced(dictionary *targetdict)
{
targetdict = yon_dictionary_get_last(targetdict); targetdict = yon_dictionary_get_last(targetdict);
targetdict->next = yon_dictionary_create_empty(); targetdict->next = yon_dictionary_create_empty();
targetdict->next->prev = targetdict; targetdict->next->prev = targetdict;
@ -78,25 +87,35 @@ dictionary * yon_dictionary_create_conneced(dictionary *targetdict){
return targetdict->next; return targetdict->next;
} }
dictionary *yon_dictionary_get_last(dictionary *dict){ dictionary *yon_dictionary_get_last(dictionary *dict)
{
dictionary *dct = NULL; dictionary *dct = NULL;
for (dct=dict->first;dct->next!=NULL;dct=dct->next){} for (dct = dict->first; dct->next != NULL; dct = dct->next)
{
}
return dct; return dct;
} }
dictionary *yon_dictionary_switch_places(dictionary *dict,int aim){ dictionary *yon_dictionary_switch_places(dictionary *dict, int aim)
if (aim<0){ {
if (dict->prev){ if (aim < 0)
if (dict->prev->prev){ {
if (dict->prev)
{
if (dict->prev->prev)
{
dictionary *next = dict->next, *prev = dict->prev, *preprev = prev->prev; dictionary *next = dict->next, *prev = dict->prev, *preprev = prev->prev;
if (next){ if (next)
{
preprev->next = dict; preprev->next = dict;
dict->prev = preprev; dict->prev = preprev;
dict->next = prev; dict->next = prev;
prev->prev = dict; prev->prev = dict;
prev->next = next; prev->next = next;
next->prev = prev; next->prev = prev;
} else { }
else
{
preprev->next = dict; preprev->next = dict;
dict->prev = preprev; dict->prev = preprev;
dict->next = prev; dict->next = prev;
@ -104,16 +123,21 @@ dictionary *yon_dictionary_switch_places(dictionary *dict,int aim){
prev->next = NULL; prev->next = NULL;
} }
return prev; return prev;
} else { }
else
{
dictionary *next = dict->next, *prev = dict->prev; dictionary *next = dict->next, *prev = dict->prev;
if (next){ if (next)
{
yon_dictionary_make_first(dict); yon_dictionary_make_first(dict);
dict->prev = NULL; dict->prev = NULL;
dict->next = prev; dict->next = prev;
prev->prev = dict; prev->prev = dict;
prev->next = next; prev->next = next;
next->prev = prev; next->prev = prev;
} else { }
else
{
dict->prev = NULL; dict->prev = NULL;
dict->next = prev; dict->next = prev;
prev->prev = dict; prev->prev = dict;
@ -122,18 +146,25 @@ dictionary *yon_dictionary_switch_places(dictionary *dict,int aim){
return prev; return prev;
} }
} }
} else if (aim>0){ }
if (dict->next){ else if (aim > 0)
if (dict->next->next){ {
if (dict->next)
{
if (dict->next->next)
{
dictionary *next = dict->next, *prev = dict->prev, *afnext = next->next; dictionary *next = dict->next, *prev = dict->prev, *afnext = next->next;
if (prev){ if (prev)
{
prev->next = next; prev->next = next;
next->prev = prev; next->prev = prev;
next->next = dict; next->next = dict;
dict->prev = next; dict->prev = next;
dict->next = afnext; dict->next = afnext;
afnext->prev = dict; afnext->prev = dict;
} else { }
else
{
yon_dictionary_make_first(next); yon_dictionary_make_first(next);
next->prev = NULL; next->prev = NULL;
next->next = dict; next->next = dict;
@ -142,15 +173,20 @@ dictionary *yon_dictionary_switch_places(dictionary *dict,int aim){
afnext->prev = dict; afnext->prev = dict;
} }
return next; return next;
} else { }
else
{
dictionary *next = dict->next, *prev = dict->prev; dictionary *next = dict->next, *prev = dict->prev;
if (prev){ if (prev)
{
prev->next = next; prev->next = next;
next->prev = prev; next->prev = prev;
next->next = dict; next->next = dict;
dict->prev = next; dict->prev = next;
dict->next = NULL; dict->next = NULL;
} else { }
else
{
next->prev = NULL; next->prev = NULL;
next->next = dict; next->next = dict;
dict->prev = next; dict->prev = next;
@ -161,15 +197,24 @@ dictionary *yon_dictionary_switch_places(dictionary *dict,int aim){
} }
} }
void yon_dictionary_make_first(dictionary *dict){ void yon_dictionary_make_first(dictionary *dict)
for (dictionary *dct=dict->first;dct!=NULL;dct=dct->next){ {
for (dictionary *dct = dict->first; dct != NULL; dct = dct->next)
{
dct->first = dict; dct->first = dict;
} }
} }
void yon_dictionary_make_nth(dictionary *dict, int nth){ void yon_dictionary_make_nth(dictionary *dict, int nth)
{
dictionary *dct = dict->first; dictionary *dct = dict->first;
for (int i=0;i<nth;i++){if (dct==NULL) return; else dct=dct->next;} for (int i = 0; i < nth; i++)
{
if (dct == NULL)
return;
else
dct = dct->next;
}
yon_dictionary_rip(dict); yon_dictionary_rip(dict);
dictionary *prev = dct->prev; dictionary *prev = dct->prev;
prev->next = dict; prev->next = dict;
@ -178,7 +223,8 @@ void yon_dictionary_make_nth(dictionary *dict, int nth){
dct->prev = dict; dct->prev = dict;
} }
dictionary *yon_dictionary_create_with_data(char *key, void *data){ dictionary *yon_dictionary_create_with_data(char *key, void *data)
{
dictionary *dct = yon_dictionary_create_empty(); dictionary *dct = yon_dictionary_create_empty();
dct->key = yon_char_new(key); dct->key = yon_char_new(key);
dct->data = data; dct->data = data;
@ -186,7 +232,8 @@ dictionary *yon_dictionary_create_with_data(char *key, void *data){
return dct; return dct;
} }
dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data){ dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *key, void *data)
{
dictionary *dct = yon_dictionary_create_conneced(dict); dictionary *dct = yon_dictionary_create_conneced(dict);
dct->key = yon_char_new(key); dct->key = yon_char_new(key);
dct->data = data; dct->data = data;
@ -194,7 +241,8 @@ dictionary *yon_dictionary_create_with_data_connected(dictionary *dict, char *ke
return dct; return dct;
} }
dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect){ dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect)
{
dictionary *dict = yon_dictionary_get_last(old); dictionary *dict = yon_dictionary_get_last(old);
dict->next = toconnect; dict->next = toconnect;
toconnect->prev = dict; toconnect->prev = dict;
@ -202,10 +250,13 @@ dictionary *yon_dictionary_connect(dictionary *old, dictionary *toconnect){
return toconnect; return toconnect;
} }
dictionary *yon_dictionary_find(dictionary **dict, char *key){ dictionary *yon_dictionary_find(dictionary **dict, char *key)
{
dictionary *dct = *dict; dictionary *dct = *dict;
for (dictionary *pointer=dct->first;pointer!=NULL;pointer=pointer->next){ for (dictionary *pointer = dct->first; pointer != NULL; pointer = pointer->next)
if (strcmp(pointer->key,key)==0){ {
if (strcmp(pointer->key, key) == 0)
{
*dict = pointer; *dict = pointer;
return pointer; return pointer;
} }
@ -213,25 +264,33 @@ dictionary *yon_dictionary_find(dictionary **dict, char *key){
return NULL; return NULL;
} }
dictionary *yon_dictionary_rip(dictionary *dict)
dictionary *yon_dictionary_rip(dictionary *dict){ {
if (!dict->next){ if (!dict->next)
{
dictionary *prev = dict->prev; dictionary *prev = dict->prev;
if (prev){ if (prev)
{
prev->next = NULL; prev->next = NULL;
return prev; return prev;
} else return dict;
} }
else if (!dict->prev){ else
return dict;
}
else if (!dict->prev)
{
dictionary *next = dict->next; dictionary *next = dict->next;
if (next){ if (next)
{
yon_dictionary_make_first(next); yon_dictionary_make_first(next);
next->prev = NULL; next->prev = NULL;
return next; return next;
} }
else return dict; else
return dict;
} }
else { else
{
dictionary *next = dict->next, *prev = dict->prev; dictionary *next = dict->next, *prev = dict->prev;
next->prev = prev; next->prev = prev;
prev->next = next; prev->next = next;
@ -239,24 +298,31 @@ dictionary *yon_dictionary_rip(dictionary *dict){
} }
} }
dictionary *yon_dictionary_get_nth(dictionary *dict, int place){ dictionary *yon_dictionary_get_nth(dictionary *dict, int place)
{
dict = dict->first; dict = dict->first;
int i = 0; int i = 0;
for (i = 0; i < place; i++) for (i = 0; i < place; i++)
if (dict->next) if (dict->next)
dict = dict->next; dict = dict->next;
else break; else
if (i==place) return dict; break;
else return NULL; if (i == place)
return dict;
else
return NULL;
} }
// char functions // char functions
/** /**[EN]
*
* creates new char string by combining two char strings. * creates new char string by combining two char strings.
*/ */
char *yon_char_get_augumented(char *source, char *append){ char *yon_char_get_augumented(char *source, char *append)
if (source&&append){ {
if (source && append)
{
int size = strlen(source) + strlen(append) + 1; int size = strlen(source) + strlen(append) + 1;
char *final = malloc(size); char *final = malloc(size);
memset(final, 0, size); memset(final, 0, size);
@ -265,36 +331,43 @@ char *yon_char_get_augumented(char *source, char *append){
else else
sprintf(final, "%s%s", source, append); sprintf(final, "%s%s", source, append);
return final; return final;
} else }
else
return NULL; return NULL;
} }
/** /**[EN]
*
* creates new char string by copying another char. * creates new char string by copying another char.
*/ */
char *yon_char_new(char *chr){ char *yon_char_new(char *chr)
{
char *newchar = malloc(strlen(chr) + 1); char *newchar = malloc(strlen(chr) + 1);
memset(newchar, 0, strlen(chr) + 1); memset(newchar, 0, strlen(chr) + 1);
memcpy(newchar, chr, strlen(chr)); memcpy(newchar, chr, strlen(chr));
return newchar; return newchar;
} }
/** /**[EN]
*
* cuts source string by size length from startpos position. * cuts source string by size length from startpos position.
*/ */
char *yon_cut(char *source, int size, int startpos){ char *yon_cut(char *source, int size, int startpos)
{
char *cut = NULL; char *cut = NULL;
cut = malloc(size + 1); cut = malloc(size + 1);
memset(cut, 0, size + 1); memset(cut, 0, size + 1);
memcpy(cut, source + startpos, size); memcpy(cut, source + startpos, size);
return cut; return cut;
} }
/** /**[EN]
*
* divides source string in dividepos position, * divides source string in dividepos position,
* returning left part of divided string and * returning left part of divided string and
* inserting right part to source string. * inserting right part to source string.
*/ */
char *yon_char_divide(char *source, int dividepos){ char *yon_char_divide(char *source, int dividepos)
{
char *cut = malloc(dividepos + 1); char *cut = malloc(dividepos + 1);
memset(cut, 0, dividepos + 1); memset(cut, 0, dividepos + 1);
memcpy(cut, source, dividepos); memcpy(cut, source, dividepos);
@ -306,26 +379,51 @@ char *yon_char_divide(char *source, int dividepos){
return cut; return cut;
} }
/** /**[EN]
* searches string dividepos in source string and divides it, * 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 * returning left part of divided string and
* inserting right part to source string. * inserting right part to [source] string.
* if delete_divider is 0, left part will contain delete_divider substring, else * if [delete_divider] is 0, left part will contain [delete_divider] substring, else
* it will stay in right part. * 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){ char *yon_char_divide_search(char *source, char *dividepos, int delete_divider)
{
if (source&&dividepos){
char *cut = strstr(source, dividepos); char *cut = strstr(source, dividepos);
if (cut)
{
int leng = strlen(source) - strlen(cut); int leng = strlen(source) - strlen(cut);
cut = yon_char_divide(source, leng); cut = yon_char_divide(source, leng);
return cut; return cut;
} }
/** else
* converts int to char. return NULL;
}
}
/**[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){ char *yon_char_from_int(int int_to_convert)
{
int i = 1; int i = 1;
float convert_check = (float)int_to_convert; float convert_check = (float)int_to_convert;
for (i=1;convert_check>10;i++){ for (i = 1; convert_check > 10; i++)
{
convert_check = convert_check / 10; convert_check = convert_check / 10;
} }
char *ch = malloc(i * sizeof(char) + 1); char *ch = malloc(i * sizeof(char) + 1);
@ -333,10 +431,68 @@ char *yon_char_from_int(int int_to_convert){
return ch; 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_parse(char *parameters, int *size, char *divider){
char **string=NULL;
int i=1;
string=malloc(sizeof(char*));
char *paramline=yon_char_new(parameters);
char *param;
while ((param=yon_char_divide_search(paramline,divider,1))){
string=realloc(string,sizeof(char*)*i);
string[i-1]=yon_char_new(param);
i++;
}
string=realloc(string,sizeof(char*)*i);
string[i-1]=yon_char_new(paramline);
i++;
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;
}
/**[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;i<size;i++){
if (parameters[i]){
if (strcmp(parameters[i],param)==0)
return i;
} else return -1;
}
return -1;
}
// parsing functions // parsing functions
apps *yon_apps_scan_and_parse_desktops(int *sizef){ apps *yon_apps_scan_and_parse_desktops(int *sizef)
{
int size = 0; int size = 0;
struct apps *applist; struct apps *applist;
{ {
@ -359,23 +515,36 @@ apps *yon_apps_scan_and_parse_desktops(int *sizef){
GError *err = NULL; GError *err = NULL;
g_key_file_load_from_file(gfile, path, G_KEY_FILE_KEEP_TRANSLATIONS, 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); char *Type = g_key_file_get_string(gfile, "Desktop Entry", "Type", &err);
if (err){ if (err)
{
printf("%s\n", err->message); printf("%s\n", err->message);
} }
if (strcmp(Type,"Application")==0) tempapp.Type=1; else if (strcmp(Type,"pyApplication")==0) tempapp.Type=2; else continue; 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); tempapp.Name = g_key_file_get_locale_string(gfile, "Desktop Entry", "Name", setlocale(LC_ALL, NULL), NULL);
if (tempapp.Name==NULL) continue; if (tempapp.Name == NULL)
continue;
tempapp.Categories = g_key_file_get_string(gfile, "Desktop Entry", "Categories", NULL); tempapp.Categories = g_key_file_get_string(gfile, "Desktop Entry", "Categories", NULL);
if (tempapp.Categories==NULL) continue; if (tempapp.Categories == NULL)
continue;
tempapp.Exec = g_key_file_get_string(gfile, "Desktop Entry", "Exec", NULL); tempapp.Exec = g_key_file_get_string(gfile, "Desktop Entry", "Exec", NULL);
if (tempapp.Exec==NULL) continue; if (tempapp.Exec == NULL)
continue;
tempapp.Icon = g_key_file_get_string(gfile, "Desktop Entry", "Icon", NULL); tempapp.Icon = g_key_file_get_string(gfile, "Desktop Entry", "Icon", NULL);
if (tempapp.Icon==NULL) continue; if (tempapp.Icon == NULL)
continue;
tempapp.Pluggable = g_key_file_get_boolean(gfile, "Desktop Entry", "Pluggable", NULL); 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)
if (tempapp.Pluggable) tempapp.DualPluggable=g_key_file_get_boolean(gfile,"Desktop Entry", "X-UBLPluggable",NULL); 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 (g_key_file_get_boolean(gfile, "Desktop Entry", "X-UBL-SettingsManager-Hidden", NULL) == 0)
if (size==0){ if (size == 0)
{
applist = (apps *)malloc(size + 1 * sizeof(apps)); applist = (apps *)malloc(size + 1 * sizeof(apps));
applist[0].Name = yon_char_new(tempapp.Name); applist[0].Name = yon_char_new(tempapp.Name);
applist[0].Categories = yon_char_new(tempapp.Categories); applist[0].Categories = yon_char_new(tempapp.Categories);
@ -385,7 +554,9 @@ apps *yon_apps_scan_and_parse_desktops(int *sizef){
applist[0].Pluggable = tempapp.Pluggable; applist[0].Pluggable = tempapp.Pluggable;
applist[0].DualPluggable = tempapp.DualPluggable; applist[0].DualPluggable = tempapp.DualPluggable;
size++; size++;
} else { }
else
{
applist = (apps *)realloc(applist, (size + 1) * sizeof(apps)); applist = (apps *)realloc(applist, (size + 1) * sizeof(apps));
applist[size].Name = yon_char_new(tempapp.Name); applist[size].Name = yon_char_new(tempapp.Name);
applist[size].Categories = yon_char_new(tempapp.Categories); applist[size].Categories = yon_char_new(tempapp.Categories);
@ -405,8 +576,8 @@ apps *yon_apps_scan_and_parse_desktops(int *sizef){
return applist; return applist;
}; };
void yon_apps_sort(apps *applist, int size)
void yon_apps_sort(apps *applist,int size){ {
apps tmp; apps tmp;
if (size > 2) if (size > 2)
{ {
@ -414,7 +585,8 @@ void yon_apps_sort(apps *applist,int size){
{ {
for (int j = 1; j < size; j++) for (int j = 1; j < size; j++)
{ {
if (strcmp(applist[j].Name,applist[j-1].Name)<0){ if (strcmp(applist[j].Name, applist[j - 1].Name) < 0)
{
tmp = applist[j]; tmp = applist[j];
applist[j] = applist[j - 1]; applist[j] = applist[j - 1];
applist[j - 1] = tmp; applist[j - 1] = tmp;
@ -424,39 +596,111 @@ 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){ {
for (int i=0;i<size;i++){ for (int i = 0; i < size; i++)
if (strcmp(applist[i].Name,name)==0) return &applist[i]; {
if (strcmp(applist[i].Name, name) == 0)
return &applist[i];
} }
return NULL; return NULL;
}; };
char *yon_config_load(char *command){ char **yon_config_load(char *command, int *str_len)
{
FILE *output = popen(command, "r"); FILE *output = popen(command, "r");
char **output_strings = NULL; char **output_strings = NULL;
output_strings = malloc(sizeof(char)); output_strings = malloc(sizeof(char));
int i = 0; int i = 0;
char str[1000]; char str[1000];
memset(str, 0, 1000); memset(str, 0, 1000);
while (fgets(str,1000,output)){ while (fgets(str, 1000, output))
{
if (strcmp(str, "") != 0)
{
output_strings = realloc(output_strings, sizeof(char *) * (i + 1)); output_strings = realloc(output_strings, sizeof(char *) * (i + 1));
printf("%s\n", str);
output_strings[i] = NULL;
output_strings[i] = yon_char_new(str); output_strings[i] = yon_char_new(str);
memset(str, 0, 1000); memset(str, 0, 1000);
i++; i++;
} }
} }
*str_len = i;
return output_strings;
}
int yon_config_save(char *command){ /**[EN]
* int yon_config_save(char *command)
* Saves config with [command]
* [RU]
*/
int yon_config_save(char *command)
{
FILE *output = popen(command, "r"); FILE *output = popen(command, "r");
return 1; return 1;
} }
//terminal-using functions /**[EN]
* char *yon_config_get_parameter(char **parameters, int size, char *param)
* Gets parameter from parameter list;
*
* [RU]
*/
char *yon_config_get_parameter(char **parameters, int size, char *param)
{
char *str = NULL;
for (int j = 0; j < size; j++)
{
char *name = yon_char_divide_search(yon_char_new(parameters[j]), "=", 1);
if (name)
{
if (strcmp(name, param) == 0)
{
str = yon_char_divide_search(yon_char_new(parameters[j]), "\n", 1);
if (strcmp(str, "") != 0 && strcmp(str, "(null)") != 0)
return str;
else
return NULL;
}
}
}
return NULL;
}
/**[EN]
* Parses, modifies and connects string to use it as one of arguments,
* sended to ubconfig.
*
* [RU]
*/
char *yon_config_make_save_parameter_with_multiple_arguments(char *parameter_string, char *config_parameter, char *divider){
char *final="";
int done=0;
char *cur=yon_char_new(parameter_string);
yon_char_divide_search(cur,"=",1);
char *cur_param=NULL;
while (cur_param=yon_char_divide_search(cur,",",1)){
if (done==0){
final=yon_char_get_augumented(final,yon_char_get_augumented(yon_char_get_augumented(config_parameter,"="), yon_char_get_augumented(cur_param,", ")));
done=1;
} else {
final=yon_char_get_augumented(final,yon_char_get_augumented(yon_char_get_augumented(config_parameter,"+="), yon_char_get_augumented(cur_param,", ")));
}
}
if (cur&&strcmp(cur,"")!=0)
if (done==0)
final=yon_char_get_augumented(final,yon_char_get_augumented(yon_char_get_augumented(config_parameter,"="), yon_char_get_augumented(cur,", ")));
else
final=yon_char_get_augumented(final,yon_char_get_augumented(yon_char_get_augumented(config_parameter,"+="), yon_char_get_augumented(cur,", ")));
return final;
}
// terminal-using functions
int yon_launch_app(char *name){ int yon_launch_app(char *name)
{
char *path = name; char *path = name;
thread_output *thread = malloc(sizeof(thread_output)); thread_output *thread = malloc(sizeof(thread_output));
thread->command = path; thread->command = path;
@ -466,8 +710,8 @@ int yon_launch_app(char *name){
return *thread->exitcode; return *thread->exitcode;
}; };
int yon_launch_app_with_arguments(char *name, char *args)
int yon_launch_app_with_arguments(char *name, char *args){ {
char *path = yon_char_get_augumented("/usr/bin/", name); char *path = yon_char_get_augumented("/usr/bin/", name);
path = yon_char_get_augumented(path, " "); path = yon_char_get_augumented(path, " ");
path = yon_char_get_augumented(path, args); path = yon_char_get_augumented(path, args);
@ -479,15 +723,14 @@ int yon_launch_app_with_arguments(char *name, char *args){
return *thread->exitcode; return *thread->exitcode;
}; };
int yon_launch(thread_output *thread)
int yon_launch(thread_output *thread){ {
int a = 0; int a = 0;
a = system(thread->command); a = system(thread->command);
*thread->exitcode = a; *thread->exitcode = a;
return *thread->exitcode; return *thread->exitcode;
} }
// Gtk functions // Gtk functions
#ifdef __GTK_H__ #ifdef __GTK_H__
@ -583,38 +826,64 @@ int yon_launch(thread_output *thread){
// return socket; // 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){ 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); gtk_box_pack_start(GTK_BOX(destination), (GtkWidget *)dct->data, expand, fill, padding);
} }
return 1; return 1;
} }
int yon_dictionary_gtk_pack_end_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)
for (dictionary *dct=dict->first; dct!=NULL;dct=dct->next){ {
for (dictionary *dct = dict->first; dct != NULL; dct = dct->next)
{
gtk_box_pack_end(GTK_BOX(destination), (GtkWidget *)dct->data, expand, fill, padding); gtk_box_pack_end(GTK_BOX(destination), (GtkWidget *)dct->data, expand, fill, padding);
} }
return 1; return 1;
} }
void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *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_overlay_add_overlay(GTK_OVERLAY(Overlay), Head);
gtk_image_set_from_file(GTK_IMAGE(Image), image_path); 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){ 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(); GtkIconTheme *ictheme = gtk_icon_theme_get_default();
GError *err = NULL; 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)
if (err){ {
printf("%s\n", err->message); printf("%s\n", err->message);
g_error_free(err); g_error_free(err);
} }
gtk_label_set_text(GTK_LABEL(StatusLabel), StatusText); gtk_label_set_text(GTK_LABEL(StatusLabel), StatusText);
if (BackgroundClass==BACKGROUND_IMAGE_SUCCESS_TYPE){ 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_style_context_add_class(gtk_widget_get_style_context(StatusBox), "boxInfoMessOK");
} else if (BackgroundClass==BACKGROUND_IMAGE_FAIL_TYPE){ 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_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 #endif

@ -3,6 +3,7 @@
#include <pthread.h> #include <pthread.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdarg.h>
#include <pthread.h> #include <pthread.h>
#include <string.h> #include <string.h>
#include <dirent.h> #include <dirent.h>
@ -14,41 +15,30 @@
#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() yon_config_load(config_commands.global_config_load_command) #define yon_ubl_load_global_config(command, size_pointer) yon_config_load(command, size_pointer)
#define yon_ubl_load_local_config() yon_config_load(config_commands.local_config_load_command) #define yon_ubl_load_local_config(command, size_pointer) yon_config_load(command, size_pointer)
#define yon_ubl_save_global_config() yon_config_save(config_commands.global_config_save_command) #define yon_ubl_save_global_config(command) yon_config_save(command)
#define yon_ubl_save_local_config() yon_config_save(config_commands.local_config_save_command) #define yon_ubl_save_local_config(command) yon_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 { typedef enum
DICTIONARY_ACTION_WIDGETS_TYPE, {
DICTIONARY_IVGRAPHICALS_TYPE, #ifdef __GTK_H__
DICTIONARY_GTK_WIDGETS_TYPE,
#endif
DICTIONARY_OTHER_TYPE DICTIONARY_OTHER_TYPE
} DICT_TYPE; } DICT_TYPE;
typedef struct
typedef struct { {
char *command; char *command;
int *exitcode; int *exitcode;
} thread_output; } thread_output;
typedef struct dictionary { typedef struct dictionary
{
char *key; char *key;
void *data; void *data;
struct dictionary *next; struct dictionary *next;
@ -57,7 +47,8 @@ typedef struct dictionary {
DICT_TYPE data_type; DICT_TYPE data_type;
} dictionary; } dictionary;
typedef struct apps{ typedef struct apps
{
char *Name; char *Name;
int Type; int Type;
char *Categories; char *Categories;
@ -67,9 +58,11 @@ typedef struct apps{
int DualPluggable; int DualPluggable;
} apps; } apps;
// dictionary functions // dictionary functions
#define yon_dictionary_get_data(dictionary, type) ((type)dictionary->data)
dictionary *yon_dictionary_create_empty(); dictionary *yon_dictionary_create_empty();
dictionary *yon_dictionary_create_conneced(dictionary *targetdict); dictionary *yon_dictionary_create_conneced(dictionary *targetdict);
@ -108,32 +101,34 @@ char *yon_char_divide_search(char *source, char* dividepos, int delete_divider);
char *yon_char_from_int(int int_to_convert); char *yon_char_from_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);
int yon_char_parsed_check_exist(char **parameters, int size, char *param);
// parsing functions // parsing functions
apps *yon_apps_scan_and_parse_desktops(int *sizef); apps *yon_apps_scan_and_parse_desktops(int *sizef);
void yon_apps_sort(apps *applist, int size); 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); 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(char *name);
int yon_launch_app_with_arguments(char *name, char *args); int yon_launch_app_with_arguments(char *name, char *args);
int yon_launch(thread_output *thread); int yon_launch(thread_output *thread);
// Gtk functions // Gtk functions
@ -142,21 +137,22 @@ int yon_launch(thread_output *thread);
#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 *Icon;
GtkWidget *Label; GtkWidget *Label;
GtkWidget *IconView; GtkWidget *IconView;
GtkListStore *List; GtkListStore *List;
} expander_icon_view; } expander_icon_view;
// GtkWidget *yon_gtk_app_chooser_apps_create(); // GtkWidget *yon_gtk_app_chooser_apps_create();
// dictionary *yon_gtk_app_chooser_create(); // dictionary *yon_gtk_app_chooser_create();
// expander_icon_view yon_gtk_icon_view_expander_create(GtkWidget *pack, ...); // 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); GtkWidget *yon_gtk_socket_create_new_with_connect(GtkWidget *container, gpointer data);
int yon_gtk_icon_view_hide_empty(dictionary *icon_view_segment); int yon_gtk_icon_view_hide_empty(dictionary *icon_view_segment);
@ -169,9 +165,9 @@ int yon_dictionary_gtk_pack_end_multiple_widgets(dictionary *dict, GtkWidget *de
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);
#endif #endif
typedef enum { typedef enum
{
BACKGROUND_IMAGE_SUCCESS_TYPE, BACKGROUND_IMAGE_SUCCESS_TYPE,
BACKGROUND_IMAGE_FAIL_TYPE BACKGROUND_IMAGE_FAIL_TYPE
} BACKGROUND_IMAGE_TYPE; } BACKGROUND_IMAGE_TYPE;
@ -180,9 +176,9 @@ typedef enum {
#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_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 #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_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_status_box_render(statusbox, statusicon, statuslabel, statustext, backgroundclass) _yon_ubl_status_box_render(statusbox, statusicon, statuslabel, statustext, backgroundclass)
#endif #endif
void _yon_ubl_header_setup(GtkWidget *Overlay, GtkWidget *Head, GtkWidget *Image, char *image_path); 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 #endif

@ -342,6 +342,16 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="icon-name">document-edit-symbolic</property> <property name="icon-name">document-edit-symbolic</property>
</object> </object>
<object class="GtkImage" id="image10">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">dialog-information-symbolic</property>
</object>
<object class="GtkImage" id="image11">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">user-trash-symbolic</property>
</object>
<object class="GtkImage" id="image2"> <object class="GtkImage" id="image2">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
@ -360,7 +370,6 @@
<object class="GtkBox" id="templateMonitorInfoBox"> <object class="GtkBox" id="templateMonitorInfoBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property> <property name="valign">center</property>
<property name="margin-start">3</property> <property name="margin-start">3</property>
<property name="margin-end">3</property> <property name="margin-end">3</property>
@ -408,7 +417,7 @@
<child> <child>
<object class="GtkButton" id="templateMonitorInfoConfigureButton"> <object class="GtkButton" id="templateMonitorInfoConfigureButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">False</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="halign">end</property> <property name="halign">end</property>
<property name="image">image3</property> <property name="image">image3</property>
@ -440,11 +449,6 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="icon-name">process-stop-symbolic</property> <property name="icon-name">process-stop-symbolic</property>
</object> </object>
<object class="GtkImage" id="image7">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">emblem-ok-symbolic</property>
</object>
<object class="GtkImage" id="image8"> <object class="GtkImage" id="image8">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
@ -1323,83 +1327,94 @@
<widget name="mainExtraFixGapLabel"/> <widget name="mainExtraFixGapLabel"/>
</widgets> </widgets>
</object> </object>
<object class="GtkListStore" id="liststore1"/> <object class="GtkImage" id="image9">
<object class="GtkListStore" id="liststore2"/>
<object class="GtkListStore" id="liststore3"/>
<object class="GtkListStore" id="liststore4"/>
<object class="GtkListStore" id="liststore5">
<columns>
<!-- column-name GdkPixbuf1 -->
<column type="GdkPixbuf"/>
<!-- column-name gchararray1 -->
<column type="gchararray"/>
<!-- column-name gchararray2 -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0">g89</col>
<col id="1" translatable="yes">Settings</col>
<col id="2" translatable="yes">Settings</col>
</row>
</data>
</object>
<object class="GtkExpander" id="templateAppsPack">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">False</property>
<property name="icon-name">go-bottom-symbolic</property>
</object>
<object class="GtkWindow" id="ProprietaryDriverChooseWindow">
<property name="width-request">450</property>
<property name="height-request">300</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-video</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">5</property>
<child> <child>
<object class="GtkIconView" id="templateAppsIconView"> <object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkTreeView" id="propriearyTreeView">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="margin-left">15</property> <property name="model">liststore6</property>
<property name="margin-start">15</property> <property name="search-column">0</property>
<property name="margin">6</property> <property name="enable-tree-lines">True</property>
<property name="selection-mode">multiple</property> <property name="tooltip-column">2</property>
<property name="item-orientation">horizontal</property> <child internal-child="selection">
<property name="model">liststore5</property> <object class="GtkTreeSelection"/>
<property name="columns">1</property> </child>
<property name="activate-on-single-click">True</property>
<child> <child>
<object class="GtkCellRendererPixbuf"/> <object class="GtkTreeViewColumn" id="ProprietaryPackageColumn">
<property name="title" translatable="yes">Package</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="ProprietaryDriverColumn">
<property name="title" translatable="yes">Driver</property>
<child>
<object class="GtkCellRendererText"/>
<attributes> <attributes>
<attribute name="pixbuf">0</attribute> <attribute name="text">0</attribute>
</attributes> </attributes>
</child> </child>
<child>
<object class="GtkCellRendererText">
<property name="xalign">0</property>
<property name="single-paragraph-mode">True</property>
<property name="wrap-mode">word</property>
</object> </object>
</child>
<child>
<object class="GtkTreeViewColumn" id="ProprietaryDescriptionColumn">
<property name="title" translatable="yes">Description</property>
<child>
<object class="GtkCellRendererText"/>
<attributes> <attributes>
<attribute name="text">1</attribute> <attribute name="text">1</attribute>
</attributes> </attributes>
</child> </child>
</object> </object>
</child>
<child>
<object class="GtkTreeViewColumn" id="ProprietarySupportedColumn">
<property name="title" translatable="yes">Supported Devices</property>
</object>
</child>
</object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
</object> <child>
</child>
<child type="label">
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="valign">center</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkImage" id="templateAppsImage"> <object class="GtkButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">True</property>
<property name="pixel-size">25</property> <property name="receives-default">True</property>
<property name="icon-name">applications-system</property> <property name="image">image9</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -1408,10 +1423,11 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkLabel" id="templateAppsLabel"> <object class="GtkButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">True</property>
<property name="label" translatable="yes">Settings</property> <property name="receives-default">True</property>
<property name="image">image11</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -1419,68 +1435,25 @@
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
</object>
</child>
<style>
<class name="workingbg"/>
</style>
</object>
<object class="GtkListStore" id="liststore6">
<columns>
<!-- column-name gchararray1 -->
<column type="gchararray"/>
<!-- column-name gchararray2 -->
<column type="gchararray"/>
<!-- column-name gchararray3 -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkWindow" id="ProprietaryDriverChooseWindow">
<property name="width-request">450</property>
<property name="height-request">300</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-video</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child> <child>
<object class="GtkTreeView"> <object class="GtkButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="model">liststore6</property> <property name="receives-default">True</property>
<property name="enable-tree-lines">True</property> <property name="image">image10</property>
<property name="tooltip-column">2</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="ProprietaryDriverColumn">
<property name="title" translatable="yes">Driver</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object> </object>
</child> <packing>
<child> <property name="expand">False</property>
<object class="GtkTreeViewColumn" id="ProprietaryDescriptionColumn"> <property name="fill">True</property>
<property name="title" translatable="yes">Description</property> <property name="position">2</property>
<child> </packing>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child> </child>
</object> </object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child> </child>
</object> </object>
<packing> <packing>
@ -1505,7 +1478,7 @@
<property name="homogeneous">True</property> <property name="homogeneous">True</property>
<child> <child>
<object class="GtkButton" id="ProprietaryCloseButton"> <object class="GtkButton" id="ProprietaryCloseButton">
<property name="label" translatable="yes">Cancel</property> <property name="label" translatable="yes">Close</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
@ -1517,28 +1490,106 @@
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkListStore" id="liststore1"/>
<object class="GtkListStore" id="liststore2"/>
<object class="GtkListStore" id="liststore3"/>
<object class="GtkListStore" id="liststore4"/>
<object class="GtkListStore" id="liststore5">
<columns>
<!-- column-name GdkPixbuf1 -->
<column type="GdkPixbuf"/>
<!-- column-name gchararray1 -->
<column type="gchararray"/>
<!-- column-name gchararray2 -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkExpander" id="templateAppsPack">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child> <child>
<object class="GtkButton" id="ProprietaryAcceptButton"> <object class="GtkIconView" id="templateAppsIconView">
<property name="label" translatable="yes">Accept</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="margin-left">15</property>
<property name="image">image7</property> <property name="margin-start">15</property>
<property name="margin">6</property>
<property name="selection-mode">multiple</property>
<property name="item-orientation">horizontal</property>
<property name="model">liststore5</property>
<property name="columns">1</property>
<property name="activate-on-single-click">True</property>
<child>
<object class="GtkCellRendererPixbuf"/>
<attributes>
<attribute name="pixbuf">0</attribute>
</attributes>
</child>
<child>
<object class="GtkCellRendererText">
<property name="xalign">0</property>
<property name="single-paragraph-mode">True</property>
<property name="wrap-mode">word</property>
</object>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">1</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
</object> </object>
</child>
<child type="label">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage" id="templateAppsImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">25</property>
<property name="icon-name">applications-system</property>
</object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="position">0</property>
<property name="position">1</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkLabel" id="templateAppsLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Settings</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -1548,6 +1599,19 @@
</child> </child>
</object> </object>
</child> </child>
<style>
<class name="workingbg"/>
</style>
</object>
<object class="GtkListStore" id="liststore6">
<columns>
<!-- column-name gchararray1 -->
<column type="gchararray"/>
<!-- column-name gchararray2 -->
<column type="gchararray"/>
<!-- column-name gchararray3 -->
<column type="gchararray"/>
</columns>
</object> </object>
<object class="GtkRadioButton" id="radioMainMonitor"> <object class="GtkRadioButton" id="radioMainMonitor">
<property name="label" translatable="yes">radiobutton</property> <property name="label" translatable="yes">radiobutton</property>
@ -1562,21 +1626,26 @@
<property name="modal">True</property> <property name="modal">True</property>
<property name="icon-name">com.ublinux.ubl-settings-video</property> <property name="icon-name">com.ublinux.ubl-settings-video</property>
<child> <child>
<object class="GtkBox" id="mainMonitorConfigurationBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkBox" id="templateMonitorConfigurationBox"> <object class="GtkBox" id="mainMonitorConfigurationBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property> <property name="margin-start">5</property>
<property name="margin-end">5</property> <property name="margin-end">5</property>
<property name="margin-top">5</property> <property name="margin-top">5</property>
<property name="margin-bottom">5</property> <property name="margin-bottom">5</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="templateMonitorConfigurationBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
@ -1756,10 +1825,29 @@
<property name="position">2</property> <property name="position">2</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property> <property name="margin-bottom">5</property>
<property name="spacing">5</property> <property name="spacing">5</property>
<child> <child>
@ -1793,18 +1881,7 @@
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">3</property> <property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing> </packing>
</child> </child>
<child> <child>
@ -1861,7 +1938,7 @@
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="pack-type">end</property> <property name="pack-type">end</property>
<property name="position">6</property> <property name="position">2</property>
</packing> </packing>
</child> </child>
</object> </object>

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,154 +17,188 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n" "Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
#: source/ubl-settings-video.c:151 #: source/ubl-settings-video.c:26 source/ubl-settings-video.c:223
msgid "About" msgid "Cancel"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:143 #: source/ubl-settings-video.c:27
msgid "Automatically choose and use driver" msgid "Accept"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:153 #: source/ubl-settings-video.c:28 source/ubl-settings-video.c:386
msgid "Change" msgid "Driver"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:131 #: source/ubl-settings-video.c:29
msgid "Configuration method" msgid "Description"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:41 #: source/ubl-settings-video.c:87 source/ubl-settings-video.c:392
msgid "DPMS off" msgid "UBlinux Video Configuration"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:37 #: source/ubl-settings-video.c:89
msgid "Do not switch display off" msgid "Progect Home Page"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:150 #: source/ubl-settings-video.c:90
msgid "Documentation" msgid "Videocard and monitor configuration manager"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:130 #: source/ubl-settings-video.c:215
msgid "Driver" msgid "Monitor: "
msgstr "" msgstr ""
#: source/ubl-settings-video.c:136 #: source/ubl-settings-video.c:216
msgid "Extra" msgid "Resolution (px): "
msgstr "" msgstr ""
#: source/ubl-settings-video.h:16 #: source/ubl-settings-video.c:217
msgid "Failed to load global configuration" msgid "Frequency (Hz): "
msgstr "" msgstr ""
#: source/ubl-settings-video.h:17 #: source/ubl-settings-video.c:218
msgid "Failed to load local configuration" msgid "Rotation: "
msgstr "" msgstr ""
#: source/ubl-settings-video.c:129 #: source/ubl-settings-video.c:220
msgid "Failsafe driver AMD/ATI: " msgid "Main monitor"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:128 #: source/ubl-settings-video.c:221
msgid "Failsafe driver nVidia: " msgid "through parameter line:"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:135 #: source/ubl-settings-video.c:226 source/ubl-settings-video.c:231
msgid "Fix frame gap (nVidia)" #: 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 "" msgstr ""
#: source/ubl-settings-video.c:35 #: source/ubl-settings-video.c:374
msgid "Frequency (Hz): " msgid "Don't use"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:134 #: source/ubl-settings-video.c:375 source/ubl-settings-video.c:377
msgid "Hybrid graphics" msgid "Off"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:125 #: source/ubl-settings-video.c:376 source/ubl-settings-video.c:378
msgid "Launch programms through (nVidia)" msgid "fbdev"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:138 #: source/ubl-settings-video.c:380
msgid "Load" msgid "1st variant. May cause perfomance drops in video games"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:145 #: source/ubl-settings-video.c:381
msgid "Load from global configuration" msgid "2nd variant. May not work on specific video cards"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:146 #: source/ubl-settings-video.c:382
msgid "Load from local configuration" msgid "Video output configuration"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:39 #: source/ubl-settings-video.c:383
msgid "Main monitor" msgid "Proprietary driver: "
msgstr "" msgstr ""
#: source/ubl-settings-video.c:141 #: source/ubl-settings-video.c:384
msgid "Manual configuration" msgid "Failsafe driver nVidia: "
msgstr "" 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" msgid "Monitor configuration"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:33 #: source/ubl-settings-video.c:389
msgid "Monitor: " msgid "Hybrid graphics"
msgstr ""
#: source/ubl-settings-video.c:390
msgid "Fix frame gap (nVidia)"
msgstr "" 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" msgid "On"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:127 #: source/ubl-settings-video.c:397
msgid "Proprietary driver: " msgid "Automatically choose and use driver"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:34 #: source/ubl-settings-video.c:398
msgid "Resolution (px): " msgid "Launch programms through optirun (nVidia): "
msgstr "" msgstr ""
#: source/ubl-settings-video.c:36 #: source/ubl-settings-video.c:399
msgid "Rotation: " msgid "Launch programs through primusun (nVidia): "
msgstr "" msgstr ""
#: source/ubl-settings-video.c:139 #: source/ubl-settings-video.c:400
msgid "Save" msgid "discrete video only (AMD/ATI)"
msgstr ""
#: source/ubl-settings-video.c:402
msgid "Load from global configuration"
msgstr "" 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" msgid "Save to global an local configuration"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:148 #: source/ubl-settings-video.c:405
msgid "Save to global configuration" msgid "Save to global configuration"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:149 #: source/ubl-settings-video.c:406
msgid "Save to local configuration" msgid "Save to local configuration"
msgstr "" msgstr ""
#: source/ubl-settings-video.h:19 #: source/ubl-settings-video.c:407
msgid "Saving to global configuration Succeeded" msgid "Documentation"
msgstr "" msgstr ""
#: source/ubl-settings-video.h:20 #: source/ubl-settings-video.c:408
msgid "Saving to local configuration Succeeded" msgid "About"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:137 #: source/ubl-settings-video.c:438
msgid "UBlinux Video Configuration" msgid "Configuration has been loaded"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:126 #: source/ubl-settings-video.h:22
msgid "Video output configuration" msgid "Failed to load global configuration"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:133 #: source/ubl-settings-video.h:23
msgid "discrete video only (AMD/ATI)" msgid "Failed to load local configuration"
msgstr "" msgstr ""
#: source/ubl-settings-video.c:40 #: source/ubl-settings-video.h:25
msgid "through parameter line:" msgid "Saving to global configuration Succeeded"
msgstr ""
#: source/ubl-settings-video.h:26
msgid "Saving to local configuration Succeeded"
msgstr "" msgstr ""

@ -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:
1 VERSION_ID:DRV_PAСKAGE:DRV_NAME:DRV_DESCRIPTION:DRV_SUPPORT
2 :ubm-nvidia-340:nvidia-340:Пакет с модулем драйвера и утилиты NVIDIA 340xx:Драйвер видеокарт nVidia серий 8XXX, 9XXX, 1XX, 2XX, 3XX, 4XX, 5XX, 6XX, 7XX
3 :ubm-nvidia-390:nvidia-390:Пакет с модулем драйвера и утилиты NVIDIA 390xx:Драйвер видеокарт nVidia серий 4XX, 5XX, 6XX, 7XX, 9XX, 10XX
4 :ubm-nvidia-430:nvidia-430:Пакет с модулем включает в себя драйвер NVIDIA 430xx и утилиты:Драйвер видеокарт nVidia серий 6XX, 7XX, 9XX, 10XX, 16XX
5 :ubm-nvidia-470:nvidia-470:Пакет с модулем драйвера и утилиты NVIDIA 470xx:Драйвер видеокарт nVidia серий NVS, Quadro Sync, Quadro NVS, Quadro Blade/Embedded, Quadro, Quadro RTX, NVIDIA RTX
6 :ubm-nvidia-510:nvidia-510:Пакет с модулем драйвера и утилиты NVIDIA 510xx:Драйвер видеокарт nVidia серий NVS, Quadro Sync, Quadro NVS, Quadro Blade/Embedded, Quadro, Quadro RTX, NVIDIA RTX
7 :ubm-nvidia-515:nvidia-515:Пакет с модулем драйвера и утилиты NVIDIA 515xx:Драйвер видеокарт nVidia серий NVS, Quadro Sync, Quadro NVS, Quadro Blade/Embedded, Quadro, Quadro RTX, NVIDIA RTX
8 :ubm-nvidia-optimus:nvidia-optimus:Пакет с модулем включает в себя NVIDIA Optimus:
Loading…
Cancel
Save