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
-
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
+
+
+
+
+
+
+
+
+
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