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/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.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 1107c43..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 "Устройства"
+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/CMakeLists.txt b/source/CMakeLists.txt
index 24e487a..fd1d92b 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,8 @@ 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-driver.c b/source/ubl-settings-video-driver.c
new file mode 100644
index 0000000..9eeaab0
--- /dev/null
+++ b/source/ubl-settings-video-driver.c
@@ -0,0 +1,96 @@
+#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");
+ 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_install_buttons_set_sensitive(main_window *widgets,int state){
+ 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");
+ gtk_widget_set_sensitive(driver->ModuleInstalledCheck,state);
+ gtk_widget_set_sensitive(driver->PackageInstalledCheck,state);
+ }
+ g_list_free(list);
+}
+
+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){
+ 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){
+ on_devices_info_clicked(NULL,driver);
+}
+
+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->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;
+ 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->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
new file mode 100644
index 0000000..6905c90
--- /dev/null
+++ b/source/ubl-settings-video-install.c
@@ -0,0 +1,83 @@
+#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->TerminalMoveBox);
+ gtk_container_remove(GTK_CONTAINER(widgets->TerminalMoveTargetBox),widgets->TerminalMoveBox);
+ gtk_paned_add1(GTK_PANED(widgets->TerminalPaned),widgets->TerminalMoveBox);
+
+ 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->TerminalMoveBox);
+
+
+
+ } 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->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(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_install_buttons_set_sensitive(widgets,0);
+ yon_terminal_integrated_start(widgets->InstallTerminal,command);
+ // g_signal_connect(G_OBJECT(widgets->InstallTerminal),"contents-changed",G_CALLBACK(on_terminal_check_progress),widgets);
+ 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);
+}
\ No newline at end of file
diff --git a/source/ubl-settings-video.c b/source/ubl-settings-video.c
index a923aac..e2c2fa5 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){
@@ -13,31 +13,10 @@ 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){
-
+ yon_install_buttons_set_sensitive(widgets,1);
+ vte_terminal_set_input_enabled(VTE_TERMINAL(self),0);
g_mutex_lock(&main_config.progress_mutex);
main_config.progress_active=0;
g_mutex_unlock(&main_config.progress_mutex);
@@ -47,44 +26,19 @@ 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;
}
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;
}
+ gtk_progress_bar_pulse(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel));
g_mutex_unlock(&main_config.progress_mutex);
return G_SOURCE_CONTINUE;
}
@@ -96,64 +50,20 @@ 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 *, 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){
+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->InfoButton,0);
+ gtk_widget_set_sensitive(widgets->SupportedDevicesButton,0);
+ gtk_widget_set_sensitive(widgets->AboutModuleButton,0);
+ gtk_widget_set_sensitive(widgets->AboutPackageButton,0);
}
}
@@ -167,96 +77,29 @@ gpointer yon_driver_info_launch(void *command){
}
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)){
+ 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);
- 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);
+ 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_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_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");
-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);
+ 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 {
- 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);
+ yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
}
- 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){
@@ -268,22 +111,24 @@ gboolean yon_filter_func(GtkTreeModel* model,GtkTreeIter* iter,main_window *widg
}
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);
+ 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));
+ }
}
- gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree))));
-
+ g_list_free(list);
} 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));
+ 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);
}
}
@@ -1017,53 +862,113 @@ 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);
return G_SOURCE_REMOVE;
}
-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;
}
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;
}
-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 +991,45 @@ 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);
+ 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(widgets,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 +1037,12 @@ 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){
@@ -1412,6 +1305,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
@@ -1422,7 +1331,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");
@@ -1441,21 +1351,38 @@ 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->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->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");
+ 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->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->TerminalBox = yon_gtk_builder_get_widget(builder,"TerminalBox");
+ // widgets->InstallTerminal = vte_terminal_new();
+ widgets->InstallTerminal = yon_gtk_builder_get_widget(builder,"TerminalTerminal");
+ widgets->TerminalRevealer = yon_gtk_builder_get_widget(builder,"TerminalMoreRevieler");
+
widgets->DriverModulesTab = GTK_WIDGET(gtk_builder_get_object(builder, "DriverModulesTab"));
widgets->DriversTab = GTK_WIDGET(gtk_builder_get_object(builder, "DriversTab"));
- widgets->MainTabLabel = GTK_WIDGET(gtk_builder_get_object(builder, "MainTabLabel"));
- widgets->DriversTabLabel = GTK_WIDGET(gtk_builder_get_object(builder, "DriversTabLabel"));
- widgets->InformationTabLabel = GTK_WIDGET(gtk_builder_get_object(builder, "InformationTabLabel"));
+ // widgets->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"));
@@ -1466,22 +1393,21 @@ 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"));
-
- main_config.list = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore6"));
- main_config.list2 = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore1"));
-
+ 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);
- 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->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);
@@ -1499,6 +1425,23 @@ 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);
+ 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);
@@ -1623,8 +1566,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);
@@ -1651,10 +1592,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 +1622,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 f305644..fe53d3d 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"
@@ -47,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 --noconfirm --needed -Sy ",target)
#define delete_proprietary_command(target) yon_char_append("pacman -R --noconfirm ",target)
@@ -57,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'"
@@ -107,10 +113,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)
@@ -127,6 +132,7 @@ typedef struct {
typedef struct
{
template_window_fields
+ GtkWidget *MainBox;
GtkWidget *AutoDriverCombo;
GtkWidget *FreeDriverCombo;
GtkWidget *FailsafeNvidiaCombo;
@@ -143,18 +149,14 @@ typedef struct
GtkWidget *PrimusrunButton;
GtkWidget *FrameGapCombo;
- GtkWidget *DriversTree;
- GtkWidget *TopTree;
- GtkCellRenderer *ModuleRenderer;
- GtkCellRenderer *PackageRenderer;
GtkWidget *KernelsCombo;
GtkWidget *InfoButton;
GtkWidget *DriverModulesTab;
GtkWidget *DriversTab;
- GtkWidget *MainTabLabel;
- GtkWidget *DriversTabLabel;
- GtkWidget *InformationTabLabel;
+ // GtkWidget *MainTabLabel;
+ // GtkWidget *DriversTabLabel;
+ // GtkWidget *InformationTabLabel;
GtkWidget *InformationFrameLabel;
GtkWidget *InformationOverlay;
GtkWidget *InformationCompanyLogoImage;
@@ -165,7 +167,6 @@ typedef struct
GtkWidget *TerminalOverlay;
GtkWidget *TerminalBox;
- GtkWidget *TerminalRevealer;
GtkWidget *TerminalInfoLabel;
GtkWidget *TerminalMoreButton;
GtkWidget *TerminalCancelButton;
@@ -174,11 +175,31 @@ typedef struct
GtkWidget *DriversLoadingOverlay;
GtkWidget *DriversLoadingSpinner;
- GtkWidget *MenusTab;
- GtkWidget *terminal;
+ GtkWidget *DriversList;
+ GtkWidget *InstalledBox;
+ GtkWidget *InstalledModuleLabel;
+ GtkWidget *InstalledPackageLabel;
+ GtkWidget *KernelLabel;
+ GtkWidget *DriverLabel;
+ GtkWidget *DescriptionLabel;
+ GtkWidget *DevicesLabel;
+ GtkWidget *MoreButton;
+ GtkWidget *CancelButton;
+ GtkWidget *TerminalPaned;
+ GtkWidget *TerminalRevealer;
+ GtkWidget *InstallTerminal;
+ GtkWidget *TerminalMoveBox;
+ GtkWidget *TerminalMoveTargetBox;
+
+ GtkWidget *MenusTab;
GtkWidget *LoadDriversButton;
+ GtkWidget *SupportedDevicesButton;
+ GtkWidget *AboutModuleButton;
+ GtkWidget *AboutPackageButton;
+
+ rmb_menu_window *menu;
} main_window;
typedef struct
@@ -192,8 +213,6 @@ typedef struct
monitor_config monitors;
proprietary_config proprietary;
dictionary *supported_resolutions;
- GtkListStore *list;
- GtkListStore *list2;
char *failsafenVidia;
char *failsafeATI;
int descreteOnly;
@@ -217,6 +236,32 @@ typedef struct
} config;
+extern config main_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;
+ char *devices;
+ char *description;
+ int module_installed;
+ int package_installed;
+ int module_exist;
+ int package_exist;
+ int supported_devices_avaliable;
+} driver_struct;
+
typedef struct
{
int main;
@@ -322,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);
@@ -350,7 +395,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);
@@ -361,18 +405,28 @@ 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);
-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);
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(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);
+void yon_install_buttons_set_sensitive(main_window *widgets,int state);
#endif
\ No newline at end of file
diff --git a/source/ubl-strings.h b/source/ubl-strings.h
index 18bc46c..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)
@@ -81,6 +83,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-driver-tab.glade b/ubl-settings-video-driver-tab.glade
new file mode 100644
index 0000000..3a88694
--- /dev/null
+++ b/ubl-settings-video-driver-tab.glade
@@ -0,0 +1,233 @@
+
+
+
+
+
+
+
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 aa5e4da..3f27004 100644
--- a/ubl-settings-video.glade
+++ b/ubl-settings-video.glade
@@ -1,7 +1,8 @@
-
+
+
True
@@ -21,6 +22,87 @@
start
64
+
+ True
+ False
+ 5
+ 0
+ in
+
+
+ True
+ False
+ 5
+ 5
+ 5
+
+
+ True
+ False
+
+
+ True
+ False
+ vertical
+
+
+ True
+ True
+ True
+ off
+ underline
+ UTF-8
+ True
+ True
+ False
+
+
+
+ True
+ True
+ 0
+
+
+
+
+ True
+ True
+ 0
+
+
+
+
+ True
+ False
+ False
+ vertical
+ True
+ False
+ 1
+ 2
+
+
+ False
+ True
+ 1
+
+
+
+
+
+
+
+
+
+
+
+ 300
+ 1
+ 10
+
True
False
@@ -29,7 +111,7 @@
True
False
- dialog-information-symbolic
+ com.ublinux.libublsettingsui-gtk3.dropbox-symbolic
True
@@ -41,47 +123,15 @@
False
com.ublinux.libublsettingsui-gtk3.sync-symbolic
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ True
+ False
+ com.ublinux.libublsettingsui-gtk3.database-symbolic
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ True
+ False
+ com.ublinux.libublsettingsui-gtk3.lookup-symbolic
True
@@ -869,12 +919,30 @@
-
+
+ True
+ False
+ True
+ True
+ Supported Devices
+ image4
+
+
+
+ False
+ True
+ 1
+
+
+
+
True
False
True
True
- Driver information
+ Module information
image10
+
+
+ False
+ True
+ 3
+
+
False
@@ -898,138 +984,364 @@
True
False
-
+
True
False
vertical
+ 5
-
- True
- True
- liststore1
-
-
- fixed
- 160
- Installed
-
-
-
-
-
-
-
- False
- True
- 0
-
-
-
-
+
True
- True
- external
+ False
+ vertical
-
+
True
- True
- liststore6
- 1
- both
- True
- 4
+ False
+ 3
+ 3
+ 5
-
- fixed
- 80
- Module
+
+ True
+ False
+ vertical
-
-
- 9
- 9
- 0
-
+
+ True
+ False
+ Installed
+ 0
+ 0
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ 5
+
+
+ True
+ False
+ Module
+ 0
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+
+
+ False
+ True
+ 1
+
+
+
+
+ True
+ False
+ Package
+ 0
+ 0
+
+
+ False
+ True
+ 2
+
+
+
+
+ False
+ True
+ 1
+
+
+ False
+ True
+ 0
+
-
- 80
- Package
- descending
- 0
-
-
-
- 10
- 10
- 1
-
-
+
+ True
+ False
+
+ False
+ True
+ 1
+
-
- Kernel
-
-
-
- 2
-
-
+
+ True
+ False
+ Kernel
+ 0
+ 1
+
+ False
+ True
+ 2
+
-
- Driver
-
-
-
- 3
-
-
+
+ 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
+ 0
+
+
+
+
+ True
+ True
+ in
-
- Description
+
+ True
+ False
-
- word
- 150
+
+ True
+ False
+
-
- 4
-
+
+
+ True
+ True
+ 1
+
+
+
+
+ True
+ True
+ 0
+
+
+
+
+ True
+ vertical
+ 250
+ True
+ True
+
+
+
+
+
+
+
+
+ True
+ True
+ 2
+
+
+
+
+ True
+ True
+ False
+ True
+
+
+ True
+ False
+ 0
+ in
-
- autosize
- Supported Devices
+
+ True
+ False
-
- word
- 220
+
+ 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
+
+
-
- 5
-
+
+
+ True
+ False
+
+
+
- True
+ False
True
- 1
+ end
+ 3
@@ -1260,4 +1572,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+