diff --git a/libublsettingsui-gtk3-about.glade b/libublsettingsui-gtk3-about.glade
index b2e2765..6c1156f 100644
--- a/libublsettingsui-gtk3-about.glade
+++ b/libublsettingsui-gtk3-about.glade
@@ -12,7 +12,7 @@
True
libublsettingsui-gtk3
1.1
- Copyright © 2022 - 2023, UBSoft LLC
+ Copyright © 2022 - 2025, UBSoft LLC
TEMPLATE Manager
https://ublinux.ru/
Project Home Page
diff --git a/libublsettingsui-gtk3-app-chooser.glade b/libublsettingsui-gtk3-app-chooser.glade
index db0a67c..bf8e48b 100644
--- a/libublsettingsui-gtk3-app-chooser.glade
+++ b/libublsettingsui-gtk3-app-chooser.glade
@@ -1,7 +1,8 @@
-
-
+
+
+
diff --git a/libublsettingsui-gtk3.pot b/libublsettingsui-gtk3.pot
index f9bfecc..d4e06d4 100644
--- a/libublsettingsui-gtk3.pot
+++ b/libublsettingsui-gtk3.pot
@@ -17,358 +17,362 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: source/libublsettingsui-gtk3.h:340
+#: source/libublsettingsui-gtk3.h:376
msgid "Version:"
msgstr ""
-#: source/libublsettingsui-gtk3.h:341
+#: source/libublsettingsui-gtk3.h:377
msgid " version:"
msgstr ""
-#: source/libublsettingsui-gtk3.h:342
+#: source/libublsettingsui-gtk3.h:378
msgid "Usage:"
msgstr ""
-#: source/libublsettingsui-gtk3.h:342
+#: source/libublsettingsui-gtk3.h:378
msgid "[OPTIONS]"
msgstr ""
-#: source/libublsettingsui-gtk3.h:343
+#: source/libublsettingsui-gtk3.h:379
msgid "Options:"
msgstr ""
-#: source/libublsettingsui-gtk3.h:344
+#: source/libublsettingsui-gtk3.h:380
msgid "Show this help"
msgstr ""
-#: source/libublsettingsui-gtk3.h:345
+#: source/libublsettingsui-gtk3.h:381
msgid "Show package version"
msgstr ""
-#: source/libublsettingsui-gtk3.h:346
+#: source/libublsettingsui-gtk3.h:382
msgid "Lock this help menu"
msgstr ""
-#: source/libublsettingsui-gtk3.h:347
+#: source/libublsettingsui-gtk3.h:383
msgid "Lock configuration saving"
msgstr ""
-#: source/libublsettingsui-gtk3.h:348
+#: source/libublsettingsui-gtk3.h:384
msgid "Lock local configration saving"
msgstr ""
-#: source/libublsettingsui-gtk3.h:349
+#: source/libublsettingsui-gtk3.h:385
msgid "Lock global configration saving"
msgstr ""
-#: source/libublsettingsui-gtk3.h:350
+#: source/libublsettingsui-gtk3.h:386
msgid "Lock global configration loading"
msgstr ""
-#: source/libublsettingsui-gtk3.h:351
+#: source/libublsettingsui-gtk3.h:387
msgid "Reset application settings"
msgstr ""
-#: source/libublsettingsui-gtk3.h:357 source/libublsettingsui-gtk3.h:365
+#: source/libublsettingsui-gtk3.h:393 source/libublsettingsui-gtk3.h:401
msgid "About"
msgstr ""
-#: source/libublsettingsui-gtk3.h:359
+#: source/libublsettingsui-gtk3.h:395
msgid "Operation succeeded"
msgstr ""
-#: source/libublsettingsui-gtk3.h:360
+#: source/libublsettingsui-gtk3.h:396
msgid "Operation failed"
msgstr ""
-#: source/libublsettingsui-gtk3.h:361
+#: source/libublsettingsui-gtk3.h:397
msgid ""
"Warning! Application was launched without root - root-dependent actions are "
"locked"
msgstr ""
-#: source/libublsettingsui-gtk3.h:363 source/libublsettingsui-gtk3.h:364
+#: source/libublsettingsui-gtk3.h:399 source/libublsettingsui-gtk3.h:400
msgid "Default"
msgstr ""
-#: source/libublsettingsui-gtk3.h:366
+#: source/libublsettingsui-gtk3.h:402
msgid "Documentation"
msgstr ""
-#: source/libublsettingsui-gtk3.h:368
+#: source/libublsettingsui-gtk3.h:404
msgid "Save to specific file"
msgstr ""
-#: source/libublsettingsui-gtk3.h:369
+#: source/libublsettingsui-gtk3.h:405
msgid "Save to local configuration"
msgstr ""
-#: source/libublsettingsui-gtk3.h:370
+#: source/libublsettingsui-gtk3.h:406
msgid "Save to global configuration"
msgstr ""
-#: source/libublsettingsui-gtk3.h:371
+#: source/libublsettingsui-gtk3.h:407
msgid "Save configuration"
msgstr ""
-#: source/libublsettingsui-gtk3.h:372
+#: source/libublsettingsui-gtk3.h:408
msgid "Save"
msgstr ""
-#: source/libublsettingsui-gtk3.h:373
+#: source/libublsettingsui-gtk3.h:409
msgid "Saving..."
msgstr ""
-#: source/libublsettingsui-gtk3.h:375
+#: source/libublsettingsui-gtk3.h:411
msgid "Load from specific file"
msgstr ""
-#: source/libublsettingsui-gtk3.h:376
+#: source/libublsettingsui-gtk3.h:412
msgid "Load local configuration"
msgstr ""
-#: source/libublsettingsui-gtk3.h:377
+#: source/libublsettingsui-gtk3.h:413
msgid "Load global configuration"
msgstr ""
-#: source/libublsettingsui-gtk3.h:378
+#: source/libublsettingsui-gtk3.h:414
msgid "Load"
msgstr ""
-#: source/libublsettingsui-gtk3.h:379
+#: source/libublsettingsui-gtk3.h:415
msgid "Load file"
msgstr ""
-#: source/libublsettingsui-gtk3.h:381
+#: source/libublsettingsui-gtk3.h:417
msgid "Cancel"
msgstr ""
-#: source/libublsettingsui-gtk3.h:382
+#: source/libublsettingsui-gtk3.h:418
msgid "Accept"
msgstr ""
-#: source/libublsettingsui-gtk3.h:383
+#: source/libublsettingsui-gtk3.h:419
msgid "Open"
msgstr ""
-#: source/libublsettingsui-gtk3.h:384
+#: source/libublsettingsui-gtk3.h:420
msgid "Create directory"
msgstr ""
-#: source/libublsettingsui-gtk3.h:385
+#: source/libublsettingsui-gtk3.h:421
msgid "Select directory"
msgstr ""
-#: source/libublsettingsui-gtk3.h:387
+#: source/libublsettingsui-gtk3.h:423
msgid "Would you like to read documentation in the Web?"
msgstr ""
-#: source/libublsettingsui-gtk3.h:388
+#: source/libublsettingsui-gtk3.h:424
msgid ""
"You will be redirected to documentation website where documentation is\n"
"translated and supported by community."
msgstr ""
-#: source/libublsettingsui-gtk3.h:389
+#: source/libublsettingsui-gtk3.h:425
msgid "Always redirect to online documentation"
msgstr ""
-#: source/libublsettingsui-gtk3.h:390
+#: source/libublsettingsui-gtk3.h:426
msgid "Open documentation"
msgstr ""
-#: source/libublsettingsui-gtk3.h:391
+#: source/libublsettingsui-gtk3.h:427
msgid "Project Home Page"
msgstr ""
-#: source/libublsettingsui-gtk3.h:392
+#: source/libublsettingsui-gtk3.h:428
msgid "Nothing were chosen"
msgstr ""
-#: source/libublsettingsui-gtk3.h:393
-msgid "Copyright © 2022 - 2023, UBSoft LLC"
+#: source/libublsettingsui-gtk3.h:429
+msgid "Copyright © 2022 - 2025, UBSoft LLC"
msgstr ""
-#: source/libublsettingsui-gtk3.h:396
+#: source/libublsettingsui-gtk3.h:432
msgid "Global configuration loading succeeded."
msgstr ""
-#: source/libublsettingsui-gtk3.h:397
+#: source/libublsettingsui-gtk3.h:433
msgid "Local configuration loading succeeded."
msgstr ""
-#: source/libublsettingsui-gtk3.h:398
+#: source/libublsettingsui-gtk3.h:434
msgid "Config loading failed"
msgstr ""
-#: source/libublsettingsui-gtk3.h:400
+#: source/libublsettingsui-gtk3.h:436
msgid "Local and global configuration saving succeeded."
msgstr ""
-#: source/libublsettingsui-gtk3.h:401
+#: source/libublsettingsui-gtk3.h:437
msgid "Global configuration saving succeeded."
msgstr ""
-#: source/libublsettingsui-gtk3.h:402
+#: source/libublsettingsui-gtk3.h:438
msgid "Local configuration saving succeeded."
msgstr ""
-#: source/libublsettingsui-gtk3.h:403
+#: source/libublsettingsui-gtk3.h:439
msgid "Configuration saving succeeded."
msgstr ""
-#: source/libublsettingsui-gtk3.h:405
+#: source/libublsettingsui-gtk3.h:441
msgid "Parameter"
msgstr ""
-#: source/libublsettingsui-gtk3.h:406
+#: source/libublsettingsui-gtk3.h:442
msgid "Old value"
msgstr ""
-#: source/libublsettingsui-gtk3.h:407
+#: source/libublsettingsui-gtk3.h:443
msgid "New value"
msgstr ""
-#: source/libublsettingsui-gtk3.h:408
+#: source/libublsettingsui-gtk3.h:444
msgid ""
"Value\n"
"(Old/New)"
msgstr ""
-#: source/libublsettingsui-gtk3.h:410
+#: source/libublsettingsui-gtk3.h:446
msgid "Nothing to save"
msgstr ""
-#: source/libublsettingsui-gtk3.h:411
+#: source/libublsettingsui-gtk3.h:447
msgid "Saving into local configuration"
msgstr ""
-#: source/libublsettingsui-gtk3.h:412
+#: source/libublsettingsui-gtk3.h:448
msgid "Saving into global configuration"
msgstr ""
-#: source/libublsettingsui-gtk3.h:413
+#: source/libublsettingsui-gtk3.h:449
msgid "Saving into global and local configuration"
msgstr ""
-#: source/libublsettingsui-gtk3.h:414
+#: source/libublsettingsui-gtk3.h:450
msgid "Saving into custom configuration at"
msgstr ""
-#: source/libublsettingsui-gtk3.h:419
+#: source/libublsettingsui-gtk3.h:455
msgid "Full saving mode"
msgstr ""
-#: source/libublsettingsui-gtk3.h:420
+#: source/libublsettingsui-gtk3.h:456
msgid "Saving into module"
msgstr ""
-#: source/libublsettingsui-gtk3.h:421
+#: source/libublsettingsui-gtk3.h:457
msgid "Sandbox mode"
msgstr ""
-#: source/libublsettingsui-gtk3.h:422
+#: source/libublsettingsui-gtk3.h:458
msgid "Sandbox with profile saving"
msgstr ""
-#: source/libublsettingsui-gtk3.h:423
+#: source/libublsettingsui-gtk3.h:459
msgid "HDD sandbox"
msgstr ""
-#: source/libublsettingsui-gtk3.h:424
+#: source/libublsettingsui-gtk3.h:460
msgid "HDD sandbox with profile saving"
msgstr ""
-#: source/libublsettingsui-gtk3.h:425
+#: source/libublsettingsui-gtk3.h:461
msgid "New configuration file creation failed"
msgstr ""
-#: source/libublsettingsui-gtk3.h:426
+#: source/libublsettingsui-gtk3.h:462
msgid "Upgrade to root"
msgstr ""
-#: source/libublsettingsui-gtk3.h:427
+#: source/libublsettingsui-gtk3.h:463
msgid "Settings"
msgstr ""
-#: source/libublsettingsui-gtk3.h:429
+#: source/libublsettingsui-gtk3.h:465
msgid "Application settigs"
msgstr ""
-#: source/libublsettingsui-gtk3.h:431
+#: source/libublsettingsui-gtk3.h:467
msgid "Invalid email adress"
msgstr ""
-#: source/libublsettingsui-gtk3.h:432
+#: source/libublsettingsui-gtk3.h:468
msgid "Invalid path"
msgstr ""
-#: source/libublsettingsui-gtk3.h:434
+#: source/libublsettingsui-gtk3.h:470
msgid "Choose path"
msgstr ""
-#: source/libublsettingsui-gtk3.h:437
+#: source/libublsettingsui-gtk3.h:471
+msgid "Choose application"
+msgstr ""
+
+#: source/libublsettingsui-gtk3.h:474
msgid "Choose directory instead of file"
msgstr ""
-#: source/libublsettingsui-gtk3.h:439
+#: source/libublsettingsui-gtk3.h:476
msgid "Enabled"
msgstr ""
-#: source/libublsettingsui-gtk3.h:440
+#: source/libublsettingsui-gtk3.h:477
msgid "Disabled"
msgstr ""
-#: source/libublsettingsui-gtk3.h:441
+#: source/libublsettingsui-gtk3.h:478
msgid "Active"
msgstr ""
-#: source/libublsettingsui-gtk3.h:442
+#: source/libublsettingsui-gtk3.h:479
msgid "Inactive"
msgstr ""
-#: source/libublsettingsui-gtk3.h:444
+#: source/libublsettingsui-gtk3.h:481
msgid "Active:"
msgstr ""
-#: source/libublsettingsui-gtk3.h:445
+#: source/libublsettingsui-gtk3.h:482
msgid "Enabled:"
msgstr ""
-#: source/libublsettingsui-gtk3.h:446
+#: source/libublsettingsui-gtk3.h:483
msgid "Start"
msgstr ""
-#: source/libublsettingsui-gtk3.h:447
+#: source/libublsettingsui-gtk3.h:484
msgid "Stop"
msgstr ""
-#: source/libublsettingsui-gtk3.h:448
+#: source/libublsettingsui-gtk3.h:485
msgid "Restart"
msgstr ""
-#: source/libublsettingsui-gtk3.h:449
+#: source/libublsettingsui-gtk3.h:486
msgid "Enable"
msgstr ""
-#: source/libublsettingsui-gtk3.h:450
+#: source/libublsettingsui-gtk3.h:487
msgid "Disable"
msgstr ""
-#: source/libublsettingsui-gtk3.h:452
+#: source/libublsettingsui-gtk3.h:489
#, c-format
msgid "\"%s\" service configuration"
msgstr ""
-#: source/libublsettingsui-gtk3.h:453
+#: source/libublsettingsui-gtk3.h:490
#, c-format
msgid "\"%s\" service:"
msgstr ""
-#: source/libublsettingsui-gtk3.h:454
+#: source/libublsettingsui-gtk3.h:491
msgid "service is active"
msgstr ""
-#: source/libublsettingsui-gtk3.h:455
+#: source/libublsettingsui-gtk3.h:492
msgid "service is inactive"
msgstr ""
diff --git a/libublsettingsui-gtk3_ru.po b/libublsettingsui-gtk3_ru.po
index 28eb3fd..67811f7 100644
--- a/libublsettingsui-gtk3_ru.po
+++ b/libublsettingsui-gtk3_ru.po
@@ -17,71 +17,71 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: source/libublsettingsui-gtk3.h:340
+#: source/libublsettingsui-gtk3.h:376
msgid "Version:"
msgstr "Версия:"
-#: source/libublsettingsui-gtk3.h:341
+#: source/libublsettingsui-gtk3.h:377
msgid " version:"
msgstr " версия:"
-#: source/libublsettingsui-gtk3.h:342
+#: source/libublsettingsui-gtk3.h:378
msgid "Usage:"
msgstr "Использование:"
-#: source/libublsettingsui-gtk3.h:342
+#: source/libublsettingsui-gtk3.h:378
msgid "[OPTIONS]"
msgstr "[АРГУМЕНТЫ]"
-#: source/libublsettingsui-gtk3.h:343
+#: source/libublsettingsui-gtk3.h:379
msgid "Options:"
msgstr "Аргументы:"
-#: source/libublsettingsui-gtk3.h:344
+#: source/libublsettingsui-gtk3.h:380
msgid "Show this help"
msgstr "Показать эту подсказку"
-#: source/libublsettingsui-gtk3.h:345
+#: source/libublsettingsui-gtk3.h:381
msgid "Show package version"
msgstr "Показать версию пакета"
-#: source/libublsettingsui-gtk3.h:346
+#: source/libublsettingsui-gtk3.h:382
msgid "Lock this help menu"
msgstr "Заблокировать это меню помощи"
-#: source/libublsettingsui-gtk3.h:347
+#: source/libublsettingsui-gtk3.h:383
msgid "Lock configuration saving"
msgstr "Успешно записана локальная конфигурация"
-#: source/libublsettingsui-gtk3.h:348
+#: source/libublsettingsui-gtk3.h:384
msgid "Lock local configration saving"
msgstr "Заблокировать сохранение локальной конфигурации"
-#: source/libublsettingsui-gtk3.h:349
+#: source/libublsettingsui-gtk3.h:385
msgid "Lock global configration saving"
msgstr "Заблокировать сохранение глобальной конфигурации"
-#: source/libublsettingsui-gtk3.h:350
+#: source/libublsettingsui-gtk3.h:386
msgid "Lock global configration loading"
msgstr "Заблокировать загрузку глобальную конфигурацию"
-#: source/libublsettingsui-gtk3.h:351
+#: source/libublsettingsui-gtk3.h:387
msgid "Reset application settings"
msgstr "Сбросить настройки программы"
-#: source/libublsettingsui-gtk3.h:357 source/libublsettingsui-gtk3.h:365
+#: source/libublsettingsui-gtk3.h:393 source/libublsettingsui-gtk3.h:401
msgid "About"
msgstr "О программе"
-#: source/libublsettingsui-gtk3.h:359
+#: source/libublsettingsui-gtk3.h:395
msgid "Operation succeeded"
msgstr "Операция завершена"
-#: source/libublsettingsui-gtk3.h:360
+#: source/libublsettingsui-gtk3.h:396
msgid "Operation failed"
msgstr "Операция завершена с ошибкой"
-#: source/libublsettingsui-gtk3.h:361
+#: source/libublsettingsui-gtk3.h:397
msgid ""
"Warning! Application was launched without root - root-dependent actions are "
"locked"
@@ -89,83 +89,83 @@ msgstr ""
"Внимание! Приложение было запущено без прав суперпользователя - действия, "
"требующие их наличия заблокированы"
-#: source/libublsettingsui-gtk3.h:363 source/libublsettingsui-gtk3.h:364
+#: source/libublsettingsui-gtk3.h:399 source/libublsettingsui-gtk3.h:400
msgid "Default"
msgstr "По умолчанию"
-#: source/libublsettingsui-gtk3.h:366
+#: source/libublsettingsui-gtk3.h:402
msgid "Documentation"
msgstr "Справка"
-#: source/libublsettingsui-gtk3.h:368
+#: source/libublsettingsui-gtk3.h:404
msgid "Save to specific file"
msgstr "Сохранить в файл"
-#: source/libublsettingsui-gtk3.h:369
+#: source/libublsettingsui-gtk3.h:405
msgid "Save to local configuration"
msgstr "Сохранить в локальную конфигурацию"
-#: source/libublsettingsui-gtk3.h:370
+#: source/libublsettingsui-gtk3.h:406
msgid "Save to global configuration"
msgstr "Сохранить в глобальную конфигурацию"
-#: source/libublsettingsui-gtk3.h:371
+#: source/libublsettingsui-gtk3.h:407
msgid "Save configuration"
msgstr "Сохранить конфигурацию"
-#: source/libublsettingsui-gtk3.h:372
+#: source/libublsettingsui-gtk3.h:408
msgid "Save"
msgstr "Сохранить"
-#: source/libublsettingsui-gtk3.h:373
+#: source/libublsettingsui-gtk3.h:409
msgid "Saving..."
msgstr "Сохранение..."
-#: source/libublsettingsui-gtk3.h:375
+#: source/libublsettingsui-gtk3.h:411
msgid "Load from specific file"
msgstr "Загрузить из файла"
-#: source/libublsettingsui-gtk3.h:376
+#: source/libublsettingsui-gtk3.h:412
msgid "Load local configuration"
msgstr "Загрузить локальную конфигурацию"
-#: source/libublsettingsui-gtk3.h:377
+#: source/libublsettingsui-gtk3.h:413
msgid "Load global configuration"
msgstr "Загрузить глобальную конфигурацию"
-#: source/libublsettingsui-gtk3.h:378
+#: source/libublsettingsui-gtk3.h:414
msgid "Load"
msgstr "Загрузить"
-#: source/libublsettingsui-gtk3.h:379
+#: source/libublsettingsui-gtk3.h:415
msgid "Load file"
msgstr "Загрузить файл"
-#: source/libublsettingsui-gtk3.h:381
+#: source/libublsettingsui-gtk3.h:417
msgid "Cancel"
msgstr "Отмена"
-#: source/libublsettingsui-gtk3.h:382
+#: source/libublsettingsui-gtk3.h:418
msgid "Accept"
msgstr "Принять"
-#: source/libublsettingsui-gtk3.h:383
+#: source/libublsettingsui-gtk3.h:419
msgid "Open"
msgstr "Открыть"
-#: source/libublsettingsui-gtk3.h:384
+#: source/libublsettingsui-gtk3.h:420
msgid "Create directory"
msgstr "Создать файл"
-#: source/libublsettingsui-gtk3.h:385
+#: source/libublsettingsui-gtk3.h:421
msgid "Select directory"
msgstr "Выбрать папку"
-#: source/libublsettingsui-gtk3.h:387
+#: source/libublsettingsui-gtk3.h:423
msgid "Would you like to read documentation in the Web?"
msgstr "Вы хотите прочитать справку в Сети?"
-#: source/libublsettingsui-gtk3.h:388
+#: source/libublsettingsui-gtk3.h:424
msgid ""
"You will be redirected to documentation website where documentation is\n"
"translated and supported by community."
@@ -173,67 +173,68 @@ msgstr ""
"Вы будете перенаправлены на сайт с документацией, где страницы помощи\n"
"переводятся и поддерживаются сообществом."
-#: source/libublsettingsui-gtk3.h:389
+#: source/libublsettingsui-gtk3.h:425
msgid "Always redirect to online documentation"
msgstr "Всегда перенаправлять"
-#: source/libublsettingsui-gtk3.h:390
+#: source/libublsettingsui-gtk3.h:426
msgid "Open documentation"
msgstr "Прочитать справку"
-#: source/libublsettingsui-gtk3.h:391
+#: source/libublsettingsui-gtk3.h:427
msgid "Project Home Page"
msgstr "Домашняя страница проекта"
-#: source/libublsettingsui-gtk3.h:392
+#: source/libublsettingsui-gtk3.h:428
msgid "Nothing were chosen"
msgstr "Ничего не было выбрано"
-#: source/libublsettingsui-gtk3.h:393
-msgid "Copyright © 2022 - 2023, UBSoft LLC"
-msgstr "Copyright © 2022 - 2023, ООО «Юбисофт»"
+#: source/libublsettingsui-gtk3.h:429
+#, fuzzy
+msgid "Copyright © 2022 - 2025, UBSoft LLC"
+msgstr "Copyright © 2022 - 2025, ООО «Юбисофт»"
-#: source/libublsettingsui-gtk3.h:396
+#: source/libublsettingsui-gtk3.h:432
msgid "Global configuration loading succeeded."
msgstr "Успешно загружена глобальная конфигурация"
-#: source/libublsettingsui-gtk3.h:397
+#: source/libublsettingsui-gtk3.h:433
msgid "Local configuration loading succeeded."
msgstr "Успешно загружена локальная конфигурация"
-#: source/libublsettingsui-gtk3.h:398
+#: source/libublsettingsui-gtk3.h:434
msgid "Config loading failed"
msgstr "Ошибка загрузки конфига"
-#: source/libublsettingsui-gtk3.h:400
+#: source/libublsettingsui-gtk3.h:436
msgid "Local and global configuration saving succeeded."
msgstr "Успешно записаны локальная и глобальная конфигурация"
-#: source/libublsettingsui-gtk3.h:401
+#: source/libublsettingsui-gtk3.h:437
msgid "Global configuration saving succeeded."
msgstr "Успешно записана глобальная конфигурация"
-#: source/libublsettingsui-gtk3.h:402
+#: source/libublsettingsui-gtk3.h:438
msgid "Local configuration saving succeeded."
msgstr "Успешно записана локальная конфигурация"
-#: source/libublsettingsui-gtk3.h:403
+#: source/libublsettingsui-gtk3.h:439
msgid "Configuration saving succeeded."
msgstr "Успешно записана конфигурация"
-#: source/libublsettingsui-gtk3.h:405
+#: source/libublsettingsui-gtk3.h:441
msgid "Parameter"
msgstr "Параметр"
-#: source/libublsettingsui-gtk3.h:406
+#: source/libublsettingsui-gtk3.h:442
msgid "Old value"
msgstr "Старое значение"
-#: source/libublsettingsui-gtk3.h:407
+#: source/libublsettingsui-gtk3.h:443
msgid "New value"
msgstr "Новое значение"
-#: source/libublsettingsui-gtk3.h:408
+#: source/libublsettingsui-gtk3.h:444
msgid ""
"Value\n"
"(Old/New)"
@@ -241,139 +242,144 @@ msgstr ""
"Значение\n"
"(Старое/Новое)"
-#: source/libublsettingsui-gtk3.h:410
+#: source/libublsettingsui-gtk3.h:446
msgid "Nothing to save"
msgstr "Нечего сохранять"
-#: source/libublsettingsui-gtk3.h:411
+#: source/libublsettingsui-gtk3.h:447
msgid "Saving into local configuration"
msgstr "Сохранение в локальный конфигурационный файл"
-#: source/libublsettingsui-gtk3.h:412
+#: source/libublsettingsui-gtk3.h:448
msgid "Saving into global configuration"
msgstr "Сохранение в глобальный конфигурационный файл"
-#: source/libublsettingsui-gtk3.h:413
+#: source/libublsettingsui-gtk3.h:449
msgid "Saving into global and local configuration"
msgstr "Сохранение в глобальный и локальный конфигурационный файл"
-#: source/libublsettingsui-gtk3.h:414
+#: source/libublsettingsui-gtk3.h:450
msgid "Saving into custom configuration at"
msgstr "Сохранение в конфигурационный файл по пути"
-#: source/libublsettingsui-gtk3.h:419
+#: source/libublsettingsui-gtk3.h:455
msgid "Full saving mode"
msgstr "Полное сохранение"
-#: source/libublsettingsui-gtk3.h:420
+#: source/libublsettingsui-gtk3.h:456
msgid "Saving into module"
msgstr "Сохранение в модуль"
-#: source/libublsettingsui-gtk3.h:421
+#: source/libublsettingsui-gtk3.h:457
msgid "Sandbox mode"
msgstr "Полная песочница в ОЗУ"
-#: source/libublsettingsui-gtk3.h:422
+#: source/libublsettingsui-gtk3.h:458
msgid "Sandbox with profile saving"
msgstr "Песочница с сохранением профиля пользователя"
-#: source/libublsettingsui-gtk3.h:423
+#: source/libublsettingsui-gtk3.h:459
msgid "HDD sandbox"
msgstr "Полная песочница на HDD"
-#: source/libublsettingsui-gtk3.h:424
+#: source/libublsettingsui-gtk3.h:460
msgid "HDD sandbox with profile saving"
msgstr "Полная песочница на HDD с сохранением профиля пользователя"
-#: source/libublsettingsui-gtk3.h:425
+#: source/libublsettingsui-gtk3.h:461
msgid "New configuration file creation failed"
msgstr "Ошибка создания нового файла конфигурации"
-#: source/libublsettingsui-gtk3.h:426
+#: source/libublsettingsui-gtk3.h:462
msgid "Upgrade to root"
msgstr "Повысить права до root"
-#: source/libublsettingsui-gtk3.h:427
+#: source/libublsettingsui-gtk3.h:463
msgid "Settings"
-msgstr ""
+msgstr "Настройки"
-#: source/libublsettingsui-gtk3.h:429
+#: source/libublsettingsui-gtk3.h:465
msgid "Application settigs"
-msgstr "Настройки"
+msgstr "Настройки приложеия"
-#: source/libublsettingsui-gtk3.h:431
+#: source/libublsettingsui-gtk3.h:467
msgid "Invalid email adress"
msgstr "Неверный email-адрес"
-#: source/libublsettingsui-gtk3.h:432
+#: source/libublsettingsui-gtk3.h:468
msgid "Invalid path"
msgstr "Неправильный путь"
-#: source/libublsettingsui-gtk3.h:434
+#: source/libublsettingsui-gtk3.h:470
msgid "Choose path"
msgstr "Выбор пути"
-#: source/libublsettingsui-gtk3.h:437
+#: source/libublsettingsui-gtk3.h:471
+msgid "Choose application"
+msgstr "Выбор приложений"
+
+#: source/libublsettingsui-gtk3.h:474
msgid "Choose directory instead of file"
msgstr "Выбрать папку вместо вайла"
-#: source/libublsettingsui-gtk3.h:439
+#: source/libublsettingsui-gtk3.h:476
msgid "Enabled"
msgstr "Включен"
-#: source/libublsettingsui-gtk3.h:440
+#: source/libublsettingsui-gtk3.h:477
msgid "Disabled"
msgstr "Выключен"
-#: source/libublsettingsui-gtk3.h:441
+#: source/libublsettingsui-gtk3.h:478
msgid "Active"
-msgstr "Активен"
+msgstr "Запущен"
-#: source/libublsettingsui-gtk3.h:442
+#: source/libublsettingsui-gtk3.h:479
msgid "Inactive"
-msgstr "Неактивен"
+msgstr "Не запущен"
-#: source/libublsettingsui-gtk3.h:444
+#: source/libublsettingsui-gtk3.h:481
msgid "Active:"
-msgstr "Активен:"
+msgstr "Статус:"
-#: source/libublsettingsui-gtk3.h:445
+#: source/libublsettingsui-gtk3.h:482
msgid "Enabled:"
msgstr "Автозапуск:"
-#: source/libublsettingsui-gtk3.h:446
+#: source/libublsettingsui-gtk3.h:483
msgid "Start"
msgstr "Запустить"
-#: source/libublsettingsui-gtk3.h:447
+#: source/libublsettingsui-gtk3.h:484
msgid "Stop"
msgstr "Остановить"
-#: source/libublsettingsui-gtk3.h:448
+#: source/libublsettingsui-gtk3.h:485
msgid "Restart"
msgstr "Перезапустить"
-#: source/libublsettingsui-gtk3.h:449
+#: source/libublsettingsui-gtk3.h:486
msgid "Enable"
msgstr "Включить автозапуск"
-#: source/libublsettingsui-gtk3.h:450
+#: source/libublsettingsui-gtk3.h:487
msgid "Disable"
-msgstr "Выключить автозапуск"
+msgstr "Отключить"
-#: source/libublsettingsui-gtk3.h:452
+#: source/libublsettingsui-gtk3.h:489
+#, c-format
msgid "\"%s\" service configuration"
-msgstr "Конфигурация сервиса \"%s\""
+msgstr "Управление сервисом \"%s\""
-#: source/libublsettingsui-gtk3.h:453
-#, fuzzy, c-format
+#: source/libublsettingsui-gtk3.h:490
+#, c-format
msgid "\"%s\" service:"
msgstr "Cлужба \"%s\":"
-#: source/libublsettingsui-gtk3.h:454
+#: source/libublsettingsui-gtk3.h:491
msgid "service is active"
msgstr "служба активна"
-#: source/libublsettingsui-gtk3.h:455
+#: source/libublsettingsui-gtk3.h:492
msgid "service is inactive"
msgstr "служба неактивна"
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index b933e92..0b2b0e7 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -85,6 +85,7 @@ add_library(${PROJECT_NAME} SHARED
libublsettingsui-gtk3-filechooser.c
libublsettingsui-gtk3-service.c
libublsettingsui-gtk3-app-chooser.c
+ libublsettingsui-gtk3-standard-callbacks.c
libublsettingsui-gtk3.h
${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C})
diff --git a/source/libublsettingsui-gtk3-app-chooser.c b/source/libublsettingsui-gtk3-app-chooser.c
index edf7789..a005eae 100644
--- a/source/libublsettingsui-gtk3-app-chooser.c
+++ b/source/libublsettingsui-gtk3-app-chooser.c
@@ -181,11 +181,12 @@ yon_app_chooser_window *yon_app_chooser_window_new(int multiple_choise){
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_app_chooser_accept),window);
g_signal_connect(G_OBJECT(window->SelectionCell),"toggled",G_CALLBACK(on_app_selection_toggled),window);
+ window->multiple = multiple_choise;
+
if (!window->multiple){
gtk_cell_renderer_set_visible(GTK_CELL_RENDERER(window->SelectionCell),0);
}
- window->multiple = multiple_choise;
if (!yon_apps_get(window)) return NULL;
if (!yon_app_chooser_convert_apps(window)) return NULL;
diff --git a/source/libublsettingsui-gtk3-service.c b/source/libublsettingsui-gtk3-service.c
index 6c8669a..cf9417c 100644
--- a/source/libublsettingsui-gtk3-service.c
+++ b/source/libublsettingsui-gtk3-service.c
@@ -22,7 +22,7 @@ void __on_closed(GtkWidget *, service_window *window){
void __on_service_update_clicked(GtkWidget *, service_window *window);
void __on_service_start_clicked(GtkWidget *, service_window *window){
- if (system(window->start_command)){
+ if (system(yon_debug_output("%s\n",window->start_command))){
yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(FAIL_LABEL),5,BACKGROUND_IMAGE_SUCCESS_TYPE);
return;
};
diff --git a/source/libublsettingsui-gtk3-standard-callbacks.c b/source/libublsettingsui-gtk3-standard-callbacks.c
index f687004..8a9eb17 100644
--- a/source/libublsettingsui-gtk3-standard-callbacks.c
+++ b/source/libublsettingsui-gtk3-standard-callbacks.c
@@ -3,6 +3,14 @@
char *config_get_default_command = NULL;
char *config_get_global_command = NULL;
char *config_get_local_command = NULL;
+char *config_get_custom_command = NULL;
+char *config_get_global_only_command = NULL;
+char *config_get_local_only_command = NULL;
+
+char *config_set_global_local_command = NULL;
+char *config_set_global_command = NULL;
+char *config_set_local_command = NULL;
+char *config_set_custom_command = NULL;
void yon_load_proceed(YON_CONFIG_TYPE type){
yon_config_clean();
@@ -14,11 +22,8 @@ void yon_load_proceed(YON_CONFIG_TYPE type){
yon_config_load_config(type,config_get_local_command,NULL);
} else if (type==YON_CONFIG_CUSTOM){
char *path="";
- GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,
- yon_char_get_localised_from_lib(CANCEL_LABEL),GTK_RESPONSE_CANCEL,
- yon_char_get_localised_from_lib(OPEN_LABEL),GTK_RESPONSE_ACCEPT,NULL);
- yon_gtk_window_setup(GTK_WINDOW(dialog),NULL,template_app_information.app_title,yon_char_append("com.ublinux.",template_app_information.app_tech_name),"FileChooserWindow");
- gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-video");
+ GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL);
+ gtk_window_set_icon_name(GTK_WINDOW(dialog),yon_char_append("com.ublinux.",template_app_information.app_tech_name));
gtk_window_set_title(GTK_WINDOW(dialog),template_app_information.app_title);
GtkFileFilter *filter = gtk_file_filter_new();
gtk_file_filter_add_pattern(filter,"*.ini");
@@ -29,29 +34,74 @@ void yon_load_proceed(YON_CONFIG_TYPE type){
if (response == GTK_RESPONSE_ACCEPT){
char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
if (!yon_char_is_empty(file)){
- path=yon_char_unite("'",file,"'",NULL);
- free(file);
+ path=file;
}
gtk_widget_destroy(dialog);
} else {
gtk_widget_destroy(dialog);
}
- yon_config_load_config(type,yon_config_get_custom_command(path),NULL);
+ char *command = yon_config_parameter_prepare_command(config_get_custom_command,path,NULL,NULL);
+ yon_config_load_config(type,command,NULL);
}
}
-void on_config_local_load(){
+void on_config_local_load(GtkWidget *){
yon_load_proceed(YON_CONFIG_LOCAL);
+ template_config->load_mode=1;
}
-void on_config_global_load(){
- yon_load_proceed(YON_CONFIG_GLOBAL);
+void on_config_global_load(GtkWidget *){
+ yon_load_proceed(YON_CONFIG_GLOBAL);
+ template_config->load_mode=0;
+
}
-void on_config_custom_load(){
+void on_config_custom_load(GtkWidget *){
yon_load_proceed(YON_CONFIG_CUSTOM);
+ yon_ubl_status_box_render(GLOBAL_LOAD_SUCCESS_LABEL,BACKGROUND_IMAGE_SUCCESS_TYPE);
+ template_config->load_mode=3;
}
void on_config_global_local_save(){
yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL);
+}
+
+void on_config_global_save(){
+ yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL);
+}
+
+void on_config_local_save(){
+ yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_global_command,NULL);
+}
+
+void on_config_custom_save(){
+ yon_save_proceed(NULL,YON_CONFIG_CUSTOM,config_get_custom_command,NULL);
+}
+
+void yon_ubl_settings_window_set_standard_callbacks(template_main_window *widgets, char *get_global_command, char *get_local_command,char *get_custom_command, char *get_default_command, char *get_global_only_command, char *get_local_only_command){
+ if (!yon_char_is_empty(get_global_command)){
+ g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),NULL);
+ g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),NULL);
+ config_get_global_command = yon_char_new(get_global_command);
+ config_set_global_command = yon_char_replace_single(get_global_command,"get","set");
+ }
+ if (!yon_char_is_empty(get_global_command)){
+ g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),NULL);
+ g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),NULL);
+ config_get_local_command = yon_char_new(get_local_command);
+ config_set_local_command = yon_char_replace_single(get_local_command,"get","set");
+ }
+ if (!yon_char_is_empty(get_global_command)){
+ g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),NULL);
+ g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),NULL);
+ config_get_custom_command = yon_char_new(get_custom_command);
+ config_set_custom_command = yon_char_replace_single(get_custom_command,"get","set");
+ }
+ if (!yon_char_is_empty(get_default_command)) config_get_default_command = yon_char_new(get_default_command);
+ if (!yon_char_is_empty(get_global_only_command)) config_get_global_only_command = yon_char_new(get_global_only_command);
+ if (!yon_char_is_empty(get_local_only_command)) config_get_local_only_command = yon_char_new(get_local_only_command);
+}
+
+int yon_ubl_settings_window_remove_standard_callbacks(template_main_window *window){
+
}
\ No newline at end of file
diff --git a/source/libublsettingsui-gtk3.c b/source/libublsettingsui-gtk3.c
index 4cd3315..94c26ee 100644
--- a/source/libublsettingsui-gtk3.c
+++ b/source/libublsettingsui-gtk3.c
@@ -5,6 +5,9 @@ template_app_info template_app_information;
static char *__yon_config_mode=NULL;
+
+void config_init();
+
char *yon_char_get_localised_from_lib(char *string){
textdomain(template_ui_LocaleName);
char *ret = _(string);
@@ -218,6 +221,7 @@ int yon_ubl_connect_config(_template_config *config){
else
replaces=1;
template_config = config;
+ config_init();
return replaces;
}
@@ -505,10 +509,22 @@ void yon_root_button_setup(template_main_window *widgets, config_str args, int a
textdomain(template_app_information.app_locale);
}
+void config_init(){
+ template_config->always_open_documentation=0;
+ template_config->socket_id=-1;
+ template_config->save_socket_id=-1;
+ template_config->load_socket_id=-1;
+ template_config->lock_help=0;
+ template_config->lock_help=0;
+ template_config->lock_load_global=0;
+ template_config->lock_save_global=0;
+ template_config->lock_save_local=0;
+ template_config->load_mode=1;
+}
+
template_main_window *yon_ubl_window_setup(){
textdomain (template_ui_LocaleName);
setlocale(LC_ALL,"");
-
template_main_window *widgets = setup_window();
yon_ubl_header_setup_resource(widgets->HeadOverlay,widgets->HeadBox,widgets->HeadImage,ui_banner_path);
textdomain(template_ui_LocaleName);
diff --git a/source/libublsettingsui-gtk3.h b/source/libublsettingsui-gtk3.h
index 2c71354..0dcbb0e 100644
--- a/source/libublsettingsui-gtk3.h
+++ b/source/libublsettingsui-gtk3.h
@@ -96,6 +96,8 @@ typedef struct {
template_config_fields
} _template_config;
+extern _template_config *template_config;
+
[[maybe_unused]]
extern _template_config *template_config;
@@ -246,6 +248,8 @@ void yon_gtk_scrolled_window_set_horizontal_at_desired_size(GtkWidget *window, G
template_app_info yon_ubl_get_app_info();
+void yon_ubl_settings_window_set_standard_callbacks(template_main_window *widgets, char *get_global_command, char *get_local_command,char *get_custom_command, char *get_default_command, char *get_global_only_command, char *get_local_only_command);
+
typedef struct {
GtkWidget *Window;
@@ -421,7 +425,7 @@ yon_app_chooser_window *yon_app_chooser_window_new(int multiple_choise);
#define OPEN_HELP_LABEL _("Open documentation")
#define PROJECT_HOME_LABEL _("Project Home Page")
#define NOTHING_CHOSEN_LABEL _("Nothing were chosen")
- #define AUTHORS_LABEL _(L"Copyright © 2022 - 2023, UBSoft LLC")
+ #define AUTHORS_LABEL _(L"Copyright © 2022 - 2025, UBSoft LLC")
#define GLOBAL_LOAD_SUCCESS_LABEL _("Global configuration loading succeeded.")
@@ -463,6 +467,7 @@ yon_app_chooser_window *yon_app_chooser_window_new(int multiple_choise);
#define PATH_INVALID_LABEL _("Invalid path")
#define CHOOSE_FILE_LABEL _("Choose path")
+ #define CHOOSE_APP_LABEL _("Choose application")
#define FILE_CHOOSER_CHOOSE_FILDER_LABEL _("Choose directory instead of file")