From eb8bb5e682fe8273d0e4701c8ed1ef3cf60c899e Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 8 Jul 2025 18:03:52 +0600 Subject: [PATCH 1/6] WIP drivers tab change --- .../nvidia-340.html | 0 .../nvidia-390.html | 0 .../nvidia-470.html | 0 .../nvidia-575-open.html | 0 .../nvidia-575.html | 0 source/ubl-settings-video.c | 6 +- source/ubl-settings-video.h | 34 +- ubl-settings-video-driver-tab.glade | 140 ++++++ ubl-settings-video.glade | 413 +++++++++++------- 9 files changed, 436 insertions(+), 157 deletions(-) rename nvidia-340.html => driver-info/nvidia-340.html (100%) rename nvidia-390.html => driver-info/nvidia-390.html (100%) rename nvidia-470.html => driver-info/nvidia-470.html (100%) rename nvidia-575-open.html => driver-info/nvidia-575-open.html (100%) rename nvidia-575.html => driver-info/nvidia-575.html (100%) create mode 100644 ubl-settings-video-driver-tab.glade diff --git a/nvidia-340.html b/driver-info/nvidia-340.html similarity index 100% rename from nvidia-340.html rename to driver-info/nvidia-340.html diff --git a/nvidia-390.html b/driver-info/nvidia-390.html similarity index 100% rename from nvidia-390.html rename to driver-info/nvidia-390.html diff --git a/nvidia-470.html b/driver-info/nvidia-470.html similarity index 100% rename from nvidia-470.html rename to driver-info/nvidia-470.html diff --git a/nvidia-575-open.html b/driver-info/nvidia-575-open.html similarity index 100% rename from nvidia-575-open.html rename to driver-info/nvidia-575-open.html diff --git a/nvidia-575.html b/driver-info/nvidia-575.html similarity index 100% rename from nvidia-575.html rename to driver-info/nvidia-575.html diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index a923aac..0cdc9e8 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -1453,9 +1453,9 @@ template_main_window *yon_main_window_complete(main_window *widgets){ 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->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")); diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index f305644..1ca1787 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -152,9 +152,9 @@ typedef struct GtkWidget *DriverModulesTab; GtkWidget *DriversTab; - GtkWidget *MainTabLabel; - GtkWidget *DriversTabLabel; - GtkWidget *InformationTabLabel; + // GtkWidget *MainTabLabel; + // GtkWidget *DriversTabLabel; + // GtkWidget *InformationTabLabel; GtkWidget *InformationFrameLabel; GtkWidget *InformationOverlay; GtkWidget *InformationCompanyLogoImage; @@ -174,10 +174,17 @@ typedef struct GtkWidget *DriversLoadingOverlay; GtkWidget *DriversLoadingSpinner; + GtkWidget *DriversList; + GtkWidget *InstalledModuleLabel; + GtkWidget *InstalledPackageLabel; + GtkWidget *KernelLabel; + GtkWidget *DriverLabel; + GtkWidget *DescriptionLabel; + GtkWidget *DevicesLabel; + GtkWidget *MenusTab; GtkWidget *terminal; - GtkWidget *LoadDriversButton; } main_window; @@ -217,6 +224,25 @@ typedef struct } config; +typedef struct { + GtkWidget *MainBox; + GtkWidget *ModuleInstalledCheck; + GtkWidget *PackageInstalledCheck; + GtkWidget *KernelLabel; + GtkWidget *DriverLabel; + GtkWidget *DescriptionLabel; + GtkWidget *DevicesBox; + GtkWidget *DevicesInfoButton; + GtkWidget *DevicesLabel; + + char *name; + char *module; + char *package; + char *kernel; + int module_installed; + int package_installed; +} driver_struct; + typedef struct { int main; diff --git a/ubl-settings-video-driver-tab.glade b/ubl-settings-video-driver-tab.glade new file mode 100644 index 0000000..14625ba --- /dev/null +++ b/ubl-settings-video-driver-tab.glade @@ -0,0 +1,140 @@ + + + + + + + True + False + vertical + + + True + False + 5 + + + True + True + False + True + + + + + + False + True + 0 + + + + + True + True + False + True + + + + + + False + True + 1 + + + + + True + False + Kernel + + + False + True + 2 + + + + + True + False + Driver + + + False + True + 3 + + + + + True + False + Description + + + True + True + 4 + + + + + True + False + 5 + + + True + True + True + center + image1 + + + + False + True + 0 + + + + + True + False + Devices + + + False + True + 1 + + + + + False + True + 5 + + + + + + False + True + 1 + + + + + True + False + com.ublinux.libublsettingsui-gtk3.important-symbolic + + diff --git a/ubl-settings-video.glade b/ubl-settings-video.glade index aa5e4da..9461d96 100644 --- a/ubl-settings-video.glade +++ b/ubl-settings-video.glade @@ -41,48 +41,6 @@ False com.ublinux.libublsettingsui-gtk3.sync-symbolic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True False @@ -902,20 +860,95 @@ True False vertical + 5 - + True - True - liststore1 + False + 5 + + + True + False + label + 0 + 0 + + + False + True + 0 + + + + + True + False + label + 0 + 0 + + + False + True + 1 + + - - fixed - 160 - Installed + + True + False + label + 0 + 0 + + False + True + 2 + - + + True + False + label + 0 + 0 + + + False + True + 3 + + + + + True + False + label + 0 + 0 + + + False + True + 4 + + + + + True + False + label + 0 + 0 + + + False + True + 5 + @@ -925,111 +958,14 @@ - + True - True - external - - - True - True - liststore6 - 1 - both - True - 4 - - - fixed - 80 - Module - - - - 9 - 9 - 0 - - - - - - - 80 - Package - descending - 0 - - - - 10 - 10 - 1 - - - - - - - Kernel - - - - 2 - - - - - - - Driver - - - - 3 - - - - - - - Description - - - word - 150 - - - 4 - - - - - - - autosize - Supported Devices - - - word - 220 - - - 5 - - - - - - - + False True True - 1 + 2 @@ -1260,4 +1196,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + True + False + vertical + + + True + True + liststore1 + + + fixed + 160 + Installed + + + + + + + + False + True + 0 + + + + + True + True + external + + + True + True + liststore6 + 1 + both + True + 4 + + + fixed + 80 + Module + + + + 9 + 9 + 0 + + + + + + + 80 + Package + descending + 0 + + + + 10 + 10 + 1 + + + + + + + Kernel + + + + 2 + + + + + + + Driver + + + + 3 + + + + + + + Description + + + word + 150 + + + 4 + + + + + + + autosize + Supported Devices + + + word + 220 + + + 5 + + + + + + + + + + True + True + 1 + + + From 3d3efda1cb18ef714d757f185d4393ac12187bbe Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 9 Jul 2025 16:41:57 +0600 Subject: [PATCH 2/6] Driver tab rework --- gresource.xml | 9 ++ locale/ubl-settings-video_ru.po | 2 +- source/CMakeLists.txt | 9 ++ source/ubl-settings-video-driver.c | 64 ++++++++++ source/ubl-settings-video.c | 173 ++++++++++++++++++--------- source/ubl-settings-video.h | 23 +++- ubl-settings-video-driver-tab.glade | 175 +++++++++++++++++++++++----- ubl-settings-video-html.glade | 58 +++++++++ ubl-settings-video.glade | 168 +++++++++++++++++++++----- 9 files changed, 564 insertions(+), 117 deletions(-) create mode 100644 source/ubl-settings-video-driver.c create mode 100644 ubl-settings-video-html.glade diff --git a/gresource.xml b/gresource.xml index 4522480..8d72b82 100644 --- a/gresource.xml +++ b/gresource.xml @@ -5,6 +5,8 @@ ubl-settings-video-monitor.glade ubl-settings-video-terminal.glade ubl-settings-video-configuration.glade + ubl-settings-video-driver-tab.glade + ubl-settings-video-html.glade ubl-settings-video.css @@ -13,4 +15,11 @@ video-drivers.csv resolutions.csv + + nvidia-340.html + nvidia-390.html + nvidia-470.html + nvidia-575.html + nvidia-575-open.html + \ No newline at end of file diff --git a/locale/ubl-settings-video_ru.po b/locale/ubl-settings-video_ru.po index 1107c43..4ff2832 100644 --- a/locale/ubl-settings-video_ru.po +++ b/locale/ubl-settings-video_ru.po @@ -297,7 +297,7 @@ msgstr "Пакет" #: source/ubl-strings.h:60 msgid "Supported Devices" -msgstr "Устройства" +msgstr "Поддерживаемые устройства" #: source/ubl-strings.h:62 msgid "Install module driver" diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 24e487a..14908fb 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -38,8 +38,16 @@ add_custom_target(GLADE ubl-settings-video.glade) set(DEPENDFILES ../ubl-settings-video.glade ../ubl-settings-video-terminal.glade + ../ubl-settings-video-terminal.glade ../ubl-settings-video-monitor.glade ../ubl-settings-video-configuration.glade + ../ubl-settings-video-html.glade + ../ubl-settings-video-driver-tab.glade + ../driver-info/nvidia-340.html + ../driver-info/nvidia-390.html + ../driver-info/nvidia-470.html + ../driver-info/nvidia-575.html + ../driver-info/nvidia-575-open.html ../gresource.xml ../ubl-settings-video.css ../video-drivers.csv @@ -79,6 +87,7 @@ endif() set(SOURCE_FILES ubl-settings-video.c + ubl-settings-video-driver.c ubl-settings-video.h ubl-strings.h ) diff --git a/source/ubl-settings-video-driver.c b/source/ubl-settings-video-driver.c new file mode 100644 index 0000000..cf8f980 --- /dev/null +++ b/source/ubl-settings-video-driver.c @@ -0,0 +1,64 @@ +#include "ubl-settings-video.h" + +void on_devices_info_clicked(GtkWidget *, driver_struct* driver){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_html); + GtkWidget *MainWindow = yon_gtk_builder_get_widget(builder, "MainWindow"); + GtkWidget *HTMLView = yon_gtk_builder_get_widget(builder,"HTMLView"); + yon_gtk_window_setup(GTK_WINDOW(MainWindow),NULL,SUPPORTED_LABEL,icon_name,"html_window"); + int size; + config_str fl = yon_resource_open_file(html_path(driver->name),&size); + char *full_text = yon_char_parsed_to_string(fl,size,"\n"); + webkit_web_view_load_html(WEBKIT_WEB_VIEW(HTMLView),full_text,""); + + gtk_widget_show(MainWindow); +} + +void yon_driver_struct_update(driver_struct *driver){ + char *driver_link = yon_char_unite("",driver->name,"",NULL); + gtk_label_set_markup(GTK_LABEL(driver->DriverLabel),driver_link); + gtk_label_set_text(GTK_LABEL(driver->KernelLabel),driver->kernel); + gtk_label_set_text(GTK_LABEL(driver->DevicesLabel),driver->devices); + gtk_label_set_text(GTK_LABEL(driver->DescriptionLabel),driver->description); + gtk_widget_set_visible(driver->ModuleInstalledCheck,driver->module_exist); + gtk_widget_set_visible(driver->PackageInstalledCheck,driver->package_exist); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(driver->ModuleInstalledCheck),driver->module_installed); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(driver->PackageInstalledCheck),driver->package_installed); + int size; + config_str html = yon_resource_open_file(html_path(driver->name),&size); + if (!size) gtk_widget_hide(driver->DevicesInfoButton); + else yon_char_parsed_free(html,size); +} + +void on_link_activate(GtkWidget *, char*, driver_struct *driver){ + yon_ubl_status_box_render(yon_char_get_localised_from_lib(INFO_PROCESS_LABEL),BACKGROUND_IMAGE_INFO_TYPE); + char *command = get_info_proprietary_command(yon_char_is_empty(driver->module)?driver->package:driver->module); + g_thread_new("info_thread",yon_driver_info_launch,(void*)command); +} + +driver_struct *yon_driver_struct_new(){ + driver_struct *driver = new(driver_struct); + + GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_driver); + driver->MainBox = yon_gtk_builder_get_widget(builder,"MainBox"); + driver->ModuleInstalledCheck = yon_gtk_builder_get_widget(builder,"ModuleInstalledCheck"); + driver->PackageInstalledCheck = yon_gtk_builder_get_widget(builder,"PackageInstalledCheck"); + driver->KernelLabel = yon_gtk_builder_get_widget(builder,"KernelLabel"); + driver->DriverLabel = yon_gtk_builder_get_widget(builder,"DriverLabel"); + driver->DescriptionLabel = yon_gtk_builder_get_widget(builder,"DescriptionLabel"); + driver->DevicesBox = yon_gtk_builder_get_widget(builder,"DevicesBox"); + driver->DevicesInfoButton = yon_gtk_builder_get_widget(builder,"DevicesInfoButton"); + driver->DevicesLabel = yon_gtk_builder_get_widget(builder,"DevicesLabel"); + + driver->name = NULL; + driver->kernel = NULL; + driver->module = NULL; + driver->package = NULL; + driver->module_installed = 0; + driver->package_installed = 0; + driver->module_exist = 0; + driver->package_exist = 0; + + g_signal_connect(G_OBJECT(driver->DevicesInfoButton),"clicked", G_CALLBACK(on_devices_info_clicked),driver); + g_signal_connect(G_OBJECT(driver->DriverLabel),"activate-link", G_CALLBACK(on_link_activate),driver); + return driver; +} \ No newline at end of file diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index 0cdc9e8..8544c80 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -1017,17 +1017,85 @@ void yon_monitor_view_update(){ } gboolean yon_proprietary_clear(main_window *widgets){ - 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); + 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_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); gtk_widget_set_sensitive(widgets->LoadDriversButton,1); @@ -1035,11 +1103,11 @@ gboolean yon_proprietary_set(main_window *widgets){ } -gboolean yon_proprietary_append(struct proprietary_struct *target){ - 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); +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; } @@ -1063,7 +1131,7 @@ gboolean yon_proprietary_connect(main_window *widgets){ return G_SOURCE_REMOVE; } -void *yon_proprietary_local_get(main_window *widgets){ +void yon_proprietary_local_get(main_window *widgets){ g_idle_add((GSourceFunc)yon_proprietary_clear,widgets); int kernels_size; config_str kernels_installed=yon_config_load(yon_get_kernels_installed,&kernels_size); @@ -1086,56 +1154,44 @@ void *yon_proprietary_local_get(main_window *widgets){ yon_char_remove_last_symbol(rtn[i],'\n'); } - int packages_size; - config_str packages = yon_config_load(yon_get_all_pacman_packages_command,&packages_size); - GHashTable *table = g_hash_table_new(g_str_hash,g_str_equal); - if (packages_size){ - for (int i=0;i-1)){ if ((!yon_char_is_empty(current[1])&& - g_hash_table_contains(table,current[1]))|| + yon_packages_check_exist(current[1]))|| (!yon_char_is_empty(current[2])&& - g_hash_table_contains(table,current[2]))){ - int module_status = !yon_char_is_empty(current[1])?g_hash_table_contains(installed,current[1]):0; - int package_status = !yon_char_is_empty(current[2])?g_hash_table_contains(installed,current[2]):0; - struct proprietary_struct *cur = malloc(sizeof(struct proprietary_struct)); - cur->drivers=current; - cur->drivers_size=current_size; - cur->module_status=module_status; - cur->package_status=package_status; - cur->module_exist=g_hash_table_contains(table,current[1]); - cur->package_exist=g_hash_table_contains(table,current[2]); - g_idle_add((GSourceFunc)yon_proprietary_append,cur); + yon_packages_check_exist(current[2]))){ + driver_struct *target = yon_driver_struct_new(); + target->name = yon_char_new(current[3]); + target->module = current[1]; + target->package = current[2]; + target->kernel = current[0]; + target->devices = current_size>5?current[5]:NULL; + target->description = current[4]; + target->module_installed = yon_packages_check_installed(current[1]); + target->package_installed = yon_packages_check_installed(current[2]); + target->module_exist = yon_packages_check_exist(current[1]); + target->package_exist = yon_packages_check_exist(current[2]); + GtkWidget *list_row = gtk_list_box_row_new(); + gtk_widget_show(list_row); + + gtk_container_add(GTK_CONTAINER(list_row),target->MainBox); + g_object_set_data(G_OBJECT(list_row),"driver_struct",target); + gtk_list_box_insert(GTK_LIST_BOX(widgets->DriversList),list_row,-1); + yon_driver_struct_update(target); + // yon_proprietary_append(cur); + free(current); } } if (dr_desc==size-1) { g_idle_add((GSourceFunc)yon_proprietary_connect,widgets); } } - g_hash_table_unref(table); - g_hash_table_unref(installed); + if (!size){ g_idle_add((GSourceFunc)yon_proprietary_connect,widgets); } @@ -1143,13 +1199,13 @@ void *yon_proprietary_local_get(main_window *widgets){ 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); - g_thread_exit (NULL); + yon_drivers_resize(widgets); } void yon_proprietary_get_thread(GtkWidget *,main_window *widgets){ yon_ubl_status_box_render(PROPRIETARY_LOADING_LABEL,BACKGROUND_IMAGE_INFO_TYPE); gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),NULL); - g_thread_new("drivers_loading",(GThreadFunc)(yon_proprietary_local_get),widgets); + yon_proprietary_local_get(widgets); } void yon_monitor_view_dictionary_destroy(void *window){ @@ -1451,6 +1507,14 @@ template_main_window *yon_main_window_complete(main_window *widgets){ widgets->TopTree = yon_gtk_builder_get_widget(builder,"TopTree"); widgets->KernelsCombo = yon_gtk_builder_get_widget(builder,"KernelsCombo"); + widgets->InstalledBox = yon_gtk_builder_get_widget(builder,"InstalledBox"); + widgets->InstalledModuleLabel = yon_gtk_builder_get_widget(builder,"InstalledModuleLabel"); + widgets->InstalledPackageLabel = yon_gtk_builder_get_widget(builder,"InstalledPackageLabel"); + widgets->KernelLabel = yon_gtk_builder_get_widget(builder,"KernelLabel"); + widgets->DriverLabel = yon_gtk_builder_get_widget(builder,"DriverLabel"); + widgets->DescriptionLabel = yon_gtk_builder_get_widget(builder,"DescriptionLabel"); + widgets->DevicesLabel = yon_gtk_builder_get_widget(builder,"DevicesLabel"); + 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")); @@ -1468,6 +1532,7 @@ template_main_window *yon_main_window_complete(main_window *widgets){ widgets->PackageRenderer = GTK_CELL_RENDERER(gtk_builder_get_object(builder, "PackageRenderer")); widgets->ModuleRenderer = GTK_CELL_RENDERER(gtk_builder_get_object(builder, "ModuleRenderer")); + widgets->DriversList = yon_gtk_builder_get_widget(builder, "DriversList"); main_config.list = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore6")); main_config.list2 = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore1")); @@ -1651,10 +1716,11 @@ void config_init(){ main_config.lock_save_local=0; main_config.load_mode=1; main_config.progress_active=0; + yon_packages_init(); } int main(int argc, char *argv[]){ - local=setlocale(LC_ALL, ""); + setlocale(LC_ALL, ""); textdomain (LocaleName); config_init(); @@ -1680,5 +1746,6 @@ int main(int argc, char *argv[]){ yon_proprietary_get_thread(NULL,(main_window*)widgets); yon_monitor_set_resolutions(); gtk_main(); + yon_packages_finish(); return 0; } \ No newline at end of file diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index 1ca1787..83c22ad 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -30,6 +30,8 @@ #define banner_path "/com/ublinux/images/ubl-settings-video-banner.png" #define glade_path "/com/ublinux/ui/ubl-settings-video.glade" +#define glade_path_driver "/com/ublinux/ui/ubl-settings-video-driver-tab.glade" +#define glade_path_html "/com/ublinux/ui/ubl-settings-video-html.glade" #define glade_terminal_path "/com/ublinux/ui/ubl-settings-video-terminal.glade" #define glade_path_monitor "/com/ublinux/ui/ubl-settings-video-monitor.glade" #define glade_path_configuration "/com/ublinux/ui/ubl-settings-video-configuration.glade" @@ -37,6 +39,7 @@ #define LocalePath "/usr/share/locale" #define LocaleName "ubl-settings-video" #define CssPath "/com/ublinux/css/ubl-settings-video.css" +#define html_path(target) yon_char_unite("resource:///com/ublinux/html/",target,".html",NULL) #define get_ports_command "xrandr |grep -E '.*connected' |cut -d' ' -f1" @@ -107,10 +110,9 @@ typedef struct{ void *data; } thread_input; -char *local; - -typedef char *string; +typedef char* string; +__attribute__((unused)) static \ string version_application; #define _(String) gettext(String) @@ -175,6 +177,7 @@ typedef struct GtkWidget *DriversLoadingSpinner; GtkWidget *DriversList; + GtkWidget *InstalledBox; GtkWidget *InstalledModuleLabel; GtkWidget *InstalledPackageLabel; GtkWidget *KernelLabel; @@ -239,8 +242,12 @@ typedef struct { char *module; char *package; char *kernel; + char *devices; + char *description; int module_installed; int package_installed; + int module_exist; + int package_exist; } driver_struct; typedef struct @@ -376,7 +383,6 @@ void on_monitor_config_save(GtkWidget *self, monitor_edit_window *window); void yon_monitor_parse(monitor_edit_window *window, char *string); void on_monitor_configure(GtkWidget *self,monitor_data *window); void yon_monitor_view_update(); -void *yon_proprietary_local_get(main_window *widgets); void yon_proprietary_get_thread(GtkWidget *self,main_window *widgets); void yon_monitor_view_dictionary_destroy(void *window); monitor_data *yon_monitor_new(main_window *widgets,int dull); @@ -387,9 +393,9 @@ void on_database_update(void *self,void *widgets); template_main_window *yon_main_window_complete(main_window *widgets); void config_init(); -void *yon_proprietary_local_get(main_window *widgets); +void yon_proprietary_local_get(main_window *widgets); gboolean yon_proprietary_append_kernels(struct proprietary_kernel_append_struct *append); -gboolean yon_proprietary_append(struct proprietary_struct *target); +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); @@ -400,5 +406,10 @@ void on_app_chooser_open(GtkWidget *self, main_window *widgets); gpointer yon_driver_info_launch(void *command); void on_command_cancel(GtkWidget *,main_window *widgets); gboolean yon_proprietary_set(main_window *widgets); +void on_devices_info_clicked(GtkWidget *, driver_struct* driver); +driver_struct *yon_driver_struct_new(); +void yon_driver_struct_update(driver_struct *driver); +void yon_drivers_resize(main_window *); +void on_link_activate(GtkWidget *, char*, driver_struct *driver); #endif \ No newline at end of file diff --git a/ubl-settings-video-driver-tab.glade b/ubl-settings-video-driver-tab.glade index 14625ba..a673a2c 100644 --- a/ubl-settings-video-driver-tab.glade +++ b/ubl-settings-video-driver-tab.glade @@ -1,9 +1,14 @@ - + - + + True + False + com.ublinux.libublsettingsui-gtk3.important-symbolic + + True False vertical @@ -11,15 +16,25 @@ True False - 5 + 4 - + True - True - False - True + False - + + True + True + False + center + center + True + + + False + True + 0 + @@ -29,14 +44,9 @@ - + True - True - False - True - - - + False False @@ -45,10 +55,24 @@ - + True False - Kernel + + + True + True + False + center + center + True + + + False + True + 0 + + False @@ -57,10 +81,9 @@ - + True False - Driver False @@ -69,17 +92,112 @@ - + True False - Description + + + True + False + Kernel + 0 + + + False + True + 0 + + - True + False True 4 + + + True + False + + + False + True + 5 + + + + + True + False + + + True + False + Driver + False + 0 + + + False + True + 0 + + + + + False + True + 6 + + + + + True + False + + + False + True + 7 + + + + + True + False + + + True + False + Description + True + 0 + + + False + True + 0 + + + + + False + True + 8 + + + + + True + False + + + False + True + 9 + + True @@ -107,6 +225,8 @@ True False Devices + True + 0 False @@ -116,13 +236,13 @@ - False + True True - 5 + 10 @@ -132,9 +252,4 @@ - - True - False - com.ublinux.libublsettingsui-gtk3.important-symbolic - diff --git a/ubl-settings-video-html.glade b/ubl-settings-video-html.glade new file mode 100644 index 0000000..f016467 --- /dev/null +++ b/ubl-settings-video-html.glade @@ -0,0 +1,58 @@ + + + + + + + 500 + 350 + False + com.ublinux.ubl-settings-video + + + True + False + vertical + + + True + True + + + + + + True + True + 0 + + + + + + + True + False + True + + + True + False + Video adapter and display settings + + + + + + + + True + False + 32 + com.ublinux.ubl-settings-video + + + + + + diff --git a/ubl-settings-video.glade b/ubl-settings-video.glade index 9461d96..ae8da20 100644 --- a/ubl-settings-video.glade +++ b/ubl-settings-video.glade @@ -1,5 +1,5 @@ - + @@ -828,7 +828,6 @@ - True False True True @@ -865,14 +864,77 @@ True False + 2 + 2 5 - + True False - label - 0 - 0 + vertical + + + True + False + Installed + 0 + 0 + + + False + True + 0 + + + + + True + False + + + True + False + Module + 0 + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + True + False + Package + 0 + 0 + + + False + True + 2 + + + + + False + True + 1 + + False @@ -881,12 +943,9 @@ - + True False - label - 0 - 0 False @@ -895,12 +954,12 @@ - + True False - label + Kernel 0 - 0 + 1 False @@ -909,12 +968,9 @@ - + True False - label - 0 - 0 False @@ -923,12 +979,12 @@ - + True False - label + Driver 0 - 0 + 1 False @@ -937,12 +993,9 @@ - + True False - label - 0 - 0 False @@ -950,6 +1003,45 @@ 5 + + + True + False + Description + 0 + 1 + + + False + True + 6 + + + + + True + False + + + False + True + 7 + + + + + True + False + Devices + 0 + 1 + + + True + True + 8 + + False @@ -958,14 +1050,30 @@ - + True - False + True + in + + + True + False + + + True + False + + + + + True True - 2 + 1 @@ -1247,6 +1355,9 @@ True True liststore1 + + + fixed @@ -1278,6 +1389,9 @@ both True 4 + + + fixed From bda9c029bebe990f7ef3f0f8cbd15621ba9bc02f Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 9 Jul 2025 18:00:46 +0600 Subject: [PATCH 3/6] WIP driver tab rework --- source/CMakeLists.txt | 1 + source/ubl-settings-video-install.c | 68 ++++++ source/ubl-settings-video.c | 334 +++++++++++++-------------- source/ubl-settings-video.h | 16 +- source/ubl-strings.h | 1 + ubl-settings-video.glade | 337 ++++++++++++++++------------ 6 files changed, 426 insertions(+), 331 deletions(-) create mode 100644 source/ubl-settings-video-install.c diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 14908fb..fd1d92b 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -88,6 +88,7 @@ endif() set(SOURCE_FILES ubl-settings-video.c ubl-settings-video-driver.c + ubl-settings-video-install.c ubl-settings-video.h ubl-strings.h ) diff --git a/source/ubl-settings-video-install.c b/source/ubl-settings-video-install.c new file mode 100644 index 0000000..fdb4b4e --- /dev/null +++ b/source/ubl-settings-video-install.c @@ -0,0 +1,68 @@ +#include "ubl-settings-video.h" + + +void on_terminal_revealer_open(GtkWidget *, main_window *widgets){ + int opened = gtk_widget_get_visible(widgets->TerminalPaned); + switch (opened){ + case 0: { // opens + gtk_button_set_label(GTK_BUTTON(widgets->MoreButton),LESS_LABEL); + + g_object_ref(widgets->MenusTab); + gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(widgets->MenusTab)),widgets->MenusTab); + gtk_paned_add1(GTK_PANED(widgets->TerminalPaned),widgets->MenusTab); + + int pos; + if (yon_window_config_get_parameter("settings","paned_pos",&pos,YON_TYPE_INT)) { + gtk_paned_set_position(GTK_PANED(widgets->TerminalPaned),pos); + } + + gtk_widget_show(widgets->TerminalPaned); + gtk_widget_show(widgets->MenusTab); + + + + } break; + case 1: { //closes + gtk_button_set_label(GTK_BUTTON(widgets->MoreButton),MORE_LABEL); + + int pos = gtk_paned_get_position(GTK_PANED(widgets->TerminalPaned)); + yon_window_config_add_instant_parameter("paned_pos","settings",&pos,YON_TYPE_INT); + + GValue val = G_VALUE_INIT; + g_object_get_property(G_OBJECT(widgets->TerminalPaned),"max-position",&val); + gtk_paned_set_position(GTK_PANED(widgets->TerminalPaned),g_value_get_int(&val)); + g_value_unset(&val); + + g_object_ref(widgets->MenusTab); + gtk_container_remove(GTK_CONTAINER(widgets->TerminalPaned),widgets->MenusTab); + gtk_box_pack_start(GTK_BOX(gtk_widget_get_parent(widgets->TerminalPaned)),widgets->MenusTab,1,1,0); + + gtk_box_reorder_child(GTK_BOX(gtk_widget_get_parent(widgets->MenusTab)),widgets->MenusTab,0); + gtk_widget_hide(widgets->TerminalPaned); + } break; + } +} + + + +// void on_terminal_destroy(GtkWidget *, main_window *widgets){ +// gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalRevealer),0); +// gtk_widget_destroy(widgets->TerminalRevealer); +// GtkTreeModel *model; +// GtkTreeIter iter; +// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->DriversTree)),&model,&iter)){ +// char *module, *package; +// gtk_tree_model_get(model, &iter, 7,&module, 8,&package,-1); +// if (!yon_char_is_empty(module)){ +// if (!system(yon_get_is_installed_command(module))){ +// gtk_list_store_set(main_config.list,&iter,9,1,-1); +// } +// } else { +// if (!system(yon_get_is_installed_command(package))){ +// gtk_list_store_set(main_config.list,&iter,10,1,-1); +// } +// } +// } +// yon_proprietary_get_thread(NULL,widgets); +// yon_ubl_status_box_render(yon_char_unite(PROPRIETARY_OPETAION_DONE_LABEL,". ",PROPRIETARY_LOADING_LABEL,NULL),BACKGROUND_IMAGE_SUCCESS_TYPE); +// } \ No newline at end of file diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index 8544c80..eacd583 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -13,28 +13,6 @@ void on_terminal_more(GtkWidget *, main_window *widgets){ gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalMoreRevieler),active); } -void on_terminal_destroy(GtkWidget *, main_window *widgets){ - gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalRevealer),0); - gtk_widget_destroy(widgets->TerminalRevealer); - GtkTreeModel *model; - GtkTreeIter iter; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->DriversTree)),&model,&iter)){ - char *module, *package; - gtk_tree_model_get(model, &iter, 7,&module, 8,&package,-1); - if (!yon_char_is_empty(module)){ - if (!system(yon_get_is_installed_command(module))){ - gtk_list_store_set(main_config.list,&iter,9,1,-1); - } - } else { - if (!system(yon_get_is_installed_command(package))){ - gtk_list_store_set(main_config.list,&iter,10,1,-1); - } - } - } - yon_proprietary_get_thread(NULL,widgets); - yon_ubl_status_box_render(yon_char_unite(PROPRIETARY_OPETAION_DONE_LABEL,". ",PROPRIETARY_LOADING_LABEL,NULL),BACKGROUND_IMAGE_SUCCESS_TYPE); -} - gboolean on_command_execute_success(GtkWidget *self,gint status,main_window *widgets){ @@ -142,20 +120,20 @@ void yon_terminal_start(main_window *widgets, char *usr_command){ g_idle_add((GSourceFunc)on_terminal_check_progress,widgets); } -void on_driver_pack_selection_change(GtkWidget *, main_window *widgets){ - GtkTreeIter iter; - GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); - GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->DriversTree)); - if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){ - gtk_widget_set_sensitive(widgets->InfoButton,1); - int installed=0; - gtk_tree_model_get(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)),&iter,0,&installed,-1); - if (installed==1){ - } - } else { - gtk_widget_set_sensitive(widgets->InfoButton,0); - } -} +// void on_driver_pack_selection_change(GtkWidget *, main_window *widgets){ +// GtkTreeIter iter; +// GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); +// GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->DriversTree)); +// if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){ +// gtk_widget_set_sensitive(widgets->InfoButton,1); +// int installed=0; +// gtk_tree_model_get(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)),&iter,0,&installed,-1); +// if (installed==1){ +// } +// } else { +// gtk_widget_set_sensitive(widgets->InfoButton,0); +// } +// } gpointer yon_driver_info_launch(void *command){ if (!system((char*)command)){ @@ -166,98 +144,98 @@ gpointer yon_driver_info_launch(void *command){ return NULL; } -void on_driver_pack_info(GtkWidget *, main_window *widgets){ - GtkTreeIter iter; - char *module, *package; - GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); - GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->DriversTree)); - if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){ - yon_ubl_status_box_render(yon_char_get_localised_from_lib(INFO_PROCESS_LABEL),BACKGROUND_IMAGE_INFO_TYPE); - gtk_tree_model_get(list_s,&iter,7,&module,8,&package,-1); - char *command = get_info_proprietary_command(yon_char_is_empty(module)?package: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); - } -} - -void on_pack_install_activate(GtkCellRendererToggle* ,gchar* path,main_window *widgets){ - GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)); - GtkTreeIter iter; - if (!GTK_IS_TREE_MODEL_FILTER(model)){ +// void on_driver_pack_info(GtkWidget *, main_window *widgets){ +// GtkTreeIter iter; +// char *module, *package; +// GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); +// GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->DriversTree)); +// if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){ +// yon_ubl_status_box_render(yon_char_get_localised_from_lib(INFO_PROCESS_LABEL),BACKGROUND_IMAGE_INFO_TYPE); +// gtk_tree_model_get(list_s,&iter,7,&module,8,&package,-1); +// char *command = get_info_proprietary_command(yon_char_is_empty(module)?package: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); +// } +// } + +// void on_pack_install_activate(GtkCellRendererToggle* ,gchar* path,main_window *widgets){ +// GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)); +// GtkTreeIter iter; +// if (!GTK_IS_TREE_MODEL_FILTER(model)){ - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(main_config.list),&iter,path); - model=GTK_TREE_MODEL(main_config.list); - } else { - GtkTreeIter itar; - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model),&itar,path); - gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model),&iter,&itar); - } - char *package; - int installed; - gtk_tree_model_get(GTK_TREE_MODEL(model),&iter,1,&installed,8,&package,-1); - if (!installed){ - dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); - data->action_text=yon_char_unite(INSTALL_CONFIRMATION_LABEL(package),"\n",INSTALL_ATTENTION_LABEL,NULL); - if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ - if (!yon_char_is_empty(package)){ - char *command = install_proprietary_command(package); - yon_terminal_start(widgets,command); - yon_ubl_status_box_render(PACKAGE_INSTALL_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); - } - } - free(data); - } else { - dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); - data->action_text=REMOVE_CONFIRMATION_LABEL(package); - if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ - if (!yon_char_is_empty(package)){ - char *command = delete_proprietary_command(package); - yon_terminal_start(widgets,command); - yon_ubl_status_box_render(PACKAGE_REMOVE_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); - } - } - free(data); - } -} - -void on_module_install_activate(GtkCellRendererToggle* ,gchar* path,main_window *widgets){ - GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)); - GtkTreeIter iter; - if (!GTK_IS_TREE_MODEL_FILTER(model)){ - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(main_config.list),&iter,path); - } else { - GtkTreeIter itar; - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model),&itar,path); - gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model),&iter,&itar); - } - char *package; - int installed; - gtk_tree_model_get(GTK_TREE_MODEL(main_config.list),&iter,1,&installed,7,&package,-1); - if (!installed){ - dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); - data->action_text=INSTALL_CONFIRMATION_LABEL(package); - if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ - if (!yon_char_is_empty(package)){ - char *command = install_proprietary_command(package); - yon_terminal_start(widgets,command); - yon_ubl_status_box_render(MODULE_INSTALL_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); - } - } - free(data); - } else { - dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); - data->action_text=REMOVE_CONFIRMATION_LABEL(package); - if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ - if (!yon_char_is_empty(package)){ - char *command = delete_proprietary_command(package); - yon_terminal_start(widgets,command); - yon_ubl_status_box_render(MODULE_REMOVE_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); - } - } - free(data); - } -} +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(main_config.list),&iter,path); +// model=GTK_TREE_MODEL(main_config.list); +// } else { +// GtkTreeIter itar; +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model),&itar,path); +// gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model),&iter,&itar); +// } +// char *package; +// int installed; +// gtk_tree_model_get(GTK_TREE_MODEL(model),&iter,1,&installed,8,&package,-1); +// if (!installed){ +// dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); +// data->action_text=yon_char_unite(INSTALL_CONFIRMATION_LABEL(package),"\n",INSTALL_ATTENTION_LABEL,NULL); +// if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ +// if (!yon_char_is_empty(package)){ +// char *command = install_proprietary_command(package); +// yon_terminal_start(widgets,command); +// yon_ubl_status_box_render(PACKAGE_INSTALL_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); +// } +// } +// free(data); +// } else { +// dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); +// data->action_text=REMOVE_CONFIRMATION_LABEL(package); +// if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ +// if (!yon_char_is_empty(package)){ +// char *command = delete_proprietary_command(package); +// yon_terminal_start(widgets,command); +// yon_ubl_status_box_render(PACKAGE_REMOVE_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); +// } +// } +// free(data); +// } +// } + +// void on_module_install_activate(GtkCellRendererToggle* ,gchar* path,main_window *widgets){ +// GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)); +// GtkTreeIter iter; +// if (!GTK_IS_TREE_MODEL_FILTER(model)){ +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(main_config.list),&iter,path); +// } else { +// GtkTreeIter itar; +// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model),&itar,path); +// gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model),&iter,&itar); +// } +// char *package; +// int installed; +// gtk_tree_model_get(GTK_TREE_MODEL(main_config.list),&iter,1,&installed,7,&package,-1); +// if (!installed){ +// dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); +// data->action_text=INSTALL_CONFIRMATION_LABEL(package); +// if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ +// if (!yon_char_is_empty(package)){ +// char *command = install_proprietary_command(package); +// yon_terminal_start(widgets,command); +// yon_ubl_status_box_render(MODULE_INSTALL_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); +// } +// } +// free(data); +// } else { +// dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); +// data->action_text=REMOVE_CONFIRMATION_LABEL(package); +// if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ +// if (!yon_char_is_empty(package)){ +// char *command = delete_proprietary_command(package); +// yon_terminal_start(widgets,command); +// yon_ubl_status_box_render(MODULE_REMOVE_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); +// } +// } +// free(data); +// } +// } 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)); @@ -267,25 +245,25 @@ gboolean yon_filter_func(GtkTreeModel* model,GtkTreeIter* iter,main_window *widg return 0; } -void on_kernel_filter_changed(GtkWidget *self, main_window *widgets){ - int active = gtk_combo_box_get_active(GTK_COMBO_BOX(self)); - if (active){ - if (!GTK_IS_TREE_MODEL_FILTER(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)))){ - GtkTreeModel *model = gtk_tree_model_filter_new(GTK_TREE_MODEL(main_config.list),NULL); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),model); - gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(model),(GtkTreeModelFilterVisibleFunc)yon_filter_func,widgets,NULL); - } - gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)))); - - } else { - GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)); - if (GTK_IS_TREE_MODEL_FILTER(model)) { - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),NULL); - g_object_unref(model); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); - } - } -} +// void on_kernel_filter_changed(GtkWidget *self, main_window *widgets){ +// int active = gtk_combo_box_get_active(GTK_COMBO_BOX(self)); +// if (active){ +// if (!GTK_IS_TREE_MODEL_FILTER(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)))){ +// GtkTreeModel *model = gtk_tree_model_filter_new(GTK_TREE_MODEL(main_config.list),NULL); +// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),model); +// gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(model),(GtkTreeModelFilterVisibleFunc)yon_filter_func,widgets,NULL); +// } +// gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)))); + +// } else { +// GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)); +// if (GTK_IS_TREE_MODEL_FILTER(model)) { +// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),NULL); +// g_object_unref(model); +// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); +// } +// } +// } void on_port_chosen_changed(GtkWidget *, monitor_edit_window *window){ dictionary *dict=NULL; @@ -1096,11 +1074,11 @@ void yon_drivers_resize(main_window *widgets){ } } -gboolean yon_proprietary_set(main_window *widgets){ - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); - gtk_widget_set_sensitive(widgets->LoadDriversButton,1); - return G_SOURCE_REMOVE; -} +// gboolean yon_proprietary_set(main_window *widgets){ +// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); +// gtk_widget_set_sensitive(widgets->LoadDriversButton,1); +// return G_SOURCE_REMOVE; +// } gboolean yon_proprietary_append(driver_struct *){ @@ -1118,18 +1096,18 @@ gboolean yon_proprietary_append_kernels(struct proprietary_kernel_append_struct return G_SOURCE_REMOVE; } -gboolean yon_proprietary_disconnect(main_window *widgets){ - g_object_ref(main_config.list); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),NULL); - return G_SOURCE_REMOVE; -} +// gboolean yon_proprietary_disconnect(main_window *widgets){ +// g_object_ref(main_config.list); +// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),NULL); +// return G_SOURCE_REMOVE; +// } -gboolean yon_proprietary_connect(main_window *widgets){ - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); - gtk_spinner_stop(GTK_SPINNER(widgets->DriversLoadingSpinner)); - gtk_widget_hide(widgets->DriversLoadingSpinner); - return G_SOURCE_REMOVE; -} +// gboolean yon_proprietary_connect(main_window *widgets){ +// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); +// gtk_spinner_stop(GTK_SPINNER(widgets->DriversLoadingSpinner)); +// gtk_widget_hide(widgets->DriversLoadingSpinner); +// return G_SOURCE_REMOVE; +// } void yon_proprietary_local_get(main_window *widgets){ g_idle_add((GSourceFunc)yon_proprietary_clear,widgets); @@ -1202,11 +1180,11 @@ void yon_proprietary_local_get(main_window *widgets){ yon_drivers_resize(widgets); } -void yon_proprietary_get_thread(GtkWidget *,main_window *widgets){ - yon_ubl_status_box_render(PROPRIETARY_LOADING_LABEL,BACKGROUND_IMAGE_INFO_TYPE); - gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),NULL); - yon_proprietary_local_get(widgets); -} +// void yon_proprietary_get_thread(GtkWidget *,main_window *widgets){ +// yon_ubl_status_box_render(PROPRIETARY_LOADING_LABEL,BACKGROUND_IMAGE_INFO_TYPE); +// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),NULL); +// yon_proprietary_local_get(widgets); +// } void yon_monitor_view_dictionary_destroy(void *window){ monitor_data *monitor=(monitor_data*)window; @@ -1497,14 +1475,11 @@ template_main_window *yon_main_window_complete(main_window *widgets){ widgets->PrimusrunButton = yon_gtk_builder_get_widget(builder,"PrimusrunButton"); widgets->FrameGapCombo = yon_gtk_builder_get_widget(builder,"FrameGapCombo"); - widgets->DriversTree = yon_gtk_builder_get_widget(builder, "DriversTree"); widgets->InfoButton = yon_gtk_builder_get_widget(builder, "InfoButton"); widgets->TerminalOverlay = yon_gtk_builder_get_widget(builder, "TerminalOverlay"); widgets->MenusTab = yon_gtk_builder_get_widget(builder, "MenusTab"); widgets->LoadDriversButton = yon_gtk_builder_get_widget(builder,"LoadDriversButton"); - widgets->DriversTree = yon_gtk_builder_get_widget(builder,"DriversTree"); - widgets->TopTree = yon_gtk_builder_get_widget(builder,"TopTree"); widgets->KernelsCombo = yon_gtk_builder_get_widget(builder,"KernelsCombo"); widgets->InstalledBox = yon_gtk_builder_get_widget(builder,"InstalledBox"); @@ -1515,6 +1490,12 @@ template_main_window *yon_main_window_complete(main_window *widgets){ widgets->DescriptionLabel = yon_gtk_builder_get_widget(builder,"DescriptionLabel"); widgets->DevicesLabel = yon_gtk_builder_get_widget(builder,"DevicesLabel"); + widgets->MoreButton = yon_gtk_builder_get_widget(builder,"MoreButton"); + 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->InstallTerminal = yon_gtk_builder_get_widget(builder,"InstallTerminal"); + 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")); @@ -1530,23 +1511,13 @@ template_main_window *yon_main_window_complete(main_window *widgets){ widgets->DriversLoadingOverlay = GTK_WIDGET(gtk_builder_get_object(builder, "DriversLoadingOverlay")); widgets->DriversLoadingSpinner = GTK_WIDGET(gtk_builder_get_object(builder, "DriversLoadingSpinner")); - widgets->PackageRenderer = GTK_CELL_RENDERER(gtk_builder_get_object(builder, "PackageRenderer")); - widgets->ModuleRenderer = GTK_CELL_RENDERER(gtk_builder_get_object(builder, "ModuleRenderer")); widgets->DriversList = yon_gtk_builder_get_widget(builder, "DriversList"); - main_config.list = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore6")); - main_config.list2 = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore1")); - 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); - if (!getuid()){ - g_signal_connect(G_OBJECT(widgets->PackageRenderer), "toggled", G_CALLBACK(on_pack_install_activate), widgets); - g_signal_connect(G_OBJECT(widgets->ModuleRenderer), "toggled", G_CALLBACK(on_module_install_activate), widgets); - } g_signal_connect(G_OBJECT(widgets->InfoButton), "clicked", G_CALLBACK(on_driver_pack_info), widgets); - g_signal_connect(G_OBJECT(widgets->DriversTree), "cursor-changed", G_CALLBACK(on_driver_pack_selection_change), widgets); g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); @@ -1564,6 +1535,7 @@ template_main_window *yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->FrameGapCombo),"changed",G_CALLBACK(on_gapfix_changed),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); { int size; config_str default_driver = yon_config_load(yon_config_parameter_prepare_command(VGADRV_AUTO_command,"default",NULL,NULL),&size); @@ -1688,8 +1660,6 @@ template_main_window *yon_main_window_complete(main_window *widgets){ gtk_combo_box_text_prepend_text(GTK_COMBO_BOX_TEXT(widgets->PrimusrunCombo),final); } - yon_gtk_tree_view_minimal_fixed_size_set_full(GTK_TREE_VIEW(widgets->DriversTree)); - yon_adapter_window_setup(widgets); } yon_save_window_set_postsave_function(on_save_done,widgets); diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index 83c22ad..3c87738 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -145,10 +145,6 @@ typedef struct GtkWidget *PrimusrunButton; GtkWidget *FrameGapCombo; - GtkWidget *DriversTree; - GtkWidget *TopTree; - GtkCellRenderer *ModuleRenderer; - GtkCellRenderer *PackageRenderer; GtkWidget *KernelsCombo; GtkWidget *InfoButton; @@ -167,7 +163,6 @@ typedef struct GtkWidget *TerminalOverlay; GtkWidget *TerminalBox; - GtkWidget *TerminalRevealer; GtkWidget *TerminalInfoLabel; GtkWidget *TerminalMoreButton; GtkWidget *TerminalCancelButton; @@ -185,6 +180,12 @@ typedef struct GtkWidget *DescriptionLabel; GtkWidget *DevicesLabel; + GtkWidget *MoreButton; + GtkWidget *CancelButton; + GtkWidget *TerminalPaned; + GtkWidget *TerminalRevealer; + GtkWidget *InstallTerminal; + GtkWidget *MenusTab; GtkWidget *terminal; @@ -202,8 +203,6 @@ typedef struct monitor_config monitors; proprietary_config proprietary; dictionary *supported_resolutions; - GtkListStore *list; - GtkListStore *list2; char *failsafenVidia; char *failsafeATI; int descreteOnly; @@ -227,6 +226,8 @@ typedef struct } config; +extern config main_config; + typedef struct { GtkWidget *MainBox; GtkWidget *ModuleInstalledCheck; @@ -411,5 +412,6 @@ driver_struct *yon_driver_struct_new(); void yon_driver_struct_update(driver_struct *driver); void yon_drivers_resize(main_window *); void on_link_activate(GtkWidget *, char*, driver_struct *driver); +void on_terminal_revealer_open(GtkWidget *, main_window *widgets); #endif \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 18bc46c..bed3be1 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -81,6 +81,7 @@ #define ADD_LABEL _("Add monitor configuration") #define SWITCH_LABEL _("Switch monitor") #define MORE_LABEL _("More") +#define LESS_LABEL _("Less") #define PORT_EDIT_LABEL(target) yon_char_unite(_("Configuration: Monitor"),"(",target,")",NULL) #define HELP_TITLE_LABEL _("Would you like to read documentation in the Web?") diff --git a/ubl-settings-video.glade b/ubl-settings-video.glade index ae8da20..3f75550 100644 --- a/ubl-settings-video.glade +++ b/ubl-settings-video.glade @@ -1,7 +1,8 @@ - + + True @@ -21,6 +22,77 @@ start 64 + + True + False + 0 + in + + + True + False + 12 + + + True + False + + + True + False + vertical + + + True + True + UTF-8 + True + True + False + + + False + True + 0 + + + + + True + True + 0 + + + + + True + False + False + vertical + True + False + 1 + 2 + + + False + True + 1 + + + + + + + + + + + + 300 + 1 + 10 + True False @@ -1296,6 +1368,128 @@ 0 + + + True + vertical + 250 + True + True + + + + + + True + True + 1 + + + + + True + True + False + True + + + True + False + 0 + in + + + True + False + + + True + False + vertical + + + True + False + 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 + True + 1 + + + + + + + + + True + False + + + + + + + + + False + True + 2 + + @@ -1346,145 +1540,4 @@ - - True - False - vertical - - - True - True - liststore1 - - - - - - fixed - 160 - Installed - - - - - - - - False - True - 0 - - - - - True - True - external - - - True - True - liststore6 - 1 - both - True - 4 - - - - - - fixed - 80 - Module - - - - 9 - 9 - 0 - - - - - - - 80 - Package - descending - 0 - - - - 10 - 10 - 1 - - - - - - - Kernel - - - - 2 - - - - - - - Driver - - - - 3 - - - - - - - Description - - - word - 150 - - - 4 - - - - - - - autosize - Supported Devices - - - word - 220 - - - 5 - - - - - - - - - - True - True - 1 - - - From f600c421adcac75711f2433a667c8644aa59490c Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 11 Jul 2025 11:23:12 +0600 Subject: [PATCH 4/6] Drivers tab rework --- source/ubl-settings-video-driver.c | 42 +- source/ubl-settings-video-install.c | 81 ++-- source/ubl-settings-video.c | 365 +++++++---------- source/ubl-settings-video.h | 28 +- source/ubl-strings.h | 2 + ubl-settings-video-driver-tab.glade | 26 +- ubl-settings-video.glade | 606 ++++++++++++++++------------ 7 files changed, 584 insertions(+), 566 deletions(-) diff --git a/source/ubl-settings-video-driver.c b/source/ubl-settings-video-driver.c index cf8f980..fc28a53 100644 --- a/source/ubl-settings-video-driver.c +++ b/source/ubl-settings-video-driver.c @@ -1,5 +1,13 @@ #include "ubl-settings-video.h" +void on_devices_button_clicked(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"); + on_devices_info_clicked(NULL,driver); + } +} + void on_devices_info_clicked(GtkWidget *, driver_struct* driver){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_html); GtkWidget *MainWindow = yon_gtk_builder_get_widget(builder, "MainWindow"); @@ -13,26 +21,38 @@ void on_devices_info_clicked(GtkWidget *, driver_struct* driver){ gtk_widget_show(MainWindow); } -void yon_driver_struct_update(driver_struct *driver){ - char *driver_link = yon_char_unite("",driver->name,"",NULL); - gtk_label_set_markup(GTK_LABEL(driver->DriverLabel),driver_link); +void yon_driver_struct_update(main_window *widgets,driver_struct *driver){ + driver->module_installed = yon_packages_check_installed(driver->module); + driver->package_installed = yon_packages_check_installed(driver->package); gtk_label_set_text(GTK_LABEL(driver->KernelLabel),driver->kernel); gtk_label_set_text(GTK_LABEL(driver->DevicesLabel),driver->devices); gtk_label_set_text(GTK_LABEL(driver->DescriptionLabel),driver->description); gtk_widget_set_visible(driver->ModuleInstalledCheck,driver->module_exist); gtk_widget_set_visible(driver->PackageInstalledCheck,driver->package_exist); + g_signal_handlers_block_by_func(G_OBJECT(driver->ModuleInstalledCheck),G_CALLBACK(on_install_activate),widgets); + g_signal_handlers_block_by_func(G_OBJECT(driver->PackageInstalledCheck),G_CALLBACK(on_install_activate),widgets); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(driver->ModuleInstalledCheck),driver->module_installed); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(driver->PackageInstalledCheck),driver->package_installed); + g_signal_handlers_unblock_by_func(G_OBJECT(driver->ModuleInstalledCheck),G_CALLBACK(on_install_activate),widgets); + g_signal_handlers_unblock_by_func(G_OBJECT(driver->PackageInstalledCheck),G_CALLBACK(on_install_activate),widgets); int size; + char *driver_link = NULL; config_str html = yon_resource_open_file(html_path(driver->name),&size); - if (!size) gtk_widget_hide(driver->DevicesInfoButton); - else yon_char_parsed_free(html,size); + if (!size){ + driver_link = yon_char_new(driver->name); + driver->supported_devices_avaliable=0; + } else { + driver_link = yon_char_unite("",driver->name,"",NULL); + yon_char_parsed_free(html,size); + driver->supported_devices_avaliable=1; + } + + gtk_label_set_markup(GTK_LABEL(driver->DriverLabel),driver_link); + free(driver_link); } void on_link_activate(GtkWidget *, char*, driver_struct *driver){ - yon_ubl_status_box_render(yon_char_get_localised_from_lib(INFO_PROCESS_LABEL),BACKGROUND_IMAGE_INFO_TYPE); - char *command = get_info_proprietary_command(yon_char_is_empty(driver->module)?driver->package:driver->module); - g_thread_new("info_thread",yon_driver_info_launch,(void*)command); + on_devices_info_clicked(NULL,driver); } driver_struct *yon_driver_struct_new(){ @@ -46,7 +66,6 @@ driver_struct *yon_driver_struct_new(){ driver->DriverLabel = yon_gtk_builder_get_widget(builder,"DriverLabel"); driver->DescriptionLabel = yon_gtk_builder_get_widget(builder,"DescriptionLabel"); driver->DevicesBox = yon_gtk_builder_get_widget(builder,"DevicesBox"); - driver->DevicesInfoButton = yon_gtk_builder_get_widget(builder,"DevicesInfoButton"); driver->DevicesLabel = yon_gtk_builder_get_widget(builder,"DevicesLabel"); driver->name = NULL; @@ -57,8 +76,11 @@ driver_struct *yon_driver_struct_new(){ driver->package_installed = 0; driver->module_exist = 0; driver->package_exist = 0; + driver->supported_devices_avaliable=0; + + g_object_set_data(G_OBJECT(driver->ModuleInstalledCheck),"driver_struct",driver); + g_object_set_data(G_OBJECT(driver->PackageInstalledCheck),"driver_struct",driver); - g_signal_connect(G_OBJECT(driver->DevicesInfoButton),"clicked", G_CALLBACK(on_devices_info_clicked),driver); g_signal_connect(G_OBJECT(driver->DriverLabel),"activate-link", G_CALLBACK(on_link_activate),driver); return driver; } \ No newline at end of file diff --git a/source/ubl-settings-video-install.c b/source/ubl-settings-video-install.c index fdb4b4e..adca892 100644 --- a/source/ubl-settings-video-install.c +++ b/source/ubl-settings-video-install.c @@ -7,17 +7,17 @@ void on_terminal_revealer_open(GtkWidget *, main_window *widgets){ case 0: { // opens gtk_button_set_label(GTK_BUTTON(widgets->MoreButton),LESS_LABEL); - g_object_ref(widgets->MenusTab); - gtk_container_remove(GTK_CONTAINER(gtk_widget_get_parent(widgets->MenusTab)),widgets->MenusTab); - gtk_paned_add1(GTK_PANED(widgets->TerminalPaned),widgets->MenusTab); + g_object_ref(widgets->TerminalMoveBox); + gtk_container_remove(GTK_CONTAINER(widgets->TerminalMoveTargetBox),widgets->TerminalMoveBox); + gtk_paned_add1(GTK_PANED(widgets->TerminalPaned),widgets->TerminalMoveBox); - int pos; + int pos=250; if (yon_window_config_get_parameter("settings","paned_pos",&pos,YON_TYPE_INT)) { gtk_paned_set_position(GTK_PANED(widgets->TerminalPaned),pos); } gtk_widget_show(widgets->TerminalPaned); - gtk_widget_show(widgets->MenusTab); + gtk_widget_show(widgets->TerminalMoveBox); @@ -33,36 +33,59 @@ void on_terminal_revealer_open(GtkWidget *, main_window *widgets){ gtk_paned_set_position(GTK_PANED(widgets->TerminalPaned),g_value_get_int(&val)); g_value_unset(&val); - g_object_ref(widgets->MenusTab); - gtk_container_remove(GTK_CONTAINER(widgets->TerminalPaned),widgets->MenusTab); - gtk_box_pack_start(GTK_BOX(gtk_widget_get_parent(widgets->TerminalPaned)),widgets->MenusTab,1,1,0); + g_object_ref(widgets->TerminalMoveBox); + gtk_container_remove(GTK_CONTAINER(widgets->TerminalPaned),widgets->TerminalMoveBox); + gtk_box_pack_start(GTK_BOX(widgets->TerminalMoveTargetBox),widgets->TerminalMoveBox,1,1,0); - gtk_box_reorder_child(GTK_BOX(gtk_widget_get_parent(widgets->MenusTab)),widgets->MenusTab,0); + gtk_box_reorder_child(GTK_BOX(widgets->TerminalMoveTargetBox),widgets->TerminalMoveBox,0); gtk_widget_hide(widgets->TerminalPaned); } break; } } +void on_install_activate(GtkWidget *self, main_window *widgets){ + g_signal_handlers_block_by_func(G_OBJECT(self),G_CALLBACK(on_install_activate),widgets); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self),!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self))); + g_signal_handlers_unblock_by_func(G_OBJECT(self),G_CALLBACK(on_install_activate),widgets); + driver_struct *driver = g_object_get_data(G_OBJECT(self),"driver_struct"); + char *install_target = NULL; + if (self == driver->ModuleInstalledCheck){ + install_target = driver->module; + } else if (self == driver->PackageInstalledCheck){ + install_target = driver->package; + } + char *command = NULL; + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self))){ + command = delete_proprietary_command(install_target); + } else { + command = install_proprietary_command(install_target); + } + g_mutex_lock(&main_config.progress_mutex); + main_config.progress_active=1; + g_mutex_unlock(&main_config.progress_mutex); + vte_terminal_set_size(VTE_TERMINAL(widgets->InstallTerminal),10,15); + vte_terminal_set_input_enabled(VTE_TERMINAL(widgets->InstallTerminal),1); + vte_terminal_reset(VTE_TERMINAL(widgets->InstallTerminal),0,1); + g_signal_connect_after(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_install_check),driver); + yon_terminal_integrated_start(widgets->InstallTerminal,command); + // g_signal_connect(G_OBJECT(widgets->InstallTerminal),"contents-changed",G_CALLBACK(on_terminal_check_progress),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_driver_struct_update(widgets,driver); + // g_signal_handlers_block_by_func(G_OBJECT(driver->ModuleInstalledCheck),G_CALLBACK(on_install_activate),widgets); + // g_signal_handlers_block_by_func(G_OBJECT(driver->PackageInstalledCheck),G_CALLBACK(on_install_activate),widgets); + // gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(driver->ModuleInstalledCheck),yon_packages_check_installed(driver->module)); + // gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(driver->PackageInstalledCheck),yon_packages_check_installed(driver->package)); + // g_signal_handlers_unblock_by_func(G_OBJECT(driver->ModuleInstalledCheck),G_CALLBACK(on_install_activate),widgets); + // g_signal_handlers_unblock_by_func(G_OBJECT(driver->PackageInstalledCheck),G_CALLBACK(on_install_check),driver); +} -// void on_terminal_destroy(GtkWidget *, main_window *widgets){ -// gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalRevealer),0); -// gtk_widget_destroy(widgets->TerminalRevealer); -// GtkTreeModel *model; -// GtkTreeIter iter; -// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->DriversTree)),&model,&iter)){ -// char *module, *package; -// gtk_tree_model_get(model, &iter, 7,&module, 8,&package,-1); -// if (!yon_char_is_empty(module)){ -// if (!system(yon_get_is_installed_command(module))){ -// gtk_list_store_set(main_config.list,&iter,9,1,-1); -// } -// } else { -// if (!system(yon_get_is_installed_command(package))){ -// gtk_list_store_set(main_config.list,&iter,10,1,-1); -// } -// } -// } -// yon_proprietary_get_thread(NULL,widgets); -// yon_ubl_status_box_render(yon_char_unite(PROPRIETARY_OPETAION_DONE_LABEL,". ",PROPRIETARY_LOADING_LABEL,NULL),BACKGROUND_IMAGE_SUCCESS_TYPE); +// void yon_terminal_start(main_window *widgets, char *usr_command){ // } \ No newline at end of file diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index eacd583..6b89071 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -3,7 +3,7 @@ config main_config; void on_terminal_done(GtkWidget *, int , main_window *widgets){ - gtk_widget_destroy(widgets->TerminalRevealer); + vte_terminal_feed_child(VTE_TERMINAL(widgets->InstallTerminal),"^C",2); } void on_terminal_more(GtkWidget *, main_window *widgets){ @@ -15,7 +15,7 @@ gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalMoreRevieler),active gboolean on_command_execute_success(GtkWidget *self,gint status,main_window *widgets){ - + 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); @@ -26,40 +26,15 @@ gboolean on_command_execute_success(GtkWidget *self,gint status,main_window *wid } 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(GtkWidget *,main_window *widgets){ gboolean on_terminal_check_progress(main_window *widgets){ - char *text = vte_terminal_get_text_format(VTE_TERMINAL(widgets->terminal),VTE_FORMAT_TEXT); - GRegex *regex = g_regex_new("\\d?\\d?\\d%",0,0,NULL); - - GMatchInfo *match = NULL; - g_regex_match(regex,text,0,&match); - g_regex_unref(regex); - double percentage = 0.0; - char *last_match = NULL; - while (g_match_info_matches(match)) { - char *current_match = g_match_info_fetch(match, 0); - if (last_match) { - g_free(last_match); - } - last_match = current_match; - g_match_info_next(match, NULL); - } - - if (last_match) { - yon_char_remove_last_symbol(last_match,'%'); - percentage = g_ascii_strtod(last_match,NULL); - gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel), percentage / 100); - g_free(last_match); - } else { gtk_progress_bar_pulse(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel)); - } - if (text) g_free(text); - if (match) g_match_info_unref(match); - g_mutex_lock(&main_config.progress_mutex); - if (percentage>99||!main_config.progress_active){ + if (!main_config.progress_active){ g_mutex_unlock(&main_config.progress_mutex); return G_SOURCE_REMOVE; } @@ -74,67 +49,23 @@ void on_command_cancel(GtkWidget *,main_window *widgets){ on_terminal_done(NULL,0,widgets); } -void yon_terminal_start(main_window *widgets, char *usr_command){ - char **command=new_arr(char*,2); - gchar **envp = g_get_environ(); - command[0]=(gchar *)g_strdup(g_environ_getenv(envp, "SHELL")); - command[1]=NULL; - char **env=new_arr(char*,2); - env[0]=""; - env[1]=NULL; - - GtkBuilder *builder=gtk_builder_new_from_resource(glade_terminal_path); - widgets->TerminalBox = yon_gtk_builder_get_widget(builder, "TerminalBox"); - widgets->TerminalRevealer = yon_gtk_builder_get_widget(builder, "TerminalRevealer"); - widgets->TerminalMoreRevieler = yon_gtk_builder_get_widget(builder, "TerminalMoreRevieler"); - widgets->TerminalCancelButton = yon_gtk_builder_get_widget(builder, "TerminalCancelButton"); - widgets->TerminalMoreButton = yon_gtk_builder_get_widget(builder, "TerminalMoreButton"); - widgets->TerminalScroll = yon_gtk_builder_get_widget(builder, "TerminalScroll"); - widgets->TerminalInfoLabel = yon_gtk_builder_get_widget(builder, "TerminalInfoLabel"); - - widgets->terminal = yon_gtk_builder_get_widget(builder, "TerminalTerminal"); - g_signal_connect(G_OBJECT(widgets->terminal),"child-exited",G_CALLBACK(on_command_execute_success),widgets); - g_signal_connect(G_OBJECT(widgets->TerminalCancelButton),"clicked",G_CALLBACK(on_command_cancel),widgets); - - gtk_button_set_label(GTK_BUTTON(widgets->TerminalMoreButton),MORE_LABEL); - vte_terminal_set_size(VTE_TERMINAL(widgets->terminal),10,15); - gtk_widget_set_app_paintable(widgets->terminal,1); - gtk_style_context_add_class(gtk_widget_get_style_context(widgets->terminal),"opacited"); - gtk_style_context_add_class(gtk_widget_get_style_context(widgets->terminal),"workingbg"); - gtk_overlay_add_overlay(GTK_OVERLAY(widgets->TerminalOverlay),widgets->TerminalRevealer); - g_signal_connect(G_OBJECT(widgets->TerminalMoreButton), "clicked", G_CALLBACK(on_terminal_more), widgets); - g_signal_connect(G_OBJECT(widgets->terminal), "destroy", G_CALLBACK(on_terminal_destroy), widgets); - gtk_revealer_set_reveal_child(GTK_REVEALER(widgets->TerminalRevealer),1); - vte_terminal_reset(VTE_TERMINAL(widgets->terminal),0,1); - yon_terminal_integrated_start_shell(widgets->terminal,usr_command,NULL,NULL); - vte_terminal_set_scrollback_lines(VTE_TERMINAL(widgets->terminal), 100); - vte_terminal_set_scroll_on_output(VTE_TERMINAL(widgets->terminal), TRUE); - vte_terminal_set_scroll_on_keystroke(VTE_TERMINAL(widgets->terminal), TRUE); - vte_terminal_set_input_enabled(VTE_TERMINAL(widgets->terminal),1); - gtk_widget_show_all(widgets->TerminalRevealer); - gtk_widget_realize(widgets->terminal); - g_mutex_lock(&main_config.progress_mutex); - main_config.progress_active=1; - g_mutex_unlock(&main_config.progress_mutex); - gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel),0.00001); - g_idle_add((GSourceFunc)on_terminal_check_progress,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); + } } -// void on_driver_pack_selection_change(GtkWidget *, main_window *widgets){ -// GtkTreeIter iter; -// GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); -// GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->DriversTree)); -// if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){ -// gtk_widget_set_sensitive(widgets->InfoButton,1); -// int installed=0; -// gtk_tree_model_get(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)),&iter,0,&installed,-1); -// if (installed==1){ -// } -// } else { -// gtk_widget_set_sensitive(widgets->InfoButton,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); @@ -144,98 +75,31 @@ gpointer yon_driver_info_launch(void *command){ return NULL; } -// void on_driver_pack_info(GtkWidget *, main_window *widgets){ -// GtkTreeIter iter; -// char *module, *package; -// GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); -// GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->DriversTree)); -// if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){ -// yon_ubl_status_box_render(yon_char_get_localised_from_lib(INFO_PROCESS_LABEL),BACKGROUND_IMAGE_INFO_TYPE); -// gtk_tree_model_get(list_s,&iter,7,&module,8,&package,-1); -// char *command = get_info_proprietary_command(yon_char_is_empty(module)?package: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); -// } -// } - -// void on_pack_install_activate(GtkCellRendererToggle* ,gchar* path,main_window *widgets){ -// GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)); -// GtkTreeIter iter; -// if (!GTK_IS_TREE_MODEL_FILTER(model)){ - -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(main_config.list),&iter,path); -// model=GTK_TREE_MODEL(main_config.list); -// } else { -// GtkTreeIter itar; -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model),&itar,path); -// gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model),&iter,&itar); -// } -// char *package; -// int installed; -// gtk_tree_model_get(GTK_TREE_MODEL(model),&iter,1,&installed,8,&package,-1); -// if (!installed){ -// dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); -// data->action_text=yon_char_unite(INSTALL_CONFIRMATION_LABEL(package),"\n",INSTALL_ATTENTION_LABEL,NULL); -// if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ -// if (!yon_char_is_empty(package)){ -// char *command = install_proprietary_command(package); -// yon_terminal_start(widgets,command); -// yon_ubl_status_box_render(PACKAGE_INSTALL_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); -// } -// } -// free(data); -// } else { -// dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); -// data->action_text=REMOVE_CONFIRMATION_LABEL(package); -// if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ -// if (!yon_char_is_empty(package)){ -// char *command = delete_proprietary_command(package); -// yon_terminal_start(widgets,command); -// yon_ubl_status_box_render(PACKAGE_REMOVE_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); -// } -// } -// free(data); -// } -// } - -// void on_module_install_activate(GtkCellRendererToggle* ,gchar* path,main_window *widgets){ -// GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)); -// GtkTreeIter iter; -// if (!GTK_IS_TREE_MODEL_FILTER(model)){ -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(main_config.list),&iter,path); -// } else { -// GtkTreeIter itar; -// gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model),&itar,path); -// gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model),&iter,&itar); -// } -// char *package; -// int installed; -// gtk_tree_model_get(GTK_TREE_MODEL(main_config.list),&iter,1,&installed,7,&package,-1); -// if (!installed){ -// dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); -// data->action_text=INSTALL_CONFIRMATION_LABEL(package); -// if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ -// if (!yon_char_is_empty(package)){ -// char *command = install_proprietary_command(package); -// yon_terminal_start(widgets,command); -// yon_ubl_status_box_render(MODULE_INSTALL_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); -// } -// } -// free(data); -// } else { -// dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); -// data->action_text=REMOVE_CONFIRMATION_LABEL(package); -// if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){ -// if (!yon_char_is_empty(package)){ -// char *command = delete_proprietary_command(package); -// yon_terminal_start(widgets,command); -// yon_ubl_status_box_render(MODULE_REMOVE_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE); -// } -// } -// free(data); -// } -// } +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)); @@ -245,25 +109,27 @@ gboolean yon_filter_func(GtkTreeModel* model,GtkTreeIter* iter,main_window *widg return 0; } -// void on_kernel_filter_changed(GtkWidget *self, main_window *widgets){ -// int active = gtk_combo_box_get_active(GTK_COMBO_BOX(self)); -// if (active){ -// if (!GTK_IS_TREE_MODEL_FILTER(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)))){ -// GtkTreeModel *model = gtk_tree_model_filter_new(GTK_TREE_MODEL(main_config.list),NULL); -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),model); -// gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(model),(GtkTreeModelFilterVisibleFunc)yon_filter_func,widgets,NULL); -// } -// gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)))); - -// } else { -// GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)); -// if (GTK_IS_TREE_MODEL_FILTER(model)) { -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),NULL); -// g_object_unref(model); -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); -// } -// } -// } +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; @@ -1074,11 +940,10 @@ void yon_drivers_resize(main_window *widgets){ } } -// gboolean yon_proprietary_set(main_window *widgets){ -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); -// gtk_widget_set_sensitive(widgets->LoadDriversButton,1); -// return G_SOURCE_REMOVE; -// } +gboolean yon_proprietary_set(main_window *widgets){ + gtk_widget_set_sensitive(widgets->LoadDriversButton,1); + return G_SOURCE_REMOVE; +} gboolean yon_proprietary_append(driver_struct *){ @@ -1090,24 +955,17 @@ gboolean yon_proprietary_append(driver_struct *){ } gboolean yon_proprietary_append_kernels(struct proprietary_kernel_append_struct *append){ - gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(append->widgets->KernelsCombo),append->kernel); + 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_disconnect(main_window *widgets){ -// g_object_ref(main_config.list); -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),NULL); -// return G_SOURCE_REMOVE; -// } - -// gboolean yon_proprietary_connect(main_window *widgets){ -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list)); -// gtk_spinner_stop(GTK_SPINNER(widgets->DriversLoadingSpinner)); -// gtk_widget_hide(widgets->DriversLoadingSpinner); -// return G_SOURCE_REMOVE; -// } +gboolean yon_proprietary_connect(main_window *widgets){ + gtk_spinner_stop(GTK_SPINNER(widgets->DriversLoadingSpinner)); + gtk_widget_hide(widgets->DriversLoadingSpinner); + return G_SOURCE_REMOVE; +} void yon_proprietary_local_get(main_window *widgets){ g_idle_add((GSourceFunc)yon_proprietary_clear,widgets); @@ -1132,7 +990,6 @@ void yon_proprietary_local_get(main_window *widgets){ yon_char_remove_last_symbol(rtn[i],'\n'); } - g_idle_add((GSourceFunc)yon_proprietary_disconnect,widgets); for (int dr_desc=1;dr_descpackage_exist = yon_packages_check_exist(current[2]); GtkWidget *list_row = gtk_list_box_row_new(); gtk_widget_show(list_row); + g_signal_connect(G_OBJECT(target->ModuleInstalledCheck),"clicked", G_CALLBACK(on_install_activate),widgets); + g_signal_connect(G_OBJECT(target->PackageInstalledCheck),"clicked", G_CALLBACK(on_install_activate),widgets); gtk_container_add(GTK_CONTAINER(list_row),target->MainBox); g_object_set_data(G_OBJECT(list_row),"driver_struct",target); gtk_list_box_insert(GTK_LIST_BOX(widgets->DriversList),list_row,-1); - yon_driver_struct_update(target); + yon_driver_struct_update(widgets,target); // yon_proprietary_append(cur); free(current); } @@ -1180,11 +1039,10 @@ void yon_proprietary_local_get(main_window *widgets){ yon_drivers_resize(widgets); } -// void yon_proprietary_get_thread(GtkWidget *,main_window *widgets){ -// yon_ubl_status_box_render(PROPRIETARY_LOADING_LABEL,BACKGROUND_IMAGE_INFO_TYPE); -// gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),NULL); -// yon_proprietary_local_get(widgets); -// } +void yon_proprietary_get_thread(GtkWidget *,main_window *widgets){ + yon_ubl_status_box_render(PROPRIETARY_LOADING_LABEL,BACKGROUND_IMAGE_INFO_TYPE); + yon_proprietary_local_get(widgets); +} void yon_monitor_view_dictionary_destroy(void *window){ monitor_data *monitor=(monitor_data*)window; @@ -1446,6 +1304,22 @@ void on_gapfix_changed(GtkWidget*, main_window *widgets){ } } +int check_rmb_menu(void *data){ + main_window *widgets = (main_window*)data; + GtkListBoxRow *selection = 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"); + if (driver->supported_devices_avaliable){ + gtk_widget_set_sensitive(GTK_WIDGET(widgets->menu->buttons->first->data),1); + } else { + gtk_widget_set_sensitive(GTK_WIDGET(widgets->menu->buttons->first->data),0); + } + return 1; + } + + return 0; +} + /** void yon_setup_widgets(main_window *widgets) * [EN] * Sets up every element on main window @@ -1456,7 +1330,8 @@ template_main_window *yon_main_window_complete(main_window *widgets){ widgets = yon_remalloc(widgets,sizeof(main_window)); main_config.widgets=widgets; GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); - gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),yon_gtk_builder_get_widget(builder,"BoxMain"),1,1,0); + widgets->MainBox = yon_gtk_builder_get_widget(builder,"BoxMain"); + gtk_box_pack_start(GTK_BOX(widgets->InterfaceBox),widgets->MainBox,1,1,0); // Custom widgets configuration { widgets->AutoDriverCombo = yon_gtk_builder_get_widget(builder,"AutoDriverCombo"); @@ -1479,6 +1354,9 @@ template_main_window *yon_main_window_complete(main_window *widgets){ widgets->TerminalOverlay = yon_gtk_builder_get_widget(builder, "TerminalOverlay"); widgets->MenusTab = yon_gtk_builder_get_widget(builder, "MenusTab"); widgets->LoadDriversButton = yon_gtk_builder_get_widget(builder,"LoadDriversButton"); + widgets->SupportedDevicesButton = yon_gtk_builder_get_widget(builder,"SupportedDevicesButton"); + widgets->AboutModuleButton = yon_gtk_builder_get_widget(builder,"AboutModuleButton"); + widgets->AboutPackageButton = yon_gtk_builder_get_widget(builder,"AboutPackageButton"); widgets->KernelsCombo = yon_gtk_builder_get_widget(builder,"KernelsCombo"); @@ -1490,11 +1368,14 @@ template_main_window *yon_main_window_complete(main_window *widgets){ widgets->DescriptionLabel = yon_gtk_builder_get_widget(builder,"DescriptionLabel"); widgets->DevicesLabel = yon_gtk_builder_get_widget(builder,"DevicesLabel"); - widgets->MoreButton = yon_gtk_builder_get_widget(builder,"MoreButton"); + widgets->MoreButton = yon_gtk_builder_get_widget(builder,"TerminalMoreButton"); 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->InstallTerminal = yon_gtk_builder_get_widget(builder,"InstallTerminal"); + 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")); @@ -1512,12 +1393,20 @@ template_main_window *yon_main_window_complete(main_window *widgets){ widgets->DriversLoadingSpinner = GTK_WIDGET(gtk_builder_get_object(builder, "DriversLoadingSpinner")); widgets->DriversList = yon_gtk_builder_get_widget(builder, "DriversList"); - + widgets->TerminalCancelButton = yon_gtk_builder_get_widget(builder, "TerminalCancelButton"); + 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); + g_signal_connect(G_OBJECT(widgets->SupportedDevicesButton), "clicked", G_CALLBACK(on_devices_button_clicked), widgets); + g_signal_connect(G_OBJECT(widgets->AboutModuleButton), "clicked", G_CALLBACK(on_driver_pack_info), widgets); + g_signal_connect(G_OBJECT(widgets->AboutPackageButton), "clicked", G_CALLBACK(on_driver_module_info), widgets); - g_signal_connect(G_OBJECT(widgets->InfoButton), "clicked", G_CALLBACK(on_driver_pack_info), widgets); + g_signal_connect(G_OBJECT(widgets->DriversList), "row-selected", G_CALLBACK(on_driver_pack_selection_change), widgets); + + g_signal_connect(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_command_execute_success),widgets); g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); @@ -1536,6 +1425,22 @@ 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_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); + } + widgets->menu = yon_rmb_menu_setup(widgets->DriversList,check_rmb_menu,widgets, + SUPPORTED_LABEL,icon_devices_path,G_CALLBACK(on_devices_button_clicked),widgets, + MODULE_INFO_LABEL,icon_module_path,G_CALLBACK(on_driver_module_info),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); diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index 3c87738..13c55d8 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -50,7 +50,7 @@ #define get_resolutions_supportable_command "resource:///com/ublinux/csv/resolutions.csv" -#define install_proprietary_command(target) yon_char_append("yes | pacman --quiet --needed -Sy ",target) +#define install_proprietary_command(target) yon_char_append("pacman --quiet --needed -Sy ",target) #define delete_proprietary_command(target) yon_char_append("pacman -R --noconfirm ",target) @@ -60,12 +60,15 @@ #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" +#define icon_module_path "com.ublinux.libublsettingsui-gtk3.dropbox-symbolic" +#define icon_package_path "com.ublinux.libublsettingsui-gtk3.lookup-symbolic" + #define yon_get_is_installed_command(target) yon_char_append("pacman -Q ",target) #define yon_get_is_exist_command(target) yon_char_append("pacman -Ss ",target) #define yon_get_all_pacman_packages_command "pacman -Slq" #define yon_get_add_installed_packages "pacman -Qq" -#define get_adapter_info "lshw -c display -quiet |grep -oE \"vendor:[0-9a-zA-Z ]{1,}|description:[0-9a-zA-Z ]{1,}|product:[]0-9a-zA-Z [-]{1,}\"|sed 's/: /=/g';lspci | grep -E ' VGA | Display ' | cut -d\" \" -f 1 | xargs -i lspci -v -s {} |grep -oE \"Kernel[:a-zA-Z0-9: ,_]{1,}\"|sed 's/: /=/g'|sed 's/ /-/g'" #define get_adapter_info_json "lshw -c display -quiet -json" #define get_drivers_for_card_command "lspci | grep -E ' VGA | Display ' | cut -d' ' -f 1 | xargs -i lspci -k -s {}|grep Kernel|sed -e 's/^\t*//g' -e 's/Kernel driver in use: /uses=/g' -e 's/Kernel modules: /all=/g'" @@ -129,6 +132,7 @@ typedef struct { typedef struct { template_window_fields + GtkWidget *MainBox; GtkWidget *AutoDriverCombo; GtkWidget *FreeDriverCombo; GtkWidget *FailsafeNvidiaCombo; @@ -185,11 +189,17 @@ typedef struct GtkWidget *TerminalPaned; GtkWidget *TerminalRevealer; GtkWidget *InstallTerminal; + GtkWidget *TerminalMoveBox; + GtkWidget *TerminalMoveTargetBox; GtkWidget *MenusTab; - GtkWidget *terminal; GtkWidget *LoadDriversButton; + GtkWidget *SupportedDevicesButton; + GtkWidget *AboutModuleButton; + GtkWidget *AboutPackageButton; + + rmb_menu_window *menu; } main_window; typedef struct @@ -249,6 +259,7 @@ typedef struct { int package_installed; int module_exist; int package_exist; + int supported_devices_avaliable; } driver_struct; typedef struct @@ -356,9 +367,9 @@ void on_terminal_more(GtkWidget *self, main_window *widgets); void on_terminal_destroy(GtkWidget *self, main_window *widgets); gboolean on_terminal_check_progress(main_window *widgets); void yon_terminal_start(main_window *widgets, char *usr_command); -void on_driver_pack_selection_change(GtkWidget *self, main_window *widgets); +void on_driver_pack_selection_change(GtkWidget *, GtkListBoxRow *selection, main_window *widgets); void on_driver_pack_info(GtkWidget *self, main_window *widgets); -void on_pack_install_activate(GtkCellRendererToggle* self,gchar* path,main_window *widgets); +void on_install_activate(GtkWidget *self, main_window *widgets); void on_module_install_activate(GtkCellRendererToggle* self,gchar* path,main_window *widgets); gboolean yon_filter_func(GtkTreeModel* model,GtkTreeIter* iter,main_window *widgets); void on_kernel_filter_changed(GtkWidget *self, main_window *widgets); @@ -401,7 +412,6 @@ gboolean yon_proprietary_clear(main_window *widgets); gboolean on_command_execute_success(GtkWidget *,gint status,main_window *widgets); void on_gapfix_changed(GtkWidget*self, main_window *widgets); -gboolean yon_proprietary_disconnect(main_window *widgets); gboolean yon_proprietary_connect(main_window *widgets); void on_app_chooser_open(GtkWidget *self, main_window *widgets); gpointer yon_driver_info_launch(void *command); @@ -409,9 +419,13 @@ void on_command_cancel(GtkWidget *,main_window *widgets); gboolean yon_proprietary_set(main_window *widgets); void on_devices_info_clicked(GtkWidget *, driver_struct* driver); driver_struct *yon_driver_struct_new(); -void yon_driver_struct_update(driver_struct *driver); +void yon_driver_struct_update(main_window *widgets,driver_struct *driver); void yon_drivers_resize(main_window *); void on_link_activate(GtkWidget *, char*, driver_struct *driver); void on_terminal_revealer_open(GtkWidget *, main_window *widgets); +void on_driver_module_info(GtkWidget *, main_window *widgets); +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); #endif \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index bed3be1..c5ecf29 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -59,6 +59,8 @@ #define INSTALLED_LOW_LABEL _("installed") #define PACKAGE_LABEL _("Package") #define SUPPORTED_LABEL _("Supported Devices") +#define MODULE_INFO_LABEL _("Module information") +#define PACKAGE_INFO_LABEL _("Package information") #define MODULE_INSTALL_PROCESS_LABEL(target) yon_char_unite(_("Install module driver")," ",target,"...",NULL) #define MODULE_REMOVE_PROCESS_LABEL(target) yon_char_unite(_("Remove module driver")," ",target,"...",NULL) diff --git a/ubl-settings-video-driver-tab.glade b/ubl-settings-video-driver-tab.glade index a673a2c..3a88694 100644 --- a/ubl-settings-video-driver-tab.glade +++ b/ubl-settings-video-driver-tab.glade @@ -1,13 +1,8 @@ - + - - True - False - com.ublinux.libublsettingsui-gtk3.important-symbolic - True False @@ -16,7 +11,7 @@ True False - 4 + 5 True @@ -203,23 +198,6 @@ True False 5 - - - True - True - True - center - image1 - - - - False - True - 0 - - True diff --git a/ubl-settings-video.glade b/ubl-settings-video.glade index 3f75550..6d6e68f 100644 --- a/ubl-settings-video.glade +++ b/ubl-settings-video.glade @@ -1,5 +1,5 @@ - + @@ -25,13 +25,16 @@ True False + 5 0 in True False - 12 + 5 + 5 + 5 True @@ -44,14 +47,21 @@ True + True True + off + underline UTF-8 True True False + - False + True True 0 @@ -101,7 +111,7 @@ True False - dialog-information-symbolic + com.ublinux.libublsettingsui-gtk3.dropbox-symbolic True @@ -113,6 +123,16 @@ False com.ublinux.libublsettingsui-gtk3.sync-symbolic + + True + False + com.ublinux.libublsettingsui-gtk3.database-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.lookup-symbolic + True False @@ -899,11 +919,30 @@ - + + True + False + True + True + Supported devices + image4 + + + + False + True + 1 + + + + + True False True True - Driver information + Driver module information image10 + + + False + True + 3 + + False @@ -927,47 +984,35 @@ True False - + True False vertical 5 - + True False - 2 - 2 - 5 + vertical True False - vertical - - - True - False - Installed - 0 - 0 - - - False - True - 0 - - + 3 + 3 + 5 - + True False + vertical - + True False - Module + Installed 0 + 0 False @@ -976,9 +1021,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 @@ -986,20 +1070,17 @@ 1 - - - True - False - Package - 0 - 0 - - - False - True - 2 - - + + + False + True + 0 + + + + + True + False False @@ -1007,6 +1088,95 @@ 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 + Devices + 0 + 1 + + + True + True + 8 + + False @@ -1015,137 +1185,163 @@ - + True - False + True + in + + + True + False + + + True + False + + + + + - False + True True 1 + + + True + True + 0 + + + + + True + vertical + 250 + True + True - - 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 - Devices - 0 - 1 - - - True - True - 8 - + - False + True True - 0 + 2 - + True - True - in + True + False + True - + True False + 0 + in - + + True + False + + + True + False + vertical + + + True + False + 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 + True + 1 + + + + + + + + True False - + + - True + False True - 1 + end + 3 @@ -1368,128 +1564,6 @@ 0 - - - True - vertical - 250 - True - True - - - - - - True - True - 1 - - - - - True - True - False - True - - - True - False - 0 - in - - - True - False - - - True - False - vertical - - - True - False - 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 - True - 1 - - - - - - - - - True - False - - - - - - - - - False - True - 2 - - From c2f59a255e3621a6de362d59069fd4be5f739b15 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 11 Jul 2025 11:52:35 +0600 Subject: [PATCH 5/6] Localisation update --- locale/ubl-settings-video.pot | 242 ++++++++++++++------------- locale/ubl-settings-video_ru.po | 247 ++++++++++++++-------------- source/ubl-settings-video-install.c | 11 +- source/ubl-settings-video.c | 1 + source/ubl-settings-video.h | 2 +- ubl-settings-video.glade | 6 +- 6 files changed, 247 insertions(+), 262 deletions(-) diff --git a/locale/ubl-settings-video.pot b/locale/ubl-settings-video.pot index d3abf64..3e10672 100644 --- a/locale/ubl-settings-video.pot +++ b/locale/ubl-settings-video.pot @@ -169,443 +169,439 @@ msgstr "" msgid "No rotation" msgstr "" -#: source/ubl-strings.h:28 source/ubl-strings.h:42 +#: source/ubl-strings.h:28 source/ubl-strings.h:43 msgid "Save" msgstr "" -#: source/ubl-strings.h:29 source/ubl-strings.h:64 +#: source/ubl-strings.h:29 source/ubl-strings.h:71 msgid "Cancel" msgstr "" #: source/ubl-strings.h:30 -msgid "Choose port to configure" +msgid "Configuration:" msgstr "" #: source/ubl-strings.h:31 -msgid "1st variant. May cause perfomance drops in video games" +msgid "Choose port to configure" msgstr "" #: source/ubl-strings.h:32 -msgid "2nd variant. May not work on specific video cards" +msgid "1st variant. May cause perfomance drops in video games" msgstr "" #: source/ubl-strings.h:33 -msgid "Video output configuration" +msgid "2nd variant. May not work on specific video cards" msgstr "" #: source/ubl-strings.h:34 -msgid "Failsafe Nvidia driver:" +msgid "Video output configuration" msgstr "" #: source/ubl-strings.h:35 -msgid "Failsafe AMD/ATI driver:" +msgid "Failsafe Nvidia driver:" msgstr "" #: source/ubl-strings.h:36 -msgid "Driver" +msgid "Failsafe AMD/ATI driver:" msgstr "" #: source/ubl-strings.h:37 -msgid "Monitor configuration" +msgid "Driver" msgstr "" #: source/ubl-strings.h:38 -msgid "Hybrid graphics" +msgid "Monitor configuration" msgstr "" #: source/ubl-strings.h:39 -msgid "Fix frame gap (Nvidia):" +msgid "Hybrid graphics" msgstr "" #: source/ubl-strings.h:40 -msgid "Extra" +msgid "Fix frame gap (Nvidia):" msgstr "" #: source/ubl-strings.h:41 +msgid "Extra" +msgstr "" + +#: source/ubl-strings.h:42 msgid "Load" msgstr "" -#: source/ubl-strings.h:43 +#: source/ubl-strings.h:44 msgid "On" msgstr "" -#: source/ubl-strings.h:44 +#: source/ubl-strings.h:45 msgid "Off" msgstr "" -#: source/ubl-strings.h:45 +#: source/ubl-strings.h:46 msgid "Switched off" msgstr "" -#: source/ubl-strings.h:46 +#: source/ubl-strings.h:47 msgid "fbdev" msgstr "" -#: source/ubl-strings.h:47 +#: source/ubl-strings.h:48 msgid "Automatically choose and use driver" msgstr "" -#: source/ubl-strings.h:48 +#: source/ubl-strings.h:49 msgid "Launch programs through optirun (Nvidia):" msgstr "" -#: source/ubl-strings.h:49 +#: source/ubl-strings.h:50 msgid "Launch programs through primusrun (Nvidia):" msgstr "" -#: source/ubl-strings.h:50 +#: source/ubl-strings.h:51 msgid "Load from global configuration" msgstr "" -#: source/ubl-strings.h:51 +#: source/ubl-strings.h:52 msgid "Load from local configuration" msgstr "" -#: source/ubl-strings.h:52 +#: source/ubl-strings.h:53 msgid "Save configuration" msgstr "" -#: source/ubl-strings.h:53 +#: source/ubl-strings.h:54 msgid "Save to global configuration" msgstr "" -#: source/ubl-strings.h:54 +#: source/ubl-strings.h:55 msgid "Save to local configuration" msgstr "" -#: source/ubl-strings.h:55 +#: source/ubl-strings.h:56 msgid "Documentation" msgstr "" -#: source/ubl-strings.h:56 +#: source/ubl-strings.h:57 msgid "About" msgstr "" -#: source/ubl-strings.h:57 +#: source/ubl-strings.h:58 msgid "Installed" msgstr "" -#: source/ubl-strings.h:58 +#: source/ubl-strings.h:59 msgid "installed" msgstr "" -#: source/ubl-strings.h:59 +#: source/ubl-strings.h:60 msgid "Package" msgstr "" -#: source/ubl-strings.h:60 +#: source/ubl-strings.h:61 msgid "Supported Devices" msgstr "" #: source/ubl-strings.h:62 +msgid "Module information" +msgstr "" + +#: source/ubl-strings.h:63 +msgid "Package information" +msgstr "" + +#: source/ubl-strings.h:65 msgid "Install module driver" msgstr "" -#: source/ubl-strings.h:62 +#: source/ubl-strings.h:66 msgid "Remove module driver" msgstr "" -#: source/ubl-strings.h:62 +#: source/ubl-strings.h:67 msgid "Install package driver" msgstr "" -#: source/ubl-strings.h:62 +#: source/ubl-strings.h:68 msgid "Remove package driver" msgstr "" -#: source/ubl-strings.h:63 +#: source/ubl-strings.h:70 msgid "Opening driver information" msgstr "" -#: source/ubl-strings.h:65 +#: source/ubl-strings.h:72 msgid "Accept" msgstr "" -#: source/ubl-strings.h:66 +#: source/ubl-strings.h:73 msgid "Don't use" msgstr "" -#: source/ubl-strings.h:67 +#: source/ubl-strings.h:74 msgid "Driver list is currently loading..." msgstr "" -#: source/ubl-strings.h:68 +#: source/ubl-strings.h:75 msgid "Driver list is failed to load." msgstr "" -#: source/ubl-strings.h:69 +#: source/ubl-strings.h:76 msgid "Deleting driver..." msgstr "" -#: source/ubl-strings.h:70 +#: source/ubl-strings.h:77 msgid "Installing driver..." msgstr "" -#: source/ubl-strings.h:71 +#: source/ubl-strings.h:78 msgid "Driver operation is done." msgstr "" -#: source/ubl-strings.h:72 +#: source/ubl-strings.h:79 msgid "Nothing was selected." msgstr "" -#: source/ubl-strings.h:73 +#: source/ubl-strings.h:80 msgid "" "Failed to load available drivers for your system... Installed driver list is " "shown." msgstr "" -#: source/ubl-strings.h:74 +#: source/ubl-strings.h:81 msgid "Configure monitor" msgstr "" -#: source/ubl-strings.h:75 +#: source/ubl-strings.h:82 msgid "Delete monitor configuration" msgstr "" -#: source/ubl-strings.h:76 +#: source/ubl-strings.h:83 msgid "Add monitor configuration" msgstr "" -#: source/ubl-strings.h:77 +#: source/ubl-strings.h:84 msgid "Switch monitor" msgstr "" -#: source/ubl-strings.h:78 +#: source/ubl-strings.h:85 msgid "More" msgstr "" -#: source/ubl-strings.h:79 -msgid "Configuration:" +#: source/ubl-strings.h:86 +msgid "Less" msgstr "" -#: source/ubl-strings.h:81 +#: source/ubl-strings.h:87 +msgid "Configuration: Monitor" +msgstr "" + +#: source/ubl-strings.h:89 msgid "Would you like to read documentation in the Web?" msgstr "" -#: source/ubl-strings.h:82 +#: source/ubl-strings.h:90 msgid "" "You will be redirected to documentation website where documentation is\n" "translated and supported by community." msgstr "" -#: source/ubl-strings.h:83 +#: source/ubl-strings.h:91 msgid "Always redirect to online documentation" msgstr "" -#: source/ubl-strings.h:84 +#: source/ubl-strings.h:92 msgid "Information" msgstr "" -#: source/ubl-strings.h:85 +#: source/ubl-strings.h:93 msgid "Drivers" msgstr "" -#: source/ubl-strings.h:86 +#: source/ubl-strings.h:94 msgid "Main settings" msgstr "" -#: source/ubl-strings.h:87 +#: source/ubl-strings.h:95 msgid "Devices and drivers" msgstr "" -#: source/ubl-strings.h:88 +#: source/ubl-strings.h:96 msgid "Read documentation" msgstr "" -#: source/ubl-strings.h:90 +#: source/ubl-strings.h:98 msgid "UBLinux Settings Web View" msgstr "" -#: source/ubl-strings.h:104 +#: source/ubl-strings.h:112 msgid "Error: Port must be chosen to save" msgstr "" -#: source/ubl-strings.h:105 +#: source/ubl-strings.h:113 msgid "Monitor configuration succeedeed" msgstr "" -#: source/ubl-strings.h:107 -msgid "Global configuration loading succseeded." -msgstr "" - -#: source/ubl-strings.h:108 -msgid "Local configuration loading succseeded." -msgstr "" - -#: source/ubl-strings.h:110 -msgid "Local and global configuration saving succseeded." -msgstr "" - -#: source/ubl-strings.h:111 -msgid "Global configuration saving succseeded." -msgstr "" - -#: source/ubl-strings.h:112 -msgid "Local configuration saving succseeded." -msgstr "" - -#: source/ubl-strings.h:114 +#: source/ubl-strings.h:115 msgid "Yes" msgstr "" -#: source/ubl-strings.h:115 +#: source/ubl-strings.h:116 msgid "No" msgstr "" -#: source/ubl-strings.h:117 +#: source/ubl-strings.h:118 msgid "Update" msgstr "" -#: source/ubl-strings.h:119 +#: source/ubl-strings.h:120 msgid "Description" msgstr "" -#: source/ubl-strings.h:120 +#: source/ubl-strings.h:121 msgid "Vendor" msgstr "" -#: source/ubl-strings.h:121 +#: source/ubl-strings.h:122 msgid "Model" msgstr "" -#: source/ubl-strings.h:122 +#: source/ubl-strings.h:123 msgid "Kernel:" msgstr "" -#: source/ubl-strings.h:123 +#: source/ubl-strings.h:124 msgid "Kernel" msgstr "" -#: source/ubl-strings.h:124 +#: source/ubl-strings.h:125 msgid "Module" msgstr "" -#: source/ubl-strings.h:125 +#: source/ubl-strings.h:126 msgid "Driver information" msgstr "" -#: source/ubl-strings.h:126 +#: source/ubl-strings.h:127 msgid "Kernel driver in use" msgstr "" -#: source/ubl-strings.h:127 +#: source/ubl-strings.h:128 msgid "Kernel modules" msgstr "" -#: source/ubl-strings.h:128 +#: source/ubl-strings.h:129 msgid "UBLinux package includes Intel driver and utilities" msgstr "" -#: source/ubl-strings.h:129 +#: source/ubl-strings.h:130 msgid "UBLinux module includes AMD driver and utilities" msgstr "" -#: source/ubl-strings.h:130 +#: source/ubl-strings.h:131 msgid "UBLinux package includes AMD Vulkan driver and utilities" msgstr "" -#: source/ubl-strings.h:132 +#: source/ubl-strings.h:133 msgid "Important field is empty" msgstr "" -#: source/ubl-strings.h:134 +#: source/ubl-strings.h:135 msgid "Load drivers from database" msgstr "" -#: source/ubl-strings.h:135 +#: source/ubl-strings.h:136 msgid "Choose driver automatically:" msgstr "" -#: source/ubl-strings.h:136 +#: source/ubl-strings.h:137 msgid "Free drivers:" msgstr "" -#: source/ubl-strings.h:137 +#: source/ubl-strings.h:138 msgid "Default" msgstr "" -#: source/ubl-strings.h:138 +#: source/ubl-strings.h:139 msgid "Switch nouveau and radeon off" msgstr "" -#: source/ubl-strings.h:139 +#: source/ubl-strings.h:140 msgid "Switch nouveau off" msgstr "" -#: source/ubl-strings.h:140 +#: source/ubl-strings.h:141 msgid "Switch radeon off" msgstr "" -#: source/ubl-strings.h:141 +#: source/ubl-strings.h:142 msgid "Switch free drvers on" msgstr "" -#: source/ubl-strings.h:142 +#: source/ubl-strings.h:143 msgid "Do not switch off display(-s) (DPMS global configuration):" msgstr "" -#: source/ubl-strings.h:143 +#: source/ubl-strings.h:144 msgid "Automatic DPI" msgstr "" -#: source/ubl-strings.h:144 +#: source/ubl-strings.h:145 msgid "144 DPI - 150% (for 2K)" msgstr "" -#: source/ubl-strings.h:145 +#: source/ubl-strings.h:146 msgid "192 DPI - 200% (for 4K)" msgstr "" -#: source/ubl-strings.h:146 +#: source/ubl-strings.h:147 msgid "Display DPI" msgstr "" -#: source/ubl-strings.h:147 +#: source/ubl-strings.h:148 msgid "discrete video only (AMD/ATI):" msgstr "" -#: source/ubl-strings.h:148 +#: source/ubl-strings.h:149 msgid "Driver Modules" msgstr "" -#: source/ubl-strings.h:149 +#: source/ubl-strings.h:150 msgid "Devices and Drivers" msgstr "" -#: source/ubl-strings.h:197 +#: source/ubl-strings.h:152 msgid "Database files must be updated" msgstr "" -#: source/ubl-strings.h:199 +#: source/ubl-strings.h:154 msgid "Warning: Couldn't find any supported kernel version" msgstr "" -#: source/ubl-strings.h:201 +#: source/ubl-strings.h:156 msgid "Default (All installed)" msgstr "" -#: source/ubl-strings.h:202 +#: source/ubl-strings.h:157 msgid "Driver installation has failed" msgstr "" -#: source/ubl-strings.h:203 +#: source/ubl-strings.h:158 msgid "Operation has failed" msgstr "" -#: source/ubl-strings.h:205 +#: source/ubl-strings.h:160 msgid "Are you sure want to install driver " msgstr "" -#: source/ubl-strings.h:206 +#: source/ubl-strings.h:161 msgid "Are you sure want to remove driver " msgstr "" -#: source/ubl-strings.h:207 +#: source/ubl-strings.h:162 msgid "Attention!" msgstr "" -#: source/ubl-strings.h:207 +#: source/ubl-strings.h:162 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 4ff2832..40a59b9 100644 --- a/locale/ubl-settings-video_ru.po +++ b/locale/ubl-settings-video_ru.po @@ -171,187 +171,199 @@ msgstr "Под" msgid "No rotation" msgstr "Не поворачивать" -#: source/ubl-strings.h:28 source/ubl-strings.h:42 +#: source/ubl-strings.h:28 source/ubl-strings.h:43 msgid "Save" msgstr "Сохранить" -#: source/ubl-strings.h:29 source/ubl-strings.h:64 +#: source/ubl-strings.h:29 source/ubl-strings.h:71 msgid "Cancel" msgstr "Отмена" #: source/ubl-strings.h:30 +msgid "Configuration:" +msgstr "Настройка:" + +#: source/ubl-strings.h:31 msgid "Choose port to configure" msgstr "Выбрать порт для настройки" -#: source/ubl-strings.h:31 +#: source/ubl-strings.h:32 msgid "1st variant. May cause perfomance drops in video games" msgstr "1 вариант. Может снизить производительность в играх" -#: source/ubl-strings.h:32 +#: source/ubl-strings.h:33 msgid "2nd variant. May not work on specific video cards" msgstr "2 вариант. Не на каждой карте может сработать" -#: source/ubl-strings.h:33 +#: source/ubl-strings.h:34 msgid "Video output configuration" msgstr "Настройка вывода изображения" -#: source/ubl-strings.h:34 +#: source/ubl-strings.h:35 msgid "Failsafe Nvidia driver:" msgstr "Отказоустойчивый драйвер Nvidia: " -#: source/ubl-strings.h:35 +#: source/ubl-strings.h:36 msgid "Failsafe AMD/ATI driver:" msgstr "Отказоустойчивый драйвер AMD/ATI: " -#: source/ubl-strings.h:36 +#: source/ubl-strings.h:37 msgid "Driver" msgstr "Драйвер" -#: source/ubl-strings.h:37 +#: source/ubl-strings.h:38 msgid "Monitor configuration" msgstr "Настройка экрана" -#: source/ubl-strings.h:38 +#: source/ubl-strings.h:39 msgid "Hybrid graphics" msgstr "Гибридная графика" -#: source/ubl-strings.h:39 +#: source/ubl-strings.h:40 msgid "Fix frame gap (Nvidia):" msgstr "Исправить разрыв кадров (Nvidia)" -#: source/ubl-strings.h:40 +#: source/ubl-strings.h:41 msgid "Extra" msgstr "Дополнительно" -#: source/ubl-strings.h:41 +#: source/ubl-strings.h:42 msgid "Load" msgstr "Загрузить" -#: source/ubl-strings.h:43 +#: source/ubl-strings.h:44 msgid "On" msgstr "Включить" -#: source/ubl-strings.h:44 +#: source/ubl-strings.h:45 msgid "Off" msgstr "Выключить" -#: source/ubl-strings.h:45 +#: source/ubl-strings.h:46 msgid "Switched off" msgstr "Отключено" -#: source/ubl-strings.h:46 +#: source/ubl-strings.h:47 msgid "fbdev" msgstr "fbdev" -#: source/ubl-strings.h:47 +#: source/ubl-strings.h:48 msgid "Automatically choose and use driver" msgstr "Автоматический выбор и использование драйвера" -#: source/ubl-strings.h:48 +#: source/ubl-strings.h:49 msgid "Launch programs through optirun (Nvidia):" msgstr "Запуск программ через optirun (Nvidia):" -#: source/ubl-strings.h:49 +#: source/ubl-strings.h:50 msgid "Launch programs through primusrun (Nvidia):" msgstr "Запуск программ через primusrun (Nvidia):" -#: source/ubl-strings.h:50 +#: source/ubl-strings.h:51 msgid "Load from global configuration" msgstr "Загрузить глобальную конфигурацию" -#: source/ubl-strings.h:51 +#: source/ubl-strings.h:52 msgid "Load from local configuration" msgstr "Загрузить локальную конфигуруцию" -#: source/ubl-strings.h:52 +#: source/ubl-strings.h:53 msgid "Save configuration" msgstr "Сохранить конфигурацию" -#: source/ubl-strings.h:53 +#: source/ubl-strings.h:54 msgid "Save to global configuration" msgstr "Сохранить в глобальную конфигурацию" -#: source/ubl-strings.h:54 +#: source/ubl-strings.h:55 msgid "Save to local configuration" msgstr "Сохранить в локальную конфигурацию" -#: source/ubl-strings.h:55 +#: source/ubl-strings.h:56 msgid "Documentation" msgstr "Справка" -#: source/ubl-strings.h:56 +#: source/ubl-strings.h:57 msgid "About" msgstr "О программе" -#: source/ubl-strings.h:57 +#: source/ubl-strings.h:58 msgid "Installed" msgstr "Установлено" -#: source/ubl-strings.h:58 +#: source/ubl-strings.h:59 msgid "installed" msgstr "установлен" -#: source/ubl-strings.h:59 +#: source/ubl-strings.h:60 msgid "Package" msgstr "Пакет" -#: source/ubl-strings.h:60 +#: source/ubl-strings.h:61 msgid "Supported Devices" msgstr "Поддерживаемые устройства" #: source/ubl-strings.h:62 +msgid "Module information" +msgstr "Информация о модуле" + +#: source/ubl-strings.h:63 +msgid "Package information" +msgstr "Информация о пакете" + +#: source/ubl-strings.h:65 msgid "Install module driver" msgstr "Установка драйвера, модуль" -#: source/ubl-strings.h:62 +#: source/ubl-strings.h:66 msgid "Remove module driver" msgstr "Удаление драйвера, модуль" -#: source/ubl-strings.h:62 +#: source/ubl-strings.h:67 msgid "Install package driver" msgstr "Установка драйвера, пакет" -#: source/ubl-strings.h:62 +#: source/ubl-strings.h:68 msgid "Remove package driver" msgstr "Удаление драйвера, пакет" -#: source/ubl-strings.h:63 +#: source/ubl-strings.h:70 msgid "Opening driver information" msgstr "Загрузка информации о драйвере" -#: source/ubl-strings.h:65 +#: source/ubl-strings.h:72 msgid "Accept" msgstr "Принять" -#: source/ubl-strings.h:66 +#: source/ubl-strings.h:73 msgid "Don't use" msgstr "Не использовать" -#: source/ubl-strings.h:67 +#: source/ubl-strings.h:74 msgid "Driver list is currently loading..." msgstr "Список драйверов загружается..." -#: source/ubl-strings.h:68 +#: source/ubl-strings.h:75 msgid "Driver list is failed to load." msgstr "Не удалось загрузить список драйверов" -#: source/ubl-strings.h:69 +#: source/ubl-strings.h:76 msgid "Deleting driver..." msgstr "Удаление драйвера..." -#: source/ubl-strings.h:70 +#: source/ubl-strings.h:77 msgid "Installing driver..." msgstr "Установка драйвера..." -#: source/ubl-strings.h:71 +#: source/ubl-strings.h:78 msgid "Driver operation is done." msgstr "Операция завершена" -#: source/ubl-strings.h:72 +#: source/ubl-strings.h:79 msgid "Nothing was selected." msgstr "Выберите драйвер." -#: source/ubl-strings.h:73 +#: source/ubl-strings.h:80 msgid "" "Failed to load available drivers for your system... Installed driver list is " "shown." @@ -359,35 +371,40 @@ msgstr "" "Не удалось загрузить список драйверов, доступных для вашей системы. Выведен " "список установленных драйверов." -#: source/ubl-strings.h:74 +#: source/ubl-strings.h:81 msgid "Configure monitor" msgstr "Настроить монитор" -#: source/ubl-strings.h:75 +#: source/ubl-strings.h:82 msgid "Delete monitor configuration" msgstr "Удалить конфигурацию мониотра" -#: source/ubl-strings.h:76 +#: source/ubl-strings.h:83 msgid "Add monitor configuration" msgstr "Добавить монитор" -#: source/ubl-strings.h:77 +#: source/ubl-strings.h:84 msgid "Switch monitor" msgstr "Переключить монтор" -#: source/ubl-strings.h:78 +#: source/ubl-strings.h:85 msgid "More" msgstr "Подробнее" -#: source/ubl-strings.h:79 -msgid "Configuration:" +#: source/ubl-strings.h:86 +msgid "Less" +msgstr "Меньше" + +#: source/ubl-strings.h:87 +#, fuzzy +msgid "Configuration: Monitor" msgstr "Настройка:" -#: source/ubl-strings.h:81 +#: source/ubl-strings.h:89 msgid "Would you like to read documentation in the Web?" msgstr "Вы хотите прочитать справку в Сети?" -#: source/ubl-strings.h:82 +#: source/ubl-strings.h:90 msgid "" "You will be redirected to documentation website where documentation is\n" "translated and supported by community." @@ -395,227 +412,207 @@ msgstr "" "Вы будете перенаправлены на сайт с документацией где страницы помощи\n" "переводятся и поддерживаются сообществом." -#: source/ubl-strings.h:83 +#: source/ubl-strings.h:91 msgid "Always redirect to online documentation" msgstr "Всегда перенаправлять" -#: source/ubl-strings.h:84 +#: source/ubl-strings.h:92 msgid "Information" msgstr "Информация" -#: source/ubl-strings.h:85 +#: source/ubl-strings.h:93 msgid "Drivers" msgstr "Драйвер" -#: source/ubl-strings.h:86 +#: source/ubl-strings.h:94 msgid "Main settings" msgstr "Основные настройки" -#: source/ubl-strings.h:87 +#: source/ubl-strings.h:95 msgid "Devices and drivers" msgstr "Устройства и драйвера" -#: source/ubl-strings.h:88 +#: source/ubl-strings.h:96 msgid "Read documentation" msgstr "Справка" -#: source/ubl-strings.h:90 +#: source/ubl-strings.h:98 msgid "UBLinux Settings Web View" msgstr "Встроенный браузер UBLinux" -#: source/ubl-strings.h:104 +#: source/ubl-strings.h:112 msgid "Error: Port must be chosen to save" msgstr "Ошибка: Выберите порт для сохранения" -#: source/ubl-strings.h:105 +#: source/ubl-strings.h:113 msgid "Monitor configuration succeedeed" msgstr "Настройки экрана сохранены" -#: source/ubl-strings.h:107 -msgid "Global configuration loading succseeded." -msgstr "Успешно загружена глобальная конфигурация" - -#: source/ubl-strings.h:108 -msgid "Local configuration loading succseeded." -msgstr "Успешно загружена локальная конфигурация" - -#: source/ubl-strings.h:110 -msgid "Local and global configuration saving succseeded." -msgstr "Успешно записаны локальная и глобальная конфигурация" - -#: source/ubl-strings.h:111 -msgid "Global configuration saving succseeded." -msgstr "Успешно записана глобальная конфигурация" - -#: source/ubl-strings.h:112 -msgid "Local configuration saving succseeded." -msgstr "Успешно записана локальная конфигурация" - -#: source/ubl-strings.h:114 +#: source/ubl-strings.h:115 msgid "Yes" msgstr "Да" -#: source/ubl-strings.h:115 +#: source/ubl-strings.h:116 msgid "No" msgstr "Нет" -#: source/ubl-strings.h:117 +#: source/ubl-strings.h:118 msgid "Update" msgstr "Обновить" -#: source/ubl-strings.h:119 +#: source/ubl-strings.h:120 msgid "Description" msgstr "Описание" -#: source/ubl-strings.h:120 +#: source/ubl-strings.h:121 msgid "Vendor" msgstr "Производитель" -#: source/ubl-strings.h:121 +#: source/ubl-strings.h:122 msgid "Model" msgstr "Модель" -#: source/ubl-strings.h:122 +#: source/ubl-strings.h:123 msgid "Kernel:" msgstr "Ядро:" -#: source/ubl-strings.h:123 +#: source/ubl-strings.h:124 msgid "Kernel" msgstr "Ядро" -#: source/ubl-strings.h:124 +#: source/ubl-strings.h:125 msgid "Module" msgstr "Модуль" -#: source/ubl-strings.h:125 +#: source/ubl-strings.h:126 msgid "Driver information" msgstr "Информация о драйвере" -#: source/ubl-strings.h:126 +#: source/ubl-strings.h:127 msgid "Kernel driver in use" msgstr "Используемый драйвер ядра" -#: source/ubl-strings.h:127 +#: source/ubl-strings.h:128 msgid "Kernel modules" msgstr "Модули ядра" -#: source/ubl-strings.h:128 +#: source/ubl-strings.h:129 msgid "UBLinux package includes Intel driver and utilities" msgstr "Пакет с драйвером и утилитами Intel" -#: source/ubl-strings.h:129 +#: source/ubl-strings.h:130 msgid "UBLinux module includes AMD driver and utilities" msgstr "Пакет с драйвером и утилитами AMD" -#: source/ubl-strings.h:130 +#: source/ubl-strings.h:131 msgid "UBLinux package includes AMD Vulkan driver and utilities" msgstr "Пакет с драйвером и утилитами AMD с поддержкой Vulkan" -#: source/ubl-strings.h:132 +#: source/ubl-strings.h:133 msgid "Important field is empty" msgstr "Пустое важное поле" -#: source/ubl-strings.h:134 +#: source/ubl-strings.h:135 msgid "Load drivers from database" msgstr "Загрузить список доступных драйверов" -#: source/ubl-strings.h:135 +#: source/ubl-strings.h:136 msgid "Choose driver automatically:" msgstr "Автоматический выбор драйвера:" -#: source/ubl-strings.h:136 +#: source/ubl-strings.h:137 msgid "Free drivers:" msgstr "Свободные драйверы" -#: source/ubl-strings.h:137 +#: source/ubl-strings.h:138 msgid "Default" msgstr "По умолчанию" -#: source/ubl-strings.h:138 +#: source/ubl-strings.h:139 msgid "Switch nouveau and radeon off" msgstr "Отключить nouveau и radeon" -#: source/ubl-strings.h:139 +#: source/ubl-strings.h:140 msgid "Switch nouveau off" msgstr "Отключить nouveau" -#: source/ubl-strings.h:140 +#: source/ubl-strings.h:141 msgid "Switch radeon off" msgstr "Отключить radeon" -#: source/ubl-strings.h:141 +#: source/ubl-strings.h:142 msgid "Switch free drvers on" msgstr "Включить свободные драйвера" -#: source/ubl-strings.h:142 +#: source/ubl-strings.h:143 msgid "Do not switch off display(-s) (DPMS global configuration):" msgstr "Не выключать дисплей(-и) (глобальная настройка DPMS):" -#: source/ubl-strings.h:143 +#: source/ubl-strings.h:144 msgid "Automatic DPI" msgstr "Автоматический выбор DPI" -#: source/ubl-strings.h:144 +#: source/ubl-strings.h:145 msgid "144 DPI - 150% (for 2K)" msgstr "144 DPI - 150% (для 2K)" -#: source/ubl-strings.h:145 +#: source/ubl-strings.h:146 msgid "192 DPI - 200% (for 4K)" msgstr "192 DPI - 150% (для 4K)" -#: source/ubl-strings.h:146 +#: source/ubl-strings.h:147 msgid "Display DPI" msgstr "Масштабирование вывода изображения" -#: source/ubl-strings.h:147 +#: source/ubl-strings.h:148 msgid "discrete video only (AMD/ATI):" msgstr "Только дискретное видео (AMD/ATI):" -#: source/ubl-strings.h:148 +#: source/ubl-strings.h:149 msgid "Driver Modules" msgstr "Модули драйвера" -#: source/ubl-strings.h:149 +#: source/ubl-strings.h:150 msgid "Devices and Drivers" msgstr "Устройства и драйвера" -#: source/ubl-strings.h:197 +#: source/ubl-strings.h:152 msgid "Database files must be updated" msgstr "Базы данных репозитория должны быть обновлены" -#: source/ubl-strings.h:199 +#: source/ubl-strings.h:154 msgid "Warning: Couldn't find any supported kernel version" msgstr "Предупреждение: Поддерживаемые версии ядра не найдены" -#: source/ubl-strings.h:201 +#: source/ubl-strings.h:156 msgid "Default (All installed)" msgstr "По умолчанию (все установленные)" -#: source/ubl-strings.h:202 +#: source/ubl-strings.h:157 msgid "Driver installation has failed" msgstr "Установка драйвера завершена с ошибкой" -#: source/ubl-strings.h:203 +#: source/ubl-strings.h:158 msgid "Operation has failed" msgstr "Операция завершена с ошибкой" -#: source/ubl-strings.h:205 +#: source/ubl-strings.h:160 msgid "Are you sure want to install driver " msgstr "Вы уверены, что хотите установить драйвер " -#: source/ubl-strings.h:206 +#: source/ubl-strings.h:161 msgid "Are you sure want to remove driver " msgstr "Вы уверены, что хотите удалить драйвер " -#: source/ubl-strings.h:207 +#: source/ubl-strings.h:162 msgid "Attention!" msgstr "Внимание!" -#: source/ubl-strings.h:207 +#: source/ubl-strings.h:162 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/ubl-settings-video-install.c b/source/ubl-settings-video-install.c index adca892..2cd467b 100644 --- a/source/ubl-settings-video-install.c +++ b/source/ubl-settings-video-install.c @@ -79,13 +79,4 @@ void on_install_check(GtkWidget *self,gint ,driver_struct *driver){ yon_packages_update_package(driver->module); yon_driver_struct_update(widgets,driver); - // g_signal_handlers_block_by_func(G_OBJECT(driver->ModuleInstalledCheck),G_CALLBACK(on_install_activate),widgets); - // g_signal_handlers_block_by_func(G_OBJECT(driver->PackageInstalledCheck),G_CALLBACK(on_install_activate),widgets); - // gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(driver->ModuleInstalledCheck),yon_packages_check_installed(driver->module)); - // gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(driver->PackageInstalledCheck),yon_packages_check_installed(driver->package)); - // g_signal_handlers_unblock_by_func(G_OBJECT(driver->ModuleInstalledCheck),G_CALLBACK(on_install_activate),widgets); - // g_signal_handlers_unblock_by_func(G_OBJECT(driver->PackageInstalledCheck),G_CALLBACK(on_install_check),driver); -} - -// void yon_terminal_start(main_window *widgets, char *usr_command){ -// } \ No newline at end of file +} \ No newline at end of file diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c index 6b89071..2130aa0 100644 --- a/source/ubl-settings-video.c +++ b/source/ubl-settings-video.c @@ -25,6 +25,7 @@ gboolean on_command_execute_success(GtkWidget *self,gint status,main_window *wid 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; diff --git a/source/ubl-settings-video.h b/source/ubl-settings-video.h index 13c55d8..18a69b8 100644 --- a/source/ubl-settings-video.h +++ b/source/ubl-settings-video.h @@ -50,7 +50,7 @@ #define get_resolutions_supportable_command "resource:///com/ublinux/csv/resolutions.csv" -#define install_proprietary_command(target) yon_char_append("pacman --quiet --needed -Sy ",target) +#define install_proprietary_command(target) yon_char_append("pacman --quiet --noconfirm --needed -Sy ",target) #define delete_proprietary_command(target) yon_char_append("pacman -R --noconfirm ",target) diff --git a/ubl-settings-video.glade b/ubl-settings-video.glade index 6d6e68f..3f27004 100644 --- a/ubl-settings-video.glade +++ b/ubl-settings-video.glade @@ -924,7 +924,7 @@ False True True - Supported devices + Supported Devices image4