Keyboard slide remake; Localisation for new windows

pull/165/head
parent 2775a9e37f
commit ada03f1e0c

@ -20,6 +20,7 @@
<file>ubinstall-gtk-source.glade</file>
<file>ubinstall-gtk-source-element.glade</file>
<file>ubinstall-gtk-layouts.glade</file>
<file>ubinstall-gtk-keyboard-layouts.glade</file>
</gresource>
<gresource prefix="/com/ublinux/css">
<file>ubinstall-gtk.css</file>

@ -1173,10 +1173,6 @@ msgstr ""
msgid "Skip configuration"
msgstr ""
#: source/ubl-strings.h:331
msgid "Are you sure want to exit and\ninterrupt installation process?"
msgstr ""
#: source/ubl-strings.h:331
msgid "Are you sure want to interrupt installation process?"
msgstr ""
@ -1206,5 +1202,104 @@ msgid "Yes, I agree to the License Agreement"
msgstr ""
#: source/ubl-strings.h:331
msgid "No, i do not agree"
msgid "No, I do not agree"
msgstr ""
#: source/ubl-strings.h:11
msgid "Keyboard layouts:"
msgstr ""
#: source/ubl-strings.h:13
msgid "Move layout up"
msgstr ""
#: source/ubl-strings.h:14
msgid "Move layout down"
msgstr ""
#: source/ubl-strings.h:15
msgid "Add layout"
msgstr ""
#: source/ubl-strings.h:24
msgid "Layouts:"
msgstr ""
#: source/ubl-strings.h:25
msgid "Default layout"
msgstr ""
#: source/ubl-strings.h:26
msgid "Changing the layout:"
msgstr ""
#: source/ubl-strings.h:28
msgid "Set Compose (Multi_Key) to the right Win key"
msgstr ""
#: source/ubl-strings.h:29
msgid "Scroll Lock indication when switching layouts"
msgstr ""
#: source/ubl-strings.h:32
msgid "NumLock:"
msgstr ""
#: source/ubl-strings.h:34
msgid "Key layout and switch:"
msgstr ""
#: source/ubl-strings.h:37
msgid "Variant"
msgstr ""
#: source/ubl-strings.h:20
msgid "Are you sure you want to remove current layout?"
msgstr ""
#: source/ubl-strings.h:20
msgid "Layout deletion"
msgstr ""
#: source/ubl-strings.h:20
msgid "Manual input:"
msgstr ""
#: source/ubl-strings.h:20
msgid "Specify your preferred keyboard settings"
msgstr ""
#: source/ubl-strings.h:20
msgid "Available locales in the system:"
msgstr ""
#: source/ubl-strings.h:20
msgid "System locale"
msgstr ""
#: source/ubl-strings.h:20
msgid "Locale"
msgstr ""
#: source/ubl-strings.h:20
msgid "Language"
msgstr ""
#: source/ubl-strings.h:20
msgid "Territory"
msgstr ""
#: source/ubl-strings.h:20
msgid "Add locales"
msgstr ""
#: source/ubl-strings.h:20
msgid "Specify your preferred system languages"
msgstr ""
#: source/ubl-strings.h:20
msgid "Remove locale"
msgstr ""

@ -101,8 +101,7 @@ msgid "Installation completion"
msgstr "Завершение установки"
#: source/ubl-strings.h:24
msgid ""
"Deleting all data on the selected disk and then installing the system"
msgid "Deleting all data on the selected disk and then installing the system"
msgstr ""
"Удаление всех данных на выбранном диске с последующей установкой системы "
"UBLinux"
@ -120,7 +119,8 @@ msgid "Installation on the same partition as another system"
msgstr "Установка в раздел другой системы"
#: source/ubl-strings.h:28
msgid "Unpacking the system into an existing system"
#, fuzzy
msgid "Unpacking the file system into an existing system"
msgstr "Установить ОС в уже существующий раздел"
#: source/ubl-strings.h:29 source/ubl-strings.h:281
@ -413,10 +413,11 @@ msgid "Format"
msgstr "Форматировать"
#: source/ubl-strings.h:107
#, fuzzy
msgid ""
"You have system installed on your computer.\n"
"You can reboot and use your new system\n"
"or continue working in the environment, booted from the Live image."
"or continue working in the system Live environment."
msgstr ""
"На вашем компьютере установлена система.\n"
"Вы можете перезагрузить и использовать свою новую систему\n"
@ -509,8 +510,8 @@ msgstr "Ошибка установки"
#: source/ubl-strings.h:135
msgid ""
"Attention! The system will be installed on the selected partition with "
"OS already installed. All user data will be saved."
"Attention! The system will be installed on the selected partition with OS "
"already installed. All user data will be saved."
msgstr ""
"<b>Внимание!</b> В выбранный раздел будет произведена установка системы. "
"Если не менять тип ФС и не форматировать, все данные на разделе будут "
@ -663,10 +664,6 @@ msgstr ""
"Вы уверены, что хотите закрыть программу и\n"
"прервать процесс установки?"
#: source/ubl-strings.h:331
msgid "Are you sure want to interrupt installation process?"
msgstr "Вы уверены, что хотите прервать процесс установки?"
#: source/ubl-strings.h:187
msgid "Are you sure want to reboot system?"
msgstr "Вы уверены что хотите перезагрузить систему?"
@ -1212,6 +1209,94 @@ msgstr "Источник"
msgid "Skip configuration"
msgstr "Пропустить настройку"
#: source/ubl-strings.h:331
msgid "Are you sure want to interrupt installation process?"
msgstr "Вы уверены, что хотите прервать процесс установки?"
#: source/ubl-strings.h:331
msgid "Repeating values"
msgstr "Повторяющиеся значения"
#: source/ubl-strings.h:331
msgid "Package information"
msgstr "Информация о пакете"
#: source/ubl-strings.h:331
msgid "<i><b>Package:</b></i>"
msgstr "<i><b>Пакет:</b></i>"
#: source/ubl-strings.h:331
msgid "<i><b>Module:</b></i>"
msgstr "<i><b>Модуль:</b></i>"
#: source/ubl-strings.h:331
msgid "Yes, I agree to the License Agreement"
msgstr "Да, я согласен с лицензионным соглашением"
#: source/ubl-strings.h:331
msgid "No, I do not agree"
msgstr "Нет, я не согласен"
#: source/ubl-strings.h:11
msgid "Keyboard layouts:"
msgstr "Раскладки клавиатуры:"
#: source/ubl-strings.h:13
msgid "Move layout up"
msgstr "Переместить раскладку выше"
#: source/ubl-strings.h:14
msgid "Move layout down"
msgstr "Переместить раскладку ниже"
#: source/ubl-strings.h:15
msgid "Add layout"
msgstr "Добавить раскладку"
#: source/ubl-strings.h:24
msgid "Layouts:"
msgstr "Раскладки:"
#: source/ubl-strings.h:25
msgid "Default layout"
msgstr "Раскладка по умолчанию"
#: source/ubl-strings.h:26
msgid "Changing the layout:"
msgstr "Смена раскладки:"
#: source/ubl-strings.h:28
msgid "Set Compose (Multi_Key) to the right Win key"
msgstr "Установить Compose (Multi_Key) на клавишу \"правая Win\""
#: source/ubl-strings.h:29
msgid "Scroll Lock indication when switching layouts"
msgstr "Индикация Scroll Lock при переключении раскладки"
#: source/ubl-strings.h:32
msgid "NumLock:"
msgstr "NumLock:"
#: source/ubl-strings.h:34
msgid "Key layout and switch:"
msgstr "Раскладка клавиш и переключатель:"
#: source/ubl-strings.h:37
msgid "Variant"
msgstr "Вариант"
#: source/ubl-strings.h:20
msgid "Are you sure you want to remove current layout?"
msgstr "Вы уверены что хотите удалить данную раскладку?"
#: source/ubl-strings.h:20
msgid "Layout deletion"
msgstr "Удаление раскладки"
#: source/ubl-strings.h:20
msgid "Manual input:"
msgstr "Ручной выбор:"
msgid ""
"<b>Attention!</b> The system will be installed in the selected partition. "
"If you do not change the FS type or format, all data on the partition "
@ -3025,26 +3110,38 @@ msgstr "Зулу"
msgid "Zurich"
msgstr "Цюрих"
#: source/ubl-strings.h:331
msgid "Repeating values"
msgstr "Повторяющиеся значения"
#: source/ubl-strings.h:20
msgid "Specify your preferred keyboard settings"
msgstr "Укажите предпочитаемые настройки клавиатуры"
#: source/ubl-strings.h:331
msgid "Package information"
msgstr "Информация о пакете"
#: source/ubl-strings.h:20
msgid "Available locales in the system:"
msgstr "Доступные языки системы:"
#: source/ubl-strings.h:331
msgid "<i><b>Package:</b></i>"
msgstr "<i><b>Пакет:</b></i>"
#: source/ubl-strings.h:20
msgid "System locale"
msgstr "Язык системы"
#: source/ubl-strings.h:331
msgid "<i><b>Module:</b></i>"
msgstr "<i><b>Модуль:</b></i>"
#: source/ubl-strings.h:20
msgid "Locale"
msgstr "Локаль"
#: source/ubl-strings.h:331
msgid "Yes, I agree to the License Agreement"
msgstr "Да, я согласен с лицензионным соглашением"
#: source/ubl-strings.h:20
msgid "Language"
msgstr "Язык"
#: source/ubl-strings.h:331
msgid "No, i do not agree"
msgstr "Нет, я не согласен"
#: source/ubl-strings.h:20
msgid "Territory"
msgstr "Территория"
#: source/ubl-strings.h:20
msgid "Add locales"
msgstr "Добавить локаль"
#: source/ubl-strings.h:20
msgid "Specify your preferred system languages"
msgstr "Укажите предпочитаемый язык системы"
#: source/ubl-strings.h:20
msgid "Remove locale"
msgstr "Удалить локаль"

@ -73,6 +73,7 @@ set(DEPENDFILES
../ubinstall-gtk-source.glade
../ubinstall-gtk-source-element.glade
../ubinstall-gtk-layouts.glade
../ubinstall-gtk-keyboard-layouts.glade
../gresource.xml
../ubinstall-gtk.css
../modules.csv

@ -4,7 +4,6 @@ void yon_resize_images_update(main_window *widgets){
enum YON_PAGES page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook));
gtk_widget_hide(widgets->BootloaderImage);
gtk_widget_hide(widgets->RegionImage);
gtk_widget_hide(widgets->KeyboardImage);
gtk_widget_hide(widgets->UserImage);
gtk_widget_hide(widgets->StartupImage);
gtk_widget_hide(widgets->NetworkImage);
@ -16,9 +15,6 @@ void yon_resize_images_update(main_window *widgets){
case YON_PAGE_REGION:
gtk_widget_show(widgets->RegionImage);
break;
case YON_PAGE_KEYBOARD:
gtk_widget_show(widgets->KeyboardImage);
break;
case YON_PAGE_USERS:
gtk_widget_show(widgets->UserImage);
break;
@ -51,11 +47,6 @@ void on_region_resized(GtkWidget *,main_window *widgets){
target = GTK_IMAGE(widgets->RegionImage);
pixbuf = widgets->region_original;
break;
case YON_PAGE_KEYBOARD:
target = GTK_IMAGE(widgets->KeyboardImage);
pixbuf = widgets->keyboard_original;
break;
case YON_PAGE_USERS:
target = GTK_IMAGE(widgets->UserImage);

@ -1,385 +1,467 @@
#include "ubinstall-gtk.h"
int yon_keyboard_save(main_window *widgets){
GtkTreeIter iter,iter_child;
if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->LayoutList),&iter)){
yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),LAYOUTS_CHOSEN_BUT_EMPTY_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(gtk_widget_get_parent(widgets->LayoutTree));
if (gtk_switch_get_active(GTK_SWITCH(widgets->KeyboardDefaultLayoutsSwitch))){
yon_config_remove_by_key(xkblayout_parameter);
} else {
GtkTreeIter iter;
if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->LayoutsList),&iter)){
yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),yon_char_get_localised_from_lib(EMPTY_IMPORTANT_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
yon_ubl_status_highlight_incorrect(widgets->KeyboardLayoutTree);
return 0;
}
char *layouts_list="";
GtkTreeModel *layouts_model=GTK_TREE_MODEL(widgets->LayoutList);
char *cur_layout=NULL;
for_iter(layouts_model,&iter){
int chosen=0;
int primary=0;
gtk_tree_model_get(layouts_model,&iter,0,&cur_layout,3,&chosen,4,&primary,-1);
if (chosen)
layouts_list = yon_char_unite(layouts_list,yon_char_is_empty(layouts_list)?"":",",cur_layout,NULL);
if (primary){
yon_config_register(xkbvariant_parameter,xkbvariant_parameter_command,cur_layout);
}
if (gtk_tree_model_iter_children(layouts_model,&iter_child,&iter)){
for(int valid2=1;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->LayoutList),&iter_child)){
gtk_tree_model_get(layouts_model,&iter_child,0,&cur_layout,3,&chosen,4,&primary,-1);
if (chosen)
layouts_list = yon_char_unite(layouts_list,yon_char_is_empty(layouts_list)?"":",",cur_layout,NULL);
if (primary){
yon_config_register(xkbvariant_parameter,xkbvariant_parameter_command,cur_layout);
}
}
}
}
}
return 1;
}
if (!yon_char_is_empty(layouts_list))
yon_config_register(xkblayout_parameter,xkblayout_parameter_command,layouts_list);
else
yon_config_remove_by_key(xkblayout_parameter);
void yon_keyboard_init(main_window *widgets){
g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardModelCombo),G_CALLBACK(on_model_changed),widgets);
g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardLayoutChangingCombo),G_CALLBACK(on_options_save),widgets);
g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardNumLockCombo),G_CALLBACK(on_num_lock_changed),widgets);
g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardScrollLockSwitch),G_CALLBACK(on_scroll_lock_switch),widgets);
g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardComposeSwitch),G_CALLBACK(on_compose_switch),widgets);
g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardDefaultLayoutsSwitch),G_CALLBACK(on_layout_default_toggled),widgets);
gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->KeyboardModelCombo));
int size;
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->KeyboardModelCombo),DEFAULT_LABEL);
config_str models = yon_config_load(get_keyboard_models_command,&size);
for (int i=0;i<size;i++){
yon_char_remove_last_symbol(models[i],'\n');
int parsed_size;
config_str parsed = yon_char_parse(models[i],&parsed_size,"|");
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->KeyboardModelCombo),parsed[0],_(parsed[1]));
yon_char_parsed_free(parsed,parsed_size);
}
yon_char_parsed_free(models,size);
// g_signal_handlers_block_by_func(G_OBJECT(widgets->TTYLayoutCombo),G_CALLBACK(on_tty_changed),widgets);
if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo))){
char *model = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo));
if (!yon_char_is_empty(model))
yon_config_register(xkbmodel_parameter,xkbmodel_parameter_command,model);
} else{
yon_config_remove_by_key(xkbmodel_parameter);
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo),0);
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardNumLockCombo),0);
{
char *kbmodel = yon_config_get_by_key(xkbmodel_parameter);
if (kbmodel) {
gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo),kbmodel);
}
}
if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->LayoutBindingCombo))){
char *options = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->LayoutBindingCombo));
if (options){};
yon_config_register(xkboptions_parameter,xkboptions_parameter_command,options);
} else {
yon_config_remove_by_key(xkboptions_parameter);
{
gtk_list_store_clear(widgets->LayoutsList);
char *layouts = config(xkblayout_parameter);
int layouts_parsed_size;
config_str layouts_parsed = yon_char_parse(layouts,&layouts_parsed_size,",");
for(int i=0;i<layouts_parsed_size;i++){
yon_layout_load(layouts_parsed[i],widgets);
}
if (yon_char_is_empty(layouts)||yon_config_check_ignore(xkblayout_parameter)){
gtk_switch_set_active(GTK_SWITCH(widgets->KeyboardDefaultLayoutsSwitch),1);
} else {
gtk_switch_set_active(GTK_SWITCH(widgets->KeyboardDefaultLayoutsSwitch),0);
}
if (yon_char_is_empty(layouts)){
char *element = yon_char_parsed_check_exist_begins_with(main_config.layouts_list,main_config.layouts_size,"us|");
if (element){
int parsed_size;
config_str parsed = yon_char_parse(element,&parsed_size,"|");
GtkTreeIter iter;
gtk_list_store_append(widgets->LayoutsList,&iter);
gtk_list_store_set(widgets->LayoutsList,&iter,0,parsed[0],2,_(parsed[1]),-1);
yon_char_parsed_free(parsed,parsed_size);
}
}
}
if (!main_config.configure_mode){
{
gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(widgets->KeyboardLayoutChangingCombo));
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(widgets->KeyboardLayoutChangingCombo),DEFAULT_LABEL);
int size;
config_str parameters = yon_config_get_save_parameters_by_key(&size,xkbvariant_parameter,xkblayout_parameter,xkbmodel_parameter,xkboptions_parameter,NULL);
if (parameters){
char *command_parameters = yon_char_parsed_to_string(parameters,size," -- ");
char *command = yon_char_unite(ubconfig_dull_command,"--target system ",command_parameters,NULL);
if (!system(yon_debug_output("%s\n",command))){}
free(command);
yon_char_parsed_free(parameters,size);
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardLayoutChangingCombo),0);
config_str options = yon_config_load(grp_options_command,&size);
for (int i=0;i<size;i++){
yon_char_remove_last_symbol(options[i],'\n');
int parsed_size;
config_str parsed = yon_char_parse(options[i],&parsed_size,"|");
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->KeyboardLayoutChangingCombo),parsed[0],_(parsed[1]));
yon_char_parsed_free(parsed,parsed_size);
}
yon_char_parsed_free(options,size);
}
return 1;
}
ubinstall_keyboard_window *yon_ubinstall_keyboard_new(){
void on_additional_software_toggled();
ubinstall_keyboard_window *window = malloc(sizeof(ubinstall_keyboard_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubinstall_keyboard);
window->MainWindow=yon_gtk_builder_get_widget(builder,"MainWindow");
window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox");
window->headerBar=yon_gtk_builder_get_widget(builder,"headerBar");
window->CancelButton=yon_gtk_builder_get_widget(builder,"CancelButton");
window->SaveButton=yon_gtk_builder_get_widget(builder,"SaveButton");
window->LayoutsTree=yon_gtk_builder_get_widget(builder,"LayoutsTree");
window->ActiveToggle = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ActiveToggle"));
{
char *name = yon_config_get_by_key(num_lock_boot_parameter);
if (name) {
if (!strcmp(name,"yes")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardNumLockCombo),1);
else if (!strcmp(name,"no")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardNumLockCombo),2);
}
}
{
char *options = config(xkboptions_parameter);
if (!yon_char_is_empty(options)){
int size;
config_str parsed = yon_char_parse(options,&size,",");
if (!yon_char_is_empty(parsed[0])){
gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->KeyboardLayoutChangingCombo),parsed[0]);
} else {
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardLayoutChangingCombo),0);
}
if (yon_char_parsed_check_exist(parsed,size,"compose:rwin")>-1){
gtk_switch_set_active(GTK_SWITCH(widgets->KeyboardComposeSwitch),1);
} else {
gtk_switch_set_active(GTK_SWITCH(widgets->KeyboardComposeSwitch),0);
}
if (yon_char_parsed_check_exist(parsed,size,"grp_led:scroll")>-1){
gtk_switch_set_active(GTK_SWITCH(widgets->KeyboardScrollLockSwitch),1);
} else {
gtk_switch_set_active(GTK_SWITCH(widgets->KeyboardScrollLockSwitch),0);
}
}
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
}
return window;
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardModelCombo),G_CALLBACK(on_model_changed),widgets);
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardNumLockCombo),G_CALLBACK(on_num_lock_changed),widgets);
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardLayoutChangingCombo),G_CALLBACK(on_options_save),widgets);
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardScrollLockSwitch),G_CALLBACK(on_scroll_lock_switch),widgets);
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardComposeSwitch),G_CALLBACK(on_compose_switch),widgets);
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardDefaultLayoutsSwitch),G_CALLBACK(on_layout_default_toggled),widgets);
}
void on_keyboard_removed(GtkWidget *, main_window *widgets){
GtkTreeModel *model;
GtkTreeIter iter, childiter;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LayoutTree)),&model,&iter)){
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(widgets->LayoutsFilter),&childiter,&iter);
gtk_tree_store_set(widgets->LayoutList,&childiter,3,0,-1);
void on_layouts_accept(GtkWidget *self, layouts_window *window){
main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets");
if (!yon_char_is_empty(window->parameters)){
yon_config_register(xkblayout_parameter,xkblayout_parameter_command,window->parameters);
} else {
yon_config_remove_by_key(xkblayout_parameter);
}
on_subwindow_close(self);
yon_keyboard_init(widgets);
}
void yon_language_selection_changed(GtkCellRenderer *, char *path, ubinstall_language_window *window){
void on_layouts_chosen(GtkCellRenderer *, gchar *path, layouts_window *window){
GtkTreeIter iter;
int state;
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->list),&iter,path);
int chosen;
char *layout, *variant;
gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&layout,1,&variant,3,&chosen,-1);
gtk_tree_store_set(GTK_TREE_STORE(window->list),&iter,3,!chosen,-1);
if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->liststore1),&iter,path)){
gtk_tree_model_get(GTK_TREE_MODEL(window->liststore1),&iter,0,&state,-1);
gtk_list_store_set(window->liststore1,&iter,0,!state,-1);
}
}
void on_language_window_accept(GtkWidget *,dictionary *dict){
main_window *widgets= yon_dictionary_get_data(dict->first,main_window*);
ubinstall_language_window *window = yon_dictionary_get_data(dict->first->next,ubinstall_language_window*);
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(window->DefaultCheck))){
gtk_entry_set_text(GTK_ENTRY(widgets->AvailableLanguagesEntry),"");
GtkTreeIter iter;
int size;
config_str lang_parsed = default_langs(&size);
char *final = "";
for_iter(widgets->LanguagesList,&iter){
char *code, *labl;
gtk_tree_model_get(GTK_TREE_MODEL(widgets->LanguagesList),&iter,1,&code,2,&labl,-1);
if (yon_char_parsed_check_exist(lang_parsed,size,code)!=-1){
gtk_list_store_set(widgets->LanguagesList,&iter,0,1,-1);
char *tmp = yon_char_unite(final,!yon_char_is_empty(final)?";":"",labl,NULL);
if (!yon_char_is_empty(final)) free(final);
final = tmp;
} else
gtk_list_store_set(widgets->LanguagesList,&iter,0,0,-1);
}
if (!yon_char_is_empty(final)){
gtk_entry_set_text(GTK_ENTRY(widgets->AvailableLanguagesEntry),final);
}
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LanguagesCombo),-1);
gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->LanguagesFilter));
char *full_layout = NULL;
if (!yon_char_is_empty(variant)){
full_layout = yon_char_unite(layout,"_",variant,NULL);
} else {
yon_gtk_list_store_copy_full(widgets->LanguagesList,window->liststore1);
gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->LanguagesFilter));
config_str parsed = NULL;
int size;
GtkTreeIter iter;
for_iter(GTK_TREE_MODEL(window->liststore1),&iter){
char *current;
int status;
gtk_tree_model_get(GTK_TREE_MODEL(window->liststore1),&iter,0,&status,2,&current,-1);
if (status)
yon_char_parsed_add_or_create_if_exists(parsed,&size,current);
}
if (parsed){
char *final = yon_char_parsed_to_string(parsed,size,"; ");
gtk_entry_set_text(GTK_ENTRY(widgets->AvailableLanguagesEntry),!yon_char_is_empty(final)?final:"");
if (yon_char_is_empty(final)) {
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LanguagesCombo),-1);
}
if (final) free(final);
yon_char_parsed_free(parsed,size);
} else
gtk_entry_set_text(GTK_ENTRY(widgets->AvailableLanguagesEntry),"");
full_layout = layout;
}
on_subwindow_close(window->MainWindow);
free(window);
if (!chosen){
char *temp = yon_char_append_element(window->parameters,full_layout,",");
free(window->parameters);
window->parameters = temp;
} else {
char *temp = yon_char_remove_element(window->parameters,full_layout,",");
free(window->parameters);
window->parameters = temp;
}
free(full_layout);
}
void yon_focus_set(GtkWidget *,GtkWidget *target){
gtk_widget_grab_focus(target);
void on_system_layouts_add(GtkWidget *, main_window *widgets){
yon_layouts_add(GTK_TREE_VIEW(widgets->KeyboardLayoutTree),widgets->LayoutsList,widgets);
}
ubinstall_language_window *yon_ubinstall_language_new(){
ubinstall_language_window *window = malloc(sizeof(ubinstall_language_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubinstall_language);
window->liststore1=GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1"));
window->MainWindow=yon_gtk_builder_get_widget(builder,"MainWindow");
window->StatusBox=yon_gtk_builder_get_widget(builder,"StatusBox");
window->DefaultCheck=yon_gtk_builder_get_widget(builder,"DefaultCheck");
window->LanguagesTree=yon_gtk_builder_get_widget(builder,"LanguagesTree");
window->headerBar=yon_gtk_builder_get_widget(builder,"headerBar");
window->CancelButton=yon_gtk_builder_get_widget(builder,"CancelButton");
window->SaveButton=yon_gtk_builder_get_widget(builder,"SaveButton");
window->ToggleRenderer=GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ToggleRenderer"));
g_signal_connect(G_OBJECT(window->DefaultCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->LanguagesTree);
g_signal_connect(G_OBJECT(window->DefaultCheck),"toggled",G_CALLBACK(yon_focus_set),window->LanguagesTree);
g_signal_connect(G_OBJECT(window->ToggleRenderer),"toggled",G_CALLBACK(yon_language_selection_changed),window);
layouts_window *yon_layouts_window_new(){
GtkBuilder *builder = gtk_builder_new_from_resource(glade_layouts_path);
layouts_window *window = malloc(sizeof(layouts_window));
memset(window,0,sizeof(layouts_window));
window->Window = yon_gtk_builder_get_widget(builder,"Window");
window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
window->ChosenCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ChosenCell"));
window->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree");
window->parameters = yon_char_new(config(xkblayout_parameter));
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
return window;
g_signal_connect(G_OBJECT(window->ChosenCell),"toggled",G_CALLBACK(on_layouts_chosen),window);
return window;
}
void on_language_clicked(GtkWidget *, main_window *widgets){
ubinstall_language_window *window = yon_ubinstall_language_new();
g_object_ref(G_OBJECT(window->liststore1));
gtk_tree_view_set_model(GTK_TREE_VIEW(window->LanguagesTree),NULL);
yon_gtk_list_store_copy_full(window->liststore1,widgets->LanguagesList);
gtk_tree_view_set_model(GTK_TREE_VIEW(window->LanguagesTree),GTK_TREE_MODEL(window->liststore1));
yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->MainWindow),TITLE_LABEL,icon_path,"language-chooser-window");
gtk_tree_view_set_search_column(GTK_TREE_VIEW(window->LanguagesTree),2);
if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->AvailableLanguagesEntry)))){
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DefaultCheck),1);
}
void yon_layouts_add(GtkTreeView *, GtkListStore *, main_window *widgets){
layouts_window *window = yon_layouts_window_new();
yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->MainWindow),TITLE_LABEL,icon_path,"layout_window");
window->list = main_config.layouts_store;
gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree), GTK_TREE_MODEL(main_config.layouts_store));
gtk_tree_view_column_clicked(GTK_TREE_VIEW_COLUMN(gtk_tree_view_get_column(GTK_TREE_VIEW(window->MainTree),0)));
yon_layout_build(window);
g_object_set_data(G_OBJECT(window->Window),"widgets",widgets);
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_layouts_accept),window);
char *languages = config(xkblayout_parameter);
int size;
int found=0;
int statusfound=0;
config_str langs = default_langs(&size);
GtkTreeIter iter;
for_iter(widgets->LanguagesList,&iter){
char *cur;
int status;
gtk_tree_model_get(GTK_TREE_MODEL(widgets->LanguagesList),&iter,0,&status,2,&cur,-1);
if (status){
statusfound++;
if (yon_char_parsed_check_exist(langs,size,cur)>-1)
found++;
config_str parsed = yon_char_parse(languages,&size,",");
GtkTreeIter iter,itar;
for_iter(window->list,&iter){
int found = 0;
char *id, *id_var;
gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&id,-1);
for (int i=0;i<size;i++){
char *key = NULL;
key = yon_char_new(parsed[i]);
if (!strcmp(id,key)){
gtk_tree_store_set(GTK_TREE_STORE(window->list),&iter,3,1,-1);
found=1;
break;
}
}
if (!found) {
gtk_tree_store_set(GTK_TREE_STORE(window->list),&iter,3,0,-1);
}
if (gtk_tree_model_iter_children(GTK_TREE_MODEL(window->list),&itar,&iter)){
for (int valid2=1;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itar)){
gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itar,0,&id,1,&id_var,-1);
for (int i=0;i<size;i++){
char *key, *variant = NULL;
variant = yon_char_new(parsed[i]);
key = yon_char_divide_search(variant,"_",-1);
if (!strcmp(key,id)&&!yon_char_is_empty(id_var)&&!strcmp(variant,id_var)){
gtk_tree_store_set(GTK_TREE_STORE(window->list),&itar,3,1,-1);
found=1;
break;
}
}
}
}
}
if ((found==size)&&statusfound==size){
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->DefaultCheck),1);
}
dictionary *dict=NULL;
yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets);
yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window);
g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_language_window_accept),dict);
gtk_tree_view_column_clicked(gtk_tree_view_get_column(GTK_TREE_VIEW(window->LanguagesTree),0));
gtk_widget_show(window->MainWindow);
}
}
void on_layout_toggle(GtkCellRendererToggle*, gchar* path, ubinstall_keyboard_window *window){
GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(window->LayoutsTree));
void yon_layouts_remove(GtkTreeView *tree, GtkListStore *cur_list, main_window *widgets){
GtkTreeModel *model = GTK_TREE_MODEL(cur_list);
GtkTreeIter iter;
if (gtk_tree_model_get_iter_from_string(model,&iter,path)){
int status=0;
gtk_tree_model_get(model,&iter,3,&status,-1);
gtk_tree_store_set(GTK_TREE_STORE(model),&iter,3,!status,-1);
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(tree),&model,&iter)){
dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
data->action_text = LAYOUT_REMOVE_LABEL;
data->title = LAYOUT_REMOVE_TITLE_LABEL;
if (yon_confirmation_dialog_call(widgets->MainWindow,data)!=GTK_RESPONSE_ACCEPT) return;
gtk_list_store_remove(widgets->LayoutsList,&iter);
}
yon_keyboard_init(widgets);
}
void on_keyboard_accept(GtkWidget *self,main_window *widgets){
gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->LayoutsFilter));
on_subwindow_close(self);
void on_system_layouts_remove(GtkWidget *, main_window *widgets){
yon_layouts_remove(GTK_TREE_VIEW(widgets->KeyboardLayoutTree),widgets->LayoutsList,widgets);
}
// standard functions
void on_keyboard_clicked (GtkWidget *, main_window *widgets){
ubinstall_keyboard_window *window = yon_ubinstall_keyboard_new();
yon_gtk_window_setup(GTK_WINDOW(window->MainWindow),GTK_WINDOW(widgets->MainWindow),KEYBOARD_TITLE_LABEL,icon_path,"keyboard-window");
gtk_tree_view_set_model(GTK_TREE_VIEW(window->LayoutsTree),GTK_TREE_MODEL(widgets->LayoutList));
gtk_tree_view_column_clicked(gtk_tree_view_get_column(GTK_TREE_VIEW(window->LayoutsTree),1));
g_signal_connect(G_OBJECT(window->ActiveToggle),"toggled",G_CALLBACK(on_layout_toggle),window);
g_signal_connect(G_OBJECT(window->SaveButton),"clicked",G_CALLBACK(on_keyboard_accept),widgets);
gtk_widget_show(window->MainWindow);
config_str yon_layout_get_children(char *layout_id, int *size){
(*size)=0;
config_str final = NULL;
for (int i=0;i<main_config.variants_size;i++){
int parsed_size;
config_str parsed = yon_char_parse(main_config.variants_list[i],&parsed_size,"|");
if (!strcmp(parsed[0],layout_id)){
yon_char_parsed_add_or_create_if_exists(final,size,main_config.variants_list[i]);
}
}
return final;
}
void yon_layout_build(char *key, GHashTable *value, main_window *widgets){
GtkTreeIter parent;
void yon_layout_load(char *layout,main_window *widgets){
GtkTreeIter iter;
gtk_tree_store_append(widgets->LayoutList,&parent,NULL);
gtk_tree_store_set(widgets->LayoutList,&parent,0,key,1,_((char*)g_hash_table_lookup(value,"")),2,1,3,0,-1);
GList *list = g_hash_table_get_keys(value);
GList *iterator = NULL;
for (iterator=list;iterator;iterator=iterator->next){
if (!yon_char_is_empty((char*)iterator->data)){
gtk_tree_store_append(widgets->LayoutList,&iter,&parent);
gtk_tree_store_set(widgets->LayoutList,&iter,0,(char*)iterator->data,1,_((char*)g_hash_table_lookup(value,iterator->data)),2,1,3,0,4,0,-1);
if (strstr(layout,"_")){
char *cur_variant = yon_char_new(layout);
char *cur_layout = yon_char_divide_search(cur_variant,"_",-1);
for (int i=0;i<main_config.variants_size;i++){
int parsed_size;
config_str parsed = yon_char_parse(main_config.variants_list[i],&parsed_size,"|");
if (!strcmp(parsed[0],cur_layout)&&!strcmp(parsed[1],cur_variant)){
gtk_list_store_append(widgets->LayoutsList,&iter);
gtk_list_store_set(widgets->LayoutsList,&iter,0,parsed[0],1,parsed[1],2,_(parsed[2]),-1);
}
}
} else {
for (int i=0;i<main_config.layouts_size;i++){
int parsed_size;
config_str parsed = yon_char_parse(main_config.layouts_list[i],&parsed_size,"|");
if (!strcmp(parsed[0],layout)){
gtk_list_store_append(widgets->LayoutsList,&iter);
gtk_list_store_set(widgets->LayoutsList,&iter,0,parsed[0],2,_(parsed[1]),-1);
}
}
}
}
void yon_keyboard_init(main_window *widgets){
void yon_layout_build(layouts_window *window){
gtk_tree_store_clear(window->list);
GtkTreeIter parent;
GtkTreeIter iter;
int size;
config_str parsed = NULL;
parsed = yon_config_load(yon_debug_output("%s\n",get_layouts_command),&size);
GHashTable *table = g_hash_table_new(g_str_hash,g_str_equal);
config_str layouts = yon_config_load(layouts_command,&size);
for (int i=0;i<size;i++){
yon_char_remove_last_symbol(parsed[i],'\n');
int layout_size;
config_str layout = yon_char_parse(parsed[i],&layout_size,"|");
if (layout_size){
if (g_hash_table_contains(table,layout[0])){
GHashTable *child_table = g_hash_table_lookup(table,layout[0]);
g_hash_table_insert(child_table,yon_char_new(layout[1]),yon_char_new(layout[2]));
}else {
GHashTable *child_table = g_hash_table_new(g_str_hash,g_str_equal);
g_hash_table_insert(table,yon_char_new(layout[0]),child_table);
g_hash_table_insert(child_table,yon_char_new(layout[1]),yon_char_new(layout[2]));
}
yon_char_remove_last_symbol(layouts[i],'\n');
int parsed_size;
config_str parsed = yon_char_parse(layouts[i],&parsed_size,"|");
gtk_tree_store_append(window->list,&parent,NULL);
gtk_tree_store_set(window->list,&parent,0,parsed[0],2,_(parsed[1]),-1);
int variants_size;
config_str variants = yon_layout_get_children(parsed[0],&variants_size);
yon_char_parsed_free(parsed,parsed_size);
for (int k=0;k<variants_size;k++){
parsed = yon_char_parse(variants[k],&parsed_size,"|");
gtk_tree_store_append(window->list,&iter,&parent);
gtk_tree_store_set(window->list,&iter,0,parsed[0],1,parsed[1],2,_(parsed[2]),-1);
yon_char_parsed_free(parsed,parsed_size);
}
yon_char_parsed_free(variants,variants_size);
}
yon_char_parsed_free(layouts,size);
}
g_hash_table_foreach(table,(GHFunc)yon_layout_build,widgets);
yon_char_parsed_free(parsed,size);
config_str models = yon_config_load(yon_debug_output("%s\n",get_models_command),&size);
for (int i=0;i<size;i+=2){
models[i] = yon_char_divide_search(models[i],"\n",-1);
models[i+1] = yon_char_divide_search(models[i+1],"\n",-1);
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->KeyboardModelCombo),models[i],_(models[i+1]));
void on_layout_move_up(GtkWidget *, main_window *widgets){
GtkTreeModel *model;
GtkTreeIter iter,*previter;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->KeyboardLayoutTree)),&model,&iter)){
previter = gtk_tree_iter_copy(&iter);
if (!gtk_tree_model_iter_previous(model,previter)) return;
char *a, *b;
gtk_tree_model_get(model,&iter,0,&a,-1);
gtk_tree_model_get(model,previter,0,&b,-1);
char *layouts = config(xkblayout_parameter);
char *temp = yon_char_swap_element(layouts,a,b,",");
yon_config_register(xkblayout_parameter,xkblayout_parameter_command,temp);
free(temp);
gtk_list_store_swap(widgets->LayoutsList,&iter,previter);
gtk_tree_iter_free(previter);
}
if (size) yon_char_parsed_free(models,size);
}
char *keyboard = config(xkbmodel_parameter);
char *option_parameter = config(xkboptions_parameter);
char *layouts = config(xkblayout_parameter);
char *variant = config(xkbvariant_parameter);
void on_layout_move_down(GtkWidget *, main_window *widgets){
GtkTreeModel *model;
GtkTreeIter iter,*nextiter;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->KeyboardLayoutTree)),&model,&iter)){
nextiter = gtk_tree_iter_copy(&iter);
if (!gtk_tree_model_iter_next(model,nextiter)) return;
char *a, *b;
gtk_tree_model_get(model,&iter,0,&a,-1);
gtk_tree_model_get(model,nextiter,0,&b,-1);
char *layouts = config(xkblayout_parameter);
char *temp = yon_char_swap_element(layouts,a,b,",");
yon_config_register(xkblayout_parameter,xkblayout_parameter_command,temp);
free(temp);
gtk_list_store_swap(widgets->LayoutsList,&iter,nextiter);
gtk_tree_iter_free(nextiter);
}
}
if (!yon_char_is_empty(keyboard)){
gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo),keyboard);
} else {
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo),0);
void on_compose_switch(GtkWidget *,int status,main_window *widgets){
switch(status){
case 0:{
yon_config_remove_element(xkboptions_parameter,"compose:rwin",",");
} break;
case 1:{
yon_config_append_element(xkboptions_parameter,"compose:rwin",",");
} break;
}
yon_keyboard_init(widgets);
}
if (!yon_char_is_empty(option_parameter)){
gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->LayoutBindingCombo),option_parameter);
} else{
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LayoutBindingCombo),0);
void on_scroll_lock_switch(GtkWidget *,int status,main_window *widgets){
switch(status){
case 0:{
yon_config_remove_element(xkboptions_parameter,"grp_led:scroll",",");
} break;
case 1:{
yon_config_append_element(xkboptions_parameter,"grp_led:scroll",",");
} break;
}
yon_keyboard_init(widgets);
}
if (!yon_char_is_empty(layouts)){
int parsed_size;
config_str parsed = yon_char_parse(layouts,&parsed_size,",");
void on_layout_default_sensitive_toggled(GtkWidget *, int status, main_window *widgets){
gtk_widget_set_sensitive(widgets->KeyboardLayoutTree,!status);
gtk_widget_set_sensitive(widgets->KeyboardLayoutAddButton,!status);
if (status){
gtk_widget_set_sensitive(widgets->KeyboardLayoutRemoveButton,!status);
gtk_widget_set_sensitive(widgets->KeyboardLayoutMoveUpButton,!status);
gtk_widget_set_sensitive(widgets->KeyboardLayoutMoveDownButton,!status);
}else {
on_layout_selection_changed(GTK_TREE_VIEW(widgets->KeyboardLayoutTree),widgets);
GtkTreeIter iter, chiter;
GtkTreeModel *model = GTK_TREE_MODEL(widgets->LayoutList);
}
}
void on_layout_default_toggled(GtkWidget *, int status, main_window *widgets){
if (!status){
GtkTreeModel *model = GTK_TREE_MODEL(widgets->LayoutsList);
GtkTreeIter iter;
char *locales = NULL;
for_iter(model,&iter){
char *target;
gtk_tree_model_get(model,&iter,0,&target,-1);
if (yon_char_parsed_check_exist(parsed,parsed_size,target)>-1){
gtk_tree_store_set(widgets->LayoutList,&iter,2,1,3,1,-1);
if (!strcmp(variant,target)){
gtk_tree_store_set(widgets->LayoutList,&iter,4,1,-1);
} else {
gtk_tree_store_set(widgets->LayoutList,&iter,4,0,-1);
char *target, *variant;
}
for (int valid2 = gtk_tree_model_iter_children(model,&chiter,&iter);valid2;valid2 = gtk_tree_model_iter_next(model,&chiter)){
gtk_tree_model_get(model,&chiter,0,&target,-1);
if (yon_char_parsed_check_exist(parsed,parsed_size,target)>-1){
gtk_tree_store_set(widgets->LayoutList,&chiter,2,1,3,1,-1);
if (!strcmp(variant,target)){
gtk_tree_store_set(widgets->LayoutList,&chiter,4,1,-1);
}
} else {
gtk_tree_store_set(widgets->LayoutList,&chiter,3,0,4,0,-1);
}
}
gtk_tree_model_get(model,&iter,0,&target,1,&variant,-1);
char *key = NULL;
if (!yon_char_is_empty(variant)){
key = yon_char_unite(target,"_",variant,NULL);
} else {
gtk_tree_store_set(widgets->LayoutList,&iter,3,0,4,0,-1);
key = yon_char_new(target);
}
char *temp = yon_char_append_element(locales?locales:"",key,",");
if (!yon_char_is_empty(locales)) free(locales);
locales = temp;
}
if (!yon_char_is_empty(locales)){
yon_config_register(xkblayout_parameter,xkblayout_parameter_command,locales);
}
} else {
}
}
void on_keyboard_layout_chosen(GtkCellRenderer *, gchar *path, main_window *widgets){
GtkTreeIter iter, itar, itor, itur;
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(widgets->LayoutsFilter),&iter,path);
int status;
char *target;
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(widgets->LayoutsFilter),&itur,&iter);
gtk_tree_model_get(GTK_TREE_MODEL(widgets->LayoutList),&itur,4,&status,1,&target,-1);
// g_signal_handlers_block_by_func(self,G_CALLBACK(on_keyboard_layout_chosen),widgets);
for_iter(GTK_TREE_MODEL(widgets->LayoutsFilter),&itar){
gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(widgets->LayoutsFilter),&itor,&itar);
// gtk_tree_model_sort_convert_iter_to_child_iter(GTK_TREE_MODEL_SORT(widgets->LayoutList),&itar,&itor);
gtk_tree_store_set(widgets->LayoutList,&itor,4,0,-1);
GtkTreeIter itor_child;
if (gtk_tree_model_iter_children(GTK_TREE_MODEL(widgets->LayoutList),&itor_child,&itor)){
for(int valid2=1;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->LayoutList),&itor_child)){
gtk_tree_store_set(widgets->LayoutList,&itor_child,4,0,-1);
}
}
void on_layout_selection_changed(GtkTreeView *self,main_window *widgets){
int status = gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(self)),NULL,NULL);
gtk_widget_set_sensitive(widgets->KeyboardLayoutMoveDownButton,status);
gtk_widget_set_sensitive(widgets->KeyboardLayoutMoveUpButton,status);
gtk_widget_set_sensitive(widgets->KeyboardLayoutRemoveButton,status);
}
void on_num_lock_changed(GtkComboBox *self, main_window *){
switch (gtk_combo_box_get_active(self)){
case 0:
yon_config_remove_by_key(num_lock_boot_parameter);
break;
case 1: yon_config_register(num_lock_boot_parameter,num_lock_boot_parameter_command,"yes");
break;
case 2:yon_config_register(num_lock_boot_parameter,num_lock_boot_parameter_command,"no");
break;
}
gtk_tree_store_set(widgets->LayoutList,&itur,4,!status,-1);
// g_signal_handlers_unblock_by_func(self,G_CALLBACK(on_keyboard_layout_chosen),widgets);
if (!status){
yon_config_register(xkbvariant_parameter,xkbvariant_parameter_command,target);
}
void on_model_changed(GtkComboBoxText *self, main_window *widgets){
switch (gtk_combo_box_get_active(GTK_COMBO_BOX(self))){
case 0:
yon_config_remove_by_key(xkbmodel_parameter);
break;
default:
char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo));
yon_config_register(xkbmodel_parameter,xkbmodel_parameter_command,id);
break;
}
}
void on_options_save(GtkWidget *,main_window *widgets){
char *main_id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->KeyboardLayoutChangingCombo));
int parameter_parsed_size;
config_str parameter_parsed = NULL;
yon_char_parsed_add_or_create_if_exists(parameter_parsed,&parameter_parsed_size,!yon_char_is_empty(main_id)?main_id:"");
char *final_parameter = yon_char_parsed_to_string_full(parameter_parsed,parameter_parsed_size,",");
yon_char_parsed_free(parameter_parsed,parameter_parsed_size);
if (!yon_char_is_empty(final_parameter)){
yon_config_register(xkboptions_parameter,xkboptions_parameter_command,final_parameter);
free(final_parameter);
} else {
yon_config_remove_by_key(xkbvariant_parameter);
yon_config_remove_by_key(xkboptions_parameter);
}
}

@ -240,4 +240,4 @@ int yon_language_save(main_window *widgets){
void yon_language_init(main_window *widgets){
yon_language_update(widgets);
}
}

@ -449,7 +449,8 @@ void on_page_cancel_clicked(GtkWidget *, main_window *widgets){
data->title=WARNING_TITLE_LABEL;
if (yon_confirmation_dialog_call(widgets->MainWindow,data)==GTK_RESPONSE_ACCEPT ){
if (main_config.install_thread){
gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_WELCOME);
gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_LICENCE);
on_page_prev_clicked(NULL,widgets);
gtk_widget_hide(gtk_widget_get_parent(widgets->InstallationProgress));
gtk_widget_hide(gtk_widget_get_parent(widgets->PackageInstallationProgress));
pthread_cancel((pthread_t)main_config.install_thread);

@ -571,6 +571,16 @@ void config_init(){
yon_char_parsed_free(parsed,parsed_size);
}
yon_char_parsed_free(languages,size);
main_config.layouts_store = gtk_tree_store_new(4,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN);
main_config.variants_list = yon_config_load(layouts_variant_command,&main_config.variants_size);
main_config.layouts_list = yon_config_load(layouts_command,&main_config.layouts_size);
for (int i=0;i<main_config.variants_size;i++){
yon_char_remove_last_symbol(main_config.variants_list[i],'\n');
}
for (int i=0;i<main_config.layouts_size;i++){
yon_char_remove_last_symbol(main_config.layouts_list[i],'\n');
}
}
// void on_root_get_root(char *argline){
@ -839,7 +849,6 @@ void yon_main_window_create(main_window *widgets){
widgets->WelcomeToggle=yon_gtk_builder_get_widget(builder,"WelcomeToggle");
widgets->LicenceToggle=yon_gtk_builder_get_widget(builder,"LicenceToggle");
widgets->LocationToggle=yon_gtk_builder_get_widget(builder,"LocationToggle");
widgets->KeyboardToggle=yon_gtk_builder_get_widget(builder,"KeyboardToggle");
widgets->SectionsToggle=yon_gtk_builder_get_widget(builder,"SectionsToggle");
widgets->UsersToggle=yon_gtk_builder_get_widget(builder,"UsersToggle");
widgets->SummaryToggle=yon_gtk_builder_get_widget(builder,"SummaryToggle");
@ -944,7 +953,7 @@ void yon_main_window_create(main_window *widgets){
widgets->LanguagesFilter = GTK_TREE_MODEL(gtk_builder_get_object(builder,"LanguagesFilter"));
widgets->LayoutsFilter = GTK_TREE_MODEL(gtk_builder_get_object(builder,"LayoutsFilter"));
widgets->LayoutList = GTK_TREE_STORE(gtk_builder_get_object(builder,"LayoutList"));
widgets->LayoutsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LayoutsList"));
widgets->LanguagesTree=yon_gtk_builder_get_widget(builder,"LanguagesTree");
widgets->CountryLanguagesTree=yon_gtk_builder_get_widget(builder,"CountryLanguagesTree");
widgets->InstallerCountryList=GTK_LIST_STORE(gtk_builder_get_object(builder,"InstallerCountryList"));
@ -956,7 +965,6 @@ void yon_main_window_create(main_window *widgets){
widgets->AvailableLanguagesEntry=yon_gtk_builder_get_widget(builder,"AvailableLanguagesEntry");
widgets->AvailableLanguagesButton=yon_gtk_builder_get_widget(builder,"AvailableLanguagesButton");
widgets->LanguagesCombo=yon_gtk_builder_get_widget(builder,"LanguagesCombo");
widgets->KeyboardModelCombo=yon_gtk_builder_get_widget(builder,"KeyboardModelCombo");
widgets->LayoutBindingCombo=yon_gtk_builder_get_widget(builder,"LayoutBindingCombo");
widgets->LayoutTree=yon_gtk_builder_get_widget(builder,"LayoutTree");
widgets->AddButton=yon_gtk_builder_get_widget(builder,"AddButton");
@ -985,9 +993,18 @@ void yon_main_window_create(main_window *widgets){
widgets->RegionImage = yon_gtk_builder_get_widget(builder,"RegionImage");
widgets->RegionBox = yon_gtk_builder_get_widget(builder,"RegionBox");
widgets->RegionAspect = yon_gtk_builder_get_widget(builder,"RegionAspect");
widgets->KeyboardImage = yon_gtk_builder_get_widget(builder,"KeyboardImage");
widgets->KeyboardBox = yon_gtk_builder_get_widget(builder,"KeyboardBox");
widgets->KeyboardLayoutChosenCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"KeyboardLayoutChosenCell"));
widgets->KeyboardModelCombo = yon_gtk_builder_get_widget(builder,"KeyboardModelCombo");
widgets->KeyboardDefaultLayoutsSwitch = yon_gtk_builder_get_widget(builder,"KeyboardDefaultLayoutsSwitch");
widgets->KeyboardLayoutTree = yon_gtk_builder_get_widget(builder,"KeyboardLayoutTree");
widgets->KeyboardLayoutMoveUpButton = yon_gtk_builder_get_widget(builder,"KeyboardLayoutMoveUpButton");
widgets->KeyboardLayoutMoveDownButton = yon_gtk_builder_get_widget(builder,"KeyboardLayoutMoveDownButton");
widgets->KeyboardLayoutAddButton = yon_gtk_builder_get_widget(builder,"KeyboardLayoutAddButton");
widgets->KeyboardLayoutRemoveButton = yon_gtk_builder_get_widget(builder,"KeyboardLayoutRemoveButton");
widgets->KeyboardLayoutChangingCombo = yon_gtk_builder_get_widget(builder,"KeyboardLayoutChangingCombo");
widgets->KeyboardComposeSwitch = yon_gtk_builder_get_widget(builder,"KeyboardComposeSwitch");
widgets->KeyboardScrollLockSwitch = yon_gtk_builder_get_widget(builder,"KeyboardScrollLockSwitch");
widgets->KeyboardNumLockCombo = yon_gtk_builder_get_widget(builder,"KeyboardNumLockCombo");
widgets->AdditionalComponentsList = yon_gtk_builder_get_widget(builder,"AdditionalComponentsList");
@ -1102,12 +1119,21 @@ void yon_main_window_create(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->LocaleCell),"toggled",G_CALLBACK(on_locale_toggled),widgets);
g_signal_connect(G_OBJECT(widgets->CancelInstallButton),"clicked",G_CALLBACK(on_page_cancel_clicked),widgets);
g_signal_connect(G_OBJECT(widgets->AvailableLanguagesButton),"clicked",G_CALLBACK(on_language_clicked),widgets);
g_signal_connect(G_OBJECT(widgets->RegionCombo),"changed",G_CALLBACK(on_region_changed),widgets);
g_signal_connect(G_OBJECT(widgets->RegionSensitiveSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch),widgets->RegionCombo);
g_signal_connect(G_OBJECT(widgets->RegionSensitiveSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch),widgets->ZoneCombo);
g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_keyboard_clicked),widgets);
g_signal_connect(G_OBJECT(widgets->RemoveButton),"clicked",G_CALLBACK(on_keyboard_removed),widgets);
g_signal_connect(G_OBJECT(widgets->KeyboardLayoutTree),"cursor-changed",G_CALLBACK(on_layout_selection_changed),widgets);
g_signal_connect(G_OBJECT(widgets->KeyboardDefaultLayoutsSwitch),"state-set",G_CALLBACK(on_layout_default_toggled),widgets);
g_signal_connect(G_OBJECT(widgets->KeyboardDefaultLayoutsSwitch),"state-set",G_CALLBACK(on_layout_default_sensitive_toggled),widgets);
g_signal_connect(G_OBJECT(widgets->KeyboardLayoutMoveUpButton),"clicked",G_CALLBACK(on_layout_move_up),widgets);
g_signal_connect(G_OBJECT(widgets->KeyboardLayoutMoveDownButton),"clicked",G_CALLBACK(on_layout_move_down),widgets);
g_signal_connect(G_OBJECT(widgets->KeyboardLayoutAddButton),"clicked",G_CALLBACK(on_system_layouts_add),widgets);
g_signal_connect(G_OBJECT(widgets->KeyboardLayoutRemoveButton),"clicked",G_CALLBACK(on_system_layouts_remove),widgets);
g_signal_connect(G_OBJECT(widgets->KeyboardModelCombo),"changed",G_CALLBACK(on_model_changed),widgets);
g_signal_connect(G_OBJECT(widgets->KeyboardNumLockCombo),"changed",G_CALLBACK(on_num_lock_changed),widgets);
g_signal_connect(G_OBJECT(widgets->KeyboardComposeSwitch),"state-set",G_CALLBACK(on_compose_switch),widgets);
g_signal_connect(G_OBJECT(widgets->KeyboardScrollLockSwitch),"state-set",G_CALLBACK(on_scroll_lock_switch),widgets);
g_signal_connect(G_OBJECT(widgets->GrubInstallDevicesTree),"cursor-changed",G_CALLBACK(on_device_selection_changed),widgets);
g_signal_connect(G_OBJECT(widgets->GrubUpdateDevicesTree),"cursor-changed",G_CALLBACK(on_device_selection_changed),widgets);
@ -1127,7 +1153,6 @@ void yon_main_window_create(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->UserAddButton),"clicked",G_CALLBACK(on_user_add),widgets);
g_signal_connect(G_OBJECT(widgets->UserRootPasswordButton),"clicked",G_CALLBACK(yon_password_root_new),widgets);
g_signal_connect(G_OBJECT(widgets->BootloadDefaulOSButton),"clicked",G_CALLBACK(yon_menu_window_open),widgets);
gtk_tree_model_filter_set_visible_column(GTK_TREE_MODEL_FILTER(widgets->LayoutsFilter),3);
g_signal_connect(G_OBJECT(widgets->LanguagesTree),"cursor-changed",G_CALLBACK(on_locale_changed),widgets);
g_signal_connect(G_OBJECT(widgets->CountryLanguagesTree),"row-activated",G_CALLBACK(on_installer_language_changed),widgets);
@ -1178,7 +1203,6 @@ void yon_main_window_create(main_window *widgets){
// g_signal_connect(G_OBJECT(widgets->AdvancedAddButton),"clicked",G_CALLBACK(on_install_advanced_add_new),widgets);
g_signal_connect(G_OBJECT(widgets->AdvancedDeviceChosenCell),"toggled",G_CALLBACK(on_install_advanced_device_chosen),widgets);
// g_signal_connect(G_OBJECT(widgets->AdvancedPartChosenCell),"toggled",G_CALLBACK(on_install_advanced_partition_chosen),widgets);
g_signal_connect(G_OBJECT(widgets->KeyboardLayoutChosenCell),"toggled",G_CALLBACK(on_keyboard_layout_chosen),widgets);
// g_signal_connect(G_OBJECT(widgets->AdvancedPartitionAddBox),"add",G_CALLBACK(on_advanced_parts_added),widgets);
// g_signal_connect(G_OBJECT(widgets->AdvancedPartitionAddBox),"remove",G_CALLBACK(on_advanced_parts_removed),widgets);
g_signal_connect(G_OBJECT(widgets->StartScenarioButton),"clicked",G_CALLBACK(yon_quick_install),widgets);

@ -39,6 +39,7 @@
#define glade_path_source "/com/ublinux/ui/ubinstall-gtk-source.glade"
#define glade_path_source_element "/com/ublinux/ui/ubinstall-gtk-source-element.glade"
#define glade_locales_path "/com/ublinux/ui/ubinstall-gtk-layouts.glade"
#define glade_layouts_path "/com/ublinux/ui/ubinstall-gtk-keyboard-layouts.glade"
#define CssPath "/com/ublinux/css/ubinstall-gtk.css"
#define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL)
@ -108,6 +109,7 @@ NULL
#define get_ntp_ru_command "ubconfig --default get [network] NTPSERVERS_RU"
#define get_models_command "sed '/<\\/modelList>/q' /usr/share/X11/xkb/rules/base.xml | grep -E '^ {8,8}<name>|^ {8,8}<description>'|sed -e 's/ *<name>//g' -e 's,</name>,,g' -e 's/ *<description>//g' -e 's,</description>,,g'"
#define get_keyboard_models_command "sed -En '/^! model$/,/^ *$/!d;s/[[:blank:]]+([^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
#define check_is_password_hash(password) system(yon_char_unite("/lib/ublinux/functions is_hash_password '", password,"'",NULL))
@ -179,6 +181,8 @@ layout && /description:/ {\
#define lang_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL['ubconfig set [locale] LANG']"
#define locale_parameter "AUTOINSTALL[ubconfig set [locale] LOCALE]"
#define locale_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL['ubconfig set [locale] LOCALE']"
#define num_lock_boot_parameter "AUTOINSTALL['ubconfig set [keyboard] NUMLOCK']"
#define num_lock_boot_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL['ubconfig set [keyboard] NUMLOCK']"
/*------------------------------------------------------------*/
#define part_size_parameter "AUTOINSTALL[part_size]"
@ -278,6 +282,10 @@ layout && /description:/ {\
#define get_package_info_command(target) yon_char_append("pacman -Si ",target)
#define layouts_command "sed -En '/^! layout$/,/^ *$/!d;s/[[:blank:]]+([^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
#define layouts_variant_command "sed -En '/^! variant$/,/^ *$/!d;s/[[:blank:]]+([^ ]+)[[:blank:]]+([^ :]+):[[:blank:]]+(.*)/\\2|\\1|\\3/p' /usr/share/X11/xkb/rules/evdev.lst"
#define grp_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(grp:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
#define install_common_parameters \
AUTOINSTALL_TYPE_INSTALL,\
AUTOINSTALL_DEVICE,\
@ -409,6 +417,14 @@ typedef struct {
unsigned int cur_slide;
gboolean dry_run;
GtkTreeStore *layouts_store;
GtkListStore *models_list;
config_str variants_list;
int variants_size;
config_str layouts_list;
int layouts_size;
} config;
extern config main_config;
@ -425,7 +441,7 @@ typedef struct {
GtkBuilder *builder;
GtkListStore *DevicesList;
GtkListStore *LanguagesList;
GtkTreeStore *LayoutList;
GtkListStore *LayoutsList;
GtkListStore *PartitionsList;
GtkWidget *LoadGlobalConfigurationMenuItem;
@ -452,7 +468,6 @@ typedef struct {
GtkWidget *WelcomeToggle;
GtkWidget *LicenceToggle;
GtkWidget *LocationToggle;
GtkWidget *KeyboardToggle;
GtkWidget *SectionsToggle;
GtkWidget *UsersToggle;
GtkWidget *SummaryToggle;
@ -469,7 +484,6 @@ typedef struct {
GtkWidget *AvailableLanguagesEntry;
GtkWidget *AvailableLanguagesButton;
GtkWidget *LanguagesCombo;
GtkWidget *KeyboardModelCombo;
GtkWidget *LayoutBindingCombo;
GtkWidget *LayoutTree;
GtkWidget *AddButton;
@ -510,9 +524,18 @@ typedef struct {
GtkWidget *RegionImage;
GtkWidget *RegionBox;
GtkWidget *RegionAspect;
GtkWidget *KeyboardImage;
GtkWidget *KeyboardBox;
GtkCellRenderer *KeyboardLayoutChosenCell;
GtkWidget *KeyboardModelCombo;
GtkWidget *KeyboardDefaultLayoutsSwitch;
GtkWidget *KeyboardLayoutTree;
GtkWidget *KeyboardLayoutMoveUpButton;
GtkWidget *KeyboardLayoutMoveDownButton;
GtkWidget *KeyboardLayoutAddButton;
GtkWidget *KeyboardLayoutRemoveButton;
GtkWidget *KeyboardLayoutChangingCombo;
GtkWidget *KeyboardComposeSwitch;
GtkWidget *KeyboardScrollLockSwitch;
GtkWidget *KeyboardNumLockCombo;
GtkWidget *Notebook;
GtkWidget *LicenceLabel;
@ -1030,6 +1053,21 @@ struct locales_struct {
GtkListStore *list;
};
typedef struct {
GtkWidget *Window;
GtkWidget *StatusBox;
GtkWidget *MainTree;
GtkWidget *CancelButton;
GtkWidget *AcceptButton;
GtkWidget *OptionsFilterCombo;
GtkWidget *OptionsEntry;
GtkCellRenderer *ChosenCell;
GtkTreeStore *list;
GtkListStore *OptionsList;
GtkTreeModel *OptionsFilter;
char *parameters;
} layouts_window;
void config_init();
main_window *yon_main_window_complete();
ubinstall_language_window *yon_ubinstall_language_new();
@ -1204,7 +1242,6 @@ advanced_partition *yon_advanced_partition_new();
void on_advanced_part_remove(GtkWidget *self, main_window *widgets);
int yon_advanced_get_part_size(main_window *widgets);
void yon_advanced_partition_clear(main_window *widgets);
void yon_layout_build(char *key, GHashTable *value, main_window *widgets);
void yon_os_row_setup(os_row *row, char *name, char *version,char *tags, char *description);
os_row *yon_os_row_new();
void yon_quick_install(GtkWidget *, main_window *widgets);
@ -1280,4 +1317,24 @@ void on_language_default_toggled(GtkWidget *, int status, main_window *widgets);
void on_locale_toggled(GtkCellRenderer *, gchar *path, main_window *widgets);
void yon_language_update(main_window *widgets);
int yon_language_save(main_window *widgets);
void yon_language_init(main_window *widgets);
void yon_language_init(main_window *widgets);
void on_layouts_accept(GtkWidget *self, layouts_window *window);
void on_layouts_chosen(GtkCellRenderer *, gchar *path, layouts_window *window);
void on_system_layouts_add(GtkWidget *, main_window *widgets);
layouts_window *yon_layouts_window_new();
void yon_layouts_add(GtkTreeView *, GtkListStore *, main_window *widgets);
void yon_layouts_remove(GtkTreeView *tree, GtkListStore *cur_list, main_window *widgets);
void on_system_layouts_remove(GtkWidget *, main_window *widgets);
config_str yon_layout_get_children(char *layout_id, int *size);
void yon_layout_load(char *layout,main_window *widgets);
void yon_layout_build(layouts_window *window);
void on_layout_move_up(GtkWidget *, main_window *widgets);
void on_layout_move_down(GtkWidget *, main_window *widgets);
void on_compose_switch(GtkWidget *,int status,main_window *widgets);
void on_scroll_lock_switch(GtkWidget *,int status,main_window *widgets);
void on_layout_default_sensitive_toggled(GtkWidget *, int status, main_window *widgets);
void on_layout_default_toggled(GtkWidget *, int status, main_window *widgets);
void on_layout_selection_changed(GtkTreeView *self,main_window *widgets);
void on_num_lock_changed(GtkComboBox *self, main_window *);
void on_model_changed(GtkComboBoxText *self, main_window *widgets);
void on_options_save(GtkWidget *,main_window *widgets);

@ -42,7 +42,6 @@ NULL)
#define ZONE_LABEL _("Zone:")
#define LANGUAGE_LABEL _("Language:")
#define KEYBOARD_MODEL_LABEL _("Keyboard model:")
#define LAYOUT_CHANGING_LABEL _("Layout changing:")
#define DEFAUL_LAYOUT_LABEL _("Default layout (ru)")
#define DEFINE_LABEL _("Define")
#define SETTINGS_LABEL _("Settings")
@ -233,8 +232,43 @@ NULL)
#define PACKAGE_NOT_FOUND_LABEL _("Package were not found")
#define PACKAGE_INFO_LABEL _("Package information")
#define LICENCE_AGREE_LABEL _("Yes, I agree to the License Agreement")
#define LICENCE_DISAGREE_LABEL _("No, i do not agree")
#define LICENCE_DISAGREE_LABEL _("No, I do not agree")
#define ADD_LANGUAGE_TITLE_LABEL _("Add locales")
#define LAYOUT_REMOVE_LABEL _("Are you sure you want to remove current layout?")
#define LAYOUT_REMOVE_TITLE_LABEL _("Layout deletion")
#define MANUAL_LABEL _("Manual input:")
#define MODEL_LABEL _("Keyboard model:")
#define KEYBOARD_LAYOUTS_LABEL _("Keyboard layouts:")
#define MOVE_UP_LABEL _("Move layout up")
#define MOVE_DOWN_LABEL _("Move layout down")
#define ADD_LABEL _("Add layout")
#define REMOVE_LABEL _("Remove layout")
#define KEYBOARD_MODEL_LABEL _("Keyboard model:")
#define LAYOUTS_LABEL _("Layouts:")
#define DEFAULT_LAYOUT_LABEL _("Default layout")
#define LAYOUT_CHANGING_LABEL _("Changing the layout:")
#define SET_COMPOSE_LABEL _("Set Compose (Multi_Key) to the right Win key")
#define SCROLL_LOCK_LABEL _("Scroll Lock indication when switching layouts")
#define NUMLOCK_LABEL _("NumLock:")
#define KEYBOARD_LAYOUT_LABEL _("Keyboard layout")
#define DESIGNATION_LABEL _("Designation")
#define VARIANT_LABEL _("Variant")
#define NAME_LABEL _("Name")
#define DESCRIPTION_LABEL _("Description")
#define OPTIONS_LABEL _("Options:")
#define MANUAL_LABEL _("Manual input:")
#define KEYBOARD_TITLE_INFO_LABEL _("Specify your preferred keyboard settings")
#define AVAILABLE_LOCALES_LABEL _("Available locales in the system:")
#define SYSTEM_LOCALE_LABEL _("System locale")
#define LOCALE_LABEL _("Locale")
#define LOCALE_LANGUAGE_LABEL _("Language")
#define TERRITORY_LABEL _("Territory")
#define LANGUAGE_TITLE_INFO_LABEL _("Specify your preferred system languages")
#define REMOVE_LOCALE_TOOLTIP_LABEL _("Remove locale")
// #define _LABEL _("<i><b>Package:</b></i>")
// #define _LABEL _("<i><b>Module:</b></i>")
// #define _LABEL _("New section at")

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface domain="ubl-settings-keyboard">
<requires lib="gtk+" version="3.24"/>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.accept-symbolic</property>
</object>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic</property>
</object>
<object class="GtkWindow" id="Window">
<property name="width-request">450</property>
<property name="height-request">550</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-keyboard</property>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkTreeView" id="LayoutsTree">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="headers-visible">False</property>
<property name="search-column">1</property>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">column</property>
<child>
<object class="GtkCellRendererToggle" id="ChosenCell"/>
<attributes>
<attribute name="active">3</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">column</property>
<property name="sort-column-id">0</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child type="titlebar">
<object class="GtkHeaderBar" id="headerBar">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child type="title">
<object class="GtkLabel" id="headerTopic">
<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">2</property>
<property name="label" translatable="yes">Keyboard</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="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-top">6</property>
<property name="margin-bottom">6</property>
<property name="pixel-size">32</property>
<property name="icon-name">com.ublinux.ubl-settings-keyboard</property>
</object>
</child>
<child>
<object class="GtkButton" id="CancelButton">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image2</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="AcceptButton">
<property name="label" translatable="yes">Accept</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image1</property>
</object>
<packing>
<property name="pack-type">end</property>
<property name="position">2</property>
</packing>
</child>
<style>
<class name="toolbar"/>
</style>
</object>
</child>
</object>
</interface>

@ -121,23 +121,16 @@
<object class="GtkTreeModelFilter" id="LanguagesFilter">
<property name="child-model">LanguagesList</property>
</object>
<object class="GtkTreeStore" id="LayoutList">
<object class="GtkListStore" id="LayoutsList">
<columns>
<!-- column-name Id -->
<column type="gchararray"/>
<!-- column-name RenderName -->
<!-- column-name Variant -->
<column type="gchararray"/>
<!-- column-name Name -->
<column type="gchararray"/>
<!-- column-name Visible -->
<column type="gboolean"/>
<!-- column-name Active -->
<column type="gboolean"/>
<!-- column-name MainLayout -->
<column type="gboolean"/>
</columns>
</object>
<object class="GtkTreeModelFilter" id="LayoutsFilter">
<property name="child-model">LayoutList</property>
</object>
<object class="GtkListStore" id="LocaleList"/>
<object class="GtkSpinner" id="MainSpinner">
<property name="visible">True</property>
@ -252,12 +245,12 @@
<object class="GtkImage" id="image13">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.increase-symbolic</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.pan-up</property>
</object>
<object class="GtkImage" id="image14">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.trash-symbolic</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.pan-down</property>
</object>
<object class="GtkImage" id="image15">
<property name="visible">True</property>
@ -349,6 +342,16 @@
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.trash-symbolic</property>
</object>
<object class="GtkImage" id="image31">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.increase-symbolic</property>
</object>
<object class="GtkImage" id="image32">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.trash-symbolic</property>
</object>
<object class="GtkImage" id="image36">
<property name="visible">True</property>
<property name="can-focus">False</property>
@ -777,6 +780,7 @@ agreement</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="tab-pos">left</property>
<property name="show-tabs">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
@ -1169,7 +1173,7 @@ agreement</property>
</child>
<child>
<object class="GtkRadioButton" id="LicenseDisgreeRadio">
<property name="label" translatable="yes">No, i do not agree</property>
<property name="label" translatable="yes">No, I do not agree</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">False</property>
@ -3634,6 +3638,110 @@ agreement</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<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">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">10</property>
<property name="margin-right">10</property>
<property name="margin-start">10</property>
<property name="margin-end">10</property>
<property name="spacing">5</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">48</property>
<property name="icon-name">com.ublinux.ubinstall-gtk</property>
<property name="icon_size">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="WelcomeTitleLabel30">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Language</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"/>
<attribute name="scale" value="1"/>
<attribute name="foreground" value="#33722f2e7a06"/>
<attribute name="absolute-size" value="18432"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="WelcomeInfoLabel30">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Specify your preferred system languages</property>
<property name="justify">center</property>
<property name="wrap">True</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="semibold"/>
</attributes>
</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">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">-1</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>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
@ -3678,7 +3786,7 @@ agreement</property>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
<property name="position">1</property>
</packing>
</child>
<child>
@ -3698,6 +3806,9 @@ agreement</property>
<property name="can-focus">True</property>
<property name="model">LanguageList</property>
<property name="search-column">0</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">System locale</property>
@ -3767,7 +3878,7 @@ agreement</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Add locale</property>
<property name="tooltip-text" translatable="yes">Add locales</property>
<property name="image">image29</property>
<style>
<class name="thin"/>
@ -3784,7 +3895,7 @@ agreement</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Remove language</property>
<property name="tooltip-text" translatable="yes">Remove locale</property>
<property name="image">image30</property>
<style>
<class name="thin"/>
@ -3807,7 +3918,7 @@ agreement</property>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">2</property>
</packing>
</child>
</object>
@ -3936,63 +4047,23 @@ agreement</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<attributes>
<attribute name="weight" value="bold"/>
<attribute name="scale" value="1"/>
<attribute name="foreground" value="#33722f2e7a06"/>
<attribute name="size" value="15360"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0</property>
<property name="shadow-type">none</property>
<child>
<object class="GtkImage" id="KeyboardImage">
<property name="width-request">1</property>
<property name="height-request">1</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child type="label_item">
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<property name="spacing">6</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel">
<object class="GtkLabel" id="label5">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Keyboard model:</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="expand">False</property>
@ -4003,16 +4074,13 @@ agreement</property>
<child>
<object class="GtkComboBoxText" id="KeyboardModelCombo">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<items>
<item id="pc105" translatable="yes">Default (Regular 105-key)</item>
</items>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
<property name="position">1</property>
</packing>
</child>
</object>
@ -4028,147 +4096,243 @@ agreement</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Layout changing:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="LayoutBindingCombo">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="active">0</property>
<items>
<item id="grp:lalt_lshift_toggle,grp_led:scroll,compose:rwin" translatable="yes">Default (L_Alt + L_Shift)</item>
<item id="grp:lalt_toggle" translatable="yes">Left Alt</item>
<item id="grp:caps_toggle" translatable="yes">Caps Lock</item>
<item id="grp:shift_caps_toggle" translatable="yes">Shift + Caps Lock</item>
<item id="grp:alt_caps_toggle" translatable="yes">Alt + Caps Lock</item>
<item id="grp:alt_shift_toggle" translatable="yes">Alt + Shift</item>
<item id="grp:ctrl_shift_toggle" translatable="yes">Ctrl + Shift</item>
<item id="grp:shifts_toggle" translatable="yes">Both Shift together</item>
<item id="grp:alts_toggle" translatable="yes">Both Alt together</item>
<item id="grp:ctrls_toggle" translatable="yes">Both Ctrl together</item>
<item id="grp:lctrl_lshift_toggle" translatable="yes">Left Ctrl+Left Shift</item>
<item id="grp:rctrl_rshift_toggle" translatable="yes">Right Ctrl+Right Shift</item>
<item id="grp:ctrl_alt_toggle" translatable="yes">Alt+Ctrl</item>
<item id="grp:lalt_lshift_toggle" translatable="yes">Left Alt+Left Shift</item>
<item id="grp:alt_space_toggle" translatable="yes">Alt+Space</item>
<item id="grp:menu_toggle" translatable="yes">Menu</item>
<item id="grp:lwin_toggle" translatable="yes">Left Win</item>
<item id="grp:win_space_toggle" translatable="yes">Win+Space</item>
<item id="grp:rwin_toggle" translatable="yes">Right Win</item>
<item id="grp:lshift_toggle" translatable="yes">Left Shift</item>
<item id="grp:rshift_toggle" translatable="yes">Right Shift</item>
<item id="grp:lctrl_toggle" translatable="yes">Left Ctrl</item>
<item id="grp:rctrl_toggle" translatable="yes">Right Ctrl</item>
<item id="grp:sclk_toggle" translatable="yes">Scroll Lock</item>
<item id="grp:lctrl_lwin_toggle" translatable="yes">Left Ctrl+Left Win</item>
</items>
</object>
<packing>
<property name="expand">True</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>
</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>
<property name="spacing">5</property>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<property name="min-content-height">128</property>
<child>
<object class="GtkTreeView" id="LayoutTree">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">LayoutsFilter</property>
<property name="search-column">0</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkTreeViewColumn">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">10</property>
<child>
<object class="GtkCellRendererToggle" id="KeyboardLayoutChosenCell"/>
<attributes>
<attribute name="active">4</attribute>
</attributes>
<object class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Layouts:</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Layout</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
<object class="GtkSwitch" id="KeyboardDefaultLayoutsSwitch">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Default layout</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">0</property>
</packing>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Designation</property>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="shadow-type">in</property>
<property name="min-content-height">100</property>
<property name="max-content-height">150</property>
<child>
<object class="GtkTreeView" id="KeyboardLayoutTree">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="model">LayoutsList</property>
<property name="headers-clickable">False</property>
<property name="search-column">0</property>
<property name="enable-grid-lines">both</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Keyboard layout</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Designation</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Variant</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton" id="KeyboardLayoutMoveUpButton">
<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">Move layout up</property>
<property name="image">image13</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="KeyboardLayoutMoveDownButton">
<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">Move layout down</property>
<property name="image">image14</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="KeyboardLayoutAddButton">
<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">Add layout</property>
<property name="image">image31</property>
<style>
<class name="thin"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="KeyboardLayoutRemoveButton">
<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">Remove layout</property>
<property name="image">image32</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>
<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">1</property>
</packing>
</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>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkButton" id="AddButton">
<object class="GtkLabel" id="label6">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Add layouts</property>
<property name="image">image13</property>
<style>
<class name="thin"/>
</style>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Changing the layout:</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="expand">False</property>
@ -4177,15 +4341,120 @@ agreement</property>
</packing>
</child>
<child>
<object class="GtkButton" id="RemoveButton">
<object class="GtkComboBoxText" id="KeyboardLayoutChangingCombo">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Remove layout</property>
<property name="image">image14</property>
<style>
<class name="thin"/>
</style>
<property name="can-focus">False</property>
<items>
<item translatable="yes">Default</item>
</items>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</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="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label8">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">start</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<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">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkSwitch" id="KeyboardComposeSwitch">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Set Compose (Multi_Key) to the right Win key</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">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkSwitch" id="KeyboardScrollLockSwitch">
<property name="visible">True</property>
<property name="can-focus">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Scroll Lock indication when switching layouts</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">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
@ -4197,14 +4466,56 @@ agreement</property>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">4</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">NumLock:</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="KeyboardNumLockCombo">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<items>
<item translatable="yes">Default</item>
<item translatable="yes">On</item>
<item translatable="yes">Off</item>
</items>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">6</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">4</property>
<property name="position">1</property>
</packing>
</child>
</object>

Loading…
Cancel
Save