diff --git a/locale/ubl-settings-video.pot b/locale/ubl-settings-video.pot index 3e10672..c0e3485 100644 --- a/locale/ubl-settings-video.pot +++ b/locale/ubl-settings-video.pot @@ -298,7 +298,7 @@ msgid "Package" msgstr "" #: source/ubl-strings.h:61 -msgid "Supported Devices" +msgid "Supported devices" msgstr "" #: source/ubl-strings.h:62 @@ -569,39 +569,43 @@ msgstr "" msgid "Devices and Drivers" msgstr "" -#: source/ubl-strings.h:152 +#: source/ubl-strings.h:151 +msgid "Unlock the pacman package manager database" +msgstr "" + +#: source/ubl-strings.h:153 msgid "Database files must be updated" msgstr "" -#: source/ubl-strings.h:154 +#: source/ubl-strings.h:155 msgid "Warning: Couldn't find any supported kernel version" msgstr "" -#: source/ubl-strings.h:156 +#: source/ubl-strings.h:157 msgid "Default (All installed)" msgstr "" -#: source/ubl-strings.h:157 +#: source/ubl-strings.h:158 msgid "Driver installation has failed" msgstr "" -#: source/ubl-strings.h:158 +#: source/ubl-strings.h:159 msgid "Operation has failed" msgstr "" -#: source/ubl-strings.h:160 +#: source/ubl-strings.h:161 msgid "Are you sure want to install driver " msgstr "" -#: source/ubl-strings.h:161 +#: source/ubl-strings.h:162 msgid "Are you sure want to remove driver " msgstr "" -#: source/ubl-strings.h:162 +#: source/ubl-strings.h:163 msgid "Attention!" msgstr "" -#: source/ubl-strings.h:162 +#: source/ubl-strings.h:163 msgid "" "If you work in sandbox mode, you must install the package with the module!" msgstr "" diff --git a/locale/ubl-settings-video_ru.po b/locale/ubl-settings-video_ru.po index 40a59b9..6d1ade1 100644 --- a/locale/ubl-settings-video_ru.po +++ b/locale/ubl-settings-video_ru.po @@ -300,7 +300,7 @@ msgid "Package" msgstr "Пакет" #: source/ubl-strings.h:61 -msgid "Supported Devices" +msgid "Supported devices" msgstr "Поддерживаемые устройства" #: source/ubl-strings.h:62 @@ -576,43 +576,47 @@ msgstr "Модули драйвера" msgid "Devices and Drivers" msgstr "Устройства и драйвера" -#: source/ubl-strings.h:152 +#: source/ubl-strings.h:151 +msgid "Unlock the pacman package manager database" +msgstr "Разблокировать базу данных пакетного менеджера pacman" + +#: source/ubl-strings.h:153 msgid "Database files must be updated" msgstr "Базы данных репозитория должны быть обновлены" -#: source/ubl-strings.h:154 +#: source/ubl-strings.h:155 msgid "Warning: Couldn't find any supported kernel version" msgstr "Предупреждение: Поддерживаемые версии ядра не найдены" -#: source/ubl-strings.h:156 +#: source/ubl-strings.h:157 msgid "Default (All installed)" msgstr "По умолчанию (все установленные)" -#: source/ubl-strings.h:157 +#: source/ubl-strings.h:158 msgid "Driver installation has failed" msgstr "Установка драйвера завершена с ошибкой" -#: source/ubl-strings.h:158 +#: source/ubl-strings.h:159 msgid "Operation has failed" msgstr "Операция завершена с ошибкой" -#: source/ubl-strings.h:160 +#: source/ubl-strings.h:161 msgid "Are you sure want to install driver " msgstr "Вы уверены, что хотите установить драйвер " -#: source/ubl-strings.h:161 +#: source/ubl-strings.h:162 msgid "Are you sure want to remove driver " msgstr "Вы уверены, что хотите удалить драйвер " -#: source/ubl-strings.h:162 +#: source/ubl-strings.h:163 msgid "Attention!" msgstr "Внимание!" -#: source/ubl-strings.h:162 +#: source/ubl-strings.h:163 msgid "" "If you work in sandbox mode, you must install the package with the module!" msgstr "" "Если вы работаете в режиме песочницы необходимо установить пакет с модулем!" -msgid "Driver modules" -msgstr "Модули драйвера" +#~ msgid "Driver modules" +#~ msgstr "Модули драйвера" diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index fd1d92b..23fd855 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -89,6 +89,7 @@ set(SOURCE_FILES ubl-settings-video.c ubl-settings-video-driver.c ubl-settings-video-install.c + ubl-settings-video-monitor.c ubl-settings-video.h ubl-strings.h ) diff --git a/source/ubl-settings-video-driver.c b/source/ubl-settings-video-driver.c index 9eeaab0..392a93b 100644 --- a/source/ubl-settings-video-driver.c +++ b/source/ubl-settings-video-driver.c @@ -65,6 +65,232 @@ void on_link_activate(GtkWidget *, char*, driver_struct *driver){ on_devices_info_clicked(NULL,driver); } +void on_pacman_db_unlock(void){ + yon_launch(pacman_unlock_database_command); + yon_ubl_status_box_render(yon_char_get_localised_from_lib(SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); +} + +void on_terminal_done(GtkWidget *, int , main_window *widgets){ + vte_terminal_feed_child(VTE_TERMINAL(widgets->InstallTerminal),"^C",2); +} + +void on_terminal_more(GtkWidget *, main_window *widgets){ + int active = gtk_revealer_get_child_revealed(GTK_REVEALER(widgets->TerminalMoreRevieler)); + if (active ==1) active = 0; + else active=1; +gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalMoreRevieler),active); +} + +gboolean on_command_execute_success(GtkWidget *self,gint status,main_window *widgets){ + yon_install_buttons_set_sensitive(widgets,1); + vte_terminal_set_input_enabled(VTE_TERMINAL(self),0); + g_mutex_lock(&main_config.progress_mutex); + main_config.progress_active=0; + g_mutex_unlock(&main_config.progress_mutex); + if (!status){ + if (gtk_widget_get_visible(widgets->TerminalPaned)){ + on_terminal_revealer_open(NULL,widgets); + } + yon_ubl_status_box_render(yon_char_unite(yon_char_get_localised_from_lib(SUCCESS_LABEL),". ",PROPRIETARY_LOADING_LABEL,NULL),BACKGROUND_IMAGE_SUCCESS_TYPE); + } else { + if (!gtk_widget_get_visible(widgets->TerminalPaned)){ + on_terminal_revealer_open(NULL,widgets); + } + yon_ubl_status_box_render(yon_char_get_localised_from_lib(FAIL_LABEL),BACKGROUND_IMAGE_FAIL_TYPE); + + } + while(gtk_events_pending()) gtk_main_iteration(); + on_terminal_done(self,0,widgets); + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel),0); + return G_SOURCE_REMOVE; +} + +gboolean on_terminal_check_progress(main_window *widgets){ + g_mutex_lock(&main_config.progress_mutex); + if (!main_config.progress_active){ + g_mutex_unlock(&main_config.progress_mutex); + return G_SOURCE_REMOVE; + } + gtk_progress_bar_pulse(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel)); + g_mutex_unlock(&main_config.progress_mutex); + return G_SOURCE_CONTINUE; +} + +void on_command_cancel(GtkWidget *,main_window *widgets){ + g_mutex_lock(&main_config.progress_mutex); + main_config.progress_active=0; + g_mutex_unlock(&main_config.progress_mutex); + on_terminal_done(NULL,0,widgets); + + yon_launch(pacman_unlock_database_command); +} + +void on_driver_pack_selection_change(GtkWidget *, GtkListBoxRow *selection, main_window *widgets){ + if (selection){ + driver_struct *driver = g_object_get_data(G_OBJECT(selection),"driver_struct"); + if (driver->supported_devices_avaliable){ + gtk_widget_set_sensitive(widgets->SupportedDevicesButton,1); + } else { + gtk_widget_set_sensitive(widgets->SupportedDevicesButton,0); + } + gtk_widget_set_sensitive(widgets->AboutModuleButton,1); + gtk_widget_set_sensitive(widgets->AboutPackageButton,1); + } else { + gtk_widget_set_sensitive(widgets->SupportedDevicesButton,0); + gtk_widget_set_sensitive(widgets->AboutModuleButton,0); + gtk_widget_set_sensitive(widgets->AboutPackageButton,0); + } +} + +gpointer yon_driver_info_launch(void *command){ + if (!system((char*)command)){ + yon_ubl_status_box_render_thread(yon_char_get_localised_from_lib(SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); + } else { + yon_ubl_status_box_render_thread(yon_char_get_localised_from_lib(FAIL_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); + } + return NULL; +} + +void on_driver_pack_info(GtkWidget *, main_window *widgets){ + GtkWidget *selection = GTK_WIDGET(gtk_list_box_get_selected_row(GTK_LIST_BOX(widgets->DriversList))); + if (selection){ + driver_struct *driver = g_object_get_data(G_OBJECT(selection),"driver_struct"); + + yon_ubl_status_box_render(yon_char_get_localised_from_lib(INFO_PROCESS_LABEL),BACKGROUND_IMAGE_INFO_TYPE); + char *command = get_info_proprietary_command(driver->package); + g_thread_new("info_thread",yon_driver_info_launch,(void*)command); + } else { + yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } +} + +void on_driver_module_info(GtkWidget *, main_window *widgets){ + GtkWidget *selection = GTK_WIDGET(gtk_list_box_get_selected_row(GTK_LIST_BOX(widgets->DriversList))); + if (selection){ + driver_struct *driver = g_object_get_data(G_OBJECT(selection),"driver_struct"); + + yon_ubl_status_box_render(yon_char_get_localised_from_lib(INFO_PROCESS_LABEL),BACKGROUND_IMAGE_INFO_TYPE); + char *command = get_info_proprietary_command(driver->module); + g_thread_new("info_thread",yon_driver_info_launch,(void*)command); + } else { + yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); + } +} + +gboolean yon_filter_func(GtkTreeModel* model,GtkTreeIter* iter,main_window *widgets){ + const char *target = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->KernelsCombo)); + char *cur; + gtk_tree_model_get(model,iter,2,&cur,-1); + if (!yon_char_is_empty(cur)&&!yon_char_is_empty(target)&&!strcmp(cur,target))return 1; + return 0; +} + +void on_kernel_filter_changed(GtkWidget *self, main_window *widgets){ + const char *active = gtk_combo_box_get_active_id(GTK_COMBO_BOX(self)); + if (!yon_char_is_empty(active)){ + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->DriversList)); + for (GList *iter = list; iter; iter=iter->next){ + driver_struct *driver = g_object_get_data(G_OBJECT(iter->data),"driver_struct"); + if (!strcmp(driver->kernel,active)){ + gtk_widget_show(GTK_WIDGET(iter->data)); + } else { + gtk_widget_hide(GTK_WIDGET(iter->data)); + } + } + g_list_free(list); + } else { + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->DriversList)); + for (GList *iter = list; iter; iter=iter->next){ + gtk_widget_show(GTK_WIDGET(iter->data)); + } + g_list_free(list); + } +} + +gboolean yon_proprietary_clear(main_window *widgets){ + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->DriversList)); + GList *iter = NULL; + for (iter = list; iter; iter=iter->next){ + driver_struct *driver = g_object_get_data(G_OBJECT(iter->data),"driver_struct"); + free(driver->name); + free(driver->module); + free(driver->package); + free(driver->kernel); + free(driver->description); + free(driver->devices); + gtk_widget_destroy(GTK_WIDGET(iter->data)); + } + return G_SOURCE_REMOVE; +} + +void yon_drivers_resize(main_window *widgets){ + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->DriversList)); + GList *iter; + int module_width=0; + int package_width=0; + int kernel_width=0; + int driver_width=0; + int description_width=0; + gtk_widget_get_preferred_width(widgets->InstalledModuleLabel,&module_width,NULL); + gtk_widget_get_preferred_width(widgets->InstalledPackageLabel,&package_width,NULL); + gtk_widget_get_preferred_width(widgets->KernelLabel,&kernel_width,NULL); + gtk_widget_get_preferred_width(widgets->DriverLabel,&driver_width,NULL); + gtk_widget_get_preferred_width(widgets->DescriptionLabel,NULL,&description_width); + for (iter = list;iter;iter=iter->next){ + driver_struct *data = g_object_get_data(G_OBJECT(iter->data),"driver_struct"); + gtk_widget_realize(data->ModuleInstalledCheck); + gtk_widget_realize(data->PackageInstalledCheck); + gtk_widget_realize(data->KernelLabel); + gtk_widget_realize(data->DriverLabel); + gtk_widget_realize(data->DescriptionLabel); + gtk_widget_realize(data->DevicesBox); + int temp_width = 0; + gtk_widget_get_preferred_width(data->ModuleInstalledCheck,&temp_width,NULL); + if (temp_width > module_width) module_width=temp_width; + gtk_widget_get_preferred_width(data->PackageInstalledCheck,&temp_width,NULL); + if (temp_width > package_width) package_width=temp_width; + gtk_widget_get_preferred_width(data->KernelLabel,&temp_width,NULL); + if (temp_width > kernel_width) kernel_width=temp_width; + gtk_widget_get_preferred_width(data->DriverLabel,&temp_width,NULL); + if (temp_width > driver_width) driver_width=temp_width; + gtk_widget_get_preferred_width(data->DescriptionLabel,NULL,&temp_width); + if (temp_width > description_width) description_width=temp_width; + } + if (module_width||package_width||kernel_width||driver_width||description_width){ + for (iter = list;iter;iter=iter->next){ + driver_struct *data = g_object_get_data(G_OBJECT(iter->data),"driver_struct"); + if (module_width) + gtk_widget_set_size_request(gtk_widget_get_parent(data->ModuleInstalledCheck),module_width,-1); + if (package_width) + gtk_widget_set_size_request(gtk_widget_get_parent(data->PackageInstalledCheck),package_width,-1); + if (kernel_width) + gtk_widget_set_size_request(gtk_widget_get_parent(data->KernelLabel),kernel_width,-1); + if (driver_width) + gtk_widget_set_size_request(gtk_widget_get_parent(data->DriverLabel),driver_width,-1); + if (description_width) + gtk_widget_set_size_request(gtk_widget_get_parent(data->DescriptionLabel),description_width,-1); + } + g_list_free(list); + if (module_width) gtk_widget_set_size_request(widgets->InstalledModuleLabel,module_width,-1); + if (package_width) gtk_widget_set_size_request(widgets->InstalledPackageLabel,package_width,-1); + if (kernel_width) gtk_widget_set_size_request(widgets->KernelLabel,kernel_width,-1); + if (driver_width) gtk_widget_set_size_request(widgets->DriverLabel,driver_width,-1); + if (description_width) gtk_widget_set_size_request(widgets->DescriptionLabel,description_width,-1); + } +} + +gboolean yon_proprietary_set(main_window *widgets){ + gtk_widget_set_sensitive(widgets->LoadDriversButton,1); + return G_SOURCE_REMOVE; +} + +gboolean yon_proprietary_append_kernels(struct proprietary_kernel_append_struct *append){ + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(append->widgets->KernelsCombo),append->kernel,append->kernel); + free(append->kernel); + free(append); + return G_SOURCE_REMOVE; +} + driver_struct *yon_driver_struct_new(){ driver_struct *driver = new(driver_struct); diff --git a/source/ubl-settings-video-install.c b/source/ubl-settings-video-install.c index 6905c90..dde113f 100644 --- a/source/ubl-settings-video-install.c +++ b/source/ubl-settings-video-install.c @@ -71,13 +71,16 @@ void on_install_activate(GtkWidget *self, main_window *widgets){ yon_install_buttons_set_sensitive(widgets,0); yon_terminal_integrated_start(widgets->InstallTerminal,command); // g_signal_connect(G_OBJECT(widgets->InstallTerminal),"contents-changed",G_CALLBACK(on_terminal_check_progress),widgets); + if (!gtk_widget_get_visible(widgets->TerminalPaned)){ + on_terminal_revealer_open(NULL,widgets); + } g_timeout_add(500,(GSourceFunc)on_terminal_check_progress,widgets); } void on_install_check(GtkWidget *self,gint ,driver_struct *driver){ main_window *widgets = g_object_get_data(G_OBJECT(self),"widgets"); - yon_packages_update_package(driver->package); - yon_packages_update_package(driver->module); + yon_packages_update(); yon_driver_struct_update(widgets,driver); + g_signal_handlers_disconnect_by_func(G_OBJECT(self),G_CALLBACK(on_install_check),driver); } \ No newline at end of file diff --git a/source/ubl-settings-video-monitor.c b/source/ubl-settings-video-monitor.c new file mode 100644 index 0000000..1a3d4a8 --- /dev/null +++ b/source/ubl-settings-video-monitor.c @@ -0,0 +1,490 @@ +#include "ubl-settings-video.h" + + +/**void on_monitor_delete(GtkWidget *self,monitor_data windowd) + * [EN] +*/ +void on_monitor_delete(GtkWidget *,monitor_data *window){ + if(window){ + GtkWidget *target = gtk_widget_get_parent(window->ScreenOverlay); + GtkWidget *flow_box = gtk_widget_get_parent(target); + gtk_container_remove(GTK_CONTAINER(flow_box),target); + const char *target_monitor = gtk_label_get_text(GTK_LABEL(window->NameLabel)); + if (!yon_char_is_empty(target_monitor)){ + yon_config_remove_by_key(XORG_MONITOR((char*)target_monitor)); + } + free(window); + } +} + +/**void on_monitor_switch(GtkWidget *self,monitor_data *window) + * [EN] +*/ +void on_monitor_switch(GtkWidget *,monitor_data *window){ + if(window){ + 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); + + } +} + +/**void on_monitor_add(GtkWidget *self,monitor_data *window) + * [EN] +*/ +void on_monitor_add(GtkWidget *,main_window *widgets){ + if(widgets){ + yon_monitor_new(widgets,0); + } +} + +void on_monitor_config_save(GtkWidget *, monitor_edit_window *window){ + int enabled=0; + char *target=NULL; + int main_display=0; + char *resolution = NULL; + const char *frequency = NULL; + char *rotate = NULL; + char *position = NULL; + int modeline_cvt = 0; + int cvt_reduced = 0; + int modeline_gtf = 0; + int do_not_switch_off = 0; + enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->EnableCheck)); + if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->ManualCheck))){ + if (!gtk_combo_box_get_active(GTK_COMBO_BOX(window->PortCombo))){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),MISSING_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->PortCombo); + return; + } + target = (char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->PortCombo)); + } else { + target = (char*)gtk_entry_get_text(GTK_ENTRY(window->PortEntry)); + if (yon_char_is_empty(target)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),MISSING_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(window->PortEntry); + return; + } + } + main_display = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->MainCheck)); + char *res_str = yon_char_new(gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->ResolutionCombo))); + if (!yon_char_is_empty(res_str)){ + frequency = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->FrequencyCombo)); + resolution = yon_char_unite(res_str,!yon_char_is_empty(frequency)?"x":NULL,frequency,NULL); + } + int rot = gtk_combo_box_get_active(GTK_COMBO_BOX(window->RotationCombo)); + 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))); + } + modeline_cvt = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->ModelineCVTCheck)); + cvt_reduced = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UseCVTReducedCheck)); + modeline_gtf = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->ModelineGTFCheck)); + do_not_switch_off = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DoNotSwitchOffCheck)); + + int final_size; + config_str final_parsed=NULL; + if (resolution) + yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,resolution); + if (modeline_cvt) + yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"cvt"); + if (modeline_gtf) + yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"gtf"); + if (cvt_reduced) + yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"reduced"); + if (enabled) + yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"enable"); + if (!enabled) + yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"disable"); + if (main_display) + yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"primary"); + if (do_not_switch_off){ + yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"dpms"); + }else{ + yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"nodpms"); + } + if (position) + yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,position); + if (rotate) + yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,rotate); + char *final_string = yon_char_parsed_to_string(final_parsed,final_size,","); + yon_config_register(XORG_MONITOR(target),XORG_MONITOR_get_command,final_string); + on_subwindow_close(window->MainWindow); + yon_monitor_view_update(); +} + +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){ + for (int i=0; iModelineCVTCheck),1); + } else if (!strcmp(parsed[i],"gtf")){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->ModelineGTFCheck),1); + + } else if (!strcmp(parsed[i],"reduced")||!strcmp(parsed[i],"r")){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UseCVTReducedCheck),1); + + } else if (!strcmp(parsed[i],"dpms")){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DoNotSwitchOffCheck),1); + + } else if (!strcmp(parsed[i],"nodpms")){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DoNotSwitchOffCheck),0); + + } else if (!strcmp(parsed[i],"enable")){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->EnableCheck),1); + + } else if (!strcmp(parsed[i],"disable")){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->EnableCheck),0); + + } else if (!strcmp(parsed[i],"cvt")){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->ModelineCVTCheck),1); + + } else if (!strcmp(parsed[i],"primary")){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->MainCheck),1); + + } else if (strstr(parsed[i],"lo:")||strstr(parsed[i],"LeftOf:")){ + yon_char_divide_search(parsed[i],":",-1); + int target = yon_gtk_combo_box_text_find(window->PositionPortCombo,parsed[i]); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),target); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->PositionPosCombo),1); + + } else if (strstr(parsed[i],"ro:")||strstr(parsed[i],"RightOf:")){ + yon_char_divide_search(parsed[i],":",-1); + yon_gtk_combo_box_text_find(window->PositionPortCombo,parsed[i]); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->PositionPosCombo),2); + + } else if (strstr(parsed[i],"ab:")||strstr(parsed[i],"Above:")){ + yon_char_divide_search(parsed[i],":",-1); + yon_gtk_combo_box_text_find(window->PositionPortCombo,parsed[i]); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->PositionPosCombo),3); + + } 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:")){ + 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")){ + gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),1); + + } else if (!strcmp(parsed[i],"right")){ + gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),2); + + } else if (!strcmp(parsed[i],"invert")){ + gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),3); + + } + + } 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); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->FrequencyCombo),parsed[i]); + 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); + } + } + } +} + +void yon_monitor_port_manual(GtkToggleButton *self,monitor_edit_window *monitors){ + if (gtk_toggle_button_get_active(self)){ + gtk_widget_show(monitors->PortEntry); + gtk_widget_hide(monitors->PortCombo); + } else { + gtk_widget_show(monitors->PortCombo); + gtk_widget_hide(monitors->PortEntry); + + } +} + +void on_port_chosen_changed(GtkWidget *, monitor_edit_window *window){ + // dictionary *dict=NULL; + for (int i=0;iresolutionssize;i++){ + free(window->resolutions); + } + window->resolutions=NULL; + window->resolutionssize=0; + + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->ResolutionCombo)); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->ResolutionCombo),PARAMETER_DEFAULT_LABEL); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->ResolutionCombo),0); + gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->PositionPortCombo)); + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->PositionPortCombo),PARAMETER_DEFAULT_LABEL); + gtk_combo_box_set_active(GTK_COMBO_BOX(window->PositionPortCombo),0); + + char *port_name = NULL; + + port_name = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->PortCombo)); + if (yon_char_is_empty(port_name)){ + port_name = (char*)gtk_entry_get_text(GTK_ENTRY(window->PortEntry)); + } + + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UnsupportedCheck))){ + for (int i=main_config.resolutions_size-1;i>0;i--){ + int size; + config_str parsed = yon_char_parse(main_config.resolutions_sorted[i],&size,";"); + if (!yon_char_is_empty(parsed[0])){ + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->ResolutionCombo),parsed[0],g_hash_table_lookup(main_config.resolutions,parsed[0])); + } + yon_char_parsed_free(parsed,size); + } + } else { + char *resolutions = g_hash_table_lookup(main_config.ports_table,port_name); + int size; + config_str parsed =yon_char_parse(resolutions,&size,","); + for (int i=0;iResolutionCombo),parsed[i],cur_resolution); + } + } + GList *list = g_hash_table_get_keys(main_config.ports_table); + GList *iter = list; + for (;iter;iter=iter->next){ + if (strcmp(port_name,iter->data)){ + gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->PositionPortCombo),iter->data); + } + } +} + + +void on_monitor_configure(GtkWidget *,monitor_data *window){ + if(window){ + monitor_edit_window *monitors = new(monitor_edit_window); + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_configuration); + monitors->MainWindow = yon_gtk_builder_get_widget(builder, "MainWindow"); + monitors->StatusBox = yon_gtk_builder_get_widget(builder, "StatusBox"); + monitors->HeadLabel = yon_gtk_builder_get_widget(builder, "HeadLabel"); + monitors->EnableConfigurationBox = yon_gtk_builder_get_widget(builder, "EnableConfigurationBox"); + monitors->InterfaceConfigurationBox = yon_gtk_builder_get_widget(builder, "InterfaceConfigurationBox"); + monitors->EnableCheck = yon_gtk_builder_get_widget(builder, "EnableCheck"); + monitors->ManualCheck = yon_gtk_builder_get_widget(builder, "ManualCheck"); + monitors->PortCombo = yon_gtk_builder_get_widget(builder, "PortCombo"); + monitors->PortEntry = yon_gtk_builder_get_widget(builder, "PortEntry"); + monitors->MainCheck = yon_gtk_builder_get_widget(builder, "MainCheck"); + monitors->ResolutionCombo = yon_gtk_builder_get_widget(builder, "ResolutionCombo"); + monitors->UnsupportedCheck = yon_gtk_builder_get_widget(builder, "UnsupportedCheck"); + monitors->FrequencyCombo = yon_gtk_builder_get_widget(builder, "FrequencyCombo"); + monitors->RotationCombo = yon_gtk_builder_get_widget(builder, "RotationCombo"); + monitors->PositionPosCombo = yon_gtk_builder_get_widget(builder, "PositionPosCombo"); + monitors->PositionPortCombo = yon_gtk_builder_get_widget(builder, "PositionPortCombo"); + monitors->DoNotSwitchOffCheck = yon_gtk_builder_get_widget(builder, "DoNotSwitchOffCheck"); + monitors->ModelineCVTCheck = yon_gtk_builder_get_widget(builder, "ModelineCVTCheck"); + monitors->UseCVTReducedCheck = yon_gtk_builder_get_widget(builder, "UseCVTReducedCheck"); + monitors->ModelineGTFCheck = yon_gtk_builder_get_widget(builder, "ModelineGTFCheck"); + monitors->ParameterLineCheck = yon_gtk_builder_get_widget(builder, "ParameterLineCheck"); + + monitors->ParameterLineEntry = yon_gtk_builder_get_widget(builder, "ParameterLineEntry"); + monitors->CancelButton = yon_gtk_builder_get_widget(builder, "CancelButton"); + monitors->SaveButton = yon_gtk_builder_get_widget(builder, "SaveButton"); + + char *title; + char *cur_port = (char*)gtk_label_get_text(GTK_LABEL(window->NameLabel)); + if (!yon_char_is_empty(cur_port)){ + title = MONITOR_TITLE_LABEL(cur_port); + } else { + title=TITLE_LABEL; + } + + gtk_label_set_text(GTK_LABEL(monitors->HeadLabel),title); + + yon_gtk_entry_block_restricted_symbols(GTK_ENTRY(monitors->PortEntry)); + + g_signal_connect(G_OBJECT(monitors->ManualCheck),"toggled",G_CALLBACK(yon_monitor_port_manual),monitors); + g_signal_connect(G_OBJECT(monitors->CancelButton), "clicked", G_CALLBACK(on_subwindow_close), NULL); + g_signal_connect(G_OBJECT(monitors->SaveButton), "clicked", G_CALLBACK(on_monitor_config_save), monitors); + g_signal_connect(G_OBJECT(monitors->ParameterLineCheck), "toggled", G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed), monitors->InterfaceConfigurationBox); + g_signal_connect(G_OBJECT(monitors->ParameterLineCheck), "toggled", G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button), monitors->ParameterLineEntry); + g_signal_connect(G_OBJECT(monitors->UnsupportedCheck), "toggled", G_CALLBACK(on_resolutions_unsupported_show),monitors); + g_signal_connect(G_OBJECT(monitors->PortCombo), "changed", G_CALLBACK(on_port_chosen_changed),monitors); + yon_gtk_window_setup(GTK_WINDOW(monitors->MainWindow),GTK_WINDOW(main_config.widgets->Window),title,"com.ublinux.ubl-settings-video","VieoConfigWindow"); + + char *target = (char*)gtk_label_get_text(GTK_LABEL(window->NameLabel)); + + monitors->curport=NULL; + int config_size; + config_str config_ports = yon_config_get_all_by_key(XORG_PARAMETER,&config_size); + for (int i=0;iFrequencyCombo),current); + + } else if (g_regex_match_simple("^\\d+x\\d+",current,0,0)){ + resolution = current; + } + + if (!yon_char_is_empty(target)&&!yon_char_is_empty(resolutions)&&!strstr(resolutions,resolution)){ + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(monitors->UnsupportedCheck),1); + while(gtk_events_pending()) gtk_main_iteration(); + + } + + gtk_combo_box_set_active_id(GTK_COMBO_BOX(monitors->ResolutionCombo),resolution); + } + } + gtk_widget_show(monitors->MainWindow); + } +} + +void yon_monitor_view_dictionary_destroy(void *window){ + monitor_data *monitor=(monitor_data*)window; + gtk_widget_destroy(monitor->ScreenOverlay); +} + +/**void yon_monitor_view_update() + * [EN] +*/ +void yon_monitor_view_update(){ + GList *list = gtk_container_get_children(GTK_CONTAINER(main_config.widgets->MonitorsBox)); + for (guint i=0;i-1){ + monitor_data *window = yon_monitor_new(main_config.widgets,0); + free(yon_char_divide(current,strlen(XORG_PARAMETER))); + yon_char_remove_last_symbol(current,']'); + gtk_label_set_text(GTK_LABEL(window->NameLabel),current); + int parsed_size; + config_str parsed = yon_char_parse(parameters[i],&parsed_size,","); + if (parsed_size>0){ + if (strstr(parsed[0],"x")){ + gtk_label_set_text(GTK_LABEL(window->ResoulutionLabel),parsed[0]); + } + } + if (yon_char_parsed_check_exist(parsed,parsed_size,"enable")>-1){ + gtk_widget_set_sensitive(window->MonitorImage,1); + } + yon_char_parsed_free(parsed,parsed_size); + } + } +} + +monitor_data *yon_monitor_new(main_window *widgets,int dull){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_monitor); + monitor_data *window = new(monitor_data); + window->ScreenOverlay=yon_gtk_builder_get_widget(builder,"ScreenOverlay"); + window->MonitorImage=yon_gtk_builder_get_widget(builder,"MonitorImage"); + window->MonitorInfoBox=yon_gtk_builder_get_widget(builder,"MonitorInfoBox"); + window->NameLabel=yon_gtk_builder_get_widget(builder,"NameLabel"); + window->ResoulutionLabel=yon_gtk_builder_get_widget(builder,"ResoulutionLabel"); + window->DeleteButton=yon_gtk_builder_get_widget(builder,"DeleteButton"); + window->SwitchButton=yon_gtk_builder_get_widget(builder,"SwitchButton"); + window->ConfigureButton=yon_gtk_builder_get_widget(builder,"ConfigureButton"); + window->AddButton=yon_gtk_builder_get_widget(builder,"AddButton"); + window->target_port=NULL; + window->target_resolution=NULL; + + gtk_overlay_add_overlay(GTK_OVERLAY(window->ScreenOverlay),window->MonitorInfoBox); + if (!dull){ + gtk_widget_hide(window->AddButton); + g_signal_connect(G_OBJECT(window->ConfigureButton), "clicked", G_CALLBACK(on_monitor_configure), window); + + g_signal_connect(G_OBJECT(window->DeleteButton), "clicked", G_CALLBACK(on_monitor_delete), window); + g_signal_connect(G_OBJECT(window->SwitchButton), "clicked", G_CALLBACK(on_monitor_switch), window); + } else { + gtk_widget_show(window->AddButton); + gtk_widget_hide(window->DeleteButton); + gtk_widget_hide(window->SwitchButton); + gtk_widget_hide(window->ConfigureButton); + g_signal_connect(G_OBJECT(window->AddButton), "clicked", G_CALLBACK(on_monitor_add), widgets); + } + + GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->MonitorsBox)); + gtk_flow_box_insert(GTK_FLOW_BOX(widgets->MonitorsBox),window->ScreenOverlay,g_list_length(list)-1); + g_list_free(list); + return window; +} diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index e2c2fa5..77d0a83 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -2,222 +2,8 @@ config main_config; -void on_terminal_done(GtkWidget *, int , main_window *widgets){ - vte_terminal_feed_child(VTE_TERMINAL(widgets->InstallTerminal),"^C",2); -} - -void on_terminal_more(GtkWidget *, main_window *widgets){ - int active = gtk_revealer_get_child_revealed(GTK_REVEALER(widgets->TerminalMoreRevieler)); - if (active ==1) active = 0; - else active=1; -gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalMoreRevieler),active); -} - - -gboolean on_command_execute_success(GtkWidget *self,gint status,main_window *widgets){ - yon_install_buttons_set_sensitive(widgets,1); - vte_terminal_set_input_enabled(VTE_TERMINAL(self),0); - g_mutex_lock(&main_config.progress_mutex); - main_config.progress_active=0; - g_mutex_unlock(&main_config.progress_mutex); - if (!status){ - yon_ubl_status_box_render(yon_char_unite(yon_char_get_localised_from_lib(SUCCESS_LABEL),". ",PROPRIETARY_LOADING_LABEL,NULL),BACKGROUND_IMAGE_SUCCESS_TYPE); - } else { - yon_ubl_status_box_render(yon_char_get_localised_from_lib(FAIL_LABEL),BACKGROUND_IMAGE_FAIL_TYPE); - - } - while(gtk_events_pending()) gtk_main_iteration(); - on_terminal_done(self,0,widgets); - gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel),0); - return G_SOURCE_REMOVE; -} - -gboolean on_terminal_check_progress(main_window *widgets){ - g_mutex_lock(&main_config.progress_mutex); - if (!main_config.progress_active){ - g_mutex_unlock(&main_config.progress_mutex); - return G_SOURCE_REMOVE; - } - gtk_progress_bar_pulse(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel)); - g_mutex_unlock(&main_config.progress_mutex); - return G_SOURCE_CONTINUE; -} - -void on_command_cancel(GtkWidget *,main_window *widgets){ - g_mutex_lock(&main_config.progress_mutex); - main_config.progress_active=0; - g_mutex_unlock(&main_config.progress_mutex); - on_terminal_done(NULL,0,widgets); -} - -void on_driver_pack_selection_change(GtkWidget *, GtkListBoxRow *selection, main_window *widgets){ - if (selection){ - driver_struct *driver = g_object_get_data(G_OBJECT(selection),"driver_struct"); - if (driver->supported_devices_avaliable){ - gtk_widget_set_sensitive(widgets->SupportedDevicesButton,1); - } else { - gtk_widget_set_sensitive(widgets->SupportedDevicesButton,0); - } - gtk_widget_set_sensitive(widgets->AboutModuleButton,1); - gtk_widget_set_sensitive(widgets->AboutPackageButton,1); - } else { - gtk_widget_set_sensitive(widgets->SupportedDevicesButton,0); - gtk_widget_set_sensitive(widgets->AboutModuleButton,0); - gtk_widget_set_sensitive(widgets->AboutPackageButton,0); - } -} - -gpointer yon_driver_info_launch(void *command){ - if (!system((char*)command)){ - yon_ubl_status_box_render_thread(yon_char_get_localised_from_lib(SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); - } else { - yon_ubl_status_box_render_thread(yon_char_get_localised_from_lib(FAIL_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); - } - return NULL; -} - -void on_driver_pack_info(GtkWidget *, main_window *widgets){ - GtkWidget *selection = GTK_WIDGET(gtk_list_box_get_selected_row(GTK_LIST_BOX(widgets->DriversList))); - if (selection){ - driver_struct *driver = g_object_get_data(G_OBJECT(selection),"driver_struct"); - - yon_ubl_status_box_render(yon_char_get_localised_from_lib(INFO_PROCESS_LABEL),BACKGROUND_IMAGE_INFO_TYPE); - char *command = get_info_proprietary_command(driver->package); - g_thread_new("info_thread",yon_driver_info_launch,(void*)command); - } else { - yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); - } -} - -void on_driver_module_info(GtkWidget *, main_window *widgets){ - GtkWidget *selection = GTK_WIDGET(gtk_list_box_get_selected_row(GTK_LIST_BOX(widgets->DriversList))); - if (selection){ - driver_struct *driver = g_object_get_data(G_OBJECT(selection),"driver_struct"); - - yon_ubl_status_box_render(yon_char_get_localised_from_lib(INFO_PROCESS_LABEL),BACKGROUND_IMAGE_INFO_TYPE); - char *command = get_info_proprietary_command(driver->module); - g_thread_new("info_thread",yon_driver_info_launch,(void*)command); - } else { - yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); - } -} - -gboolean yon_filter_func(GtkTreeModel* model,GtkTreeIter* iter,main_window *widgets){ - const char *target = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(widgets->KernelsCombo)); - char *cur; - gtk_tree_model_get(model,iter,2,&cur,-1); - if (!yon_char_is_empty(cur)&&!yon_char_is_empty(target)&&!strcmp(cur,target))return 1; - return 0; -} - -void on_kernel_filter_changed(GtkWidget *self, main_window *widgets){ - const char *active = gtk_combo_box_get_active_id(GTK_COMBO_BOX(self)); - if (!yon_char_is_empty(active)){ - GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->DriversList)); - for (GList *iter = list; iter; iter=iter->next){ - driver_struct *driver = g_object_get_data(G_OBJECT(iter->data),"driver_struct"); - if (!strcmp(driver->kernel,active)){ - gtk_widget_show(GTK_WIDGET(iter->data)); - } else { - gtk_widget_hide(GTK_WIDGET(iter->data)); - } - } - g_list_free(list); - } else { - GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->DriversList)); - for (GList *iter = list; iter; iter=iter->next){ - gtk_widget_show(GTK_WIDGET(iter->data)); - } - g_list_free(list); - } -} - -void on_port_chosen_changed(GtkWidget *, monitor_edit_window *window){ - dictionary *dict=NULL; - for (int i=0;iresolutionssize;i++){ - free(window->resolutions); - } - window->resolutions=NULL; - window->resolutionssize=0; - int portid=gtk_combo_box_get_active(GTK_COMBO_BOX(window->PortCombo)); - if (portid){ - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->ResolutionCombo)); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->ResolutionCombo),PARAMETER_DEFAULT_LABEL); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->ResolutionCombo),0); - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->PositionPortCombo)); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->PositionPortCombo),PARAMETER_DEFAULT_LABEL); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->PositionPortCombo),0); - char *port_name = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->PortCombo)); - dict=yon_dictionary_get(&main_config.supported_resolutions,port_name); - if (dict){ - int size; - config_str resolutions = yon_resource_open_file(get_resolutions_supportable_command,&size); - resolutions = yon_char_parsed_rip(resolutions,&size,0); - for (int i=0;isize;i++){ - for (int j=1;jline[i])){ - found = j; - break; - } - } - if (found>-1){ - char *current = yon_char_new(resolutions[found]); - int parsed_size; - config_str parsed = yon_char_parse(current,&parsed_size,";"); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->ResolutionCombo),yon_char_parsed_to_string(parsed,parsed_size," ")); - yon_char_parsed_free(parsed,parsed_size); - } else - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->ResolutionCombo),res->line[i]); - } - } - for (int i=0;iPositionPortCombo),main_config.ports[i]); - } - } - } -} - -void on_sensitive_change(GtkWidget *self, GtkWidget *toggle){ - int state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); - - gtk_widget_set_sensitive(toggle, state); -} - -void on_sensitive_change_reversed(GtkWidget *self, GtkWidget *toggle){ - int state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); - - gtk_widget_set_sensitive(toggle, !state); -} - -void on_auto_choose_drivers(GtkWidget *self, main_window *){ - int state = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self)); - main_config.autoChooseDrivers=state; -} - -void on_resolutions_unsupported_show(GtkToggleButton *self, monitor_edit_window *window){ - gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(window->ResolutionCombo)); - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(window->ResolutionCombo),PARAMETER_DEFAULT_LABEL); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->ResolutionCombo),0); - if (gtk_toggle_button_get_active(self)){ - int size; - config_str resolutions = yon_resource_open_file(get_resolutions_supportable_command,&size); - for (int i=1;iResolutionCombo),yon_char_parsed_to_string(parsed,parsed_size," ")); - yon_char_parsed_free(parsed,parsed_size); - } - yon_char_parsed_free(resolutions,size); - } else { - on_port_chosen_changed(window->PortCombo,window); - } +void on_resolutions_unsupported_show(GtkToggleButton *, monitor_edit_window *window){ + on_port_chosen_changed(NULL,window); } void on_save_done(main_window *, config_str output, int size){ @@ -331,13 +117,11 @@ void yon_interface_save(){ } void yon_interface_update(){ - if (main_config.ports&&main_config.portssize>0){ - yon_char_parsed_free(main_config.ports,main_config.portssize); - } - main_config.ports=yon_config_load(get_ports_command,&main_config.portssize); - for (int i=0;iScreenOverlay); - GtkWidget *flow_box = gtk_widget_get_parent(target); - gtk_container_remove(GTK_CONTAINER(flow_box),target); - const char *target_monitor = gtk_label_get_text(GTK_LABEL(window->NameLabel)); - if (!yon_char_is_empty(target_monitor)){ - yon_config_remove_by_key(XORG_MONITOR((char*)target_monitor)); - } - free(window); - } -} - -/**void on_monitor_switch(GtkWidget *self,monitor_data *window) - * [EN] -*/ -void on_monitor_switch(GtkWidget *,monitor_data *window){ - if(window){ - 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); - - } -} - -/**void on_monitor_add(GtkWidget *self,monitor_data *window) - * [EN] -*/ -void on_monitor_add(GtkWidget *,main_window *widgets){ - if(widgets){ - yon_monitor_new(widgets,0); - } -} - -void on_monitor_config_save(GtkWidget *, monitor_edit_window *window){ - int enabled=0; - char *target=NULL; - int main_display=0; - char *resolution = NULL; - const char *frequency = NULL; - char *rotate = NULL; - char *position = NULL; - int modeline_cvt = 0; - int cvt_reduced = 0; - int modeline_gtf = 0; - int do_not_switch_off = 0; - enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->EnableCheck)); - if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->PortCombo))){ - target = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->PortCombo)); - main_display = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->MainCheck)); - if (gtk_combo_box_get_active(GTK_COMBO_BOX(window->ResolutionCombo))){ - 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("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))); - } - modeline_cvt = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->ModelineCVTCheck)); - cvt_reduced = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->UseCVTReducedCheck)); - modeline_gtf = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->ModelineGTFCheck)); - do_not_switch_off = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DoNotSwitchOffCheck)); - - int final_size; - config_str final_parsed=NULL; - if (resolution) - yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,resolution); - if (modeline_cvt) - yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"cvt"); - if (modeline_gtf) - yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"gtf"); - if (cvt_reduced) - yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"reduced"); - if (enabled) - yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"enable"); - if (!enabled) - yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"disable"); - if (main_display) - yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"primary"); - if (do_not_switch_off){ - yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"dpms"); - }else{ - yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,"nodpms"); - } - if (position) - yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,position); - if (rotate) - yon_char_parsed_add_or_create_if_exists(final_parsed,&final_size,rotate); - char *final_string = yon_char_parsed_to_string(final_parsed,final_size,","); - yon_config_register(XORG_MONITOR(target),XORG_MONITOR_get_command,final_string); - on_subwindow_close(window->MainWindow); - } else { - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),MISSING_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(window->PortCombo); - } - yon_monitor_view_update(); -} - -void 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){ - for (int i=0; iModelineCVTCheck),1); - } else if (!strcmp(parsed[i],"gtf")){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->ModelineGTFCheck),1); - - } else if (!strcmp(parsed[i],"reduced")||!strcmp(parsed[i],"r")){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UseCVTReducedCheck),1); - - } else if (!strcmp(parsed[i],"dpms")){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DoNotSwitchOffCheck),1); - - } else if (!strcmp(parsed[i],"nodpms")){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DoNotSwitchOffCheck),0); - - } else if (!strcmp(parsed[i],"enable")){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->EnableCheck),1); - - } else if (!strcmp(parsed[i],"disable")){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->EnableCheck),0); - - } else if (!strcmp(parsed[i],"cvt")){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->ModelineCVTCheck),1); - - } else if (!strcmp(parsed[i],"primary")){ - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->MainCheck),1); - - } else if (strstr(parsed[i],"lo:")||strstr(parsed[i],"LeftOf:")){ - yon_char_divide_search(parsed[i],":",-1); - int target = yon_gtk_combo_box_text_find(window->PositionPortCombo,parsed[i]); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),target); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->PositionPosCombo),1); - - } else if (strstr(parsed[i],"ro:")||strstr(parsed[i],"RightOf:")){ - yon_char_divide_search(parsed[i],":",-1); - yon_gtk_combo_box_text_find(window->PositionPortCombo,parsed[i]); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->PositionPosCombo),2); - - } else if (strstr(parsed[i],"ab:")||strstr(parsed[i],"Above:")){ - yon_char_divide_search(parsed[i],":",-1); - yon_gtk_combo_box_text_find(window->PositionPortCombo,parsed[i]); - gtk_combo_box_set_active(GTK_COMBO_BOX(window->PositionPosCombo),3); - - } 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:")){ - 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")){ - gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),1); - - } else if (!strcmp(parsed[i],"right")){ - gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),2); - - } else if (!strcmp(parsed[i],"invert")){ - gtk_combo_box_set_active(GTK_COMBO_BOX(window->RotationCombo),3); - - } - - } 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); - } - } - } -} - -void on_monitor_configure(GtkWidget *,monitor_data *window){ - if(window){ - monitor_edit_window *monitors = new(monitor_edit_window); - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_configuration); - monitors->MainWindow = GTK_WIDGET(gtk_builder_get_object(builder, "MainWindow")); - monitors->StatusBox = GTK_WIDGET(gtk_builder_get_object(builder, "StatusBox")); - monitors->HeadLabel = GTK_WIDGET(gtk_builder_get_object(builder, "HeadLabel")); - monitors->EnableConfigurationBox = GTK_WIDGET(gtk_builder_get_object(builder, "EnableConfigurationBox")); - monitors->InterfaceConfigurationBox = GTK_WIDGET(gtk_builder_get_object(builder, "InterfaceConfigurationBox")); - monitors->EnableCheck = GTK_WIDGET(gtk_builder_get_object(builder, "EnableCheck")); - monitors->PortCombo = GTK_WIDGET(gtk_builder_get_object(builder, "PortCombo")); - monitors->MainCheck = GTK_WIDGET(gtk_builder_get_object(builder, "MainCheck")); - monitors->ResolutionCombo = GTK_WIDGET(gtk_builder_get_object(builder, "ResolutionCombo")); - monitors->UnsupportedCheck = GTK_WIDGET(gtk_builder_get_object(builder, "UnsupportedCheck")); - monitors->FrequencyCombo = GTK_WIDGET(gtk_builder_get_object(builder, "FrequencyCombo")); - monitors->RotationCombo = GTK_WIDGET(gtk_builder_get_object(builder, "RotationCombo")); - monitors->PositionPosCombo = GTK_WIDGET(gtk_builder_get_object(builder, "PositionPosCombo")); - monitors->PositionPortCombo = GTK_WIDGET(gtk_builder_get_object(builder, "PositionPortCombo")); - monitors->DoNotSwitchOffCheck = GTK_WIDGET(gtk_builder_get_object(builder, "DoNotSwitchOffCheck")); - monitors->ModelineCVTCheck = GTK_WIDGET(gtk_builder_get_object(builder, "ModelineCVTCheck")); - monitors->UseCVTReducedCheck = GTK_WIDGET(gtk_builder_get_object(builder, "UseCVTReducedCheck")); - monitors->ModelineGTFCheck = GTK_WIDGET(gtk_builder_get_object(builder, "ModelineGTFCheck")); - monitors->ParameterLineCheck = GTK_WIDGET(gtk_builder_get_object(builder, "ParameterLineCheck")); - - monitors->ParameterLineEntry = GTK_WIDGET(gtk_builder_get_object(builder, "ParameterLineEntry")); - monitors->CancelButton = GTK_WIDGET(gtk_builder_get_object(builder, "CancelButton")); - monitors->SaveButton = GTK_WIDGET(gtk_builder_get_object(builder, "SaveButton")); - - char *title; - char *cur_port = (char*)gtk_label_get_text(GTK_LABEL(window->NameLabel)); - if (!yon_char_is_empty(cur_port)){ - title = MONITOR_TITLE_LABEL(cur_port); - } else { - title=TITLE_LABEL; - } - - gtk_label_set_text(GTK_LABEL(monitors->HeadLabel),title); - - g_signal_connect(G_OBJECT(monitors->CancelButton), "clicked", G_CALLBACK(on_subwindow_close), NULL); - g_signal_connect(G_OBJECT(monitors->SaveButton), "clicked", G_CALLBACK(on_monitor_config_save), monitors); - g_signal_connect(G_OBJECT(monitors->ParameterLineCheck), "toggled", G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed), monitors->InterfaceConfigurationBox); - g_signal_connect(G_OBJECT(monitors->ParameterLineCheck), "toggled", G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button), monitors->ParameterLineEntry); - g_signal_connect(G_OBJECT(monitors->UnsupportedCheck), "toggled", G_CALLBACK(on_resolutions_unsupported_show),monitors); - g_signal_connect(G_OBJECT(monitors->PortCombo), "changed", G_CALLBACK(on_port_chosen_changed),monitors); - yon_gtk_window_setup(GTK_WINDOW(monitors->MainWindow),GTK_WINDOW(main_config.widgets->Window),title,"com.ublinux.ubl-settings-video","VieoConfigWindow"); - - char *target = (char*)gtk_label_get_text(GTK_LABEL(window->NameLabel)); - - monitors->curport=NULL; - int config_size; - config_str config_ports = yon_config_get_all_by_key(XORG_PARAMETER,&config_size); - for (int i=0;i-1){ - monitor_data *window = yon_monitor_new(main_config.widgets,0); - free(yon_char_divide(current,strlen(XORG_PARAMETER))); - current[strlen(current)-1]='\0'; - gtk_label_set_text(GTK_LABEL(window->NameLabel),current); - int parsed_size; - config_str parsed = yon_char_parse(parameters[i],&parsed_size,","); - if (parsed_size>0){ - if (strstr(parsed[0],"x")){ - gtk_label_set_text(GTK_LABEL(window->ResoulutionLabel),parsed[0]); - } - } - if (yon_char_parsed_check_exist(parsed,parsed_size,"enable")>-1){ - gtk_widget_set_sensitive(window->MonitorImage,1); - } - yon_char_parsed_free(parsed,parsed_size); - } - } -} - -gboolean yon_proprietary_clear(main_window *widgets){ - GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->DriversList)); - GList *iter = NULL; - for (iter = list; iter; iter=iter->next){ - driver_struct *driver = g_object_get_data(G_OBJECT(iter->data),"driver_struct"); - free(driver->name); - free(driver->module); - free(driver->package); - free(driver->kernel); - free(driver->description); - free(driver->devices); - gtk_widget_destroy(GTK_WIDGET(iter->data)); - } - // gtk_widget_set_sensitive(widgets->LoadDriversButton,0); - // gtk_list_store_clear(main_config.list); - // gtk_list_store_clear(main_config.list2); - // gtk_spinner_start(GTK_SPINNER(widgets->DriversLoadingSpinner)); - // gtk_widget_show(widgets->DriversLoadingSpinner); - // gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->KernelsCombo)); - // gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->KernelsCombo),ALL_INSTALLED_KERNELS_LABEL); - // gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KernelsCombo),0); - return G_SOURCE_REMOVE; -} - -void yon_drivers_resize(main_window *widgets){ - GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->DriversList)); - GList *iter; - int module_width=0; - int package_width=0; - int kernel_width=0; - int driver_width=0; - int description_width=0; - gtk_widget_get_preferred_width(widgets->InstalledModuleLabel,&module_width,NULL); - gtk_widget_get_preferred_width(widgets->InstalledPackageLabel,&package_width,NULL); - gtk_widget_get_preferred_width(widgets->KernelLabel,&kernel_width,NULL); - gtk_widget_get_preferred_width(widgets->DriverLabel,&driver_width,NULL); - gtk_widget_get_preferred_width(widgets->DescriptionLabel,NULL,&description_width); - for (iter = list;iter;iter=iter->next){ - driver_struct *data = g_object_get_data(G_OBJECT(iter->data),"driver_struct"); - gtk_widget_realize(data->ModuleInstalledCheck); - gtk_widget_realize(data->PackageInstalledCheck); - gtk_widget_realize(data->KernelLabel); - gtk_widget_realize(data->DriverLabel); - gtk_widget_realize(data->DescriptionLabel); - gtk_widget_realize(data->DevicesBox); - int temp_width = 0; - gtk_widget_get_preferred_width(data->ModuleInstalledCheck,&temp_width,NULL); - if (temp_width > module_width) module_width=temp_width; - gtk_widget_get_preferred_width(data->PackageInstalledCheck,&temp_width,NULL); - if (temp_width > package_width) package_width=temp_width; - gtk_widget_get_preferred_width(data->KernelLabel,&temp_width,NULL); - if (temp_width > kernel_width) kernel_width=temp_width; - gtk_widget_get_preferred_width(data->DriverLabel,&temp_width,NULL); - if (temp_width > driver_width) driver_width=temp_width; - gtk_widget_get_preferred_width(data->DescriptionLabel,NULL,&temp_width); - if (temp_width > description_width) description_width=temp_width; - } - if (module_width||package_width||kernel_width||driver_width||description_width){ - for (iter = list;iter;iter=iter->next){ - driver_struct *data = g_object_get_data(G_OBJECT(iter->data),"driver_struct"); - if (module_width) - gtk_widget_set_size_request(gtk_widget_get_parent(data->ModuleInstalledCheck),module_width,-1); - if (package_width) - gtk_widget_set_size_request(gtk_widget_get_parent(data->PackageInstalledCheck),package_width,-1); - if (kernel_width) - gtk_widget_set_size_request(gtk_widget_get_parent(data->KernelLabel),kernel_width,-1); - if (driver_width) - gtk_widget_set_size_request(gtk_widget_get_parent(data->DriverLabel),driver_width,-1); - if (description_width) - gtk_widget_set_size_request(gtk_widget_get_parent(data->DescriptionLabel),description_width,-1); - } - g_list_free(list); - if (module_width) gtk_widget_set_size_request(widgets->InstalledModuleLabel,module_width,-1); - if (package_width) gtk_widget_set_size_request(widgets->InstalledPackageLabel,package_width,-1); - if (kernel_width) gtk_widget_set_size_request(widgets->KernelLabel,kernel_width,-1); - if (driver_width) gtk_widget_set_size_request(widgets->DriverLabel,driver_width,-1); - if (description_width) gtk_widget_set_size_request(widgets->DescriptionLabel,description_width,-1); - } -} - -gboolean yon_proprietary_set(main_window *widgets){ - gtk_widget_set_sensitive(widgets->LoadDriversButton,1); - return G_SOURCE_REMOVE; -} - - -gboolean yon_proprietary_append(driver_struct *){ - // GtkTreeIter iter; - // gtk_list_store_append(main_config.list,&iter); - // gtk_list_store_set(main_config.list,&iter,0,target->module_status,1,target->package_status,2,target->drivers[0],3,target->drivers[3],4,_(target->drivers[4]),5,_(target->drivers[5]),7,target->drivers[1],8,target->drivers[2],9,!yon_char_is_empty(target->drivers[1])&&target->module_exist,10,!yon_char_is_empty(target->drivers[2])&&target->package_exist,-1); - // free(target); - return G_SOURCE_REMOVE; -} - -gboolean yon_proprietary_append_kernels(struct proprietary_kernel_append_struct *append){ - gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(append->widgets->KernelsCombo),append->kernel,append->kernel); - free(append->kernel); - free(append); - return G_SOURCE_REMOVE; -} - gboolean yon_proprietary_connect(main_window *widgets){ gtk_spinner_stop(GTK_SPINNER(widgets->DriversLoadingSpinner)); gtk_widget_hide(widgets->DriversLoadingSpinner); @@ -981,7 +329,7 @@ void yon_proprietary_local_get(main_window *widgets){ struct proprietary_kernel_append_struct *cur = malloc(sizeof(struct proprietary_kernel_append_struct)); cur->widgets=widgets; cur->kernel=yon_char_new(kernels_installed[i]); - g_idle_add((GSourceFunc)yon_proprietary_append_kernels,cur); + yon_proprietary_append_kernels(cur); } int size; @@ -990,7 +338,6 @@ void yon_proprietary_local_get(main_window *widgets){ for (int i=1;iDriversList),list_row,-1); yon_driver_struct_update(widgets,target); - // yon_proprietary_append(cur); free(current); } } if (dr_desc==size-1) { - g_idle_add((GSourceFunc)yon_proprietary_connect,widgets); + yon_proprietary_connect(widgets); } } if (!size){ - g_idle_add((GSourceFunc)yon_proprietary_connect,widgets); + 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); - g_idle_add((GSourceFunc)yon_proprietary_set,widgets); + yon_proprietary_set(widgets); yon_drivers_resize(widgets); } @@ -1045,82 +391,24 @@ void yon_proprietary_get_thread(GtkWidget *,main_window *widgets){ yon_proprietary_local_get(widgets); } -void yon_monitor_view_dictionary_destroy(void *window){ - monitor_data *monitor=(monitor_data*)window; - gtk_widget_destroy(monitor->ScreenOverlay); -} - -monitor_data *yon_monitor_new(main_window *widgets,int dull){ - GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_monitor); - monitor_data *window = new(monitor_data); - window->ScreenOverlay=yon_gtk_builder_get_widget(builder,"ScreenOverlay"); - window->MonitorImage=yon_gtk_builder_get_widget(builder,"MonitorImage"); - window->MonitorInfoBox=yon_gtk_builder_get_widget(builder,"MonitorInfoBox"); - window->NameLabel=yon_gtk_builder_get_widget(builder,"NameLabel"); - window->ResoulutionLabel=yon_gtk_builder_get_widget(builder,"ResoulutionLabel"); - window->DeleteButton=yon_gtk_builder_get_widget(builder,"DeleteButton"); - window->SwitchButton=yon_gtk_builder_get_widget(builder,"SwitchButton"); - window->ConfigureButton=yon_gtk_builder_get_widget(builder,"ConfigureButton"); - window->AddButton=yon_gtk_builder_get_widget(builder,"AddButton"); - gtk_overlay_add_overlay(GTK_OVERLAY(window->ScreenOverlay),window->MonitorInfoBox); - if (!dull){ - gtk_widget_hide(window->AddButton); - g_signal_connect(G_OBJECT(window->ConfigureButton), "clicked", G_CALLBACK(on_monitor_configure), window); - - g_signal_connect(G_OBJECT(window->DeleteButton), "clicked", G_CALLBACK(on_monitor_delete), window); - g_signal_connect(G_OBJECT(window->SwitchButton), "clicked", G_CALLBACK(on_monitor_switch), window); - } else { - gtk_widget_show(window->AddButton); - gtk_widget_hide(window->DeleteButton); - gtk_widget_hide(window->SwitchButton); - gtk_widget_hide(window->ConfigureButton); - g_signal_connect(G_OBJECT(window->AddButton), "clicked", G_CALLBACK(on_monitor_add), widgets); +void yon_all_resolutions_update(){ + main_config.resolutions_sorted = yon_resource_open_file(get_resolutions_supportable_command,&main_config.resolutions_size); + for (int i=1;iMonitorsBox)); - gtk_flow_box_insert(GTK_FLOW_BOX(widgets->MonitorsBox),window->ScreenOverlay,g_list_length(list)-1); - g_list_free(list); - return window; } void yon_monitor_set_resolutions(){ - dictionary *dact=NULL; - int size_connected=0; - config_str connected_ports = yon_config_load(get_resolution_ports_command,&size_connected); - int resolutions_size=0; - config_str resolutions = yon_config_load(get_resolutions_command,&resolutions_size); - for (int i=0;iline=resol; - supported->size=0; - yon_dictionary_add_or_create_if_exists_with_data(main_config.supported_resolutions,connected_ports[i],supported); - } - for(int i=0;idata)){ - equals=1; - port_for_res=NULL; - } - if (cur_pos>*((int*)dct->data)&&equals==0) - port_for_res=yon_char_new(dct->key); - } - if(port_for_res){ - dct=yon_dictionary_get(&main_config.supported_resolutions,port_for_res); - resolution_supported *sup=yon_dictionary_get_data(dct,resolution_supported*); - sup->size++; - sup->line=realloc(sup->line,sizeof(char*)*sup->size); - sup->line[sup->size-1]=yon_char_new(yon_char_divide_search(resolutions[i],"\n",-1)); + int size; + config_str ports = yon_config_load(get_resolutions_and_ports_command,&size); + for(int i=0;i1){ + g_hash_table_insert(main_config.ports_table,parsed[0],parsed[1]); } } } @@ -1321,6 +609,119 @@ int check_rmb_menu(void *data){ return 0; } +char *yon_auto_driver_default(char *target){ + char *final = NULL; + if (!yon_char_is_empty(target)){ + if (!strcmp(target,"yes")){ + final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(ON_LABEL)); + } else if (!strcmp(target,"no")){ + final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(OFF_LABEL)); + } + + } else { + final = yon_char_get_localised_from_lib(DEFAULT_LABEL); + } + return final; +} + +char *yon_free_driver_default(char *target){ + char *final = NULL; + if (!yon_char_is_empty(target)){ + if (!strcmp(target,"yes")){ + final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(FREE_DRIVERS_ON_LABEL)); + } else if (!strcmp(target,"no")){ + final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(NOUVEAU_RADEON_OFF_LABEL)); + } else if (!strcmp(target,"nouveau")){ + final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(RADEON_OFF_LABEL)); + } else if (!strcmp(target,"radeon")){ + final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(NOUVEAU_OFF_LABEL)); + } + } else { + final = yon_char_get_localised_from_lib(DEFAULT_LABEL); + } + return final; +} + +char *yon_failsafe_driver_default(char *target){ + char *final=NULL; + if (!yon_char_is_empty(target)){ + final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(target)); + } else { + final = yon_char_get_localised_from_lib(DEFAULT_LABEL); + } + return final; +} + +char *yon_ati_driver_default(char *target){ + char *final=NULL; + if (!yon_char_is_empty(target)){ + final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(target)); + + } else { + final = yon_char_get_localised_from_lib(DEFAULT_LABEL); + } + return final; +} + +char *yon_switch_display_off_default(char *target){ + char *final=NULL; + if (!yon_char_is_empty(target)){ + if (!strcmp(target,"dpms")){ + final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(ON_LABEL)); + } else if (!strcmp(target,"nodpms")){ + final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(OFF_LABEL)); + } + + } else { + final = yon_char_get_localised_from_lib(DEFAULT_LABEL); + } + return final; +} + +char *yon_scaling_default(char *target){ + char *final=NULL; + if (!yon_char_is_empty(target)){ + final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(target)); + + } else { + final = yon_char_get_localised_from_lib(DEFAULT_LABEL); + } + return final; +} + +char *yon_discrete_default(char *target){ + char *final=NULL; + if (!yon_char_is_empty(target)){ + final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(target)); + + } else { + final = yon_char_get_localised_from_lib(DEFAULT_LABEL); + } + return final; +} + +char *yon_optirun_default(char *target){ + char *final=NULL; + if (!yon_char_is_empty(target)){ + final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(target)); + + } else { + final = yon_char_get_localised_from_lib(DEFAULT_LABEL); + } + return final; +} + +char *yon_primusrun_default(char *target){ + char *final=NULL; + if (!yon_char_is_empty(target)){ + final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(target)); + + } else { + final = yon_char_get_localised_from_lib(DEFAULT_LABEL); + } + return final; +} + /** void yon_setup_widgets(main_window *widgets) * [EN] * Sets up every element on main window @@ -1335,6 +736,9 @@ template_main_window *yon_main_window_complete(main_window *widgets){ gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),widgets->MainBox,1,1,0); // Custom widgets configuration { + widgets->MainOverlay = yon_gtk_builder_get_widget(builder,"MainOverlay"); + widgets->MainSpinner = yon_gtk_builder_get_widget(builder,"MainSpinner"); + widgets->AutoDriverCombo = yon_gtk_builder_get_widget(builder,"AutoDriverCombo"); widgets->FreeDriverCombo = yon_gtk_builder_get_widget(builder,"FreeDriverCombo"); widgets->FailsafeNvidiaCombo = yon_gtk_builder_get_widget(builder,"FailsafeNvidiaCombo"); @@ -1370,19 +774,16 @@ template_main_window *yon_main_window_complete(main_window *widgets){ widgets->DevicesLabel = yon_gtk_builder_get_widget(builder,"DevicesLabel"); widgets->MoreButton = yon_gtk_builder_get_widget(builder,"TerminalMoreButton"); + widgets->UnlockPacmanButton = yon_gtk_builder_get_widget(builder,"UnlockPacmanButton"); widgets->TerminalPaned = yon_gtk_builder_get_widget(builder,"TerminalPaned"); widgets->TerminalMoreRevieler = yon_gtk_builder_get_widget(builder,"TerminalMoreRevieler"); widgets->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); widgets->TerminalBox = yon_gtk_builder_get_widget(builder,"TerminalBox"); - // widgets->InstallTerminal = vte_terminal_new(); widgets->InstallTerminal = yon_gtk_builder_get_widget(builder,"TerminalTerminal"); widgets->TerminalRevealer = yon_gtk_builder_get_widget(builder,"TerminalMoreRevieler"); widgets->DriverModulesTab = GTK_WIDGET(gtk_builder_get_object(builder, "DriverModulesTab")); widgets->DriversTab = GTK_WIDGET(gtk_builder_get_object(builder, "DriversTab")); - // widgets->MainTabLabel = GTK_WIDGET(gtk_builder_get_object(builder, "MainTabLabel")); - // widgets->DriversTabLabel = GTK_WIDGET(gtk_builder_get_object(builder, "DriversTabLabel")); - // widgets->InformationTabLabel = GTK_WIDGET(gtk_builder_get_object(builder, "InformationTabLabel")); widgets->InformationFrameLabel = GTK_WIDGET(gtk_builder_get_object(builder, "InformationFrameLabel")); widgets->InformationOverlay = GTK_WIDGET(gtk_builder_get_object(builder, "InformationOverlay")); widgets->InformationCompanyLogoImage = GTK_WIDGET(gtk_builder_get_object(builder, "InformationCompanyLogoImage")); @@ -1398,6 +799,7 @@ template_main_window *yon_main_window_complete(main_window *widgets){ widgets->TerminalInfoLabel = yon_gtk_builder_get_widget(builder, "TerminalInfoLabel"); widgets->TerminalMoveBox = yon_gtk_builder_get_widget(builder, "TerminalMoveBox"); widgets->TerminalMoveTargetBox = yon_gtk_builder_get_widget(builder, "TerminalMoveTargetBox"); + } gtk_overlay_add_overlay(GTK_OVERLAY(widgets->DriversLoadingOverlay),widgets->DriversLoadingSpinner); g_signal_connect(G_OBJECT(widgets->LoadDriversButton), "clicked", G_CALLBACK(yon_proprietary_get_thread), widgets); @@ -1426,16 +828,20 @@ template_main_window *yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->OptirunButton),"clicked",G_CALLBACK(on_app_chooser_open),widgets); g_signal_connect(G_OBJECT(widgets->PrimusrunButton),"clicked",G_CALLBACK(on_app_chooser_open),widgets); g_signal_connect(G_OBJECT(widgets->MoreButton),"clicked",G_CALLBACK(on_terminal_revealer_open),widgets); - g_signal_connect(G_OBJECT(widgets->TerminalCancelButton),"clicked",G_CALLBACK(on_command_cancel),widgets); + g_signal_connect(G_OBJECT(widgets->TerminalCancelButton),"clicked",G_CALLBACK(on_command_cancel),widgets); + g_signal_connect(G_OBJECT(widgets->UnlockPacmanButton),"clicked",G_CALLBACK(on_pacman_db_unlock),NULL); + char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); + yon_window_config_load(path); + gtk_overlay_add_overlay(GTK_OVERLAY(widgets->MainOverlay),widgets->MainSpinner); g_object_set_data(G_OBJECT(widgets->InstallTerminal),"widgets",widgets); { gtk_paned_add2(GTK_PANED(widgets->TerminalPaned),widgets->TerminalRevealer); - vte_terminal_set_scrollback_lines(VTE_TERMINAL(widgets->InstallTerminal), 100); - vte_terminal_set_scroll_on_output(VTE_TERMINAL(widgets->InstallTerminal), TRUE); - vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(widgets->InstallTerminal), TRUE); - vte_terminal_set_input_enabled(VTE_TERMINAL(widgets->InstallTerminal),1); - gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel),0.1); + vte_terminal_set_scrollback_lines(VTE_TERMINAL(widgets->InstallTerminal), 100); + vte_terminal_set_scroll_on_output(VTE_TERMINAL(widgets->InstallTerminal), TRUE); + vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(widgets->InstallTerminal), TRUE); + vte_terminal_set_input_enabled(VTE_TERMINAL(widgets->InstallTerminal),1); + gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel),0.1); } widgets->menu = yon_rmb_menu_setup(widgets->DriversList,check_rmb_menu,widgets, SUPPORTED_LABEL,icon_devices_path,G_CALLBACK(on_devices_button_clicked),widgets, @@ -1443,134 +849,40 @@ template_main_window *yon_main_window_complete(main_window *widgets){ PACKAGE_INFO_LABEL,icon_package_path,G_CALLBACK(on_driver_pack_info),widgets, NULL); { - int size; - config_str default_driver = yon_config_load(yon_config_parameter_prepare_command(VGADRV_AUTO_command,"default",NULL,NULL),&size); - char *final=NULL; - if (size&&strcmp(default_driver[0],"(null)\n")){ - if (!strcmp(default_driver[0],"yes")){ - final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(ON_LABEL)); - } else if (!strcmp(default_driver[0],"no")){ - final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(OFF_LABEL)); - } - - } else { - final = yon_char_get_localised_from_lib(DEFAULT_LABEL); - } - gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(widgets->AutoDriverCombo),final); + yon_combo_box_set_default(GTK_COMBO_BOX_TEXT(widgets->AutoDriverCombo),VGADRV_AUTO_command,yon_auto_driver_default); } { - int size; - config_str default_driver = yon_config_load(yon_config_parameter_prepare_command(VGADRV_NOFREE_command,"default",NULL,NULL),&size); - char *final=NULL; - if (size&&strcmp(default_driver[0],"(null)\n")){ - if (!strcmp(default_driver[0],"yes")){ - final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(FREE_DRIVERS_ON_LABEL)); - } else if (!strcmp(default_driver[0],"no")){ - final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(NOUVEAU_RADEON_OFF_LABEL)); - } else if (!strcmp(default_driver[0],"nouveau")){ - final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(RADEON_OFF_LABEL)); - } else if (!strcmp(default_driver[0],"radeon")){ - final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(NOUVEAU_OFF_LABEL)); - } - } else { - final = yon_char_get_localised_from_lib(DEFAULT_LABEL); - } - gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(widgets->FreeDriverCombo),final); + yon_combo_box_set_default(GTK_COMBO_BOX_TEXT(widgets->FreeDriverCombo),VGADRV_NOFREE_command,yon_free_driver_default); } { - int size; - config_str default_driver = yon_config_load(yon_config_parameter_prepare_command(FAILSAFENVIDIA_command,"default",NULL,NULL),&size); - char *final=NULL; - if (size&&strcmp(default_driver[0],"(null)\n")){ - final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(default_driver[0])); - - } else { - final = yon_char_get_localised_from_lib(DEFAULT_LABEL); - } - gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(widgets->FailsafeNvidiaCombo),final); + yon_combo_box_set_default(GTK_COMBO_BOX_TEXT(widgets->FailsafeNvidiaCombo),FAILSAFENVIDIA_command,yon_failsafe_driver_default); } { - int size; - config_str default_driver = yon_config_load(yon_config_parameter_prepare_command(FAILSAFEATI_command,"default",NULL,NULL),&size); - char *final=NULL; - if (size&&strcmp(default_driver[0],"(null)\n")){ - final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(default_driver[0])); - - } else { - final = yon_char_get_localised_from_lib(DEFAULT_LABEL); - } - gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(widgets->FailsafeAMDCombo),final); + yon_combo_box_set_default(GTK_COMBO_BOX_TEXT(widgets->FailsafeAMDCombo),FAILSAFEATI_command,yon_ati_driver_default); } { - int size; - config_str default_driver = yon_config_load(yon_config_parameter_prepare_command(XORG_EXT_command,"default",NULL,NULL),&size); - char *final=NULL; - if (size&&strcmp(default_driver[0],"(null)\n")){ - if (!strcmp(default_driver[0],"dpms")){ - final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(ON_LABEL)); - } else if (!strcmp(default_driver[0],"nodpms")){ - final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(OFF_LABEL)); - } - - } else { - final = yon_char_get_localised_from_lib(DEFAULT_LABEL); - } - gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(widgets->DontSwitchDisplaysOffCombo),final); + yon_combo_box_set_default(GTK_COMBO_BOX_TEXT(widgets->DontSwitchDisplaysOffCombo),XORG_EXT_command,yon_switch_display_off_default); } { - int size; - config_str default_driver = yon_config_load(yon_config_parameter_prepare_command(XORG_DPI_command,"default",NULL,NULL),&size); - char *final=NULL; - if (size&&strcmp(default_driver[0],"(null)\n")){ - final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(default_driver[0])); - - } else { - final = yon_char_get_localised_from_lib(DEFAULT_LABEL); - } - gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(widgets->DisplayScalingCombo),final); + yon_combo_box_set_default(GTK_COMBO_BOX_TEXT(widgets->DisplayScalingCombo),XORG_DPI_command,yon_scaling_default); } { - int size; - config_str default_driver = yon_config_load(yon_config_parameter_prepare_command(INTEGRATEDVGA_command,"default",NULL,NULL),&size); - char *final=NULL; - if (size&&strcmp(default_driver[0],"(null)\n")){ - final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(default_driver[0])); - - } else { - final = yon_char_get_localised_from_lib(DEFAULT_LABEL); - } - gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(widgets->DisplayDiscreteOnly),final); + yon_combo_box_set_default(GTK_COMBO_BOX_TEXT(widgets->DisplayDiscreteOnly),INTEGRATEDVGA_command,yon_discrete_default); } { - int size; - config_str default_driver = yon_config_load(yon_config_parameter_prepare_command(OPTIRUN_command,"default",NULL,NULL),&size); - char *final=NULL; - if (size&&strcmp(default_driver[0],"(null)\n")){ - final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(default_driver[0])); - - } else { - final = yon_char_get_localised_from_lib(DEFAULT_LABEL); - } - gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(widgets->OptirunCombo),final); + yon_combo_box_set_default(GTK_COMBO_BOX_TEXT(widgets->OptirunCombo),OPTIRUN_command,yon_optirun_default); } { - int size; - config_str default_driver = yon_config_load(yon_config_parameter_prepare_command(PRIMUSRUN_command,"default",NULL,NULL),&size); - char *final=NULL; - if (size&&strcmp(default_driver[0],"(null)\n")){ - final = yon_char_get_localised_from_lib(DEFAULT_CUSTOM_LABEL(default_driver[0])); - - } else { - final = yon_char_get_localised_from_lib(DEFAULT_LABEL); - } - gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(widgets->PrimusrunCombo),final); + yon_combo_box_set_default(GTK_COMBO_BOX_TEXT(widgets->PrimusrunCombo),PRIMUSRUN_command,yon_primusrun_default); } - yon_adapter_window_setup(widgets); - } + yon_save_window_set_postsave_function(on_save_done,widgets); on_config_local_load(NULL,widgets); + yon_proprietary_get_thread(NULL,(main_window*)widgets); + gtk_spinner_stop(GTK_SPINNER(widgets->MainSpinner)); + gtk_widget_hide(widgets->MainSpinner); return (template_main_window*)widgets; } @@ -1592,7 +904,11 @@ void config_init(){ main_config.lock_save_local=0; main_config.load_mode=1; main_config.progress_active=0; + main_config.ports_table = g_hash_table_new_full(g_str_hash,g_str_equal,free,free); + main_config.resolutions = g_hash_table_new_full(g_str_hash,g_str_equal,free,free); yon_packages_init(); + yon_monitor_set_resolutions(); + yon_all_resolutions_update(); } int main(int argc, char *argv[]){ @@ -1608,8 +924,6 @@ int main(int argc, char *argv[]){ gtk_init(&argc, &argv); template_main_window *widgets = yon_ubl_window_setup(); widgets = yon_main_window_complete((main_window*)widgets); - char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); - yon_window_config_load(path); yon_root_button_setup(widgets,argv,argc); if (system(yon_check_database_command)){ @@ -1619,8 +933,6 @@ int main(int argc, char *argv[]){ data->data = widgets; yon_confirmation_dialog_call(widgets->HeadOverlay,data); } - yon_proprietary_get_thread(NULL,(main_window*)widgets); - yon_monitor_set_resolutions(); gtk_main(); yon_packages_finish(); return 0; diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index 0df5407..9bfa0e8 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -43,6 +43,32 @@ #define get_ports_command "xrandr |grep -E '.*connected' |cut -d' ' -f1" +#define get_resolutions_and_ports_command "xrandr | awk '\n\ +/^Screen / { next }\n\ +/^[A-Z]/ {\n\ + if (port != \"\") {\n\ + print port \":\" (res ? res : \"\")\n\ + }\n\ + port = $1\n\ + res = \"\"\n\ + connected = ($2 == \"connected\")\n\ + next\n\ +}\n\ +/^[[:space:]]+[0-9]+x[0-9]+/ && connected {\n\ + split($1, parts, \"+\")\n\ + mode = parts[1]\n\ + if (!(mode in seen)) {\n\ + seen[mode] = 1\n\ + res = res ? res \",\" mode : mode\n\ + }\n\ +}\n\ +END {\n\ + if (port != \"\") {\n\ + print port \":\" (res ? res : \"\")\n\ + }\n\ +}\ +'" + #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,} connected\" |grep -oE \"[-0-9a-zA-Z:]{1,} \"" @@ -58,6 +84,8 @@ #define yon_check_database_command "pacman -Sqs >/dev/null" +#define pacman_unlock_database_command "rm -f /var/lib/pacman/db.lck" + #define yon_get_kernels_installed "find /usr/lib/modules/ -maxdepth 2 -type f -iname \"pkgbase\" -exec cat {} + 2>/dev/null" #define icon_devices_path "com.ublinux.libublsettingsui-gtk3.database-symbolic" @@ -133,6 +161,9 @@ typedef struct { template_window_fields GtkWidget *MainBox; + GtkWidget *MainOverlay; + GtkWidget *MainSpinner; + GtkWidget *AutoDriverCombo; GtkWidget *FreeDriverCombo; GtkWidget *FailsafeNvidiaCombo; @@ -183,6 +214,7 @@ typedef struct GtkWidget *DriverLabel; GtkWidget *DescriptionLabel; GtkWidget *DevicesLabel; + GtkWidget *UnlockPacmanButton; GtkWidget *MoreButton; GtkWidget *CancelButton; @@ -212,17 +244,16 @@ typedef struct monitor_view monitor_visuals; monitor_config monitors; proprietary_config proprietary; - dictionary *supported_resolutions; + GHashTable *ports_table; char *failsafenVidia; char *failsafeATI; int descreteOnly; char *optirun; char *primusrun; int gapfix; - config_str ports; - int portssize; - config_str resolutions; - int resolutionssize; + GHashTable *resolutions; + int resolutions_size; + config_str resolutions_sorted; render_data status_render; dictionary *monitor_output_layers; @@ -300,6 +331,8 @@ typedef struct GtkWidget *InterfaceConfigurationBox; GtkWidget *EnableCheck; GtkWidget *PortCombo; + GtkWidget *ManualCheck; + GtkWidget *PortEntry; GtkWidget *MainCheck; GtkWidget *ResolutionCombo; GtkWidget *UnsupportedCheck; @@ -327,6 +360,8 @@ typedef struct { GtkWidget *SwitchButton; GtkWidget *ConfigureButton; GtkWidget *AddButton; + char *target_port; + char *target_resolution; } monitor_data; typedef struct @@ -374,9 +409,6 @@ void on_module_install_activate(GtkCellRendererToggle* self,gchar* path,main_win gboolean yon_filter_func(GtkTreeModel* model,GtkTreeIter* iter,main_window *widgets); void on_kernel_filter_changed(GtkWidget *self, main_window *widgets); void on_port_chosen_changed(GtkWidget *self, monitor_edit_window *window); -void on_sensitive_change(GtkWidget *self, GtkWidget *toggle); -void on_sensitive_change_reversed(GtkWidget *self, GtkWidget *toggle); -void on_auto_choose_drivers(GtkWidget *self, main_window *widgets); void on_resolutions_unsupported_show(GtkToggleButton *self, monitor_edit_window *window); void yon_interface_save(); void yon_interface_update(); @@ -407,7 +439,6 @@ void config_init(); void yon_proprietary_local_get(main_window *widgets); gboolean yon_proprietary_append_kernels(struct proprietary_kernel_append_struct *append); -gboolean yon_proprietary_append(driver_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); @@ -428,5 +459,17 @@ void on_devices_button_clicked(GtkWidget *, main_window *widgets); int check_rmb_menu(void *data); void on_install_check(GtkWidget *self,gint status,driver_struct *driver); void yon_install_buttons_set_sensitive(main_window *widgets,int state); +void on_pacman_db_unlock(void); +char *yon_auto_driver_default(char *target); +char *yon_free_driver_default(char *target); +char *yon_failsafe_driver_default(char *target); +char *yon_ati_driver_default(char *target); +char *yon_switch_display_off_default(char *target); +char *yon_scaling_default(char *target); +char *yon_discrete_default(char *target); +char *yon_optirun_default(char *target); +char *yon_primusrun_default(char *target); +void yon_all_resolutions_update(); +void yon_monitor_port_manual(GtkToggleButton *self,monitor_edit_window *monitors); #endif \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index c5ecf29..a12776d 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -58,7 +58,7 @@ #define INSTALLED_LABEL _("Installed") #define INSTALLED_LOW_LABEL _("installed") #define PACKAGE_LABEL _("Package") -#define SUPPORTED_LABEL _("Supported Devices") +#define SUPPORTED_LABEL _("Supported devices") #define MODULE_INFO_LABEL _("Module information") #define PACKAGE_INFO_LABEL _("Package information") @@ -148,6 +148,7 @@ #define DISCRETE_ONLY_LABEL _("discrete video only (AMD/ATI):") #define DRIVER_MODULES_LABEL _("Driver Modules") #define DEVICES_AND_DRIVERS_LABEL _("Devices and Drivers") +#define PACMAN_UNLOCK_TOOLTIP_LABEL _("Unlock the pacman package manager database") #define DATABASE_UNACCESSIBLE_LABEL _("Database files must be updated") diff --git a/ubl-settings-video-configuration.glade b/ubl-settings-video-configuration.glade index 17237a1..9dbdd34 100644 --- a/ubl-settings-video-configuration.glade +++ b/ubl-settings-video-configuration.glade @@ -1,5 +1,5 @@ - + @@ -69,7 +69,7 @@ - + Manual port True True @@ -234,8 +234,8 @@ 0 Default - 60 - 75 + 60 + 75 diff --git a/ubl-settings-video-html.glade b/ubl-settings-video-html.glade index f016467..4a88755 100644 --- a/ubl-settings-video-html.glade +++ b/ubl-settings-video-html.glade @@ -7,6 +7,8 @@ 500 350 False + 800 + 550 com.ublinux.ubl-settings-video diff --git a/ubl-settings-video-monitor.glade b/ubl-settings-video-monitor.glade index a303fbb..7b90ef4 100644 --- a/ubl-settings-video-monitor.glade +++ b/ubl-settings-video-monitor.glade @@ -1,5 +1,5 @@ - + @@ -55,15 +55,17 @@ start 3 3 - 3 - 3 + 5 + 5 10 20 vertical + 5 True False + end True @@ -82,10 +84,7 @@ True False - 5 - 5 - 5 - 5 + end True @@ -104,9 +103,7 @@ True False - 7 - 7 - 15 + 5 True diff --git a/ubl-settings-video.glade b/ubl-settings-video.glade index 3f27004..f0740bb 100644 --- a/ubl-settings-video.glade +++ b/ubl-settings-video.glade @@ -22,6 +22,14 @@ start 64 + + True + False + True + + True False @@ -133,67 +141,99 @@ False com.ublinux.libublsettingsui-gtk3.lookup-symbolic + + True + False + com.ublinux.libublsettingsui-gtk3.changes-allow-symbolic + True False vertical - + True - True + False - - 165 + True True - 5 - 5 - 5 - never - + + 165 True - False + True + 5 + 5 + 5 + never - + True False - vertical - + True False - 0.019999999552965164 - in + vertical - + True False - 5 - 5 - 5 - 5 + 0.019999999552965164 + in - + True False - 5 + 5 + 5 + 5 + 5 True False - vertical 5 True False + vertical 5 - + True False - Choose driver automatically: + 5 + + + True + False + Choose driver automatically: + + + False + True + 0 + + + + + True + False + 0 + + Off + On + + + + True + True + 1 + + False @@ -202,24 +242,48 @@ - + True False - 0 - - Off - On - + 5 + + + True + False + Failsafe Nvidia driver: + + + False + True + 0 + + + + + True + False + 0 + + Off + fbdev + + + + True + True + 1 + + - True + False True 1 - False + True True 0 @@ -228,12 +292,43 @@ True False + vertical 5 - + True False - Failsafe Nvidia driver: + 5 + + + True + False + Free drivers: + + + False + True + 0 + + + + + True + False + 0 + + Switch nouveau and radeon off + Switch nouveau off + Switch radeon off + Switch free drvers on + + + + True + True + 1 + + False @@ -242,76 +337,97 @@ - + True False - 0 - - Off - fbdev - + 5 + + + True + False + Failsafe AMD/ATI driver: + + + False + True + 0 + + + + + True + False + 0 + + Off + fbdev + + + + True + True + 1 + + - True + False True 1 - False + True True 1 - - True - True - 0 - + + + + + True + False + Driver + + + + + False + True + 0 + + + + + True + False + vertical + + + True + False + 0.019999999552965164 + in True False + 5 + 5 + 5 + 5 vertical - 5 - + True False - 5 - - - True - False - Free drivers: - - - False - True - 0 - - - - - True - False - 0 - - Switch nouveau and radeon off - Switch nouveau off - Switch radeon off - Switch free drvers on - - - - True - True - 1 - - + 150 + none + False False @@ -328,7 +444,7 @@ True False - Failsafe AMD/ATI driver: + Do not switch off display(-s) (DPMS global configuration): False @@ -337,17 +453,17 @@ - + True False 0 Off - fbdev + On - True + False True 1 @@ -356,39 +472,33 @@ False True + end 1 - - True - True - 1 - + + + + True + False + Monitor configuration + + + True + True + 0 + + + True + True + 1 + - - - True - False - Driver - - - - - False - True - 0 - - - - - True - False - vertical True @@ -396,28 +506,66 @@ 0.019999999552965164 in - + True False - 5 - 5 - 5 - 5 - vertical + 5 + 5 + 5 - + True False - 150 - none - False + vertical + + + True + False + 0 + + Automatic DPI + 96 DPI - 100% + 144 DPI - 150% (for 2K) + 192 DPI - 200% (for 4K) + + + + False + True + 0 + + - - False - True - 0 - + + + + + True + False + Display DPI + + + + + False + True + 2 + + + + + True + False + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 True @@ -427,7 +575,7 @@ True False - Do not switch off display(-s) (DPMS global configuration): + discrete video only (AMD/ATI): False @@ -436,7 +584,7 @@ - + True False 0 @@ -452,186 +600,104 @@ - - False - True - end - 1 - - + True False - Monitor configuration + 0 + Hybrid graphics - True + False True - 0 + 3 - - - True - True - 1 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 5 - 5 - 5 - - - True - False - vertical - - - True - False - 0 - - Automatic DPI - 96 DPI - 100% - 144 DPI - 150% (for 2K) - 192 DPI - 200% (for 4K) - - - - False - True - 0 - - - - - - - - - True - False - Display DPI - - - - - False - True - 2 - - - - - True - False - 0.019999999552965164 - in - - - True - False - 5 - 5 - 5 - - - True - False - 5 - - - True - False - discrete video only (AMD/ATI): - - - False - True - 0 - - - - - True - False - 0 - - Off - On - - - - False - True - 1 - - - - - - - - - True - False - 0 - Hybrid graphics - - - - - False - True - 3 - - - - - True - False - 5 - 0.019999999552965164 - in - + True False - 5 - 5 - 5 + 5 + 0.019999999552965164 + in - + True False - vertical - 5 + 5 + 5 + 5 True False + vertical 5 - + True False - Launch programs through optirun (Nvidia): - 0 + 5 + + + True + False + Launch programs through optirun (Nvidia): + 0 + + + False + True + 0 + + + + + True + False + 0 + + Off + On + + + + False + True + 1 + + + + + True + False + True + + + True + True + 2 + + + + + True + False + True + True + image1 + + + False + True + 3 + + False @@ -640,14 +706,65 @@ - + True False - 0 - - Off - On - + 5 + + + True + False + Launch programs through primusrun (Nvidia): + 0 + + + False + True + 0 + + + + + True + False + 0 + + Off + On + + + + False + True + 1 + + + + + True + False + True + + + True + True + 2 + + + + + True + False + True + True + image2 + + + False + True + 3 + + False @@ -656,211 +773,133 @@ - - True - False - True - - - True - True - 2 - - - - - True - False - True - True - image1 - - - False - True - 3 - - - - - False - True - 0 - - - - - True - False - 5 - - - True - False - Launch programs through primusrun (Nvidia): - 0 - - - False - True - 0 - - - - + True False - 0 - - Off - On - + 5 + + + True + False + Fix frame gap (Nvidia): + 0 + + + False + True + 0 + + + + + True + False + 0 + + Default + Off + 1st variant. May cause perfomance drops in video games + 2nd variant. May not work on specific video cards + + + + True + True + 1 + + False True - 1 - - - - - True - False - True - - - True - True 2 - - - True - False - True - True - image2 - - - False - True - 3 - - - - - False - True - 1 - - - - - True - False - 5 - - - True - False - Fix frame gap (Nvidia): - 0 - - - False - True - 0 - - - - - True - False - 0 - - Default - Off - 1st variant. May cause perfomance drops in video games - 2nd variant. May not work on specific video cards - - - - True - True - 1 - - - - False - True - 2 - + + + True + False + Extra + + - - - - True - False - Extra - + + False + True + 4 + - - False - True - 4 - - - - - - True - False - Main settings - - - False - - - - - True - False - 5 - 5 - 5 - 5 - vertical + + + True + False + Main settings + + + False + + - + True False + 5 + 5 + 5 + 5 + vertical - + True False - vertical - 5 True False + vertical 5 - + True False - Kernel: + 5 + + + True + False + Kernel: + + + False + True + 0 + + + + + True + False + 0 + + Default (All installed) + + + + True + True + 1 + + False @@ -868,49 +907,127 @@ 0 - - - True - False - 0 - - Default (All installed) - - - - True - True - 1 - - - - - False - True - 0 - - - - - True - False - 5 True False - vertical 5 - + True - True - True - Update - image3 - + False + vertical + 5 + + + True + True + True + Update + image3 + + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + False + True + True + Supported Devices + image4 + + + + False + True + 2 + + + + + True + False + True + True + Module information + image10 + + + + False + True + 3 + + + + + True + False + True + True + Package information + image5 + + + + False + True + 4 + + + + + True + False + + + False + True + 5 + + + + + True + True + True + Unlock the pacman package manager database + image6 + + + + False + True + 6 + + False @@ -919,118 +1036,39 @@ - - True - False - True - True - Supported Devices - image4 - - - - False - True - 1 - - - - - True - False - True - True - Module information - image10 - - - - False - True - 2 - - - - - True - False - True - True - Package information - image5 - - - - False - True - 3 - - - - - False - True - 0 - - - - - True - False - - + True False - vertical - 5 - + True False vertical + 5 - + True False - 3 - 3 - 5 + vertical True False - vertical - - - True - False - Installed - 0 - 0 - - - False - True - 0 - - + 3 + 3 + 5 - + True False - 5 + vertical - + True False - Module + Installed 0 + 0 False @@ -1039,9 +1077,48 @@ - + True False + 5 + + + True + False + Module + 0 + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + False + Package + 0 + 0 + + + False + True + 2 + + False @@ -1049,20 +1126,17 @@ 1 - - - True - False - Package - 0 - 0 - - - False - True - 2 - - + + + False + True + 0 + + + + + True + False False @@ -1070,224 +1144,227 @@ 1 + + + True + False + Kernel + 0 + 1 + + + False + True + 2 + + + + + True + False + + + False + True + 3 + + + + + True + False + Driver + 0 + 1 + + + False + True + 4 + + + + + True + False + + + False + True + 5 + + + + + True + False + Description + 0 + 1 + + + False + True + 6 + + + + + True + False + + + False + True + 7 + + + + + True + False + Supported devices + 0 + 1 + + + True + True + 8 + + False True - 0 - - - - - True - False - - - False - True - 1 - - - - - True - False - Kernel - 0 - 1 - - - False - True - 2 - - - - - True - False - - - False - True - 3 - - - - - True - False - Driver - 0 - 1 - - - False - True - 4 - - - - - True - False - - - False - True - 5 - - - - - True - False - Description - 0 - 1 - - - False - True - 6 - - - - - True - False - - - False - True - 7 + 0 - + True - False - Devices - 0 - 1 + True + in + + + True + False + + + True + False + + + + + True True - 8 + 1 - False + True True 0 - - True + True - in + vertical + 250 + True + True - - True - False - - - True - False - - - - + + + + True True - 1 + 2 - - - True - True - 0 - - - - - True - vertical - 250 - True - True - - - - - - - - - True - True - 2 - - - - - True - True - False - True - + True + True False - 0 - in + True - + True False + 0 + in - + True False - vertical True False - 5 - 5 - 5 - 5 - 5 - 5 + vertical - + True - True False - center - - - True - True - 0 - - - - - Cancel - True - True - True + 5 + 5 + 5 + 5 + 5 + 5 + + + True + True + False + center + + + True + True + 0 + + + + + Cancel + True + True + True + + + False + True + 1 + + + + + More + True + True + True + True + + + False + True + 2 + + False @@ -1295,58 +1372,44 @@ 1 - - - More - True - True - True - True - - - False - True - 2 - - - - False - True - 1 - - - - - - True - False + + + True + False + + + + + False + True + end + 3 + - - False - True - end - 3 + -1 - -1 + True + True + 1 @@ -1356,90 +1419,107 @@ 1 + - True - True - 1 + -1 - - -1 + True + True + 0 - True - True - 0 + 1 + + + + + True + False + Drivers + + + 1 + False - - - 1 - - - - - True - False - Drivers - - - 1 - False - - - - - True - False - 5 - 5 - 5 - 5 - 5 - 5 - 0.009999999776482582 - in - + True False - 12 + 5 + 5 + 5 + 5 + 5 + 5 + 0.009999999776482582 + in - + True False - vertical - 20 + 12 True False + vertical + 20 - - 177 - 159 + True False - start - start - + + 177 + 159 True False start - end - 128 - com.ublinux.ubl-settings-video.video-card + start + + + True + False + start + end + 128 + com.ublinux.ubl-settings-video.video-card + + + -1 + + - -1 + False + True + 0 + + + + + True + False + start + 30 + <span size='15pt'><span color='#1a5fb4'></span> </span> + True + 0 + 0 + + + False + True + 1 @@ -1450,70 +1530,53 @@ - - True - False - start - 30 - <span size='15pt'><span color='#1a5fb4'></span> </span> - True - 0 - 0 - - - False - True - 1 - - - - - False - True - 0 - - - - - True - False - - - 177 - 159 + True False - start - start - + + 177 + 159 True False start - end - 128 - com.ublinux.ubl-settings-video.video-card + start + + + True + False + start + end + 128 + com.ublinux.ubl-settings-video.video-card + + + -1 + + - -1 + False + True + 0 + + + + + True + False + start + 30 + True + 0 + 0 + + + False + True + 1 - - - False - True - 0 - - - - - True - False - start - 30 - True - 0 - 0 False @@ -1522,39 +1585,37 @@ - - False - True - 1 - + + + True + False + 5 + 5 + Devices and Drivers + + + + 2 + - - + + True False - 5 - 5 - Devices and Drivers + Information + + 2 + False + - 2 - - - - - True - False - Information - - - 2 - False + -1