diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index 18b3323..fba9f26 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -733,8 +733,30 @@ void on_monitor_delete(GtkWidget *,monitor_data *window){ */ void on_monitor_switch(GtkWidget *,monitor_data *window){ if(window){ - int enable = 0; - gtk_widget_set_sensitive(window->MonitorImage,!enable); + const char *name = gtk_label_get_text(GTK_LABEL(window->NameLabel)); + char *parameter = config(XORG_MONITOR(name)); + int size; + config_str parsed = yon_char_parse(parameter,&size,","); + int found = yon_char_parsed_check_exist(parsed,size,"enable"); + if (found != -1){ + free(parsed[found]); + parsed[found]=yon_char_new("disable"); + gtk_widget_set_sensitive(window->MonitorImage,0); + } else { + found = yon_char_parsed_check_exist(parsed,size,"disable"); + if (found !=-1){ + free(parsed[found]); + parsed[found]=yon_char_new("enable"); + } else { + parsed = yon_char_parsed_append(parsed,&size,"enable"); + } + gtk_widget_set_sensitive(window->MonitorImage,1); + } + + char *final = yon_char_parsed_to_string(parsed,size,","); + yon_config_register(XORG_MONITOR(name),XORG_MONITOR_get_command,final); + yon_char_parsed_free(parsed,size); + } } @@ -752,6 +774,7 @@ void on_monitor_config_save(GtkWidget *, monitor_edit_window *window){ char *target=NULL; int main_display=0; char *resolution = NULL; + const char *frequency = NULL; char *rotate = NULL; char *position = NULL; // int switch_off=0; @@ -763,13 +786,16 @@ void on_monitor_config_save(GtkWidget *, monitor_edit_window *window){ if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->PortCombo))){ target = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->PortCombo)); main_display = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->MainCheck)); - if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ResolutionCombo))) - resolution = yon_char_divide_search(yon_char_new(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->ResolutionCombo)))," ",-1); + if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ResolutionCombo))){ + char *res_str = yon_char_new(gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->ResolutionCombo))); + frequency = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->FrequencyCombo)); + resolution = yon_char_unite(yon_char_divide_search(res_str," ",-1),"x",frequency,NULL); + } int rot = gtk_combo_box_get_active(GTK_COMBO_BOX(window->RotationCombo)); - rotate = yon_char_append("rotation:",rot == 0?"normal":rot==1?"left":rot==2?"right":"invert"); + rotate = yon_char_append("rotate:",rot == 0?"normal":rot==1?"left":rot==2?"right":"invert"); int pos = gtk_combo_box_get_active(GTK_COMBO_BOX(window->PositionPosCombo)); if (pos&>k_combo_box_get_active(GTK_COMBO_BOX(window->PositionPortCombo))){ - position = yon_char_append(pos==1?"lo:":pos==2?"ro:":pos==3?"ab:":"be",gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->PositionPortCombo))); + position = yon_char_append(pos==1?"lo:":pos==2?"ro:":pos==3?"ab:":"be:",gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->PositionPortCombo))); } // switch_off = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DoNotSwitchOffCheck)); modeline_cvt = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->ModelineCVTCheck)); @@ -816,9 +842,7 @@ void yon_monitor_parse(monitor_edit_window *window, char *string){ int parsed_size; config_str parsed = yon_char_parse(string,&parsed_size,","); if (parsed_size>0){ - int resolution = yon_gtk_combo_box_text_find(window->ResolutionCombo,parsed[0]); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->ResolutionCombo),resolution); - for (int i=1; iModelineCVTCheck),1); } else if (!strcmp(parsed[i],"gtf")){ @@ -839,7 +863,7 @@ void yon_monitor_parse(monitor_edit_window *window, char *string){ } else if (!strcmp(parsed[i],"disable")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->EnableCheck),0); - } else if (!strcmp(parsed[i],"ignore")){ + } else if (!strcmp(parsed[i],"cvt")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->ModelineCVTCheck),1); } else if (!strcmp(parsed[i],"primary")){ @@ -861,26 +885,42 @@ void yon_monitor_parse(monitor_edit_window *window, char *string){ yon_gtk_combo_box_text_find(window->PositionPortCombo,parsed[i]); gtk_combo_box_set_active(GTK_COMBO_BOX(window->PositionPosCombo),3); - } else if (strstr(parsed[i],"bee:")||strstr(parsed[i],"Below:")){ + } else if (strstr(parsed[i],"be:")||strstr(parsed[i],"Below:")){ yon_char_divide_search(parsed[i],":",-1); yon_gtk_combo_box_text_find(window->PositionPortCombo,parsed[i]); gtk_combo_box_set_active(GTK_COMBO_BOX(window->PositionPosCombo),4); } else if (strstr(parsed[i],"rotate:")){ - yon_char_divide_search(parsed[i],":",-1); - if (strcmp(parsed[i],"normal")){ + free(yon_char_divide_search(parsed[i],":",-1)); + if (!strcmp(parsed[i],"normal")){ gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),0); - } else if (strcmp(parsed[i],"left")){ + } else if (!strcmp(parsed[i],"left")){ gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),1); - } else if (strcmp(parsed[i],"right")){ + } else if (!strcmp(parsed[i],"right")){ gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),2); - } else if (strcmp(parsed[i],"invert")){ + } else if (!strcmp(parsed[i],"invert")){ gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),3); } + } else if (g_ascii_isdigit(parsed[i][0])&&strstr(parsed[i],"x")){ + if (yon_char_count(parsed[i],"x")>1){ + int pos = yon_char_find_last(parsed[i],'x'); + char *res = yon_char_divide(parsed[i],pos); + int resolution = yon_gtk_combo_box_text_find(window->FrequencyCombo,parsed[i]); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->FrequencyCombo),resolution==0?-1:resolution); + free(parsed[i]); + parsed[i]=res; + } + int resolution = yon_gtk_combo_box_text_find(window->ResolutionCombo,parsed[i]); + if (resolution == -1){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UnsupportedCheck),1); + while(gtk_events_pending()) gtk_main_iteration(); + } + resolution = yon_gtk_combo_box_text_find(window->ResolutionCombo,parsed[i]); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->ResolutionCombo),resolution==0?-1:resolution); } } } @@ -1022,6 +1062,18 @@ gboolean yon_proprietary_append(struct proprietary_struct *target){ gboolean yon_proprietary_append_kernels(struct proprietary_kernel_append_struct *append){ gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(append->widgets->KernelsCombo),append->kernel); free(append->kernel); + free(append); + return G_SOURCE_REMOVE; +} + +gboolean yon_proprietary_disconnect(main_window *widgets){ + g_object_ref(main_config.list); + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),NULL); + return G_SOURCE_REMOVE; +} + +gboolean yon_proprietary_connect(main_window *widgets){ + gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); return G_SOURCE_REMOVE; } @@ -1034,6 +1086,7 @@ void *yon_proprietary_local_get(main_window *widgets){ yon_ubl_status_box_render_thread(KERNELS_SUPPORTED_UNFOUND_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); } + yon_debug_output("%s\n","Kernel add"); for (int i=0;i-1)){ @@ -1064,7 +1119,9 @@ void *yon_proprietary_local_get(main_window *widgets){ g_idle_add((GSourceFunc)yon_proprietary_append,cur); } } + yon_debug_output("%s\n","Driver end"); } + g_idle_add((GSourceFunc)yon_proprietary_connect,widgets); char *status_text = yon_char_unite(yon_char_get_localised_from_lib(SUCCESS_LABEL),". ", !getuid()? main_config.load_mode==1?yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL):yon_char_get_localised_from_lib(GLOBAL_LOAD_SUCCESS_LABEL):yon_char_get_localised_from_lib(ROOT_WARNING_LABEL),NULL); yon_ubl_status_box_render_thread(status_text,!getuid()?BACKGROUND_IMAGE_SUCCESS_TYPE:BACKGROUND_IMAGE_FAIL_TYPE); free(status_text); diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index 315842f..507648d 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -391,4 +391,7 @@ gboolean yon_proprietary_append(struct proprietary_struct *target); gboolean yon_proprietary_clear(main_window *widgets); gboolean on_command_execute_success(GtkWidget *,gint status,main_window *widgets); void on_gapfix_changed(GtkWidget*self, main_window *widgets); + +gboolean yon_proprietary_disconnect(main_window *widgets); +gboolean yon_proprietary_connect(main_window *widgets); #endif \ No newline at end of file diff --git a/ubl-settings-video_ru.po b/ubl-settings-video_ru.po index 4d183a7..a0e5019 100644 --- a/ubl-settings-video_ru.po +++ b/ubl-settings-video_ru.po @@ -95,7 +95,7 @@ msgstr "Разрешение (px): " #: source/ubl-strings.h:9 msgid "Frequency (Hz): " -msgstr "Обновления (Hz): " +msgstr "Частота обновления (Hz): " #: source/ubl-strings.h:10 msgid "Rotation: "