diff --git a/gresource.xml b/gresource.xml
index ead2b57..cfb8b35 100644
--- a/gresource.xml
+++ b/gresource.xml
@@ -20,6 +20,7 @@
ubinstall-gtk-source.glade
ubinstall-gtk-source-element.glade
ubinstall-gtk-layouts.glade
+ ubinstall-gtk-keyboard-layouts.glade
ubinstall-gtk.css
diff --git a/locale/ubinstall-gtk.pot b/locale/ubinstall-gtk.pot
index 73f1292..608a5bb 100644
--- a/locale/ubinstall-gtk.pot
+++ b/locale/ubinstall-gtk.pot
@@ -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 ""
\ No newline at end of file
diff --git a/locale/ubinstall-gtk_ru.po b/locale/ubinstall-gtk_ru.po
index 38b3438..c690083 100644
--- a/locale/ubinstall-gtk_ru.po
+++ b/locale/ubinstall-gtk_ru.po
@@ -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 ""
"Внимание! В выбранный раздел будет произведена установка системы. "
"Если не менять тип ФС и не форматировать, все данные на разделе будут "
@@ -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 "Package:"
+msgstr "Пакет:"
+
+#: source/ubl-strings.h:331
+msgid "Module:"
+msgstr "Модуль:"
+
+#: 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 ""
"Attention! 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 "Package:"
-msgstr "Пакет:"
+#: source/ubl-strings.h:20
+msgid "System locale"
+msgstr "Язык системы"
-#: source/ubl-strings.h:331
-msgid "Module:"
-msgstr "Модуль:"
+#: 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 "Удалить локаль"
\ No newline at end of file
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index 797d534..eb5a90b 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -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
diff --git a/source/ubinstall-gtk-decorations.c b/source/ubinstall-gtk-decorations.c
index 9545480..603f6d8 100644
--- a/source/ubinstall-gtk-decorations.c
+++ b/source/ubinstall-gtk-decorations.c
@@ -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);
diff --git a/source/ubinstall-gtk-keyboard.c b/source/ubinstall-gtk-keyboard.c
index 0c2f096..9ff1a63 100644
--- a/source/ubinstall-gtk-keyboard.c
+++ b/source/ubinstall-gtk-keyboard.c
@@ -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;iKeyboardModelCombo),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;iKeyboardDefaultLayoutsSwitch),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;iKeyboardLayoutChangingCombo),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,¤t,-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;ilist),&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;ilist),&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;iLayoutList,&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;iLayoutsList,&iter);
+ gtk_list_store_set(widgets->LayoutsList,&iter,0,parsed[0],1,parsed[1],2,_(parsed[2]),-1);
+ }
+ }
+
+ } else {
+ for (int i=0;iLayoutsList,&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;ilist,&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;klist,&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;iKeyboardModelCombo),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,¶meter_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);
}
}
\ No newline at end of file
diff --git a/source/ubinstall-gtk-language.c b/source/ubinstall-gtk-language.c
index ff6041b..0c0b0bb 100644
--- a/source/ubinstall-gtk-language.c
+++ b/source/ubinstall-gtk-language.c
@@ -240,4 +240,4 @@ int yon_language_save(main_window *widgets){
void yon_language_init(main_window *widgets){
yon_language_update(widgets);
-}
\ No newline at end of file
+}
diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c
index 3be4fcd..ba60189 100644
--- a/source/ubinstall-gtk-page-switch.c
+++ b/source/ubinstall-gtk-page-switch.c
@@ -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);
diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c
index a268a84..5d0f8f5 100644
--- a/source/ubinstall-gtk.c
+++ b/source/ubinstall-gtk.c
@@ -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;iWelcomeToggle=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);
diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h
index be3bc1e..5d50692 100755
--- a/source/ubinstall-gtk.h
+++ b/source/ubinstall-gtk.h
@@ -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}|^ {8,8}'|sed -e 's/ *//g' -e 's,,,g' -e 's/ *//g' -e 's,,,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);
\ No newline at end of file
+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);
\ No newline at end of file
diff --git a/source/ubl-strings.h b/source/ubl-strings.h
index a9931c5..76ad8b1 100644
--- a/source/ubl-strings.h
+++ b/source/ubl-strings.h
@@ -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 _("Package:")
// #define _LABEL _("Module:")
// #define _LABEL _("New section at")
diff --git a/ubinstall-gtk-keyboard-layouts.glade b/ubinstall-gtk-keyboard-layouts.glade
new file mode 100644
index 0000000..7a0cb5a
--- /dev/null
+++ b/ubinstall-gtk-keyboard-layouts.glade
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
diff --git a/ubinstall-gtk.glade b/ubinstall-gtk.glade
index 835983a..4ec67a7 100644
--- a/ubinstall-gtk.glade
+++ b/ubinstall-gtk.glade
@@ -121,23 +121,16 @@
LanguagesList
-
+
-
+
+
+
-
-
-
-
-
-
-
- LayoutList
-
True
@@ -252,12 +245,12 @@
True
False
- com.ublinux.libublsettingsui-gtk3.increase-symbolic
+ com.ublinux.libublsettingsui-gtk3.pan-up
True
False
- com.ublinux.libublsettingsui-gtk3.trash-symbolic
+ com.ublinux.libublsettingsui-gtk3.pan-down
True
@@ -349,6 +342,16 @@
False
com.ublinux.libublsettingsui-gtk3.trash-symbolic
+
+ True
+ False
+ com.ublinux.libublsettingsui-gtk3.increase-symbolic
+
+
+ True
+ False
+ com.ublinux.libublsettingsui-gtk3.trash-symbolic
+
True
False
@@ -777,6 +780,7 @@ agreement
5
5
left
+ False
True
@@ -1169,7 +1173,7 @@ agreement
- No, i do not agree
+ No, I do not agree
True
True
False
@@ -3634,6 +3638,110 @@ agreement
False
vertical
5
+
+
+ True
+ False
+ vertical
+ 5
+
+
+ True
+ False
+ 10
+ 10
+ 10
+ 10
+ 5
+
+
+ True
+ False
+ 48
+ com.ublinux.ubinstall-gtk
+ 0
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ vertical
+
+
+ True
+ False
+ Language
+ True
+ 0
+
+
+
+
+
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ Specify your preferred system languages
+ center
+ True
+ 0
+
+
+
+
+
+ False
+ True
+ 1
+
+
+
+
+ True
+ True
+ 1
+
+
+
+
+ False
+ True
+ -1
+
+
+
+
+ True
+ False
+
+
+ False
+ True
+ 1
+
+
+
+
+ False
+ True
+ 0
+
+
True
@@ -3678,7 +3786,7 @@ agreement
False
True
- 0
+ 1
@@ -3698,6 +3806,9 @@ agreement
True
LanguageList
0
+
+
+
System locale
@@ -3767,7 +3878,7 @@ agreement
True
True
True
- Add locale
+ Add locales
image29
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ True
+ True
+ Move layout down
+ image14
+
+
+
+ False
+ True
+ 1
+
+
+
+
+ True
+ False
+ True
+ True
+ Add layout
+ image31
+
+
+
+ False
+ True
+ 2
+
+
+
+
+ True
+ False
+ True
+ True
+ Remove layout
+ image32
+
+
+
+ False
+ True
+ 3
+
+
+
+
+ False
+ True
+ 1
+
+
+ True
+ True
+ 1
+
+
+ True
+ True
+ 1
+
True
True
- 0
+ 1
True
False
- vertical
5
-
+
True
- True
- True
- Add layouts
- image13
-
+ False
+ Changing the layout:
+ 1
False
@@ -4177,15 +4341,120 @@ agreement
-
+
True
- True
- True
- Remove layout
- image14
-
+ False
+
+ - Default
+
+
+
+ True
+ True
+ 1
+
+
+
+
+ False
+ True
+ 2
+
+
+
+
+ True
+ False
+ 5
+
+
+ True
+ False
+ start
+ 1
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ vertical
+ 5
+
+
+ True
+ False
+ 5
+
+
+ True
+ True
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ Set Compose (Multi_Key) to the right Win key
+
+
+ False
+ True
+ 1
+
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ 5
+
+
+ True
+ True
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ Scroll Lock indication when switching layouts
+
+
+ False
+ True
+ 1
+
+
+
+
+ False
+ True
+ 1
+
+
False
@@ -4197,14 +4466,56 @@ agreement
False
True
- 1
+ 4
+
+
+
+
+ True
+ False
+ 5
+
+
+ True
+ False
+ NumLock:
+ 1
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ 0
+
+ - Default
+ - On
+ - Off
+
+
+
+ True
+ True
+ 1
+
+
+
+
+ False
+ True
+ 6
False
True
- 4
+ 1