Merge pull request 'WIP drivers tab change' (#118) from YanTheKaller/ubl-settings-video:master into master

Reviewed-on: #118
pull/121/head
Dmitry Razumov 5 months ago
commit 1ae2be4f30

@ -5,6 +5,8 @@
<file>ubl-settings-video-monitor.glade</file> <file>ubl-settings-video-monitor.glade</file>
<file>ubl-settings-video-terminal.glade</file> <file>ubl-settings-video-terminal.glade</file>
<file>ubl-settings-video-configuration.glade</file> <file>ubl-settings-video-configuration.glade</file>
<file>ubl-settings-video-driver-tab.glade</file>
<file>ubl-settings-video-html.glade</file>
</gresource> </gresource>
<gresource prefix="/com/ublinux/css"> <gresource prefix="/com/ublinux/css">
<file>ubl-settings-video.css</file> <file>ubl-settings-video.css</file>
@ -13,4 +15,11 @@
<file>video-drivers.csv</file> <file>video-drivers.csv</file>
<file>resolutions.csv</file> <file>resolutions.csv</file>
</gresource> </gresource>
<gresource prefix="/com/ublinux/html">
<file>nvidia-340.html</file>
<file>nvidia-390.html</file>
<file>nvidia-470.html</file>
<file>nvidia-575.html</file>
<file>nvidia-575-open.html</file>
</gresource>
</gresources> </gresources>

@ -169,443 +169,439 @@ msgstr ""
msgid "No rotation" msgid "No rotation"
msgstr "" msgstr ""
#: source/ubl-strings.h:28 source/ubl-strings.h:42 #: source/ubl-strings.h:28 source/ubl-strings.h:43
msgid "Save" msgid "Save"
msgstr "" msgstr ""
#: source/ubl-strings.h:29 source/ubl-strings.h:64 #: source/ubl-strings.h:29 source/ubl-strings.h:71
msgid "Cancel" msgid "Cancel"
msgstr "" msgstr ""
#: source/ubl-strings.h:30 #: source/ubl-strings.h:30
msgid "Choose port to configure" msgid "Configuration:"
msgstr "" msgstr ""
#: source/ubl-strings.h:31 #: source/ubl-strings.h:31
msgid "1st variant. May cause perfomance drops in video games" msgid "Choose port to configure"
msgstr "" msgstr ""
#: source/ubl-strings.h:32 #: 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 "" msgstr ""
#: source/ubl-strings.h:33 #: source/ubl-strings.h:33
msgid "Video output configuration" msgid "2nd variant. May not work on specific video cards"
msgstr "" msgstr ""
#: source/ubl-strings.h:34 #: source/ubl-strings.h:34
msgid "Failsafe Nvidia driver:" msgid "Video output configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:35 #: source/ubl-strings.h:35
msgid "Failsafe AMD/ATI driver:" msgid "Failsafe Nvidia driver:"
msgstr "" msgstr ""
#: source/ubl-strings.h:36 #: source/ubl-strings.h:36
msgid "Driver" msgid "Failsafe AMD/ATI driver:"
msgstr "" msgstr ""
#: source/ubl-strings.h:37 #: source/ubl-strings.h:37
msgid "Monitor configuration" msgid "Driver"
msgstr "" msgstr ""
#: source/ubl-strings.h:38 #: source/ubl-strings.h:38
msgid "Hybrid graphics" msgid "Monitor configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:39 #: source/ubl-strings.h:39
msgid "Fix frame gap (Nvidia):" msgid "Hybrid graphics"
msgstr "" msgstr ""
#: source/ubl-strings.h:40 #: source/ubl-strings.h:40
msgid "Extra" msgid "Fix frame gap (Nvidia):"
msgstr "" msgstr ""
#: source/ubl-strings.h:41 #: source/ubl-strings.h:41
msgid "Extra"
msgstr ""
#: source/ubl-strings.h:42
msgid "Load" msgid "Load"
msgstr "" msgstr ""
#: source/ubl-strings.h:43 #: source/ubl-strings.h:44
msgid "On" msgid "On"
msgstr "" msgstr ""
#: source/ubl-strings.h:44 #: source/ubl-strings.h:45
msgid "Off" msgid "Off"
msgstr "" msgstr ""
#: source/ubl-strings.h:45 #: source/ubl-strings.h:46
msgid "Switched off" msgid "Switched off"
msgstr "" msgstr ""
#: source/ubl-strings.h:46 #: source/ubl-strings.h:47
msgid "fbdev" msgid "fbdev"
msgstr "" msgstr ""
#: source/ubl-strings.h:47 #: source/ubl-strings.h:48
msgid "Automatically choose and use driver" msgid "Automatically choose and use driver"
msgstr "" msgstr ""
#: source/ubl-strings.h:48 #: source/ubl-strings.h:49
msgid "Launch programs through optirun (Nvidia):" msgid "Launch programs through optirun (Nvidia):"
msgstr "" msgstr ""
#: source/ubl-strings.h:49 #: source/ubl-strings.h:50
msgid "Launch programs through primusrun (Nvidia):" msgid "Launch programs through primusrun (Nvidia):"
msgstr "" msgstr ""
#: source/ubl-strings.h:50 #: source/ubl-strings.h:51
msgid "Load from global configuration" msgid "Load from global configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:51 #: source/ubl-strings.h:52
msgid "Load from local configuration" msgid "Load from local configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:52 #: source/ubl-strings.h:53
msgid "Save configuration" msgid "Save configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:53 #: source/ubl-strings.h:54
msgid "Save to global configuration" msgid "Save to global configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:54 #: source/ubl-strings.h:55
msgid "Save to local configuration" msgid "Save to local configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:55 #: source/ubl-strings.h:56
msgid "Documentation" msgid "Documentation"
msgstr "" msgstr ""
#: source/ubl-strings.h:56 #: source/ubl-strings.h:57
msgid "About" msgid "About"
msgstr "" msgstr ""
#: source/ubl-strings.h:57 #: source/ubl-strings.h:58
msgid "Installed" msgid "Installed"
msgstr "" msgstr ""
#: source/ubl-strings.h:58 #: source/ubl-strings.h:59
msgid "installed" msgid "installed"
msgstr "" msgstr ""
#: source/ubl-strings.h:59 #: source/ubl-strings.h:60
msgid "Package" msgid "Package"
msgstr "" msgstr ""
#: source/ubl-strings.h:60 #: source/ubl-strings.h:61
msgid "Supported Devices" msgid "Supported Devices"
msgstr "" msgstr ""
#: source/ubl-strings.h:62 #: 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" msgid "Install module driver"
msgstr "" msgstr ""
#: source/ubl-strings.h:62 #: source/ubl-strings.h:66
msgid "Remove module driver" msgid "Remove module driver"
msgstr "" msgstr ""
#: source/ubl-strings.h:62 #: source/ubl-strings.h:67
msgid "Install package driver" msgid "Install package driver"
msgstr "" msgstr ""
#: source/ubl-strings.h:62 #: source/ubl-strings.h:68
msgid "Remove package driver" msgid "Remove package driver"
msgstr "" msgstr ""
#: source/ubl-strings.h:63 #: source/ubl-strings.h:70
msgid "Opening driver information" msgid "Opening driver information"
msgstr "" msgstr ""
#: source/ubl-strings.h:65 #: source/ubl-strings.h:72
msgid "Accept" msgid "Accept"
msgstr "" msgstr ""
#: source/ubl-strings.h:66 #: source/ubl-strings.h:73
msgid "Don't use" msgid "Don't use"
msgstr "" msgstr ""
#: source/ubl-strings.h:67 #: source/ubl-strings.h:74
msgid "Driver list is currently loading..." msgid "Driver list is currently loading..."
msgstr "" msgstr ""
#: source/ubl-strings.h:68 #: source/ubl-strings.h:75
msgid "Driver list is failed to load." msgid "Driver list is failed to load."
msgstr "" msgstr ""
#: source/ubl-strings.h:69 #: source/ubl-strings.h:76
msgid "Deleting driver..." msgid "Deleting driver..."
msgstr "" msgstr ""
#: source/ubl-strings.h:70 #: source/ubl-strings.h:77
msgid "Installing driver..." msgid "Installing driver..."
msgstr "" msgstr ""
#: source/ubl-strings.h:71 #: source/ubl-strings.h:78
msgid "Driver operation is done." msgid "Driver operation is done."
msgstr "" msgstr ""
#: source/ubl-strings.h:72 #: source/ubl-strings.h:79
msgid "Nothing was selected." msgid "Nothing was selected."
msgstr "" msgstr ""
#: source/ubl-strings.h:73 #: source/ubl-strings.h:80
msgid "" msgid ""
"Failed to load available drivers for your system... Installed driver list is " "Failed to load available drivers for your system... Installed driver list is "
"shown." "shown."
msgstr "" msgstr ""
#: source/ubl-strings.h:74 #: source/ubl-strings.h:81
msgid "Configure monitor" msgid "Configure monitor"
msgstr "" msgstr ""
#: source/ubl-strings.h:75 #: source/ubl-strings.h:82
msgid "Delete monitor configuration" msgid "Delete monitor configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:76 #: source/ubl-strings.h:83
msgid "Add monitor configuration" msgid "Add monitor configuration"
msgstr "" msgstr ""
#: source/ubl-strings.h:77 #: source/ubl-strings.h:84
msgid "Switch monitor" msgid "Switch monitor"
msgstr "" msgstr ""
#: source/ubl-strings.h:78 #: source/ubl-strings.h:85
msgid "More" msgid "More"
msgstr "" msgstr ""
#: source/ubl-strings.h:79 #: source/ubl-strings.h:86
msgid "Configuration:" msgid "Less"
msgstr "" 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?" msgid "Would you like to read documentation in the Web?"
msgstr "" msgstr ""
#: source/ubl-strings.h:82 #: source/ubl-strings.h:90
msgid "" msgid ""
"You will be redirected to documentation website where documentation is\n" "You will be redirected to documentation website where documentation is\n"
"translated and supported by community." "translated and supported by community."
msgstr "" msgstr ""
#: source/ubl-strings.h:83 #: source/ubl-strings.h:91
msgid "Always redirect to online documentation" msgid "Always redirect to online documentation"
msgstr "" msgstr ""
#: source/ubl-strings.h:84 #: source/ubl-strings.h:92
msgid "Information" msgid "Information"
msgstr "" msgstr ""
#: source/ubl-strings.h:85 #: source/ubl-strings.h:93
msgid "Drivers" msgid "Drivers"
msgstr "" msgstr ""
#: source/ubl-strings.h:86 #: source/ubl-strings.h:94
msgid "Main settings" msgid "Main settings"
msgstr "" msgstr ""
#: source/ubl-strings.h:87 #: source/ubl-strings.h:95
msgid "Devices and drivers" msgid "Devices and drivers"
msgstr "" msgstr ""
#: source/ubl-strings.h:88 #: source/ubl-strings.h:96
msgid "Read documentation" msgid "Read documentation"
msgstr "" msgstr ""
#: source/ubl-strings.h:90 #: source/ubl-strings.h:98
msgid "UBLinux Settings Web View" msgid "UBLinux Settings Web View"
msgstr "" msgstr ""
#: source/ubl-strings.h:104 #: source/ubl-strings.h:112
msgid "Error: Port must be chosen to save" msgid "Error: Port must be chosen to save"
msgstr "" msgstr ""
#: source/ubl-strings.h:105 #: source/ubl-strings.h:113
msgid "Monitor configuration succeedeed" msgid "Monitor configuration succeedeed"
msgstr "" msgstr ""
#: source/ubl-strings.h:107 #: source/ubl-strings.h:115
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
msgid "Yes" msgid "Yes"
msgstr "" msgstr ""
#: source/ubl-strings.h:115 #: source/ubl-strings.h:116
msgid "No" msgid "No"
msgstr "" msgstr ""
#: source/ubl-strings.h:117 #: source/ubl-strings.h:118
msgid "Update" msgid "Update"
msgstr "" msgstr ""
#: source/ubl-strings.h:119 #: source/ubl-strings.h:120
msgid "Description" msgid "Description"
msgstr "" msgstr ""
#: source/ubl-strings.h:120 #: source/ubl-strings.h:121
msgid "Vendor" msgid "Vendor"
msgstr "" msgstr ""
#: source/ubl-strings.h:121 #: source/ubl-strings.h:122
msgid "Model" msgid "Model"
msgstr "" msgstr ""
#: source/ubl-strings.h:122 #: source/ubl-strings.h:123
msgid "Kernel:" msgid "Kernel:"
msgstr "" msgstr ""
#: source/ubl-strings.h:123 #: source/ubl-strings.h:124
msgid "Kernel" msgid "Kernel"
msgstr "" msgstr ""
#: source/ubl-strings.h:124 #: source/ubl-strings.h:125
msgid "Module" msgid "Module"
msgstr "" msgstr ""
#: source/ubl-strings.h:125 #: source/ubl-strings.h:126
msgid "Driver information" msgid "Driver information"
msgstr "" msgstr ""
#: source/ubl-strings.h:126 #: source/ubl-strings.h:127
msgid "Kernel driver in use" msgid "Kernel driver in use"
msgstr "" msgstr ""
#: source/ubl-strings.h:127 #: source/ubl-strings.h:128
msgid "Kernel modules" msgid "Kernel modules"
msgstr "" msgstr ""
#: source/ubl-strings.h:128 #: source/ubl-strings.h:129
msgid "UBLinux package includes Intel driver and utilities" msgid "UBLinux package includes Intel driver and utilities"
msgstr "" msgstr ""
#: source/ubl-strings.h:129 #: source/ubl-strings.h:130
msgid "UBLinux module includes AMD driver and utilities" msgid "UBLinux module includes AMD driver and utilities"
msgstr "" msgstr ""
#: source/ubl-strings.h:130 #: source/ubl-strings.h:131
msgid "UBLinux package includes AMD Vulkan driver and utilities" msgid "UBLinux package includes AMD Vulkan driver and utilities"
msgstr "" msgstr ""
#: source/ubl-strings.h:132 #: source/ubl-strings.h:133
msgid "Important field is empty" msgid "Important field is empty"
msgstr "" msgstr ""
#: source/ubl-strings.h:134 #: source/ubl-strings.h:135
msgid "Load drivers from database" msgid "Load drivers from database"
msgstr "" msgstr ""
#: source/ubl-strings.h:135 #: source/ubl-strings.h:136
msgid "Choose driver automatically:" msgid "Choose driver automatically:"
msgstr "" msgstr ""
#: source/ubl-strings.h:136 #: source/ubl-strings.h:137
msgid "Free drivers:" msgid "Free drivers:"
msgstr "" msgstr ""
#: source/ubl-strings.h:137 #: source/ubl-strings.h:138
msgid "Default" msgid "Default"
msgstr "" msgstr ""
#: source/ubl-strings.h:138 #: source/ubl-strings.h:139
msgid "Switch nouveau and radeon off" msgid "Switch nouveau and radeon off"
msgstr "" msgstr ""
#: source/ubl-strings.h:139 #: source/ubl-strings.h:140
msgid "Switch nouveau off" msgid "Switch nouveau off"
msgstr "" msgstr ""
#: source/ubl-strings.h:140 #: source/ubl-strings.h:141
msgid "Switch radeon off" msgid "Switch radeon off"
msgstr "" msgstr ""
#: source/ubl-strings.h:141 #: source/ubl-strings.h:142
msgid "Switch free drvers on" msgid "Switch free drvers on"
msgstr "" msgstr ""
#: source/ubl-strings.h:142 #: source/ubl-strings.h:143
msgid "Do not switch off display(-s) (DPMS global configuration):" msgid "Do not switch off display(-s) (DPMS global configuration):"
msgstr "" msgstr ""
#: source/ubl-strings.h:143 #: source/ubl-strings.h:144
msgid "Automatic DPI" msgid "Automatic DPI"
msgstr "" msgstr ""
#: source/ubl-strings.h:144 #: source/ubl-strings.h:145
msgid "144 DPI - 150% (for 2K)" msgid "144 DPI - 150% (for 2K)"
msgstr "" msgstr ""
#: source/ubl-strings.h:145 #: source/ubl-strings.h:146
msgid "192 DPI - 200% (for 4K)" msgid "192 DPI - 200% (for 4K)"
msgstr "" msgstr ""
#: source/ubl-strings.h:146 #: source/ubl-strings.h:147
msgid "Display DPI" msgid "Display DPI"
msgstr "" msgstr ""
#: source/ubl-strings.h:147 #: source/ubl-strings.h:148
msgid "discrete video only (AMD/ATI):" msgid "discrete video only (AMD/ATI):"
msgstr "" msgstr ""
#: source/ubl-strings.h:148 #: source/ubl-strings.h:149
msgid "Driver Modules" msgid "Driver Modules"
msgstr "" msgstr ""
#: source/ubl-strings.h:149 #: source/ubl-strings.h:150
msgid "Devices and Drivers" msgid "Devices and Drivers"
msgstr "" msgstr ""
#: source/ubl-strings.h:197 #: source/ubl-strings.h:152
msgid "Database files must be updated" msgid "Database files must be updated"
msgstr "" msgstr ""
#: source/ubl-strings.h:199 #: source/ubl-strings.h:154
msgid "Warning: Couldn't find any supported kernel version" msgid "Warning: Couldn't find any supported kernel version"
msgstr "" msgstr ""
#: source/ubl-strings.h:201 #: source/ubl-strings.h:156
msgid "Default (All installed)" msgid "Default (All installed)"
msgstr "" msgstr ""
#: source/ubl-strings.h:202 #: source/ubl-strings.h:157
msgid "Driver installation has failed" msgid "Driver installation has failed"
msgstr "" msgstr ""
#: source/ubl-strings.h:203 #: source/ubl-strings.h:158
msgid "Operation has failed" msgid "Operation has failed"
msgstr "" msgstr ""
#: source/ubl-strings.h:205 #: source/ubl-strings.h:160
msgid "Are you sure want to install driver " msgid "Are you sure want to install driver "
msgstr "" msgstr ""
#: source/ubl-strings.h:206 #: source/ubl-strings.h:161
msgid "Are you sure want to remove driver " msgid "Are you sure want to remove driver "
msgstr "" msgstr ""
#: source/ubl-strings.h:207 #: source/ubl-strings.h:162
msgid "Attention!" msgid "Attention!"
msgstr "" msgstr ""
#: source/ubl-strings.h:207 #: source/ubl-strings.h:162
msgid "" msgid ""
"If you work in sandbox mode, you must install the package with the module!" "If you work in sandbox mode, you must install the package with the module!"
msgstr "" msgstr ""

@ -171,187 +171,199 @@ msgstr "Под"
msgid "No rotation" msgid "No rotation"
msgstr "Не поворачивать" msgstr "Не поворачивать"
#: source/ubl-strings.h:28 source/ubl-strings.h:42 #: source/ubl-strings.h:28 source/ubl-strings.h:43
msgid "Save" msgid "Save"
msgstr "Сохранить" msgstr "Сохранить"
#: source/ubl-strings.h:29 source/ubl-strings.h:64 #: source/ubl-strings.h:29 source/ubl-strings.h:71
msgid "Cancel" msgid "Cancel"
msgstr "Отмена" msgstr "Отмена"
#: source/ubl-strings.h:30 #: source/ubl-strings.h:30
msgid "Configuration:"
msgstr "Настройка:"
#: source/ubl-strings.h:31
msgid "Choose port to configure" msgid "Choose port to configure"
msgstr "Выбрать порт для настройки" msgstr "Выбрать порт для настройки"
#: source/ubl-strings.h:31 #: source/ubl-strings.h:32
msgid "1st variant. May cause perfomance drops in video games" msgid "1st variant. May cause perfomance drops in video games"
msgstr "1 вариант. Может снизить производительность в играх" msgstr "1 вариант. Может снизить производительность в играх"
#: source/ubl-strings.h:32 #: source/ubl-strings.h:33
msgid "2nd variant. May not work on specific video cards" msgid "2nd variant. May not work on specific video cards"
msgstr "2 вариант. Не на каждой карте может сработать" msgstr "2 вариант. Не на каждой карте может сработать"
#: source/ubl-strings.h:33 #: source/ubl-strings.h:34
msgid "Video output configuration" msgid "Video output configuration"
msgstr "Настройка вывода изображения" msgstr "Настройка вывода изображения"
#: source/ubl-strings.h:34 #: source/ubl-strings.h:35
msgid "Failsafe Nvidia driver:" msgid "Failsafe Nvidia driver:"
msgstr "Отказоустойчивый драйвер Nvidia: " msgstr "Отказоустойчивый драйвер Nvidia: "
#: source/ubl-strings.h:35 #: source/ubl-strings.h:36
msgid "Failsafe AMD/ATI driver:" msgid "Failsafe AMD/ATI driver:"
msgstr "Отказоустойчивый драйвер AMD/ATI: " msgstr "Отказоустойчивый драйвер AMD/ATI: "
#: source/ubl-strings.h:36 #: source/ubl-strings.h:37
msgid "Driver" msgid "Driver"
msgstr "Драйвер" msgstr "Драйвер"
#: source/ubl-strings.h:37 #: source/ubl-strings.h:38
msgid "Monitor configuration" msgid "Monitor configuration"
msgstr "Настройка экрана" msgstr "Настройка экрана"
#: source/ubl-strings.h:38 #: source/ubl-strings.h:39
msgid "Hybrid graphics" msgid "Hybrid graphics"
msgstr "Гибридная графика" msgstr "Гибридная графика"
#: source/ubl-strings.h:39 #: source/ubl-strings.h:40
msgid "Fix frame gap (Nvidia):" msgid "Fix frame gap (Nvidia):"
msgstr "Исправить разрыв кадров (Nvidia)" msgstr "Исправить разрыв кадров (Nvidia)"
#: source/ubl-strings.h:40 #: source/ubl-strings.h:41
msgid "Extra" msgid "Extra"
msgstr "Дополнительно" msgstr "Дополнительно"
#: source/ubl-strings.h:41 #: source/ubl-strings.h:42
msgid "Load" msgid "Load"
msgstr "Загрузить" msgstr "Загрузить"
#: source/ubl-strings.h:43 #: source/ubl-strings.h:44
msgid "On" msgid "On"
msgstr "Включить" msgstr "Включить"
#: source/ubl-strings.h:44 #: source/ubl-strings.h:45
msgid "Off" msgid "Off"
msgstr "Выключить" msgstr "Выключить"
#: source/ubl-strings.h:45 #: source/ubl-strings.h:46
msgid "Switched off" msgid "Switched off"
msgstr "Отключено" msgstr "Отключено"
#: source/ubl-strings.h:46 #: source/ubl-strings.h:47
msgid "fbdev" msgid "fbdev"
msgstr "fbdev" msgstr "fbdev"
#: source/ubl-strings.h:47 #: source/ubl-strings.h:48
msgid "Automatically choose and use driver" msgid "Automatically choose and use driver"
msgstr "Автоматический выбор и использование драйвера" msgstr "Автоматический выбор и использование драйвера"
#: source/ubl-strings.h:48 #: source/ubl-strings.h:49
msgid "Launch programs through optirun (Nvidia):" msgid "Launch programs through optirun (Nvidia):"
msgstr "Запуск программ через optirun (Nvidia):" msgstr "Запуск программ через optirun (Nvidia):"
#: source/ubl-strings.h:49 #: source/ubl-strings.h:50
msgid "Launch programs through primusrun (Nvidia):" msgid "Launch programs through primusrun (Nvidia):"
msgstr "Запуск программ через primusrun (Nvidia):" msgstr "Запуск программ через primusrun (Nvidia):"
#: source/ubl-strings.h:50 #: source/ubl-strings.h:51
msgid "Load from global configuration" msgid "Load from global configuration"
msgstr "Загрузить глобальную конфигурацию" msgstr "Загрузить глобальную конфигурацию"
#: source/ubl-strings.h:51 #: source/ubl-strings.h:52
msgid "Load from local configuration" msgid "Load from local configuration"
msgstr "Загрузить локальную конфигуруцию" msgstr "Загрузить локальную конфигуруцию"
#: source/ubl-strings.h:52 #: source/ubl-strings.h:53
msgid "Save configuration" msgid "Save configuration"
msgstr "Сохранить конфигурацию" msgstr "Сохранить конфигурацию"
#: source/ubl-strings.h:53 #: source/ubl-strings.h:54
msgid "Save to global configuration" msgid "Save to global configuration"
msgstr "Сохранить в глобальную конфигурацию" msgstr "Сохранить в глобальную конфигурацию"
#: source/ubl-strings.h:54 #: source/ubl-strings.h:55
msgid "Save to local configuration" msgid "Save to local configuration"
msgstr "Сохранить в локальную конфигурацию" msgstr "Сохранить в локальную конфигурацию"
#: source/ubl-strings.h:55 #: source/ubl-strings.h:56
msgid "Documentation" msgid "Documentation"
msgstr "Справка" msgstr "Справка"
#: source/ubl-strings.h:56 #: source/ubl-strings.h:57
msgid "About" msgid "About"
msgstr "О программе" msgstr "О программе"
#: source/ubl-strings.h:57 #: source/ubl-strings.h:58
msgid "Installed" msgid "Installed"
msgstr "Установлено" msgstr "Установлено"
#: source/ubl-strings.h:58 #: source/ubl-strings.h:59
msgid "installed" msgid "installed"
msgstr "установлен" msgstr "установлен"
#: source/ubl-strings.h:59 #: source/ubl-strings.h:60
msgid "Package" msgid "Package"
msgstr "Пакет" msgstr "Пакет"
#: source/ubl-strings.h:60 #: source/ubl-strings.h:61
msgid "Supported Devices" msgid "Supported Devices"
msgstr "Устройства" msgstr "Поддерживаемые устройства"
#: source/ubl-strings.h:62 #: 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" msgid "Install module driver"
msgstr "Установка драйвера, модуль" msgstr "Установка драйвера, модуль"
#: source/ubl-strings.h:62 #: source/ubl-strings.h:66
msgid "Remove module driver" msgid "Remove module driver"
msgstr "Удаление драйвера, модуль" msgstr "Удаление драйвера, модуль"
#: source/ubl-strings.h:62 #: source/ubl-strings.h:67
msgid "Install package driver" msgid "Install package driver"
msgstr "Установка драйвера, пакет" msgstr "Установка драйвера, пакет"
#: source/ubl-strings.h:62 #: source/ubl-strings.h:68
msgid "Remove package driver" msgid "Remove package driver"
msgstr "Удаление драйвера, пакет" msgstr "Удаление драйвера, пакет"
#: source/ubl-strings.h:63 #: source/ubl-strings.h:70
msgid "Opening driver information" msgid "Opening driver information"
msgstr "Загрузка информации о драйвере" msgstr "Загрузка информации о драйвере"
#: source/ubl-strings.h:65 #: source/ubl-strings.h:72
msgid "Accept" msgid "Accept"
msgstr "Принять" msgstr "Принять"
#: source/ubl-strings.h:66 #: source/ubl-strings.h:73
msgid "Don't use" msgid "Don't use"
msgstr "Не использовать" msgstr "Не использовать"
#: source/ubl-strings.h:67 #: source/ubl-strings.h:74
msgid "Driver list is currently loading..." msgid "Driver list is currently loading..."
msgstr "Список драйверов загружается..." msgstr "Список драйверов загружается..."
#: source/ubl-strings.h:68 #: source/ubl-strings.h:75
msgid "Driver list is failed to load." msgid "Driver list is failed to load."
msgstr "Не удалось загрузить список драйверов" msgstr "Не удалось загрузить список драйверов"
#: source/ubl-strings.h:69 #: source/ubl-strings.h:76
msgid "Deleting driver..." msgid "Deleting driver..."
msgstr "Удаление драйвера..." msgstr "Удаление драйвера..."
#: source/ubl-strings.h:70 #: source/ubl-strings.h:77
msgid "Installing driver..." msgid "Installing driver..."
msgstr "Установка драйвера..." msgstr "Установка драйвера..."
#: source/ubl-strings.h:71 #: source/ubl-strings.h:78
msgid "Driver operation is done." msgid "Driver operation is done."
msgstr "Операция завершена" msgstr "Операция завершена"
#: source/ubl-strings.h:72 #: source/ubl-strings.h:79
msgid "Nothing was selected." msgid "Nothing was selected."
msgstr "Выберите драйвер." msgstr "Выберите драйвер."
#: source/ubl-strings.h:73 #: source/ubl-strings.h:80
msgid "" msgid ""
"Failed to load available drivers for your system... Installed driver list is " "Failed to load available drivers for your system... Installed driver list is "
"shown." "shown."
@ -359,35 +371,40 @@ msgstr ""
"Не удалось загрузить список драйверов, доступных для вашей системы. Выведен " "Не удалось загрузить список драйверов, доступных для вашей системы. Выведен "
"список установленных драйверов." "список установленных драйверов."
#: source/ubl-strings.h:74 #: source/ubl-strings.h:81
msgid "Configure monitor" msgid "Configure monitor"
msgstr "Настроить монитор" msgstr "Настроить монитор"
#: source/ubl-strings.h:75 #: source/ubl-strings.h:82
msgid "Delete monitor configuration" msgid "Delete monitor configuration"
msgstr "Удалить конфигурацию мониотра" msgstr "Удалить конфигурацию мониотра"
#: source/ubl-strings.h:76 #: source/ubl-strings.h:83
msgid "Add monitor configuration" msgid "Add monitor configuration"
msgstr "Добавить монитор" msgstr "Добавить монитор"
#: source/ubl-strings.h:77 #: source/ubl-strings.h:84
msgid "Switch monitor" msgid "Switch monitor"
msgstr "Переключить монтор" msgstr "Переключить монтор"
#: source/ubl-strings.h:78 #: source/ubl-strings.h:85
msgid "More" msgid "More"
msgstr "Подробнее" msgstr "Подробнее"
#: source/ubl-strings.h:79 #: source/ubl-strings.h:86
msgid "Configuration:" msgid "Less"
msgstr "Меньше"
#: source/ubl-strings.h:87
#, fuzzy
msgid "Configuration: Monitor"
msgstr "Настройка:" msgstr "Настройка:"
#: source/ubl-strings.h:81 #: source/ubl-strings.h:89
msgid "Would you like to read documentation in the Web?" msgid "Would you like to read documentation in the Web?"
msgstr "Вы хотите прочитать справку в Сети?" msgstr "Вы хотите прочитать справку в Сети?"
#: source/ubl-strings.h:82 #: source/ubl-strings.h:90
msgid "" msgid ""
"You will be redirected to documentation website where documentation is\n" "You will be redirected to documentation website where documentation is\n"
"translated and supported by community." "translated and supported by community."
@ -395,227 +412,207 @@ msgstr ""
"Вы будете перенаправлены на сайт с документацией где страницы помощи\n" "Вы будете перенаправлены на сайт с документацией где страницы помощи\n"
"переводятся и поддерживаются сообществом." "переводятся и поддерживаются сообществом."
#: source/ubl-strings.h:83 #: source/ubl-strings.h:91
msgid "Always redirect to online documentation" msgid "Always redirect to online documentation"
msgstr "Всегда перенаправлять" msgstr "Всегда перенаправлять"
#: source/ubl-strings.h:84 #: source/ubl-strings.h:92
msgid "Information" msgid "Information"
msgstr "Информация" msgstr "Информация"
#: source/ubl-strings.h:85 #: source/ubl-strings.h:93
msgid "Drivers" msgid "Drivers"
msgstr "Драйвер" msgstr "Драйвер"
#: source/ubl-strings.h:86 #: source/ubl-strings.h:94
msgid "Main settings" msgid "Main settings"
msgstr "Основные настройки" msgstr "Основные настройки"
#: source/ubl-strings.h:87 #: source/ubl-strings.h:95
msgid "Devices and drivers" msgid "Devices and drivers"
msgstr "Устройства и драйвера" msgstr "Устройства и драйвера"
#: source/ubl-strings.h:88 #: source/ubl-strings.h:96
msgid "Read documentation" msgid "Read documentation"
msgstr "Справка" msgstr "Справка"
#: source/ubl-strings.h:90 #: source/ubl-strings.h:98
msgid "UBLinux Settings Web View" msgid "UBLinux Settings Web View"
msgstr "Встроенный браузер UBLinux" msgstr "Встроенный браузер UBLinux"
#: source/ubl-strings.h:104 #: source/ubl-strings.h:112
msgid "Error: Port must be chosen to save" msgid "Error: Port must be chosen to save"
msgstr "Ошибка: Выберите порт для сохранения" msgstr "Ошибка: Выберите порт для сохранения"
#: source/ubl-strings.h:105 #: source/ubl-strings.h:113
msgid "Monitor configuration succeedeed" msgid "Monitor configuration succeedeed"
msgstr "Настройки экрана сохранены" msgstr "Настройки экрана сохранены"
#: source/ubl-strings.h:107 #: source/ubl-strings.h:115
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
msgid "Yes" msgid "Yes"
msgstr "Да" msgstr "Да"
#: source/ubl-strings.h:115 #: source/ubl-strings.h:116
msgid "No" msgid "No"
msgstr "Нет" msgstr "Нет"
#: source/ubl-strings.h:117 #: source/ubl-strings.h:118
msgid "Update" msgid "Update"
msgstr "Обновить" msgstr "Обновить"
#: source/ubl-strings.h:119 #: source/ubl-strings.h:120
msgid "Description" msgid "Description"
msgstr "Описание" msgstr "Описание"
#: source/ubl-strings.h:120 #: source/ubl-strings.h:121
msgid "Vendor" msgid "Vendor"
msgstr "Производитель" msgstr "Производитель"
#: source/ubl-strings.h:121 #: source/ubl-strings.h:122
msgid "Model" msgid "Model"
msgstr "Модель" msgstr "Модель"
#: source/ubl-strings.h:122 #: source/ubl-strings.h:123
msgid "Kernel:" msgid "Kernel:"
msgstr "Ядро:" msgstr "Ядро:"
#: source/ubl-strings.h:123 #: source/ubl-strings.h:124
msgid "Kernel" msgid "Kernel"
msgstr "Ядро" msgstr "Ядро"
#: source/ubl-strings.h:124 #: source/ubl-strings.h:125
msgid "Module" msgid "Module"
msgstr "Модуль" msgstr "Модуль"
#: source/ubl-strings.h:125 #: source/ubl-strings.h:126
msgid "Driver information" msgid "Driver information"
msgstr "Информация о драйвере" msgstr "Информация о драйвере"
#: source/ubl-strings.h:126 #: source/ubl-strings.h:127
msgid "Kernel driver in use" msgid "Kernel driver in use"
msgstr "Используемый драйвер ядра" msgstr "Используемый драйвер ядра"
#: source/ubl-strings.h:127 #: source/ubl-strings.h:128
msgid "Kernel modules" msgid "Kernel modules"
msgstr "Модули ядра" msgstr "Модули ядра"
#: source/ubl-strings.h:128 #: source/ubl-strings.h:129
msgid "UBLinux package includes Intel driver and utilities" msgid "UBLinux package includes Intel driver and utilities"
msgstr "Пакет с драйвером и утилитами Intel" msgstr "Пакет с драйвером и утилитами Intel"
#: source/ubl-strings.h:129 #: source/ubl-strings.h:130
msgid "UBLinux module includes AMD driver and utilities" msgid "UBLinux module includes AMD driver and utilities"
msgstr "Пакет с драйвером и утилитами AMD" msgstr "Пакет с драйвером и утилитами AMD"
#: source/ubl-strings.h:130 #: source/ubl-strings.h:131
msgid "UBLinux package includes AMD Vulkan driver and utilities" msgid "UBLinux package includes AMD Vulkan driver and utilities"
msgstr "Пакет с драйвером и утилитами AMD с поддержкой Vulkan" msgstr "Пакет с драйвером и утилитами AMD с поддержкой Vulkan"
#: source/ubl-strings.h:132 #: source/ubl-strings.h:133
msgid "Important field is empty" msgid "Important field is empty"
msgstr "Пустое важное поле" msgstr "Пустое важное поле"
#: source/ubl-strings.h:134 #: source/ubl-strings.h:135
msgid "Load drivers from database" msgid "Load drivers from database"
msgstr "Загрузить список доступных драйверов" msgstr "Загрузить список доступных драйверов"
#: source/ubl-strings.h:135 #: source/ubl-strings.h:136
msgid "Choose driver automatically:" msgid "Choose driver automatically:"
msgstr "Автоматический выбор драйвера:" msgstr "Автоматический выбор драйвера:"
#: source/ubl-strings.h:136 #: source/ubl-strings.h:137
msgid "Free drivers:" msgid "Free drivers:"
msgstr "Свободные драйверы" msgstr "Свободные драйверы"
#: source/ubl-strings.h:137 #: source/ubl-strings.h:138
msgid "Default" msgid "Default"
msgstr "По умолчанию" msgstr "По умолчанию"
#: source/ubl-strings.h:138 #: source/ubl-strings.h:139
msgid "Switch nouveau and radeon off" msgid "Switch nouveau and radeon off"
msgstr "Отключить nouveau и radeon" msgstr "Отключить nouveau и radeon"
#: source/ubl-strings.h:139 #: source/ubl-strings.h:140
msgid "Switch nouveau off" msgid "Switch nouveau off"
msgstr "Отключить nouveau" msgstr "Отключить nouveau"
#: source/ubl-strings.h:140 #: source/ubl-strings.h:141
msgid "Switch radeon off" msgid "Switch radeon off"
msgstr "Отключить radeon" msgstr "Отключить radeon"
#: source/ubl-strings.h:141 #: source/ubl-strings.h:142
msgid "Switch free drvers on" msgid "Switch free drvers on"
msgstr "Включить свободные драйвера" msgstr "Включить свободные драйвера"
#: source/ubl-strings.h:142 #: source/ubl-strings.h:143
msgid "Do not switch off display(-s) (DPMS global configuration):" msgid "Do not switch off display(-s) (DPMS global configuration):"
msgstr "Не выключать дисплей(-и) (глобальная настройка DPMS):" msgstr "Не выключать дисплей(-и) (глобальная настройка DPMS):"
#: source/ubl-strings.h:143 #: source/ubl-strings.h:144
msgid "Automatic DPI" msgid "Automatic DPI"
msgstr "Автоматический выбор DPI" msgstr "Автоматический выбор DPI"
#: source/ubl-strings.h:144 #: source/ubl-strings.h:145
msgid "144 DPI - 150% (for 2K)" msgid "144 DPI - 150% (for 2K)"
msgstr "144 DPI - 150% (для 2K)" msgstr "144 DPI - 150% (для 2K)"
#: source/ubl-strings.h:145 #: source/ubl-strings.h:146
msgid "192 DPI - 200% (for 4K)" msgid "192 DPI - 200% (for 4K)"
msgstr "192 DPI - 150% (для 4K)" msgstr "192 DPI - 150% (для 4K)"
#: source/ubl-strings.h:146 #: source/ubl-strings.h:147
msgid "Display DPI" msgid "Display DPI"
msgstr "Масштабирование вывода изображения" msgstr "Масштабирование вывода изображения"
#: source/ubl-strings.h:147 #: source/ubl-strings.h:148
msgid "discrete video only (AMD/ATI):" msgid "discrete video only (AMD/ATI):"
msgstr "Только дискретное видео (AMD/ATI):" msgstr "Только дискретное видео (AMD/ATI):"
#: source/ubl-strings.h:148 #: source/ubl-strings.h:149
msgid "Driver Modules" msgid "Driver Modules"
msgstr "Модули драйвера" msgstr "Модули драйвера"
#: source/ubl-strings.h:149 #: source/ubl-strings.h:150
msgid "Devices and Drivers" msgid "Devices and Drivers"
msgstr "Устройства и драйвера" msgstr "Устройства и драйвера"
#: source/ubl-strings.h:197 #: source/ubl-strings.h:152
msgid "Database files must be updated" msgid "Database files must be updated"
msgstr "Базы данных репозитория должны быть обновлены" msgstr "Базы данных репозитория должны быть обновлены"
#: source/ubl-strings.h:199 #: source/ubl-strings.h:154
msgid "Warning: Couldn't find any supported kernel version" msgid "Warning: Couldn't find any supported kernel version"
msgstr "Предупреждение: Поддерживаемые версии ядра не найдены" msgstr "Предупреждение: Поддерживаемые версии ядра не найдены"
#: source/ubl-strings.h:201 #: source/ubl-strings.h:156
msgid "Default (All installed)" msgid "Default (All installed)"
msgstr "По умолчанию (все установленные)" msgstr "По умолчанию (все установленные)"
#: source/ubl-strings.h:202 #: source/ubl-strings.h:157
msgid "Driver installation has failed" msgid "Driver installation has failed"
msgstr "Установка драйвера завершена с ошибкой" msgstr "Установка драйвера завершена с ошибкой"
#: source/ubl-strings.h:203 #: source/ubl-strings.h:158
msgid "Operation has failed" msgid "Operation has failed"
msgstr "Операция завершена с ошибкой" msgstr "Операция завершена с ошибкой"
#: source/ubl-strings.h:205 #: source/ubl-strings.h:160
msgid "Are you sure want to install driver " msgid "Are you sure want to install driver "
msgstr "Вы уверены, что хотите установить драйвер " msgstr "Вы уверены, что хотите установить драйвер "
#: source/ubl-strings.h:206 #: source/ubl-strings.h:161
msgid "Are you sure want to remove driver " msgid "Are you sure want to remove driver "
msgstr "Вы уверены, что хотите удалить драйвер " msgstr "Вы уверены, что хотите удалить драйвер "
#: source/ubl-strings.h:207 #: source/ubl-strings.h:162
msgid "Attention!" msgid "Attention!"
msgstr "Внимание!" msgstr "Внимание!"
#: source/ubl-strings.h:207 #: source/ubl-strings.h:162
msgid "" msgid ""
"If you work in sandbox mode, you must install the package with the module!" "If you work in sandbox mode, you must install the package with the module!"
msgstr "" msgstr ""
"Если вы работаете в режиме песочницы необходимо установить пакет с модулем!" "Если вы работаете в режиме песочницы необходимо установить пакет с модулем!"
#~ msgid "Driver modules" msgid "Driver modules"
#~ msgstr "Модули драйвера" msgstr "Модули драйвера"

@ -38,8 +38,16 @@ add_custom_target(GLADE ubl-settings-video.glade)
set(DEPENDFILES set(DEPENDFILES
../ubl-settings-video.glade ../ubl-settings-video.glade
../ubl-settings-video-terminal.glade ../ubl-settings-video-terminal.glade
../ubl-settings-video-terminal.glade
../ubl-settings-video-monitor.glade ../ubl-settings-video-monitor.glade
../ubl-settings-video-configuration.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 ../gresource.xml
../ubl-settings-video.css ../ubl-settings-video.css
../video-drivers.csv ../video-drivers.csv
@ -79,6 +87,8 @@ endif()
set(SOURCE_FILES set(SOURCE_FILES
ubl-settings-video.c ubl-settings-video.c
ubl-settings-video-driver.c
ubl-settings-video-install.c
ubl-settings-video.h ubl-settings-video.h
ubl-strings.h ubl-strings.h
) )

@ -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("<a href = \"\">",driver->name,"</a>",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;
}

@ -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);
}

@ -3,7 +3,7 @@
config main_config; config main_config;
void on_terminal_done(GtkWidget *, int , main_window *widgets){ 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){ 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); 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){ 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); g_mutex_lock(&main_config.progress_mutex);
main_config.progress_active=0; main_config.progress_active=0;
g_mutex_unlock(&main_config.progress_mutex); 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); 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); on_terminal_done(self,0,widgets);
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel),0);
return G_SOURCE_REMOVE; return G_SOURCE_REMOVE;
} }
gboolean on_terminal_check_progress(main_window *widgets){ gboolean on_terminal_check_progress(main_window *widgets){
char *text = vte_terminal_get_text_format(VTE_TERMINAL(widgets->terminal),VTE_FORMAT_TEXT);
GRegex *regex = g_regex_new("\\d?\\d?\\d%",0,0,NULL);
GMatchInfo *match = NULL;
g_regex_match(regex,text,0,&match);
g_regex_unref(regex);
double percentage = 0.0;
char *last_match = NULL;
while (g_match_info_matches(match)) {
char *current_match = g_match_info_fetch(match, 0);
if (last_match) {
g_free(last_match);
}
last_match = current_match;
g_match_info_next(match, NULL);
}
if (last_match) {
yon_char_remove_last_symbol(last_match,'%');
percentage = g_ascii_strtod(last_match,NULL);
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel), percentage / 100);
g_free(last_match);
} else {
gtk_progress_bar_pulse(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel));
}
if (text) g_free(text);
if (match) g_match_info_unref(match);
g_mutex_lock(&main_config.progress_mutex); 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); g_mutex_unlock(&main_config.progress_mutex);
return G_SOURCE_REMOVE; return G_SOURCE_REMOVE;
} }
gtk_progress_bar_pulse(GTK_PROGRESS_BAR(widgets->TerminalInfoLabel));
g_mutex_unlock(&main_config.progress_mutex); g_mutex_unlock(&main_config.progress_mutex);
return G_SOURCE_CONTINUE; return G_SOURCE_CONTINUE;
} }
@ -96,64 +50,20 @@ void on_command_cancel(GtkWidget *,main_window *widgets){
on_terminal_done(NULL,0,widgets); on_terminal_done(NULL,0,widgets);
} }
void yon_terminal_start(main_window *widgets, char *usr_command){ void on_driver_pack_selection_change(GtkWidget *, GtkListBoxRow *selection, main_window *widgets){
char **command=new_arr(char*,2); if (selection){
gchar **envp = g_get_environ(); driver_struct *driver = g_object_get_data(G_OBJECT(selection),"driver_struct");
command[0]=(gchar *)g_strdup(g_environ_getenv(envp, "SHELL")); if (driver->supported_devices_avaliable){
command[1]=NULL; gtk_widget_set_sensitive(widgets->SupportedDevicesButton,1);
char **env=new_arr(char*,2); } else {
env[0]=""; gtk_widget_set_sensitive(widgets->SupportedDevicesButton,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){
} }
gtk_widget_set_sensitive(widgets->AboutModuleButton,1);
gtk_widget_set_sensitive(widgets->AboutPackageButton,1);
} else { } 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,95 +77,28 @@ gpointer yon_driver_info_launch(void *command){
} }
void on_driver_pack_info(GtkWidget *, main_window *widgets){ void on_driver_pack_info(GtkWidget *, main_window *widgets){
GtkTreeIter iter; GtkWidget *selection = GTK_WIDGET(gtk_list_box_get_selected_row(GTK_LIST_BOX(widgets->DriversList)));
char *module, *package; if (selection){
GtkTreeModel *list_s=GTK_TREE_MODEL(main_config.list); driver_struct *driver = g_object_get_data(G_OBJECT(selection),"driver_struct");
GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->DriversTree));
if (gtk_tree_selection_get_selected(selection,&list_s,&iter)){
yon_ubl_status_box_render(yon_char_get_localised_from_lib(INFO_PROCESS_LABEL),BACKGROUND_IMAGE_INFO_TYPE); 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(driver->package);
char *command = get_info_proprietary_command(yon_char_is_empty(module)?package:module);
g_thread_new("info_thread",yon_driver_info_launch,(void*)command); g_thread_new("info_thread",yon_driver_info_launch,(void*)command);
} else { } else {
yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
} }
} }
void on_pack_install_activate(GtkCellRendererToggle* ,gchar* path,main_window *widgets){ void on_driver_module_info(GtkWidget *, main_window *widgets){
GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)); GtkWidget *selection = GTK_WIDGET(gtk_list_box_get_selected_row(GTK_LIST_BOX(widgets->DriversList)));
GtkTreeIter iter; if (selection){
if (!GTK_IS_TREE_MODEL_FILTER(model)){ driver_struct *driver = g_object_get_data(G_OBJECT(selection),"driver_struct");
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);
model=GTK_TREE_MODEL(main_config.list); char *command = get_info_proprietary_command(driver->module);
} else { g_thread_new("info_thread",yon_driver_info_launch,(void*)command);
GtkTreeIter itar;
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model),&itar,path);
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model),&iter,&itar);
}
char *package;
int installed;
gtk_tree_model_get(GTK_TREE_MODEL(model),&iter,1,&installed,8,&package,-1);
if (!installed){
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
data->action_text=yon_char_unite(INSTALL_CONFIRMATION_LABEL(package),"\n",INSTALL_ATTENTION_LABEL,NULL);
if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){
if (!yon_char_is_empty(package)){
char *command = install_proprietary_command(package);
yon_terminal_start(widgets,command);
yon_ubl_status_box_render(PACKAGE_INSTALL_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE);
}
}
free(data);
} else {
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
data->action_text=REMOVE_CONFIRMATION_LABEL(package);
if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){
if (!yon_char_is_empty(package)){
char *command = delete_proprietary_command(package);
yon_terminal_start(widgets,command);
yon_ubl_status_box_render(PACKAGE_REMOVE_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE);
}
}
free(data);
}
}
void on_module_install_activate(GtkCellRendererToggle* ,gchar* path,main_window *widgets){
GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree));
GtkTreeIter iter;
if (!GTK_IS_TREE_MODEL_FILTER(model)){
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(main_config.list),&iter,path);
} else {
GtkTreeIter itar;
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(model),&itar,path);
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(model),&iter,&itar);
}
char *package;
int installed;
gtk_tree_model_get(GTK_TREE_MODEL(main_config.list),&iter,1,&installed,7,&package,-1);
if (!installed){
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
data->action_text=INSTALL_CONFIRMATION_LABEL(package);
if (yon_confirmation_dialog_call(widgets->Window,data)==GTK_RESPONSE_ACCEPT){
if (!yon_char_is_empty(package)){
char *command = install_proprietary_command(package);
yon_terminal_start(widgets,command);
yon_ubl_status_box_render(MODULE_INSTALL_PROCESS_LABEL(package),BACKGROUND_IMAGE_INFO_TYPE);
}
}
free(data);
} else { } else {
dialog_confirmation_data *data = yon_confirmation_dialog_data_new(); yon_ubl_status_box_render(PROPRIETARY_NOTHING_SELECTED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
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);
} }
} }
@ -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){ void on_kernel_filter_changed(GtkWidget *self, main_window *widgets){
int active = gtk_combo_box_get_active(GTK_COMBO_BOX(self)); const char *active = gtk_combo_box_get_active_id(GTK_COMBO_BOX(self));
if (active){ if (!yon_char_is_empty(active)){
if (!GTK_IS_TREE_MODEL_FILTER(gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)))){ GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->DriversList));
GtkTreeModel *model = gtk_tree_model_filter_new(GTK_TREE_MODEL(main_config.list),NULL); for (GList *iter = list; iter; iter=iter->next){
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),model); driver_struct *driver = g_object_get_data(G_OBJECT(iter->data),"driver_struct");
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(model),(GtkTreeModelFilterVisibleFunc)yon_filter_func,widgets,NULL); 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 { } else {
GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(widgets->DriversTree)); GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->DriversList));
if (GTK_IS_TREE_MODEL_FILTER(model)) { for (GList *iter = list; iter; iter=iter->next){
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),NULL); gtk_widget_show(GTK_WIDGET(iter->data));
g_object_unref(model);
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),GTK_TREE_MODEL(main_config.list));
} }
g_list_free(list);
} }
} }
@ -1017,53 +862,113 @@ void yon_monitor_view_update(){
} }
gboolean yon_proprietary_clear(main_window *widgets){ gboolean yon_proprietary_clear(main_window *widgets){
gtk_widget_set_sensitive(widgets->LoadDriversButton,0); GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->DriversList));
gtk_list_store_clear(main_config.list); GList *iter = NULL;
gtk_list_store_clear(main_config.list2); for (iter = list; iter; iter=iter->next){
gtk_spinner_start(GTK_SPINNER(widgets->DriversLoadingSpinner)); driver_struct *driver = g_object_get_data(G_OBJECT(iter->data),"driver_struct");
gtk_widget_show(widgets->DriversLoadingSpinner); free(driver->name);
gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->KernelsCombo)); free(driver->module);
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->KernelsCombo),ALL_INSTALLED_KERNELS_LABEL); free(driver->package);
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KernelsCombo),0); 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; 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){ 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); gtk_widget_set_sensitive(widgets->LoadDriversButton,1);
return G_SOURCE_REMOVE; return G_SOURCE_REMOVE;
} }
gboolean yon_proprietary_append(struct proprietary_struct *target){ gboolean yon_proprietary_append(driver_struct *){
GtkTreeIter iter; // GtkTreeIter iter;
gtk_list_store_append(main_config.list,&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); // 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); // free(target);
return G_SOURCE_REMOVE; return G_SOURCE_REMOVE;
} }
gboolean yon_proprietary_append_kernels(struct proprietary_kernel_append_struct *append){ 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->kernel);
free(append); free(append);
return G_SOURCE_REMOVE; 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){ 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_spinner_stop(GTK_SPINNER(widgets->DriversLoadingSpinner));
gtk_widget_hide(widgets->DriversLoadingSpinner); gtk_widget_hide(widgets->DriversLoadingSpinner);
return G_SOURCE_REMOVE; 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); g_idle_add((GSourceFunc)yon_proprietary_clear,widgets);
int kernels_size; int kernels_size;
config_str kernels_installed=yon_config_load(yon_get_kernels_installed,&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'); 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<packages_size;i++){
yon_char_remove_last_symbol(packages[i],'\n');
g_hash_table_add(table,packages[i]);
}
free(packages);
}
int installed_size;
config_str installed_packages = yon_config_load(yon_get_add_installed_packages,&installed_size);
GHashTable *installed = g_hash_table_new_full(g_str_hash,g_str_equal,free,NULL);
if (installed_packages){
for (int i=0;i<installed_size;i++){
yon_char_remove_last_symbol(installed_packages[i],'\n');
g_hash_table_add(installed,installed_packages[i]);
}
free(installed_packages);
}
g_idle_add((GSourceFunc)yon_proprietary_disconnect,widgets);
for (int dr_desc=1;dr_desc<size;dr_desc++){ for (int dr_desc=1;dr_desc<size;dr_desc++){
while(gtk_events_pending()) gtk_main_iteration();
int current_size; int current_size;
config_str current = yon_char_parse(rtn[dr_desc],&current_size,";"); config_str current = yon_char_parse(rtn[dr_desc],&current_size,";");
if ((!strcmp(current[0],"")|| if ((!strcmp(current[0],"")||
yon_char_parsed_check_exist(kernels_installed,kernels_size,current[0])>-1)){ yon_char_parsed_check_exist(kernels_installed,kernels_size,current[0])>-1)){
if ((!yon_char_is_empty(current[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])&& (!yon_char_is_empty(current[2])&&
g_hash_table_contains(table,current[2]))){ yon_packages_check_exist(current[2]))){
int module_status = !yon_char_is_empty(current[1])?g_hash_table_contains(installed,current[1]):0; driver_struct *target = yon_driver_struct_new();
int package_status = !yon_char_is_empty(current[2])?g_hash_table_contains(installed,current[2]):0; target->name = yon_char_new(current[3]);
struct proprietary_struct *cur = malloc(sizeof(struct proprietary_struct)); target->module = current[1];
cur->drivers=current; target->package = current[2];
cur->drivers_size=current_size; target->kernel = current[0];
cur->module_status=module_status; target->devices = current_size>5?current[5]:NULL;
cur->package_status=package_status; target->description = current[4];
cur->module_exist=g_hash_table_contains(table,current[1]); target->module_installed = yon_packages_check_installed(current[1]);
cur->package_exist=g_hash_table_contains(table,current[2]); target->package_installed = yon_packages_check_installed(current[2]);
g_idle_add((GSourceFunc)yon_proprietary_append,cur); 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) { if (dr_desc==size-1) {
g_idle_add((GSourceFunc)yon_proprietary_connect,widgets); g_idle_add((GSourceFunc)yon_proprietary_connect,widgets);
} }
} }
g_hash_table_unref(table);
g_hash_table_unref(installed);
if (!size){ if (!size){
g_idle_add((GSourceFunc)yon_proprietary_connect,widgets); 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); yon_ubl_status_box_render_thread(status_text,!getuid()?BACKGROUND_IMAGE_SUCCESS_TYPE:BACKGROUND_IMAGE_FAIL_TYPE);
free(status_text); free(status_text);
g_idle_add((GSourceFunc)yon_proprietary_set,widgets); 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){ void yon_proprietary_get_thread(GtkWidget *,main_window *widgets){
yon_ubl_status_box_render(PROPRIETARY_LOADING_LABEL,BACKGROUND_IMAGE_INFO_TYPE); yon_ubl_status_box_render(PROPRIETARY_LOADING_LABEL,BACKGROUND_IMAGE_INFO_TYPE);
gtk_tree_view_set_model(GTK_TREE_VIEW(widgets->DriversTree),NULL); yon_proprietary_local_get(widgets);
g_thread_new("drivers_loading",(GThreadFunc)(yon_proprietary_local_get),widgets);
} }
void yon_monitor_view_dictionary_destroy(void *window){ 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) /** void yon_setup_widgets(main_window *widgets)
* [EN] * [EN]
* Sets up every element on main window * 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)); widgets = yon_remalloc(widgets,sizeof(main_window));
main_config.widgets=widgets; main_config.widgets=widgets;
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); 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 // Custom widgets configuration
{ {
widgets->AutoDriverCombo = yon_gtk_builder_get_widget(builder,"AutoDriverCombo"); 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->PrimusrunButton = yon_gtk_builder_get_widget(builder,"PrimusrunButton");
widgets->FrameGapCombo = yon_gtk_builder_get_widget(builder,"FrameGapCombo"); 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->InfoButton = yon_gtk_builder_get_widget(builder, "InfoButton");
widgets->TerminalOverlay = yon_gtk_builder_get_widget(builder, "TerminalOverlay"); widgets->TerminalOverlay = yon_gtk_builder_get_widget(builder, "TerminalOverlay");
widgets->MenusTab = yon_gtk_builder_get_widget(builder, "MenusTab"); widgets->MenusTab = yon_gtk_builder_get_widget(builder, "MenusTab");
widgets->LoadDriversButton = yon_gtk_builder_get_widget(builder,"LoadDriversButton"); 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->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->DriverModulesTab = GTK_WIDGET(gtk_builder_get_object(builder, "DriverModulesTab"));
widgets->DriversTab = GTK_WIDGET(gtk_builder_get_object(builder, "DriversTab")); widgets->DriversTab = GTK_WIDGET(gtk_builder_get_object(builder, "DriversTab"));
widgets->MainTabLabel = GTK_WIDGET(gtk_builder_get_object(builder, "MainTabLabel")); // widgets->MainTabLabel = GTK_WIDGET(gtk_builder_get_object(builder, "MainTabLabel"));
widgets->DriversTabLabel = GTK_WIDGET(gtk_builder_get_object(builder, "DriversTabLabel")); // widgets->DriversTabLabel = GTK_WIDGET(gtk_builder_get_object(builder, "DriversTabLabel"));
widgets->InformationTabLabel = GTK_WIDGET(gtk_builder_get_object(builder, "InformationTabLabel")); // widgets->InformationTabLabel = GTK_WIDGET(gtk_builder_get_object(builder, "InformationTabLabel"));
widgets->InformationFrameLabel = GTK_WIDGET(gtk_builder_get_object(builder, "InformationFrameLabel")); widgets->InformationFrameLabel = GTK_WIDGET(gtk_builder_get_object(builder, "InformationFrameLabel"));
widgets->InformationOverlay = GTK_WIDGET(gtk_builder_get_object(builder, "InformationOverlay")); widgets->InformationOverlay = GTK_WIDGET(gtk_builder_get_object(builder, "InformationOverlay"));
widgets->InformationCompanyLogoImage = GTK_WIDGET(gtk_builder_get_object(builder, "InformationCompanyLogoImage")); 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->DriversLoadingOverlay = GTK_WIDGET(gtk_builder_get_object(builder, "DriversLoadingOverlay"));
widgets->DriversLoadingSpinner = GTK_WIDGET(gtk_builder_get_object(builder, "DriversLoadingSpinner")); widgets->DriversLoadingSpinner = GTK_WIDGET(gtk_builder_get_object(builder, "DriversLoadingSpinner"));
widgets->PackageRenderer = GTK_CELL_RENDERER(gtk_builder_get_object(builder, "PackageRenderer")); widgets->DriversList = yon_gtk_builder_get_widget(builder, "DriversList");
widgets->ModuleRenderer = GTK_CELL_RENDERER(gtk_builder_get_object(builder, "ModuleRenderer")); widgets->TerminalCancelButton = yon_gtk_builder_get_widget(builder, "TerminalCancelButton");
widgets->TerminalInfoLabel = yon_gtk_builder_get_widget(builder, "TerminalInfoLabel");
main_config.list = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore6")); widgets->TerminalMoveBox = yon_gtk_builder_get_widget(builder, "TerminalMoveBox");
main_config.list2 = GTK_LIST_STORE(gtk_builder_get_object(builder, "liststore1")); widgets->TerminalMoveTargetBox = yon_gtk_builder_get_widget(builder, "TerminalMoveTargetBox");
gtk_overlay_add_overlay(GTK_OVERLAY(widgets->DriversLoadingOverlay),widgets->DriversLoadingSpinner); 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->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->DriversList), "row-selected", G_CALLBACK(on_driver_pack_selection_change), widgets);
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->InstallTerminal),"child-exited",G_CALLBACK(on_command_execute_success),widgets);
}
g_signal_connect(G_OBJECT(widgets->InfoButton), "clicked", G_CALLBACK(on_driver_pack_info), widgets);
g_signal_connect(G_OBJECT(widgets->DriversTree), "cursor-changed", G_CALLBACK(on_driver_pack_selection_change), widgets);
g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets);
g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_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->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->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->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; int size;
config_str default_driver = yon_config_load(yon_config_parameter_prepare_command(VGADRV_AUTO_command,"default",NULL,NULL),&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); 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_adapter_window_setup(widgets);
} }
yon_save_window_set_postsave_function(on_save_done,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.lock_save_local=0;
main_config.load_mode=1; main_config.load_mode=1;
main_config.progress_active=0; main_config.progress_active=0;
yon_packages_init();
} }
int main(int argc, char *argv[]){ int main(int argc, char *argv[]){
local=setlocale(LC_ALL, ""); setlocale(LC_ALL, "");
textdomain (LocaleName); textdomain (LocaleName);
config_init(); config_init();
@ -1680,5 +1622,6 @@ int main(int argc, char *argv[]){
yon_proprietary_get_thread(NULL,(main_window*)widgets); yon_proprietary_get_thread(NULL,(main_window*)widgets);
yon_monitor_set_resolutions(); yon_monitor_set_resolutions();
gtk_main(); gtk_main();
yon_packages_finish();
return 0; return 0;
} }

@ -30,6 +30,8 @@
#define banner_path "/com/ublinux/images/ubl-settings-video-banner.png" #define banner_path "/com/ublinux/images/ubl-settings-video-banner.png"
#define glade_path "/com/ublinux/ui/ubl-settings-video.glade" #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_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_monitor "/com/ublinux/ui/ubl-settings-video-monitor.glade"
#define glade_path_configuration "/com/ublinux/ui/ubl-settings-video-configuration.glade" #define glade_path_configuration "/com/ublinux/ui/ubl-settings-video-configuration.glade"
@ -37,6 +39,7 @@
#define LocalePath "/usr/share/locale" #define LocalePath "/usr/share/locale"
#define LocaleName "ubl-settings-video" #define LocaleName "ubl-settings-video"
#define CssPath "/com/ublinux/css/ubl-settings-video.css" #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" #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 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) #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 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_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_is_exist_command(target) yon_char_append("pacman -Ss ",target)
#define yon_get_all_pacman_packages_command "pacman -Slq" #define yon_get_all_pacman_packages_command "pacman -Slq"
#define yon_get_add_installed_packages "pacman -Qq" #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_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'" #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; void *data;
} thread_input; } thread_input;
char *local;
typedef char* string; typedef char* string;
__attribute__((unused)) static \
string version_application; string version_application;
#define _(String) gettext(String) #define _(String) gettext(String)
@ -127,6 +132,7 @@ typedef struct {
typedef struct typedef struct
{ {
template_window_fields template_window_fields
GtkWidget *MainBox;
GtkWidget *AutoDriverCombo; GtkWidget *AutoDriverCombo;
GtkWidget *FreeDriverCombo; GtkWidget *FreeDriverCombo;
GtkWidget *FailsafeNvidiaCombo; GtkWidget *FailsafeNvidiaCombo;
@ -143,18 +149,14 @@ typedef struct
GtkWidget *PrimusrunButton; GtkWidget *PrimusrunButton;
GtkWidget *FrameGapCombo; GtkWidget *FrameGapCombo;
GtkWidget *DriversTree;
GtkWidget *TopTree;
GtkCellRenderer *ModuleRenderer;
GtkCellRenderer *PackageRenderer;
GtkWidget *KernelsCombo; GtkWidget *KernelsCombo;
GtkWidget *InfoButton; GtkWidget *InfoButton;
GtkWidget *DriverModulesTab; GtkWidget *DriverModulesTab;
GtkWidget *DriversTab; GtkWidget *DriversTab;
GtkWidget *MainTabLabel; // GtkWidget *MainTabLabel;
GtkWidget *DriversTabLabel; // GtkWidget *DriversTabLabel;
GtkWidget *InformationTabLabel; // GtkWidget *InformationTabLabel;
GtkWidget *InformationFrameLabel; GtkWidget *InformationFrameLabel;
GtkWidget *InformationOverlay; GtkWidget *InformationOverlay;
GtkWidget *InformationCompanyLogoImage; GtkWidget *InformationCompanyLogoImage;
@ -165,7 +167,6 @@ typedef struct
GtkWidget *TerminalOverlay; GtkWidget *TerminalOverlay;
GtkWidget *TerminalBox; GtkWidget *TerminalBox;
GtkWidget *TerminalRevealer;
GtkWidget *TerminalInfoLabel; GtkWidget *TerminalInfoLabel;
GtkWidget *TerminalMoreButton; GtkWidget *TerminalMoreButton;
GtkWidget *TerminalCancelButton; GtkWidget *TerminalCancelButton;
@ -174,11 +175,31 @@ typedef struct
GtkWidget *DriversLoadingOverlay; GtkWidget *DriversLoadingOverlay;
GtkWidget *DriversLoadingSpinner; GtkWidget *DriversLoadingSpinner;
GtkWidget *MenusTab; GtkWidget *DriversList;
GtkWidget *terminal; 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 *LoadDriversButton;
GtkWidget *SupportedDevicesButton;
GtkWidget *AboutModuleButton;
GtkWidget *AboutPackageButton;
rmb_menu_window *menu;
} main_window; } main_window;
typedef struct typedef struct
@ -192,8 +213,6 @@ typedef struct
monitor_config monitors; monitor_config monitors;
proprietary_config proprietary; proprietary_config proprietary;
dictionary *supported_resolutions; dictionary *supported_resolutions;
GtkListStore *list;
GtkListStore *list2;
char *failsafenVidia; char *failsafenVidia;
char *failsafeATI; char *failsafeATI;
int descreteOnly; int descreteOnly;
@ -217,6 +236,32 @@ typedef struct
} config; } 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 typedef struct
{ {
int main; int main;
@ -322,9 +367,9 @@ void on_terminal_more(GtkWidget *self, main_window *widgets);
void on_terminal_destroy(GtkWidget *self, main_window *widgets); void on_terminal_destroy(GtkWidget *self, main_window *widgets);
gboolean on_terminal_check_progress(main_window *widgets); gboolean on_terminal_check_progress(main_window *widgets);
void yon_terminal_start(main_window *widgets, char *usr_command); 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_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); void on_module_install_activate(GtkCellRendererToggle* self,gchar* path,main_window *widgets);
gboolean yon_filter_func(GtkTreeModel* model,GtkTreeIter* iter,main_window *widgets); gboolean yon_filter_func(GtkTreeModel* model,GtkTreeIter* iter,main_window *widgets);
void on_kernel_filter_changed(GtkWidget *self, 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 yon_monitor_parse(monitor_edit_window *window, char *string);
void on_monitor_configure(GtkWidget *self,monitor_data *window); void on_monitor_configure(GtkWidget *self,monitor_data *window);
void yon_monitor_view_update(); 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_proprietary_get_thread(GtkWidget *self,main_window *widgets);
void yon_monitor_view_dictionary_destroy(void *window); void yon_monitor_view_dictionary_destroy(void *window);
monitor_data *yon_monitor_new(main_window *widgets,int dull); 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); template_main_window *yon_main_window_complete(main_window *widgets);
void config_init(); 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_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 yon_proprietary_clear(main_window *widgets);
gboolean on_command_execute_success(GtkWidget *,gint status,main_window *widgets); gboolean on_command_execute_success(GtkWidget *,gint status,main_window *widgets);
void on_gapfix_changed(GtkWidget*self, 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); gboolean yon_proprietary_connect(main_window *widgets);
void on_app_chooser_open(GtkWidget *self, main_window *widgets); void on_app_chooser_open(GtkWidget *self, main_window *widgets);
gpointer yon_driver_info_launch(void *command); gpointer yon_driver_info_launch(void *command);
void on_command_cancel(GtkWidget *,main_window *widgets); void on_command_cancel(GtkWidget *,main_window *widgets);
gboolean yon_proprietary_set(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 #endif

@ -59,6 +59,8 @@
#define INSTALLED_LOW_LABEL _("installed") #define INSTALLED_LOW_LABEL _("installed")
#define PACKAGE_LABEL _("Package") #define PACKAGE_LABEL _("Package")
#define SUPPORTED_LABEL _("Supported Devices") #define SUPPORTED_LABEL _("Supported Devices")
#define MODULE_INFO_LABEL _("Module information")
#define PACKAGE_INFO_LABEL _("Package information")
#define MODULE_INSTALL_PROCESS_LABEL(target) yon_char_unite(_("Install module driver")," ",target,"...",NULL) #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) #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 ADD_LABEL _("Add monitor configuration")
#define SWITCH_LABEL _("Switch monitor") #define SWITCH_LABEL _("Switch monitor")
#define MORE_LABEL _("More") #define MORE_LABEL _("More")
#define LESS_LABEL _("Less")
#define PORT_EDIT_LABEL(target) yon_char_unite(_("Configuration: Monitor"),"(",target,")",NULL) #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?") #define HELP_TITLE_LABEL _("Would you like to read documentation in the Web?")

@ -0,0 +1,233 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 -->
<interface domain="ubl-settings-video">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-video.css -->
<object class="GtkBox" id="MainBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkCheckButton" id="ModuleInstalledCheck">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkCheckButton" id="PackageInstalledCheck">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="draw-indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkLabel" id="KernelLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Kernel</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkLabel" id="DriverLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Driver</property>
<property name="track-visited-links">False</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">7</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkLabel" id="DescriptionLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Description</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">8</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">9</property>
</packing>
</child>
<child>
<object class="GtkBox" id="DevicesBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="DevicesLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Devices</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">10</property>
</packing>
</child>
<style>
<class name="bottomborder"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</interface>

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<requires lib="webkit2gtk" version="2.28"/>
<object class="GtkWindow" id="MainWindow">
<property name="width-request">500</property>
<property name="height-request">350</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-video</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="WebKitWebView" type-func="webkit_web_view_get_type" id="HTMLView">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar" id="SettingsBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="show-close-button">True</property>
<child type="title">
<object class="GtkLabel" id="HeadLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Video adapter and display settings</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">32</property>
<property name="icon-name">com.ublinux.ubl-settings-video</property>
</object>
</child>
</object>
</child>
</object>
</interface>

@ -1,7 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.40.0 --> <!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-video"> <interface domain="ubl-settings-video">
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<requires lib="vte-2.91" version="0.76"/>
<!-- interface-css-provider-path ubl-settings-video.css --> <!-- interface-css-provider-path ubl-settings-video.css -->
<object class="GtkSpinner" id="DriversLoadingSpinner"> <object class="GtkSpinner" id="DriversLoadingSpinner">
<property name="visible">True</property> <property name="visible">True</property>
@ -21,6 +22,87 @@
<property name="valign">start</property> <property name="valign">start</property>
<property name="pixel-size">64</property> <property name="pixel-size">64</property>
</object> </object>
<object class="GtkFrame" id="TerminalMoreRevieler">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-top">5</property>
<property name="label-xalign">0</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="top-padding">5</property>
<property name="bottom-padding">5</property>
<property name="left-padding">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkBox" id="TerminalBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="VteTerminal" id="TerminalTerminal">
<property name="visible">True</property>
<property name="app-paintable">True</property>
<property name="can-focus">True</property>
<property name="cursor-blink-mode">off</property>
<property name="cursor-shape">underline</property>
<property name="encoding">UTF-8</property>
<property name="pointer-autohide">True</property>
<property name="scroll-on-keystroke">True</property>
<property name="scroll-on-output">False</property>
<style>
<class name="workingbg"/>
<class name="opacited"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrollbar" id="TerminalScroll">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="show-fill-level">True</property>
<property name="restrict-to-fill-level">False</property>
<property name="fill-level">1</property>
<property name="round-digits">2</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label_item">
<placeholder/>
</child>
</object>
<object class="GtkAdjustment" id="adjustment1">
<property name="upper">300</property>
<property name="step-increment">1</property>
<property name="page-increment">10</property>
</object>
<object class="GtkImage" id="image1"> <object class="GtkImage" id="image1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
@ -29,7 +111,7 @@
<object class="GtkImage" id="image10"> <object class="GtkImage" id="image10">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="icon-name">dialog-information-symbolic</property> <property name="icon-name">com.ublinux.libublsettingsui-gtk3.dropbox-symbolic</property>
</object> </object>
<object class="GtkImage" id="image2"> <object class="GtkImage" id="image2">
<property name="visible">True</property> <property name="visible">True</property>
@ -41,47 +123,15 @@
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.sync-symbolic</property> <property name="icon-name">com.ublinux.libublsettingsui-gtk3.sync-symbolic</property>
</object> </object>
<object class="GtkListStore" id="liststore1"> <object class="GtkImage" id="image4">
<columns> <property name="visible">True</property>
<!-- column-name is_installed --> <property name="can-focus">False</property>
<column type="gboolean"/> <property name="icon-name">com.ublinux.libublsettingsui-gtk3.database-symbolic</property>
<!-- column-name package_module -->
<column type="gchararray"/>
<!-- column-name package -->
<column type="gchararray"/>
<!-- column-name driver -->
<column type="gchararray"/>
<!-- column-name description -->
<column type="gchararray"/>
<!-- column-name devices -->
<column type="gchararray"/>
</columns>
</object> </object>
<object class="GtkListStore" id="liststore6"> <object class="GtkImage" id="image5">
<columns> <property name="visible">True</property>
<!-- column-name module_installed --> <property name="can-focus">False</property>
<column type="gboolean"/> <property name="icon-name">com.ublinux.libublsettingsui-gtk3.lookup-symbolic</property>
<!-- column-name package_installed -->
<column type="gboolean"/>
<!-- column-name package_module -->
<column type="gchararray"/>
<!-- column-name kernel_ver -->
<column type="gchararray"/>
<!-- column-name driver_name -->
<column type="gchararray"/>
<!-- column-name description -->
<column type="gchararray"/>
<!-- column-name devices -->
<column type="gchararray"/>
<!-- column-name Module -->
<column type="gchararray"/>
<!-- column-name Package -->
<column type="gchararray"/>
<!-- column-name ModuleSensitive -->
<column type="gboolean"/>
<!-- column-name PackageSensitive -->
<column type="gboolean"/>
</columns>
</object> </object>
<object class="GtkBox" id="BoxMain"> <object class="GtkBox" id="BoxMain">
<property name="visible">True</property> <property name="visible">True</property>
@ -869,12 +919,30 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="InfoButton"> <object class="GtkButton" id="SupportedDevicesButton">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Supported Devices</property>
<property name="image">image4</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="AboutModuleButton">
<property name="visible">True</property> <property name="visible">True</property>
<property name="sensitive">False</property> <property name="sensitive">False</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="receives-default">True</property> <property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Driver information</property> <property name="tooltip-text" translatable="yes">Module information</property>
<property name="image">image10</property> <property name="image">image10</property>
<style> <style>
<class name="thin"/> <class name="thin"/>
@ -886,6 +954,24 @@
<property name="position">2</property> <property name="position">2</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkButton" id="AboutPackageButton">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Package information</property>
<property name="image">image5</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -897,25 +983,92 @@
<object class="GtkOverlay" id="DriversLoadingOverlay"> <object class="GtkOverlay" id="DriversLoadingOverlay">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<child>
<object class="GtkBox" id="TerminalMoveTargetBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox" id="TerminalMoveBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-start">3</property>
<property name="margin-end">3</property>
<property name="spacing">5</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkTreeView" id="TopTree"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">False</property>
<property name="model">liststore1</property> <property name="label" translatable="yes">Installed</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child> <child>
<object class="GtkTreeViewColumn"> <object class="GtkBox" id="InstalledBox">
<property name="sizing">fixed</property> <property name="visible">True</property>
<property name="fixed-width">160</property> <property name="can-focus">False</property>
<property name="title" translatable="yes">Installed</property> <property name="spacing">5</property>
<child>
<object class="GtkLabel" id="InstalledModuleLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Module</property>
<property name="xalign">0</property>
</object> </object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child> </child>
<child> <child>
<object class="GtkTreeViewColumn"/> <object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="InstalledPackageLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Package</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child> </child>
</object> </object>
<packing> <packing>
@ -925,111 +1078,270 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkScrolledWindow"> <object class="GtkSeparator">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">False</property>
<property name="hscrollbar-policy">external</property> </object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child> <child>
<object class="GtkTreeView" id="DriversTree"> <object class="GtkLabel" id="KernelLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">False</property>
<property name="model">liststore6</property> <property name="label" translatable="yes">Kernel</property>
<property name="search-column">1</property> <property name="xalign">0</property>
<property name="enable-grid-lines">both</property> <property name="yalign">1</property>
<property name="enable-tree-lines">True</property> </object>
<property name="tooltip-column">4</property> <packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child> <child>
<object class="GtkTreeViewColumn"> <object class="GtkSeparator">
<property name="sizing">fixed</property> <property name="visible">True</property>
<property name="fixed-width">80</property> <property name="can-focus">False</property>
<property name="title" translatable="yes">Module</property> </object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
<child> <child>
<object class="GtkCellRendererToggle" id="ModuleRenderer"/> <object class="GtkLabel" id="DriverLabel">
<attributes> <property name="visible">True</property>
<attribute name="sensitive">9</attribute> <property name="can-focus">False</property>
<attribute name="visible">9</attribute> <property name="label" translatable="yes">Driver</property>
<attribute name="active">0</attribute> <property name="xalign">0</property>
</attributes> <property name="yalign">1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
</packing>
</child> </child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object> </object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">5</property>
</packing>
</child> </child>
<child> <child>
<object class="GtkTreeViewColumn" id="InstalledColumn"> <object class="GtkLabel" id="DescriptionLabel">
<property name="fixed-width">80</property> <property name="visible">True</property>
<property name="title" translatable="yes">Package</property> <property name="can-focus">False</property>
<property name="sort-order">descending</property> <property name="label" translatable="yes">Description</property>
<property name="sort-column-id">0</property> <property name="xalign">0</property>
<property name="yalign">1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
<child> <child>
<object class="GtkCellRendererToggle" id="PackageRenderer"/> <object class="GtkSeparator">
<attributes> <property name="visible">True</property>
<attribute name="sensitive">10</attribute> <property name="can-focus">False</property>
<attribute name="visible">10</attribute> </object>
<attribute name="active">1</attribute> <packing>
</attributes> <property name="expand">False</property>
<property name="fill">True</property>
<property name="position">7</property>
</packing>
</child> </child>
<child>
<object class="GtkLabel" id="DevicesLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Devices</property>
<property name="xalign">0</property>
<property name="yalign">1</property>
</object> </object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">8</property>
</packing>
</child> </child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child> <child>
<object class="GtkTreeViewColumn"> <object class="GtkViewport">
<property name="title" translatable="yes">Kernel</property> <property name="visible">True</property>
<property name="can-focus">False</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkListBox" id="DriversList">
<attributes> <property name="visible">True</property>
<attribute name="text">2</attribute> <property name="can-focus">False</property>
</attributes> <style>
<class name="treeview"/>
</style>
</object>
</child> </child>
</object> </object>
</child> </child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child> <child>
<object class="GtkTreeViewColumn" id="DriverColumn"> <object class="GtkPaned" id="TerminalPaned">
<property name="title" translatable="yes">Driver</property> <property name="can-focus">True</property>
<property name="orientation">vertical</property>
<property name="position">250</property>
<property name="position-set">True</property>
<property name="wide-handle">True</property>
<child>
<placeholder/>
</child>
<child> <child>
<object class="GtkCellRendererText"/> <placeholder/>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child> </child>
</object> </object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child> </child>
<child> <child>
<object class="GtkTreeViewColumn" id="DescriptionColumn"> <object class="GtkRevealer" id="TerminalRevealer">
<property name="title" translatable="yes">Description</property> <property name="visible">True</property>
<property name="app-paintable">True</property>
<property name="can-focus">False</property>
<property name="reveal-child">True</property>
<child> <child>
<object class="GtkCellRendererText"> <object class="GtkFrame" id="TerminalFrame">
<property name="wrap-mode">word</property> <property name="visible">True</property>
<property name="wrap-width">150</property> <property name="can-focus">False</property>
<property name="label-xalign">0</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-bottom">5</property>
<property name="spacing">5</property>
<child>
<object class="GtkProgressBar" id="TerminalInfoLabel">
<property name="visible">True</property>
<property name="app-paintable">True</property>
<property name="can-focus">False</property>
<property name="valign">center</property>
</object> </object>
<attributes> <packing>
<attribute name="text">4</attribute> <property name="expand">True</property>
</attributes> <property name="fill">True</property>
<property name="position">0</property>
</packing>
</child> </child>
<child>
<object class="GtkButton" id="TerminalCancelButton">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object> </object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child> </child>
<child> <child>
<object class="GtkTreeViewColumn" id="SupportedColumn"> <object class="GtkButton" id="TerminalMoreButton">
<property name="sizing">autosize</property> <property name="label" translatable="yes">More</property>
<property name="title" translatable="yes">Supported Devices</property> <property name="visible">True</property>
<child> <property name="can-focus">True</property>
<object class="GtkCellRendererText"> <property name="can-default">True</property>
<property name="wrap-mode">word</property> <property name="receives-default">True</property>
<property name="wrap-width">220</property> </object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object> </object>
<attributes> <packing>
<attribute name="text">5</attribute> <property name="expand">False</property>
</attributes> <property name="fill">True</property>
<property name="position">1</property>
</packing>
</child> </child>
</object> </object>
</child> </child>
</object> </object>
</child> </child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<style> <style>
<class name="thin"/> <class name="workingbg"/>
</style>
</object>
</child>
<style>
<class name="opacited"/>
<class name="workingbg"/>
<class name="borders"/>
</style> </style>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">1</property> <property name="pack-type">end</property>
<property name="position">3</property>
</packing> </packing>
</child> </child>
</object> </object>
@ -1260,4 +1572,46 @@
<widget name="label3"/> <widget name="label3"/>
</widgets> </widgets>
</object> </object>
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name is_installed -->
<column type="gboolean"/>
<!-- column-name package_module -->
<column type="gchararray"/>
<!-- column-name package -->
<column type="gchararray"/>
<!-- column-name driver -->
<column type="gchararray"/>
<!-- column-name description -->
<column type="gchararray"/>
<!-- column-name devices -->
<column type="gchararray"/>
</columns>
</object>
<object class="GtkListStore" id="liststore6">
<columns>
<!-- column-name module_installed -->
<column type="gboolean"/>
<!-- column-name package_installed -->
<column type="gboolean"/>
<!-- column-name package_module -->
<column type="gchararray"/>
<!-- column-name kernel_ver -->
<column type="gchararray"/>
<!-- column-name driver_name -->
<column type="gchararray"/>
<!-- column-name description -->
<column type="gchararray"/>
<!-- column-name devices -->
<column type="gchararray"/>
<!-- column-name Module -->
<column type="gchararray"/>
<!-- column-name Package -->
<column type="gchararray"/>
<!-- column-name ModuleSensitive -->
<column type="gboolean"/>
<!-- column-name PackageSensitive -->
<column type="gboolean"/>
</columns>
</object>
</interface> </interface>

Loading…
Cancel
Save