Drivers fixes

pull/28/head
parent 035611074a
commit ef9b4c51e7

@ -243,36 +243,43 @@ void on_driver_info(GtkWidget *self,widgets_dict *widgets){
} }
void on_port_chosen_changed(GtkWidget *self, monitor_edit_window *window){ void on_port_chosen_changed(GtkWidget *self, monitor_edit_window *window){
monitorconfig* config = yon_dictionary_get_data(window->config,monitorconfig*); if (yon_dictionary_get_data(window->config,monitorconfig*)->show_usupported==0){
dictionary *dict=NULL; monitorconfig* config = yon_dictionary_get_data(window->config,monitorconfig*);
gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationResolutionCombo)); dictionary *dict=NULL;
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationResolutionCombo),PARAMETER_DEFAULT_LABEL); for (int i=0;i<window->resolutionssize;i++){
gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationResolutionCombo),0); free(window->resolutions);
char *combo_text=yon_char_new((char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationPortCombo))); }
char *resolution = yon_char_divide_search(yon_char_new(combo_text)," ",-1); window->resolutions=NULL;
if (combo_text) window->resolutionssize=0;
if (strcmp(combo_text,MONITOR_CHOOSE_PORT_LABEL)==0) int portid=gtk_combo_box_get_active(GTK_COMBO_BOX(window->templateMonitorConfigurationPortCombo));
return; if (portid!=0)
else{ window->curport=videoconfig.ports[portid-1];
dict=yon_dictionary_find(&videoconfig.supported_resolutions,resolution); gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationResolutionCombo));
if (dict){ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->templateMonitorConfigurationResolutionCombo),PARAMETER_DEFAULT_LABEL);
resolution_supported *res = yon_dictionary_get_data(dict,resolution_supported*); gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationResolutionCombo),0);
int found_size=0;
for (int i=0;i<res->size;i++){ if (window->curport){
char *check_line; gtk_window_set_title(GTK_WINDOW(gtk_widget_get_toplevel(window->mainMonitorConfigurationBox)),window->curport);
for (int j=0;j<videoconfig.resolutionssize;j++){ dict=yon_dictionary_find(&videoconfig.supported_resolutions,window->curport);
check_line=yon_char_new(videoconfig.resolutions[j]); if (dict){
check_line=yon_char_divide_search(check_line," ",-1); resolution_supported *res = yon_dictionary_get_data(dict,resolution_supported*);
if (strstr(videoconfig.resolutions[j],res->line[i])){ int found_size=0;
found_size++; for (int i=0;i<res->size;i++){
if(!config->resolutionCapabilities) config->resolutionCapabilities=new(char*); char *check_line;
else config->resolutionCapabilities=realloc(config->resolutionCapabilities,sizeof(char*)*found_size); for (int j=0;j<videoconfig.resolutionssize;j++){
config->resolutionCapabilities[found_size-1]=videoconfig.resolutions[j]; check_line=yon_char_new(videoconfig.resolutions[j]);
config->resolution_size=found_size; check_line=yon_char_divide_search(check_line," ",-1);
if (strstr(videoconfig.resolutions[j],res->line[i])){
found_size++;
if(!config->resolutionCapabilities) config->resolutionCapabilities=new(char*);
else config->resolutionCapabilities=realloc(config->resolutionCapabilities,sizeof(char*)*found_size);
config->resolutionCapabilities[found_size-1]=videoconfig.resolutions[j];
config->resolution_size=found_size;
}
} }
} }
yon_gtk_combo_box_fill(window->templateMonitorConfigurationResolutionCombo,config->resolutionCapabilities, config->resolution_size);
} }
yon_gtk_combo_box_fill(window->templateMonitorConfigurationResolutionCombo,config->resolutionCapabilities, config->resolution_size);
} }
} }
} }
@ -529,7 +536,7 @@ void on_monitor_configure(GtkWidget *self,monitor_window *window){
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_reversed), monitors->templateMonitorConfigurationBox);
g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationParameterLineCheck), "toggled", G_CALLBACK(on_sensitive_change), monitors->templateMonitorConfigurationParameterLineEntry); g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationParameterLineCheck), "toggled", G_CALLBACK(on_sensitive_change), monitors->templateMonitorConfigurationParameterLineEntry);
g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationShowUnsupportedCheck), "toggled", G_CALLBACK(on_resolutions_unsupported_show),monitors); g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationShowUnsupportedCheck), "toggled", G_CALLBACK(on_resolutions_unsupported_show),monitors);
g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationPortCombo), "popup", G_CALLBACK(on_port_chosen_changed),monitors); g_signal_connect(G_OBJECT(monitors->templateMonitorConfigurationPortCombo), "changed", G_CALLBACK(on_port_chosen_changed),monitors);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(monitors->templateMonitorConfigurationEnableCheck),yon_dictionary_get_data(monitors->config,monitorconfig*)->enable==1); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(monitors->templateMonitorConfigurationEnableCheck),yon_dictionary_get_data(monitors->config,monitorconfig*)->enable==1);
@ -553,6 +560,7 @@ void on_monitor_configure(GtkWidget *self,monitor_window *window){
gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationSaveButton),MONITOR_SAVE_LABEL); gtk_button_set_label(GTK_BUTTON(monitors->templateMonitorConfigurationSaveButton),MONITOR_SAVE_LABEL);
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPortCombo),MONITOR_CHOOSE_PORT_LABEL); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPortCombo),MONITOR_CHOOSE_PORT_LABEL);
monitors->curport=NULL;
dictionary *dict=NULL; dictionary *dict=NULL;
for (int i=0;i<videoconfig.portssize;i++){ for (int i=0;i<videoconfig.portssize;i++){
dictionary *check_if_exists = yon_dictionary_find(&videoconfig.monitors,videoconfig.ports[i]); dictionary *check_if_exists = yon_dictionary_find(&videoconfig.monitors,videoconfig.ports[i]);
@ -578,7 +586,8 @@ void on_monitor_configure(GtkWidget *self,monitor_window *window){
gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationPositionPosCombo),0); gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationPositionPosCombo),0);
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPositionPortCombo),PARAMETER_DEFAULT_LABEL); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPositionPortCombo),PARAMETER_DEFAULT_LABEL);
for (int i=0;i<videoconfig.portssize;i++){ for (int i=0;i<videoconfig.portssize;i++){
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPositionPortCombo),videoconfig.ports[i]); if (videoconfig.ports[i]!=monitors->config->key)
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(monitors->templateMonitorConfigurationPositionPortCombo),videoconfig.ports[i]);
} }
gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationPositionPortCombo),0); gtk_combo_box_set_active(GTK_COMBO_BOX(monitors->templateMonitorConfigurationPositionPortCombo),0);
@ -649,9 +658,11 @@ void on_about()
void yon_monitor_window_update(monitor_edit_window *window){ void yon_monitor_window_update(monitor_edit_window *window){
if (window){ if (window){
int found = yon_gtk_combo_box_text_find(window->templateMonitorConfigurationPortCombo, window->config->key); int found = yon_char_parsed_check_exist(videoconfig.ports,videoconfig.portssize, window->config->key);
if (found==-1) if (found==-1)
found=0; found=0;
else
found++;
gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationPortCombo),found); gtk_combo_box_set_active(GTK_COMBO_BOX(window->templateMonitorConfigurationPortCombo),found);
on_resolutions_unsupported_show(window->templateMonitorConfigurationShowUnsupportedCheck,window); on_resolutions_unsupported_show(window->templateMonitorConfigurationShowUnsupportedCheck,window);
if (((monitorconfig*)window->config->data)->resolutionCapabilities){ if (((monitorconfig*)window->config->data)->resolutionCapabilities){
@ -985,21 +996,37 @@ dictionary *yon_proprieary_get(){
config_str drivers=yon_config_load(get_proprietary_drivers_command,&drivers_size); config_str drivers=yon_config_load(get_proprietary_drivers_command,&drivers_size);
int size=0; int size=0;
char **rtn = yon_config_load(get_proprietary_drivers_info_command,&size); char **rtn = yon_config_load(get_proprietary_drivers_info_command,&size);
for (int drivers_found=0;drivers_found<drivers_size;drivers_found++){
drivers[drivers_found]=yon_char_divide_search(drivers[drivers_found],"\n",-1); for (int dr_desc=0;dr_desc<size;dr_desc++){
for (int i=0;i<size;i++){ for (int dr_foun=0;dr_foun<drivers_size;dr_foun++){
rtn[i] = yon_char_divide_search(rtn[i],"\n",-1); drivers[dr_foun]=yon_char_divide_search(drivers[dr_foun],"\n",-1);
char *keyp=yon_char_new(rtn[i]); char *pack=yon_char_new(rtn[dr_desc]);
if (keyp[0]==';') char *ubm=yon_char_divide_search(pack,";",-1);
yon_char_divide_search(keyp,";",-1); pack=yon_char_divide_search(pack,";",-1);
char *key = yon_char_divide_search(keyp,";",-1); if (strcmp(drivers[dr_foun],ubm)==0){
keyp = yon_char_divide_search(keyp,";",-1); yon_dictionary_add_or_create_if_exists_with_data(videoconfig.proprietary,drivers[dr_foun],rtn[dr_desc]);
char *driver_name=yon_char_divide_search(yon_char_new(drivers[drivers_found])," ",-1); }
if (strcmp(key,driver_name)==0||keyp) else if (strcmp(pack,"")!=0&&!yon_dictionary_find(&videoconfig.proprietary,pack)){
if (i==0) videoconfig.proprietary=yon_dictionary_create_with_data(drivers[drivers_found],rtn[i]); yon_dictionary_add_or_create_if_exists_with_data(videoconfig.proprietary,pack,rtn[dr_desc]);
else videoconfig.proprietary=yon_dictionary_create_with_data_connected(videoconfig.proprietary,drivers[drivers_found],rtn[i]); }
} }
} }
// for (int drivers_found=0;drivers_found<drivers_size;drivers_found++){
// drivers[drivers_found]=yon_char_divide_search(drivers[drivers_found],"\n",-1);
// for (int i=0;i<size;i++){
// rtn[i] = yon_char_divide_search(rtn[i],"\n",-1);
// char *keyp=yon_char_new(rtn[i]);
// if (keyp[0]==';')
// yon_char_divide_search(keyp,";",-1);
// char *key = yon_char_divide_search(keyp,";",-1);
// keyp = yon_char_divide_search(keyp,";",-1);
// char *driver_name=yon_char_divide_search(yon_char_new(drivers[drivers_found])," ",-1);
// if (strcmp(key,driver_name)==0||keyp&&strcmp(keyp,"")!=0&&!yon_dictionary_find(&videoconfig.proprietary,drivers[drivers_found]))
// if (i==0) videoconfig.proprietary=yon_dictionary_create_with_data(yon_char_new(drivers[drivers_found]),rtn[i]);
// else videoconfig.proprietary=yon_dictionary_create_with_data_connected(videoconfig.proprietary,yon_char_new(drivers[drivers_found]),rtn[i]);
// }
// }
if (videoconfig.proprietary){ if (videoconfig.proprietary){
yon_gtk_list_store_fill_with_proprietaries(videoconfig.list); yon_gtk_list_store_fill_with_proprietaries(videoconfig.list);
yon_ubl_status_box_render(videoconfig.status_render,PROPRIETARY_OPETAION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE); yon_ubl_status_box_render(videoconfig.status_render,PROPRIETARY_OPETAION_DONE_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
@ -1040,21 +1067,27 @@ void yon_gtk_list_store_fill_with_proprietaries(GtkListStore *list){
dictionary *dict=NULL; dictionary *dict=NULL;
gtk_list_store_clear(videoconfig.list); gtk_list_store_clear(videoconfig.list);
gtk_list_store_clear(videoconfig.list2); gtk_list_store_clear(videoconfig.list2);
int inssize=0;
config_str installed=yon_config_load(get_proprietary_installed_command,&inssize);
for (int i=0;i<inssize;i++)
installed[i]=yon_char_divide_search(installed[i],"\n",-1);
for_dictionaries(dict,videoconfig.proprietary){ for_dictionaries(dict,videoconfig.proprietary){
GtkTreeIter iter; GtkTreeIter iter;
int size=0; int size=0;
config_str str = yon_char_parse((char*)dict->data,&size,";"); config_str str = yon_char_parse((char*)dict->data,&size,";");
printf("%s\n",str[0]);
if (strcmp(str[0],"")!=0&&str[0]){ if (strcmp(str[0],"")!=0&&str[0]){
gtk_list_store_append(videoconfig.list,&iter); gtk_list_store_append(videoconfig.list,&iter);
gtk_list_store_set(videoconfig.list,&iter,1,str[0],2,str[1],3,str[2],4,_(str[3]),5,_(str[4]),-1); gtk_list_store_set(videoconfig.list,&iter,1,str[0],2,str[1],3,str[2],4,_(str[3]),5,_(str[4]),-1);
if (yon_char_parsed_check_exist(installed,inssize,str[0])!=-1)
gtk_list_store_set(videoconfig.list,&iter,0,1,-1);
} }
else{ else{
gtk_list_store_append(videoconfig.list2,&iter); gtk_list_store_append(videoconfig.list2,&iter);
gtk_list_store_set(videoconfig.list2,&iter,1,str[0],2,str[1],3,str[2],4,_(str[3]),5,_(str[4]),-1); gtk_list_store_set(videoconfig.list2,&iter,1,str[0],2,str[1],3,str[2],4,_(str[3]),5,_(str[4]),-1);
if (yon_char_parsed_check_exist(installed,inssize,str[1])!=-1)
gtk_list_store_set(videoconfig.list2,&iter,0,1,-1);
} }
if (strstr(dict->key," installed"))
gtk_list_store_set(videoconfig.list,&iter,0,1,-1);
} }
} }
} }
@ -1280,6 +1313,10 @@ void yon_monitor_view_new(monitor_config monitor){
window->templateMonitorInfoAddButton=yon_gtk_builder_get_widget(builder,"templateMonitorInfoAddButton"); window->templateMonitorInfoAddButton=yon_gtk_builder_get_widget(builder,"templateMonitorInfoAddButton");
window->config=NULL; window->config=NULL;
gtk_overlay_add_overlay(GTK_OVERLAY(window->templateMonitorscreenOverlay),window->templateMonitorInfoBox); gtk_overlay_add_overlay(GTK_OVERLAY(window->templateMonitorscreenOverlay),window->templateMonitorInfoBox);
gtk_widget_set_tooltip_text(window->templateMonitorDeleteButton,DELETE_LABEL);
gtk_widget_set_tooltip_text(window->templateMonitorInfoConfigureButton,CONFIGURE_LABEL);
gtk_widget_set_tooltip_text(window->templateMonitorSwitchButton,SWITCH_LABEL);
gtk_widget_set_tooltip_text(window->templateMonitorInfoAddButton,ADD_LABEL);
if (monitor){ if (monitor){
window->config=monitor; window->config=monitor;
gtk_widget_hide(window->templateMonitorInfoAddButton); gtk_widget_hide(window->templateMonitorInfoAddButton);
@ -1368,7 +1405,7 @@ void yon_adapter_window_setup(widgets_dict *widgets){
GtkIconTheme *icthm=gtk_icon_theme_get_default(); GtkIconTheme *icthm=gtk_icon_theme_get_default();
gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.intel-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.intel-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL));
} }
else if (strstr(vendor,"NVVIDIA")){ else if (strstr(vendor,"NVIDIA")){
GtkIconTheme *icthm=gtk_icon_theme_get_default(); GtkIconTheme *icthm=gtk_icon_theme_get_default();
gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.nvidia-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL)); gtk_image_set_from_pixbuf(GTK_IMAGE(widgets->InformationCompanyLogoImage),gtk_icon_info_load_icon(gtk_icon_theme_lookup_icon_for_scale(icthm, "com.ublinux.ubl-settings-video.nvidia-logo",64,1,GTK_ICON_LOOKUP_FORCE_SVG),NULL));
} }
@ -1671,7 +1708,7 @@ int main(int argc, char *argv[])
} }
} }
if (getuid()!=0){ if (0){
char *args=""; char *args="";
for (int i=0;i<argc;i++) for (int i=0;i<argc;i++)
args=yon_char_unite(args," ",argv[i],NULL); args=yon_char_unite(args," ",argv[i],NULL);

@ -1,6 +1,6 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <gtk/gtkx.h> #include <gtk/gtkx.h>
#include "ubl-settings-video-cm.h" // #include "ubl-settings-video-cm.h"
#ifdef WEBKIT_FOUND #ifdef WEBKIT_FOUND
#include <webkit2/webkit2.h> #include <webkit2/webkit2.h>
#endif #endif
@ -39,7 +39,7 @@
#define get_ports_command "xrandr |grep -E \"*connected\" |cut -d' ' -f1" #define get_ports_command "xrandr |grep -E \"*connected\" |cut -d' ' -f1"
#define get_resolutions_command "xrandr |grep -noP \"\\d+x+\\d+\"" #define get_resolutions_command "xrandr |grep -noP \"\\d+x+\\d+\""
#define get_resolution_ports_command "xrandr |grep -nwP \"connected\" |grep -oE \"[0-9a-zA-Z:]{1,10} connected\" |grep -oE \"[0-9a-zA-Z:]{1,10} \"" #define get_resolution_ports_command "xrandr |grep -nwP \"connected\" |grep -oE \"[-0-9a-zA-Z:]{1,} connected\" |grep -oE \"[-0-9a-zA-Z:]{1,} \""
#define get_proprietary_drivers_info_command "cut -d';' -f2- /usr/share/ubl-settings-video/csv/video-drivers.csv | grep -E \"-\"" #define get_proprietary_drivers_info_command "cut -d';' -f2- /usr/share/ubl-settings-video/csv/video-drivers.csv | grep -E \"-\""
@ -71,9 +71,9 @@
#define get_version_proprietary_command "grep \"VERSION_ID=\" /etc/os-release | cut -d= -f2" #define get_version_proprietary_command "grep \"VERSION_ID=\" /etc/os-release | cut -d= -f2"
#define get_proprietary_drivers_command "LC_ALL=C pacman -Ssy ubm-nvidia-.* |grep -oE \"[a-zA-Z-]{1,}-nvidia-[a-zA-Z0-9-]{1,}|installed\"|sed ':a;N;$!ba;s/\\ninstalled/ installed/g'" #define get_proprietary_drivers_command "pacman -Ssy ubm-nvidia-.* |grep -oE \"[a-zA-Z-]{1,}-nvidia-[a-zA-Z0-9-]{1,}\""
#define get_proprietary_drivers_local_command "LC_ALL=C pacman -Qq |grep -E \"ubm-nvidia-\"" #define get_proprietary_drivers_local_command "pacman -Qq |grep -E \"ubm-nvidia-\""
#define get_proprietary_installed_command yon_char_unite("sudo pacman -Ss nvidia-.* |grep -E ",INSTALLED_LOW_LABEL," |grep -oE \"ubm-nvidia-[0-9a-zA-Z]{1,}|nvidia-[0-9]{1,4}xx-dkms\"",NULL)
// #define get_proprietary_drivers_command "LC_ALL=C pacman -Ss ubm-nvidia-.* |grep -oE \"[a-zA-Z-]{1,}nvidia-[a-zA-Z0-9-]{1,}|installed\"|sed ':a;N;$!ba;s/\\ninstalled/ installed/g'" // #define get_proprietary_drivers_command "LC_ALL=C pacman -Ss ubm-nvidia-.* |grep -oE \"[a-zA-Z-]{1,}nvidia-[a-zA-Z0-9-]{1,}|installed\"|sed ':a;N;$!ba;s/\\ninstalled/ installed/g'"
#define get_adapter_info "lshw -c display -quiet |grep -oE \"vendor:[0-9a-zA-Z ]{1,}|description:[0-9a-zA-Z ]{1,}|product:[]0-9a-zA-Z [-]{1,}\"|sed 's/: /=/g';lspci | grep -E ' VGA | Display ' | cut -d\" \" -f 1 | xargs -i lspci -v -s {} |grep -oE \"Kernel[:a-zA-Z0-9: ]{1,}\"|sed 's/: /=/g'|sed 's/ /_/g'" #define get_adapter_info "lshw -c display -quiet |grep -oE \"vendor:[0-9a-zA-Z ]{1,}|description:[0-9a-zA-Z ]{1,}|product:[]0-9a-zA-Z [-]{1,}\"|sed 's/: /=/g';lspci | grep -E ' VGA | Display ' | cut -d\" \" -f 1 | xargs -i lspci -v -s {} |grep -oE \"Kernel[:a-zA-Z0-9: ]{1,}\"|sed 's/: /=/g'|sed 's/ /_/g'"
@ -287,6 +287,10 @@ typedef struct
typedef struct typedef struct
{ {
char *curport;
config_str resolutions;
int resolutionssize;
GtkWidget *templateMonitorConfigurationWindow; GtkWidget *templateMonitorConfigurationWindow;
GtkWidget *mainMonitorConfigurationBox; GtkWidget *mainMonitorConfigurationBox;
GtkWidget *templateMonitorConfigurationBox; GtkWidget *templateMonitorConfigurationBox;

Loading…
Cancel
Save