From 2a7069d2e76f9ccda32ae23dc7cc99ab1eba4f5d Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 7 Nov 2025 11:39:54 +0600 Subject: [PATCH 01/24] WIP keyboard rework --- source/CMakeLists.txt | 3 + source/ubl-settings-keyboard-layouts.c | 185 ++++++++++++ source/ubl-settings-keyboard-options.c | 84 ++++++ source/ubl-settings-keyboard-save.c | 104 +++++++ source/ubl-settings-keyboard.c | 391 +++---------------------- source/ubl-settings-keyboard.h | 47 ++- ubl-settings-keyboard-layouts.glade | 11 +- ubl-settings-keyboard.glade | 193 +++++++++--- 8 files changed, 586 insertions(+), 432 deletions(-) create mode 100644 source/ubl-settings-keyboard-layouts.c create mode 100644 source/ubl-settings-keyboard-options.c create mode 100644 source/ubl-settings-keyboard-save.c diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 5cabe32..416c8fd 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -74,6 +74,9 @@ endif() set(SOURCE_FILES ubl-settings-keyboard.c + ubl-settings-keyboard-layouts.c + ubl-settings-keyboard-options.c + ubl-settings-keyboard-save.c ubl-settings-keyboard.h ubl-strings.h ) diff --git a/source/ubl-settings-keyboard-layouts.c b/source/ubl-settings-keyboard-layouts.c new file mode 100644 index 0000000..335824f --- /dev/null +++ b/source/ubl-settings-keyboard-layouts.c @@ -0,0 +1,185 @@ +#include "ubl-settings-keyboard.h" + +void on_layouts_accept(GtkWidget *self, layouts_window *window){ + main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets"); + gtk_list_store_clear(widgets->LayoutsList); + GtkTreeModel *model = GTK_TREE_MODEL(window->list); + GtkTreeIter window_iter; + char *save_string = NULL; + for_iter(window->list,&window_iter){ + char *id, *variant, *name; + int status; + gtk_tree_model_get(model,&window_iter,0,&id,2,&name,3,&status,-1); + if (status){ + char *temp = yon_char_append_element(save_string,id,","); + if (!yon_char_is_empty(save_string)) free(save_string); + save_string = temp; + } + GtkTreeIter child_iter; + if (gtk_tree_model_iter_children(model,&child_iter,&window_iter)){ + for (int valid2=1;valid2;valid2=gtk_tree_model_iter_next(model,&child_iter)){ + gtk_tree_model_get(model,&child_iter,0,&id,1,&variant,2,&name,3,&status,-1); + if (status){ + char *full_id = yon_char_unite(id,"_",variant,NULL); + char *temp = yon_char_append_element(save_string,full_id,","); + if (!yon_char_is_empty(save_string)) free(save_string); + save_string = temp; + free(full_id); + } + } + } + } + if (!yon_char_is_empty(save_string)){ + yon_config_register(keyboard_layout_parameter,keyboard_layout_parameter_command,save_string); + } else { + yon_config_remove_by_key(keyboard_layout_parameter); + } + on_subwindow_close(self); + yon_interface_update(widgets); +} + +void on_layouts_chosen(GtkCellRenderer *, gchar *path, layouts_window *window){ + GtkTreeIter iter; + gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->list),&iter,path); + int chosen; + gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,3,&chosen,-1); + gtk_tree_store_set(GTK_TREE_STORE(window->list),&iter,3,!chosen,-1); +} + +void on_system_layouts_add(GtkWidget *, main_window *widgets){ + yon_layouts_add(GTK_TREE_VIEW(widgets->LayoutTree),widgets->LayoutsList,widgets); +} + +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"); + + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + g_signal_connect(G_OBJECT(window->ChosenCell),"toggled",G_CALLBACK(on_layouts_chosen),window); + return window; +} + +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->Window),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(keyboard_layout_parameter); + int size; + config_str parsed = yon_char_parse(languages,&size,","); + GtkTreeIter iter; + for_iter(window->list,&iter){ + int found = 0; + char *id; + 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); + } + } +} + +void yon_layouts_remove(GtkTreeView *tree, GtkListStore *cur_list, main_window *widgets){ + GtkTreeModel *model = GTK_TREE_MODEL(cur_list); + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(tree),&model,&iter)){ + GtkTreeIter iter_converted; + char *target; + gtk_tree_model_get(model,&iter,1,&target,-1); + gtk_tree_model_filter_convert_iter_to_child_iter(widgets->layoutsFilter,&iter_converted,&iter); + gtk_list_store_remove(cur_list,&iter_converted); + yon_config_remove_element(keyboard_layout_parameter,target,","); + } +} + +void on_system_layouts_remove(GtkWidget *, main_window *widgets){ + yon_layouts_remove(GTK_TREE_VIEW(widgets->LayoutTree),widgets->LayoutsList,widgets); +} + +// standard functions + +config_str yon_layout_get_children(char *layout_id, int *size){ + (*size)=0; + config_str final = NULL; + 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_layout_build(layouts_window *window){ + gtk_tree_store_clear(window->list); + GtkTreeIter parent; + GtkTreeIter iter; + int size; + 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); + +} \ No newline at end of file diff --git a/source/ubl-settings-keyboard-options.c b/source/ubl-settings-keyboard-options.c new file mode 100644 index 0000000..0e19242 --- /dev/null +++ b/source/ubl-settings-keyboard-options.c @@ -0,0 +1,84 @@ +#include "ubl-settings-keyboard.h" + + + +// void on_options_accept(GtkWidget *self, dictionary *dict){ +// main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); +// layouts_window *window = yon_dictionary_get_data(dict->first->next,layouts_window*); +// GtkTreeModel *model = GTK_TREE_MODEL(window->list); +// GtkTreeIter iter; +// char *name, *id; +// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model,&iter)){ +// gtk_tree_model_get(model,&iter,0,&id,1,&name,-1); +// gtk_entry_set_text(GTK_ENTRY(widgets->OptionsEntry),name); +// yon_config_register(options_parameter,options_parameter_command,id); + +// } +// on_subwindow_close(self); +// } + +// void on_options_open(GtkWidget *, main_window *widgets){ +// GtkBuilder *builder = gtk_builder_new_from_resource(glade_layouts_path); +// layouts_window *window = malloc(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->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree"); +// window->list = main_config.options_list; +// gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree),GTK_TREE_MODEL(window->list)); +// dictionary *dict = NULL; +// gtk_tree_view_remove_column(GTK_TREE_VIEW(window->MainTree),gtk_tree_view_get_column(GTK_TREE_VIEW(window->MainTree),0)); +// 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->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); +// g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_options_accept),dict); +// } + +// GList *yon_get_all_selected(GtkTreeView *tree, int column){ +// GtkTreeIter iter; +// GList *list = NULL; +// GtkTreeModel *model = gtk_tree_view_get_model(tree); +// for_iter(model,&iter){ +// int status; +// gtk_tree_model_get(model,&iter,column,&status,-1); +// if (status){ +// GtkTreePath *path = gtk_tree_model_get_path(model,&iter); +// list = g_list_append(list,path); +// } +// } +// return list; +// } + + + +void on_options_accept(GtkWidget *self, dictionary *dict){ + main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); + layouts_window *window = yon_dictionary_get_data(dict->first->next,layouts_window*); + GtkTreeModel *model = GTK_TREE_MODEL(window->list); + GtkTreeIter iter; + char *name, *id; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model,&iter)){ + gtk_tree_model_get(model,&iter,0,&id,1,&name,-1); + gtk_entry_set_text(GTK_ENTRY(widgets->OptionsTree),name); + yon_config_register(options_parameter,options_parameter_command,id); + + } + on_subwindow_close(self); +} + +void on_options_open(GtkWidget *, main_window *widgets){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_options_path); + layouts_window *window = malloc(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->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree"); + // window->list = main_config.options_list; + gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree),GTK_TREE_MODEL(window->list)); + dictionary *dict = NULL; + gtk_tree_view_remove_column(GTK_TREE_VIEW(window->MainTree),gtk_tree_view_get_column(GTK_TREE_VIEW(window->MainTree),0)); + 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->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_options_accept),dict); +} diff --git a/source/ubl-settings-keyboard-save.c b/source/ubl-settings-keyboard-save.c new file mode 100644 index 0000000..5112e4c --- /dev/null +++ b/source/ubl-settings-keyboard-save.c @@ -0,0 +1,104 @@ +#include "ubl-settings-keyboard.h" + +void on_save_done(main_window *, config_str output, int size){ + char *final_output = yon_char_parsed_to_string(output,size,""); + if (final_output){ + printf("%s\n",final_output); + free(final_output); + } + yon_char_parsed_free(output,size); + switch (main_config.save_config){ + case YON_CONFIG_GLOBAL: + yon_ubl_status_box_render(yon_char_get_localised_from_lib(GLOBAL_SAVE_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + case YON_CONFIG_LOCAL: + yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_SAVE_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + case YON_CONFIG_BOTH: + yon_ubl_status_box_render(yon_char_get_localised_from_lib(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); + break; + } + +} + +void on_config_global_local_save(GtkWidget *, main_window *){ + main_config.save_config=YON_CONFIG_BOTH; + yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL); +} + +void on_config_local_save(GtkWidget *, main_window *){ + main_config.save_config=YON_CONFIG_LOCAL; + yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_local_command,NULL); + +} + +void on_config_global_save(GtkWidget *, main_window *){ + main_config.save_config=YON_CONFIG_GLOBAL; + yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL); + +} + +void on_config_custom_save(GtkWidget *, main_window *){ + main_config.save_config=YON_CONFIG_LOCAL; + template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,yon_config_get_custom_command("system"),NULL); + if (window){}; +} + +void on_config_local_load(GtkWidget *,main_window *widgets){ + yon_load_proceed(YON_CONFIG_LOCAL); + yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); + yon_interface_update(widgets); + main_config.load_mode=1; +} + +void on_config_global_load(GtkWidget *,main_window *widgets){ + yon_load_proceed(YON_CONFIG_GLOBAL); + yon_ubl_status_box_render(yon_char_get_localised_from_lib(GLOBAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); + yon_interface_update(widgets); + main_config.load_mode=0; + +} + +void on_config_custom_load(GtkWidget *,main_window *widgets){ + yon_load_proceed(YON_CONFIG_CUSTOM); + textdomain(template_ui_LocaleName); + yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); + textdomain(LocaleName); + main_config.load_mode=3; + yon_interface_update(widgets); +} + +void yon_load_proceed(YON_CONFIG_TYPE type){ + yon_config_clean(); + if (!yon_char_is_empty(config_get_default_command)) + yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); + if (type==YON_CONFIG_GLOBAL){ + yon_config_load_config(type,yon_debug_output("%s\n",config_get_global_command),NULL); + } else if (type==YON_CONFIG_LOCAL){ + yon_config_load_config(type,config_get_local_command,NULL); + } else if (type==YON_CONFIG_CUSTOM){ + char *path=""; + textdomain(template_ui_LocaleName); + GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); + textdomain(LocaleName); + gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-services"); + gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL); + GtkFileFilter *filter = gtk_file_filter_new(); + gtk_file_filter_add_pattern(filter,"*.ini"); + gtk_file_filter_set_name(filter, "*.ini"); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); + gtk_widget_show(dialog); + int response = gtk_dialog_run(GTK_DIALOG(dialog)); + if (response == GTK_RESPONSE_ACCEPT){ + char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + if (!yon_char_is_empty(file)){ + path=file; + } + gtk_widget_destroy(dialog); + } else { + gtk_widget_destroy(dialog); + } + char *command = yon_config_get_custom_command(path); + yon_config_load_config(type,command,NULL); + } +} \ No newline at end of file diff --git a/source/ubl-settings-keyboard.c b/source/ubl-settings-keyboard.c index 1194b4d..46b66e5 100644 --- a/source/ubl-settings-keyboard.c +++ b/source/ubl-settings-keyboard.c @@ -2,165 +2,41 @@ config main_config; -void on_save_done(main_window *, config_str output, int size){ - char *final_output = yon_char_parsed_to_string(output,size,""); - if (final_output){ - printf("%s\n",final_output); - free(final_output); - } - yon_char_parsed_free(output,size); - switch (main_config.save_config){ - case YON_CONFIG_GLOBAL: - yon_ubl_status_box_render(yon_char_get_localised_from_lib(GLOBAL_SAVE_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); - break; - case YON_CONFIG_LOCAL: - yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_SAVE_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); - break; - case YON_CONFIG_BOTH: - yon_ubl_status_box_render(yon_char_get_localised_from_lib(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); - break; - } - -} - -void on_config_global_local_save(GtkWidget *, main_window *){ - main_config.save_config=YON_CONFIG_BOTH; - yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL); -} - -void on_config_local_save(GtkWidget *, main_window *){ - main_config.save_config=YON_CONFIG_LOCAL; - yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_local_command,NULL); - -} - -void on_config_global_save(GtkWidget *, main_window *){ - main_config.save_config=YON_CONFIG_GLOBAL; - yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL); - -} - -void on_config_custom_save(GtkWidget *, main_window *){ - main_config.save_config=YON_CONFIG_LOCAL; - template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,yon_config_get_custom_command("system"),NULL); - if (window){}; -} - -void on_config_local_load(GtkWidget *,main_window *widgets){ - yon_load_proceed(YON_CONFIG_LOCAL); - yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); - yon_interface_update(widgets); - main_config.load_mode=1; -} - -void on_config_global_load(GtkWidget *,main_window *widgets){ - yon_load_proceed(YON_CONFIG_GLOBAL); - yon_ubl_status_box_render(yon_char_get_localised_from_lib(GLOBAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); - yon_interface_update(widgets); - main_config.load_mode=0; - -} - -void on_config_custom_load(GtkWidget *,main_window *widgets){ - yon_load_proceed(YON_CONFIG_CUSTOM); - textdomain(template_ui_LocaleName); - yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE); - textdomain(LocaleName); - main_config.load_mode=3; - yon_interface_update(widgets); -} - -void yon_load_proceed(YON_CONFIG_TYPE type){ - yon_config_clean(); - if (!yon_char_is_empty(config_get_default_command)) - yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); - if (type==YON_CONFIG_GLOBAL){ - yon_config_load_config(type,yon_debug_output("%s\n",config_get_global_command),NULL); - } else if (type==YON_CONFIG_LOCAL){ - yon_config_load_config(type,config_get_local_command,NULL); - } else if (type==YON_CONFIG_CUSTOM){ - char *path=""; - textdomain(template_ui_LocaleName); - GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL); - textdomain(LocaleName); - gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-services"); - gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL); - GtkFileFilter *filter = gtk_file_filter_new(); - gtk_file_filter_add_pattern(filter,"*.ini"); - gtk_file_filter_set_name(filter, "*.ini"); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter); - gtk_widget_show(dialog); - int response = gtk_dialog_run(GTK_DIALOG(dialog)); - if (response == GTK_RESPONSE_ACCEPT){ - char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - if (!yon_char_is_empty(file)){ - path=file; - } - gtk_widget_destroy(dialog); - } else { - gtk_widget_destroy(dialog); - } - char *command = yon_config_get_custom_command(path); - yon_config_load_config(type,command,NULL); - } -} gboolean yon_interface_update(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->SystemKeyboardOptionsCombo),G_CALLBACK(on_options_open),widgets); + g_signal_handlers_block_by_func(G_OBJECT(widgets->OptionsEditButton),G_CALLBACK(on_options_open),widgets); g_signal_handlers_block_by_func(G_OBJECT(widgets->NumlockCombo),G_CALLBACK(on_num_lock_changed),widgets); gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo),0); gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumlockCombo),0); // gtk_entry_set_text(GTK_ENTRY(widgets->SystemKeyboardOptionsCombo),DEFAULT_LABEL); - GtkTreeIter iter; { - char *name = yon_config_get_by_key(model_parameter); - char *id; - if (name) { - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.models_list),&iter); - for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.models_list),&iter)){ - gtk_tree_model_get(GTK_TREE_MODEL(main_config.models_list),&iter,1,&id,-1); - if (!strcmp(name,id)){ - gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widgets->KeyboardModelCombo),&iter); - break; - } - } - } else gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo),0); + char *kbmodel = yon_config_get_by_key(model_parameter); + if (kbmodel) { + gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo),kbmodel); + } + } + { + gtk_list_store_clear(widgets->LayoutsList); + char *layouts = config(keyboard_layout_parameter); + + int layouts_parsed_size; + config_str layouts_parsed = yon_char_parse(layouts,&layouts_parsed_size,","); + for(int i=0;iNumlockCombo),1); else if (!strcmp(name,"no")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumlockCombo),2); } - else gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumlockCombo),0); - // if (main_config.layouts_store){ - // int size=0; - // name = yon_config_get_by_key(keyboard_layout_parameter); - // config_str layouts = yon_char_parse(name,&size,","); - // GtkTreeIter iter, itar; - // char *rid,*rname; - // gtk_tree_store_clear(main_config.layouts_store); - // for (int i=0;iKeyboardModelCombo),G_CALLBACK(on_model_changed),widgets); - // g_signal_handlers_unblock_by_func(G_OBJECT(widgets->OptionsButton),G_CALLBACK(on_options_open),widgets); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->OptionsEditButton),G_CALLBACK(on_options_open),widgets); g_signal_handlers_unblock_by_func(G_OBJECT(widgets->NumlockCombo),G_CALLBACK(on_num_lock_changed),widgets); return G_SOURCE_REMOVE; } @@ -193,219 +69,19 @@ void on_model_changed(GtkComboBoxText *self, main_window *widgets){ } } - -void on_options_accept(GtkWidget *self, dictionary *dict){ - main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); - layouts_window *window = yon_dictionary_get_data(dict->first->next,layouts_window*); - GtkTreeModel *model = GTK_TREE_MODEL(window->list); - GtkTreeIter iter; - char *name, *id; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model,&iter)){ - gtk_tree_model_get(model,&iter,0,&id,1,&name,-1); - gtk_entry_set_text(GTK_ENTRY(widgets->OptionsTree),name); - yon_config_register(options_parameter,options_parameter_command,id); - - } - on_subwindow_close(self); -} - -void yon_layouts_save(main_window *widgets){ - GtkTreeIter iter; - GtkTreeIter child_iter; - int size; - config_str parsed = NULL; - for_iter(widgets->layoutsFilter,&iter){ - char *name, *id; - gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(widgets->layoutsFilter),&child_iter,&iter); - gtk_tree_model_get(GTK_TREE_MODEL(main_config.layouts_store),&child_iter,0,&name,1,&id,-1); - yon_char_parsed_add_or_create_if_exists(parsed,&size,id); - } - if (parsed&&size>0){ - yon_config_register(keyboard_layout_parameter,keyboard_layout_parameter_command,yon_char_parsed_to_string(parsed,size,",")); - yon_char_parsed_free(parsed,size); - } else { - yon_config_remove_by_key(keyboard_layout_parameter); - } -} - -void on_options_open(GtkWidget *, main_window *widgets){ - GtkBuilder *builder = gtk_builder_new_from_resource(glade_layouts_path); - layouts_window *window = malloc(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->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree"); - window->list = main_config.options_list; - gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree),GTK_TREE_MODEL(window->list)); - dictionary *dict = NULL; - gtk_tree_view_remove_column(GTK_TREE_VIEW(window->MainTree),gtk_tree_view_get_column(GTK_TREE_VIEW(window->MainTree),0)); - 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->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_options_accept),dict); -} - -GList *yon_get_all_selected(GtkTreeView *tree, int column){ - GtkTreeIter iter; - GList *list = NULL; - GtkTreeModel *model = gtk_tree_view_get_model(tree); - for_iter(model,&iter){ - int status; - gtk_tree_model_get(model,&iter,column,&status,-1); - if (status){ - GtkTreePath *path = gtk_tree_model_get_path(model,&iter); - list = g_list_append(list,path); - } - } - return list; -} - -void on_layouts_accept(GtkWidget *self, dictionary *dict){ - main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); - layouts_window *window = yon_dictionary_get_data(dict->first->next,layouts_window*); - gtk_list_store_clear(widgets->LayoutsList); - GtkTreeModel *model = GTK_TREE_MODEL(window->list); - GtkTreeIter main_iter, window_iter; - for_iter(window->list,&window_iter){ - char *id, *name; - int status; - gtk_tree_model_get(model,&window_iter,0,&id,1,&name,2,&status,-1); - if (status){ - gtk_list_store_append(widgets->LayoutsList,&main_iter); - gtk_list_store_set(widgets->LayoutsList,&main_iter,0,id,1,name,-1); - } - GtkTreeIter child_iter; - if (gtk_tree_model_iter_children(model,&child_iter,&window_iter)){ - for (int valid2=1;valid2;valid2=gtk_tree_model_iter_next(model,&child_iter)){ - gtk_tree_model_get(model,&child_iter,0,&id,1,&name,2,&status,-1); - if (status){ - gtk_list_store_append(widgets->LayoutsList,&main_iter); - gtk_list_store_set(widgets->LayoutsList,&main_iter,0,id,1,name,-1); - } - } - } - } - on_subwindow_close(self); -} - -void on_layouts_chosen(GtkCellRenderer *, gchar *path, layouts_window *window){ - GtkTreeIter iter; - gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->list),&iter,path); - int chosen; - gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,2,&chosen,-1); - gtk_tree_store_set(GTK_TREE_STORE(window->list),&iter,2,!chosen,-1); -} - -void on_system_layouts_add(GtkWidget *, main_window *widgets){ - yon_layouts_add(GTK_TREE_VIEW(widgets->LayoutTree),widgets->LayoutsList,widgets); -} - -void yon_layouts_add(GtkTreeView *, GtkListStore *, main_window *widgets){ - GtkBuilder *builder = gtk_builder_new_from_resource(glade_layouts_path); - layouts_window *window = malloc(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->list = (GtkListStore*)main_config.layouts_store; - gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree), GTK_TREE_MODEL(main_config.layouts_store)); - gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),GTK_SELECTION_MULTIPLE); - - yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),TITLE_LABEL,icon_path,"layout_window"); - - gtk_tree_view_column_clicked(GTK_TREE_VIEW_COLUMN(gtk_tree_view_get_column(GTK_TREE_VIEW(window->MainTree),0))); - - 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->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_layouts_accept),dict); - g_signal_connect(G_OBJECT(window->ChosenCell),"toggled",G_CALLBACK(on_layouts_chosen),window); - char *languages = config(keyboard_layout_parameter); - int size; - config_str parsed = yon_char_parse(languages,&size,","); - GtkTreeIter iter; - for_iter(window->list,&iter){ - int found = 0; - char *id; - gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&id,-1); - for (int i=0;ilist),&iter,2,1,-1); - found=1; - break; - } - } - if (!found) { - gtk_tree_store_set(GTK_TREE_STORE(window->list),&iter,2,0,-1); - } - } -} - -void yon_layouts_remove(GtkTreeView *tree, GtkListStore *cur_list, main_window *widgets){ - GtkTreeModel *model = GTK_TREE_MODEL(cur_list); - GtkTreeIter iter; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(tree),&model,&iter)){ - GtkTreeIter iter_converted; - char *target; - gtk_tree_model_get(model,&iter,1,&target,-1); - gtk_tree_model_filter_convert_iter_to_child_iter(widgets->layoutsFilter,&iter_converted,&iter); - gtk_list_store_remove(cur_list,&iter_converted); - yon_config_remove_element(keyboard_layout_parameter,target,","); - } -} - -void on_system_layouts_remove(GtkWidget *, main_window *widgets){ - yon_layouts_remove(GTK_TREE_VIEW(widgets->LayoutTree),widgets->LayoutsList,widgets); -} - -// standard functions - -void yon_layout_build(char *key, dictionary *value, main_window *){ - GtkTreeIter parent; - GtkTreeIter iter; - gtk_tree_store_append(main_config.layouts_store,&parent,NULL); - gtk_tree_store_set(main_config.layouts_store,&parent,0,key,1,"",2,(char*)value->first->data,-1); - dictionary *dict; - for_dictionaries(dict,value){ - if (yon_char_is_empty(dict->key)) continue; - gtk_tree_store_append(main_config.layouts_store,&iter,&parent); - char *key_full = yon_char_unite(key,"_",dict->key,NULL); - gtk_tree_store_set(main_config.layouts_store,&iter,0,key_full,1,dict->key,2,(char*)dict->data,-1); - } -} - void yon_config_init(){ int size; main_config.models_list = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN); GtkTreeIter iter; - config_str models = yon_config_load(get_models_command,&size); - for (int i=0;iKeyboardModelCombo = yon_gtk_builder_get_widget(builder,"KeyboardModelCombo"); - widgets->DefaultLayoutRadio = yon_gtk_builder_get_widget(builder,"DefaultLayoutRadio"); - widgets->ManualLayoutRadio = yon_gtk_builder_get_widget(builder,"ManualLayoutRadio"); + widgets->DefaultLayoutsSwitch = yon_gtk_builder_get_widget(builder,"DefaultLayoutsSwitch"); widgets->LayoutTree = yon_gtk_builder_get_widget(builder,"LayoutTree"); widgets->LayoutAddButton = yon_gtk_builder_get_widget(builder,"LayoutAddButton"); widgets->LayoutRemoveButton = yon_gtk_builder_get_widget(builder,"LayoutRemoveButton"); widgets->LayoutChangingCombo = yon_gtk_builder_get_widget(builder,"LayoutChangingCombo"); widgets->OptionsTree = yon_gtk_builder_get_widget(builder,"OptionsTree"); widgets->OptionsEditButton = yon_gtk_builder_get_widget(builder,"OptionsEditButton"); - widgets->ScrollLockCheck = yon_gtk_builder_get_widget(builder,"ScrollLockCheck"); - widgets->ComposeCheck = yon_gtk_builder_get_widget(builder,"ComposeCheck"); + widgets->OptionsRemoveButton = yon_gtk_builder_get_widget(builder,"OptionsRemoveButton"); + widgets->ComposeSwitch = yon_gtk_builder_get_widget(builder,"ComposeSwitch"); + widgets->ScrollLockSwitch = yon_gtk_builder_get_widget(builder,"ScrollLockSwitch"); widgets->ManualEntry = yon_gtk_builder_get_widget(builder,"ManualEntry"); widgets->NumlockCombo = yon_gtk_builder_get_widget(builder,"NumlockCombo"); widgets->TTYLayoutCombo = yon_gtk_builder_get_widget(builder,"TTYLayoutCombo"); @@ -455,7 +131,9 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->KeyboardModelCombo),"changed",G_CALLBACK(on_model_changed),widgets); // g_signal_connect(G_OBJECT(widgets->SystemKeyboardOptionsCombo),"clicked",G_CALLBACK(on_options_open),widgets); g_signal_connect(G_OBJECT(widgets->NumlockCombo),"changed",G_CALLBACK(on_num_lock_changed),widgets); - } + g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutTree); + g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutAddButton); + g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutRemoveButton); g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); @@ -465,11 +143,22 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),NULL); g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),NULL); g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),NULL); + } + + int size; + config_str models = yon_config_load(get_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); yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size); yon_save_window_set_postsave_function(on_save_done,widgets); gtk_tree_view_column_clicked(GTK_TREE_VIEW_COLUMN(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->LayoutTree),0))); - g_hash_table_foreach(main_config.layouts,(GHFunc)yon_layout_build,widgets); on_config_local_load(NULL,widgets); } diff --git a/source/ubl-settings-keyboard.h b/source/ubl-settings-keyboard.h index c25895d..392a5b4 100644 --- a/source/ubl-settings-keyboard.h +++ b/source/ubl-settings-keyboard.h @@ -47,27 +47,11 @@ #define get_options_command "grep -E \"grp:.*toggle|grp_led:.*toggle|compose:.*toggle\" /usr/share/X11/xkb/rules/base.lst|sed -e 's/^ *//g' -e 's/\t//g' -e 's/toggle */toggle;/g'" -#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_models_command "sed -En '/^! model$/,/^ *$/!d;s/[[:blank:]]+([^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" #define layouts_path "resource:///com/ublinux/csv/layouts.csv" -#define layouts_command "xkbcli list --load-exotic | awk \"\ -layout && /description:/ {\ - match(\\$0, /: *(.*)/, matches);\ - description = matches[1];\ - printf \\\"%s|%s|%s\\\\n\\\", layout, variant, description;\ - layout = \\\"\\\"; variant = \\\"\\\";\ -}\ -/layout:/ {\ - match(\\$0, /: *'([^']+)'/, matches);\ - l = matches[1];\ - layout = layouts[l] = l;\ -}\ -/variant:/ {\ - match(\\$0, /: *'([^']+)'/, matches);\ - variant = matches[1];\ -}\ -\" | sort -u\ -" +#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" typedef char* string; @@ -83,25 +67,28 @@ typedef struct { GtkTreeStore *layouts_store; GtkListStore *options_list; GtkListStore *models_list; - GHashTable *layouts; - int layouts_size; + config_str variants_list; + int variants_size; config_str layouts_list; + int layouts_size; } config; +extern config main_config; + typedef struct { template_window_fields GtkWidget *KeyboardModelCombo; - GtkWidget *DefaultLayoutRadio; - GtkWidget *ManualLayoutRadio; + GtkWidget *DefaultLayoutsSwitch; GtkWidget *LayoutTree; GtkWidget *LayoutAddButton; GtkWidget *LayoutRemoveButton; GtkWidget *LayoutChangingCombo; GtkWidget *OptionsTree; GtkWidget *OptionsEditButton; - GtkWidget *ScrollLockCheck; - GtkWidget *ComposeCheck; + GtkWidget *OptionsRemoveButton; + GtkWidget *ComposeSwitch; + GtkWidget *ScrollLockSwitch; GtkWidget *ManualEntry; GtkWidget *NumlockCombo; GtkWidget *TTYLayoutCombo; @@ -128,7 +115,7 @@ typedef struct { GtkWidget *CancelButton; GtkWidget *AcceptButton; GtkCellRenderer *ChosenCell; - GtkListStore *list; + GtkTreeStore *list; } layouts_window; typedef struct { @@ -157,12 +144,11 @@ void config_init(); void yon_main_window_complete(main_window *widgets); void on_move_down(GtkWidget *self, main_window *widgets); void on_move_up(GtkWidget *self, main_window *widgets); -void on_layouts_accept(GtkWidget *self, dictionary *dict); +void on_layouts_accept(GtkWidget *self, layouts_window *window); void on_options_open(GtkWidget *self, main_window *widgets); void on_options_accept(GtkWidget *self, dictionary *dict); void on_model_changed(GtkComboBoxText *self, main_window *widgets); void on_num_lock_changed(GtkComboBox *self, main_window *widgets); -void yon_layouts_save(main_window *widgets); void on_layouts_chosen(GtkCellRenderer *self, gchar *path, layouts_window *window); GList *yon_get_all_selected(GtkTreeView *tree, int column); void on_system_layouts_add(GtkWidget *, main_window *widgets); @@ -170,4 +156,7 @@ void yon_layouts_add(GtkTreeView *tree, GtkListStore *cur_list, main_window *wid void yon_layouts_remove(GtkTreeView *tree, GtkListStore *cur_list, main_window *widgets); void on_system_layouts_remove(GtkWidget *, main_window *widgets); void yon_config_init(); -void yon_layout_build(char *key, dictionary *value, main_window *widgets); \ No newline at end of file +void yon_layout_build(layouts_window *window); +config_str yon_layout_get_children(char *layout_id, int *size); +layouts_window *yon_layouts_window_new(); +void yon_layout_load(char *layout,main_window *widgets); \ No newline at end of file diff --git a/ubl-settings-keyboard-layouts.glade b/ubl-settings-keyboard-layouts.glade index 75ae4f3..71f15cf 100644 --- a/ubl-settings-keyboard-layouts.glade +++ b/ubl-settings-keyboard-layouts.glade @@ -1,5 +1,5 @@ - + @@ -78,16 +78,17 @@ False 1 - + + none + column - 0 - 2 + 3 @@ -99,7 +100,7 @@ - 1 + 2 diff --git a/ubl-settings-keyboard.glade b/ubl-settings-keyboard.glade index c0f53d3..93f054f 100644 --- a/ubl-settings-keyboard.glade +++ b/ubl-settings-keyboard.glade @@ -1,5 +1,5 @@ - + + + + + + + + + + @@ -35,6 +45,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + + + + + + + + + True False @@ -45,6 +65,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False com.ublinux.libublsettingsui-gtk3.increase-symbolic + + True + False + com.ublinux.libublsettingsui-gtk3.trash-symbolic + True False @@ -116,18 +141,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - + True False - LayoutsList 0 - 1 - - - - 0 - - True @@ -152,7 +169,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True False start - Keyboard model: + Layouts: 1 @@ -173,13 +190,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False 10 - - Default layout + True True - False True - True False @@ -188,13 +202,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - Manual + True - True - False - True - DefaultLayoutRadio + False + Default layout False @@ -224,35 +235,40 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True + False True LayoutsList - False + True + both - column - 0 + Keyboard layout - 0 + 2 - column + Designation + 0 + + 0 + - column + Variant @@ -279,6 +295,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True + False True True image2 @@ -295,6 +312,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True + False True True image6 @@ -317,7 +335,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - False + True True 1 @@ -331,7 +349,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - False + True True 1 @@ -358,10 +376,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True False - 0 - - Default - True @@ -412,13 +426,40 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True True in + 100 + 150 True True + AdditionalOptionsList + False + both + + + column + + + + 1 + + + + + + + column + + + + 0 + + + + @@ -450,6 +491,22 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 0 + + + True + True + True + image3 + + + + False + True + 1 + + False @@ -459,7 +516,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - False + True True 3 @@ -489,12 +546,33 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. vertical 5 - - Scroll Lock indication when switching layouts + True - True - False - True + False + 5 + + + True + True + + + False + True + 0 + + + + + True + False + Set Compose (Multi_Key) to the right Win key + + + False + True + 1 + + False @@ -503,12 +581,33 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - Set Compose (Multi_Key) to the right Win key + True - True - False - True + False + 5 + + + True + True + + + False + True + 0 + + + + + True + False + Scroll Lock indication when switching layouts + + + False + True + 1 + + False @@ -552,6 +651,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True True + grp:lalt_lshift_toggle,grp_led:scroll,compose:rwin True @@ -591,6 +691,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 0 Default + On + Off @@ -718,9 +820,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - liststore1 - True False From 4b18a3ef3be6a8e76f4334bd52326ef812e5b3e0 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Fri, 7 Nov 2025 17:30:15 +0600 Subject: [PATCH 02/24] WIP Keyboard remake --- source/ubl-settings-keyboard-layouts.c | 15 ++- source/ubl-settings-keyboard-options.c | 166 ++++++++++++++++++++--- source/ubl-settings-keyboard.c | 138 +++++++++++++++---- source/ubl-settings-keyboard.h | 79 ++++++++++- ubl-settings-keyboard-options.glade | 179 ++++++++++++++++--------- ubl-settings-keyboard.glade | 35 ++--- 6 files changed, 477 insertions(+), 135 deletions(-) diff --git a/source/ubl-settings-keyboard-layouts.c b/source/ubl-settings-keyboard-layouts.c index 335824f..e165df1 100644 --- a/source/ubl-settings-keyboard-layouts.c +++ b/source/ubl-settings-keyboard-layouts.c @@ -102,13 +102,16 @@ void yon_layouts_remove(GtkTreeView *tree, GtkListStore *cur_list, main_window * GtkTreeModel *model = GTK_TREE_MODEL(cur_list); GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(tree),&model,&iter)){ - GtkTreeIter iter_converted; - char *target; - gtk_tree_model_get(model,&iter,1,&target,-1); - gtk_tree_model_filter_convert_iter_to_child_iter(widgets->layoutsFilter,&iter_converted,&iter); - gtk_list_store_remove(cur_list,&iter_converted); - yon_config_remove_element(keyboard_layout_parameter,target,","); + char *layout, *variant; + gtk_tree_model_get(model,&iter,0,&layout,1,&variant,-1); + if (!yon_char_is_empty(variant)){ + char *temp = yon_char_unite(layout,"_",variant,NULL); + free(layout); + layout = temp; + } + yon_config_remove_element(keyboard_layout_parameter,layout,","); } + yon_interface_update(widgets); } void on_system_layouts_remove(GtkWidget *, main_window *widgets){ diff --git a/source/ubl-settings-keyboard-options.c b/source/ubl-settings-keyboard-options.c index 0e19242..d436677 100644 --- a/source/ubl-settings-keyboard-options.c +++ b/source/ubl-settings-keyboard-options.c @@ -50,35 +50,165 @@ // } +void on_option_chosen(GtkCellRenderer *, gchar *path, layouts_window *window){ + GtkTreeIter iter; + GtkTreeIter itar; + gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->OptionsFilter),&iter,path); + gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(window->OptionsFilter),&itar,&iter); + int chosen; + gtk_tree_model_get(GTK_TREE_MODEL(window->OptionsList),&itar,2,&chosen,-1); + gtk_list_store_set(GTK_LIST_STORE(window->OptionsList),&itar,2,!chosen,-1); +} + +gboolean yon_filter_refilter(GtkTreeModel *model, GtkTreeIter *iter, layouts_window *window){ + char *target_id; + const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->OptionsFilterCombo)); + if (yon_char_is_empty(id)) return 0; + gtk_tree_model_get(model,iter,0,&target_id,-1); + char *filter_section = yon_char_divide_search(target_id,":",-1); + int result = !strcmp(filter_section,id); + if (target_id) + free(target_id); + if (filter_section) + free(filter_section); + return result; +} -void on_options_accept(GtkWidget *self, dictionary *dict){ - main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); - layouts_window *window = yon_dictionary_get_data(dict->first->next,layouts_window*); - GtkTreeModel *model = GTK_TREE_MODEL(window->list); +void yon_options_setup(layouts_window *window){ + int size; + config_str option_commands = yon_char_parsed_new(&size, + lv2_options_command, + lv3_options_command, + ctrl_options_command, + grp_led_options_command, + mod_led_options_command, + keypad_options_command, + kpdl_options_command, + caps_options_command, + altwin_options_command, + Compose_options_command, + compat_options_command, + currencysign_options_command, + lv5_options_command, + nbsp_options_command, + japan_options_command, + korean_options_command, + esperanto_options_command, + solaris_options_command, + terminate_options_command, + NULL); + + char *command_full = yon_char_parsed_to_string(option_commands,size,"; "); + + int options_size; + config_str options = yon_config_load(command_full,&options_size); GtkTreeIter iter; + + int filter_size; + config_str filter = NULL; + + for (int i=0;iOptionsList,&iter); + gtk_list_store_set(window->OptionsList,&iter,0,parsed[0],1,parsed[1],-1); + char *str = yon_char_new(parsed[0]); + char *type = yon_char_divide_search(str,":",-1); + if (yon_char_parsed_check_exist(filter,filter_size,type)==-1){ + yon_char_parsed_add_or_create_if_exists(filter,&filter_size,type); + gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->OptionsFilterCombo),type,type); + } + if (!yon_char_is_empty(str))free(str); + if (!yon_char_is_empty(type))free(type); + yon_char_parsed_free(parsed,parsed_size); + } + gtk_combo_box_set_active(GTK_COMBO_BOX(window->OptionsFilterCombo),0); + yon_char_parsed_free(filter,filter_size); + yon_char_parsed_free(option_commands,size); +} + +void on_options_filter_changed(GtkWidget *, layouts_window *window){ + gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(window->OptionsFilter)); +} + +void on_options_accept(GtkWidget *self, layouts_window *window){ + main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets"); + GtkTreeModel *model = GTK_TREE_MODEL(window->OptionsList); + GtkTreeIter iter, itar; char *name, *id; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model,&iter)){ - gtk_tree_model_get(model,&iter,0,&id,1,&name,-1); - gtk_entry_set_text(GTK_ENTRY(widgets->OptionsTree),name); - yon_config_register(options_parameter,options_parameter_command,id); - + int status; + for_iter(model,&iter){ + gtk_tree_model_get(model,&iter,0,&id,1,&name,2,&status,-1); + if (status){ + gtk_list_store_append(widgets->OptionsList,&itar); + gtk_list_store_set(widgets->OptionsList,&itar,0,id,1,_(name),-1); + } } on_subwindow_close(self); + on_options_save(NULL, widgets); } -void on_options_open(GtkWidget *, main_window *widgets){ +void on_options_save(GtkWidget *,main_window *widgets){ + char *main_id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->LayoutChangingCombo)); + 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:""); + GtkTreeIter iter; + for_iter(GTK_TREE_MODEL(widgets->OptionsList),&iter){ + char *cur_id; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->OptionsList),&iter,0,&cur_id,-1); + yon_char_parsed_add_or_create_if_exists(parameter_parsed,¶meter_parsed_size,cur_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(options_parameter,options_parameter_command,final_parameter); + gtk_entry_set_text(GTK_ENTRY(widgets->ManualEntry),final_parameter); + free(final_parameter); + } else { + yon_config_remove_by_key(options_parameter); + gtk_entry_set_text(GTK_ENTRY(widgets->ManualEntry),""); + } +} + +layouts_window *yon_options_window_new(){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_options_path); layouts_window *window = malloc(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->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree"); - // window->list = main_config.options_list; - gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree),GTK_TREE_MODEL(window->list)); - dictionary *dict = NULL; - gtk_tree_view_remove_column(GTK_TREE_VIEW(window->MainTree),gtk_tree_view_get_column(GTK_TREE_VIEW(window->MainTree),0)); - yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets); - yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window); + window->MainTree = yon_gtk_builder_get_widget(builder,"OptionsTree"); + window->OptionsFilterCombo = yon_gtk_builder_get_widget(builder,"OptionsFilterCombo"); + window->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"OptionsList")); + window->OptionsFilter = GTK_TREE_MODEL(gtk_builder_get_object(builder,"OptionsFilter")); + window->ChosenCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ChosenCell")); + + g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"changed",G_CALLBACK(on_options_filter_changed),window); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); - g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_options_accept),dict); + g_signal_connect(G_OBJECT(window->ChosenCell),"toggled",G_CALLBACK(on_option_chosen),window); + gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree),GTK_TREE_MODEL(window->OptionsFilter)); + gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(window->OptionsFilter),(GtkTreeModelFilterVisibleFunc)yon_filter_refilter,window,NULL); + yon_options_setup(window); + return window; } + +void on_options_open(GtkWidget *, main_window *widgets){ + layouts_window *window = yon_options_window_new(); + // window->list = main_config.options_list; + g_object_set_data(G_OBJECT(window->Window),"widgets",widgets); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_options_accept),window); +} + + +void on_option_remove(GtkWidget*, main_window *widgets){ + GtkTreeIter iter; + GtkTreeModel *model; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->OptionsTree)),&model, &iter)){ + char *target; + gtk_tree_model_get(model,&iter,0,&target,-1); + yon_config_remove_element(options_parameter,target,","); + } + yon_interface_update(widgets); +} \ No newline at end of file diff --git a/source/ubl-settings-keyboard.c b/source/ubl-settings-keyboard.c index 081cd69..78382b5 100644 --- a/source/ubl-settings-keyboard.c +++ b/source/ubl-settings-keyboard.c @@ -7,6 +7,7 @@ gboolean yon_interface_update(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->OptionsEditButton),G_CALLBACK(on_options_open),widgets); g_signal_handlers_block_by_func(G_OBJECT(widgets->NumLockCombo),G_CALLBACK(on_num_lock_changed),widgets); + g_signal_handlers_block_by_func(G_OBJECT(widgets->LayoutChangingCombo),G_CALLBACK(on_options_save),widgets); gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo),0); gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),0); @@ -27,35 +28,42 @@ gboolean yon_interface_update(main_window *widgets){ yon_layout_load(layouts_parsed[i],widgets); } } + { + gtk_list_store_clear(widgets->OptionsList); + char *options = config(options_parameter); + if (!yon_char_is_empty(options)){ + gtk_entry_set_text(GTK_ENTRY(widgets->ManualEntry),options); + GtkTreeIter iter; + int size; + config_str parsed = yon_char_parse(options,&size,","); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->LayoutChangingCombo),parsed[0]); + for (int i=1;iOptionsList,&iter); + gtk_list_store_set(widgets->OptionsList,&iter,0,option_parsed[0],1,_(option_parsed[1]),-1); + yon_char_parsed_free(option_parsed,option_parsed_size); + } + yon_char_parsed_free(parsed,size); + } else { + gtk_entry_set_text(GTK_ENTRY(widgets->ManualEntry),""); + } + } { 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->NumLockCombo),1); else if (!strcmp(name,"no")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),2); } - else gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),0); - if (main_config.layouts_list){ - int size=0; - name = yon_config_get_by_key(keyboard_layout_parameter); - config_str layouts = yon_char_parse(name,&size,","); - GtkTreeIter iter, itar; - char *rid,*rname; - gtk_list_store_clear(widgets->LayoutsList); - for (int i=0;iLayoutsList,&itar); - gtk_list_store_set(widgets->LayoutsList,&itar,0,rname,1,rid,2,1,-1); - } - } - } - } } 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->OptionsEditButton),G_CALLBACK(on_options_open),widgets); g_signal_handlers_unblock_by_func(G_OBJECT(widgets->NumLockCombo),G_CALLBACK(on_num_lock_changed),widgets); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->LayoutChangingCombo),G_CALLBACK(on_options_save),widgets); return G_SOURCE_REMOVE; } @@ -77,18 +85,18 @@ void on_model_changed(GtkComboBoxText *self, main_window *widgets){ yon_config_remove_by_key(model_parameter); break; default: - char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo)); - yon_config_register(model_parameter,model_parameter_command,id); + char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo)); + yon_config_register(model_parameter,model_parameter_command,id); break; } } void yon_config_init(){ int size; - main_config.layouts_store = gtk_tree_store_new(4,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN); main_config.models_list = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN); GtkTreeIter iter; + 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;iComposeSwitch = yon_gtk_builder_get_widget(builder,"ComposeSwitch"); widgets->ScrollLockSwitch = yon_gtk_builder_get_widget(builder,"ScrollLockSwitch"); widgets->ManualEntry = yon_gtk_builder_get_widget(builder,"ManualEntry"); - widgets->NumLockCombo = yon_gtk_builder_get_widget(builder,"NumlockCombo"); + widgets->NumLockCombo = yon_gtk_builder_get_widget(builder,"NumLockCombo"); widgets->TTYLayoutCombo = yon_gtk_builder_get_widget(builder,"TTYLayoutCombo"); widgets->LayoutsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LayoutsList")); + widgets->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"OptionsList")); /* Widget registration for config monitoring | Регистрация виджетов для мониторинга конфига */ // yon_window_config_add_custom_parameter(widgets->HeadInfoLabel,"head-text","label",YON_TYPE_STRING); @@ -142,8 +213,13 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->LayoutAddButton),"clicked",G_CALLBACK(on_system_layouts_add),widgets); g_signal_connect(G_OBJECT(widgets->LayoutRemoveButton),"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->SystemKeyboardOptionsCombo),"clicked",G_CALLBACK(on_options_open),widgets); + g_signal_connect(G_OBJECT(widgets->OptionsEditButton),"clicked",G_CALLBACK(on_options_open),widgets); + g_signal_connect(G_OBJECT(widgets->OptionsRemoveButton),"clicked",G_CALLBACK(on_option_remove),widgets); g_signal_connect(G_OBJECT(widgets->NumLockCombo),"changed",G_CALLBACK(on_num_lock_changed),widgets); + g_signal_connect(G_OBJECT(widgets->LayoutChangingCombo),"changed",G_CALLBACK(on_options_save),widgets); + g_signal_connect(G_OBJECT(widgets->ComposeSwitch),"state-set",G_CALLBACK(on_compose_switch),widgets); + g_signal_connect(G_OBJECT(widgets->ScrollLockSwitch),"state-set",G_CALLBACK(on_scroll_lock_switch),widgets); + g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutTree); g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutAddButton); g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutRemoveButton); @@ -167,6 +243,20 @@ void yon_main_window_complete(main_window *widgets){ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->KeyboardModelCombo),parsed[0],_(parsed[1])); yon_char_parsed_free(parsed,parsed_size); } + + { + int size; + config_str options = yon_config_load(grp_options_command,&size); + + for (int i=0;iLayoutChangingCombo),parsed[0],_(parsed[1])); + yon_char_parsed_free(parsed,parsed_size); + } + yon_char_parsed_free(options,size); + } yon_char_parsed_free(models,size); yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size); @@ -179,7 +269,7 @@ void yon_main_window_complete(main_window *widgets){ int main(int argc, char *argv[]){ setlocale(LC_ALL, ""); textdomain (LocaleName); - + yon_config_init(); yon_ubl_connect_config((_template_config*)&main_config); yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK); config_str unfound = NULL; diff --git a/source/ubl-settings-keyboard.h b/source/ubl-settings-keyboard.h index 6cd46db..a4663e6 100644 --- a/source/ubl-settings-keyboard.h +++ b/source/ubl-settings-keyboard.h @@ -53,6 +53,66 @@ #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" +// grp : Switching to another layout +#define grp_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(grp:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// lv2 : Key to choose the 2nd level +#define lv2_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(lv2:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// lv3 : Key to choose the 3nd level +#define lv3_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(lv3:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// ctrl : Ctrl position +#define ctrl_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(ctrl:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// grp_led : Use keyboard LED to show alternative layout +#define grp_led_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(grp_led:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// mod_led : Use keyboard LED to indicate modifiers +#define mod_led_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(mod_led:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// keypad : Layout of numeric keypad +#define keypad_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(keypad:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// kpdl : Numeric keypad Delete behavior +#define kpdl_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(kpdl:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// caps : Caps Lock behavior +#define caps_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(caps:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// altwin : Alt and Win behavior +#define altwin_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(altwin:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// Compose key : Position of Compose key +#define Compose_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(compose:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// compat : Compatibility options +#define compat_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+((numpad|srvrkeys|apple|shift|misc|keypad|grab):[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// currencysign : Currency signs +#define currencysign_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+((eurosign|rupeesign):[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// lv5 : Key to choose the 5th level +#define lv5_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(lv5:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// nbsp : Non-breaking space input +#define nbsp_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(nbsp:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// japan : Japanese keyboard options +#define japan_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(japan:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// korean : Korean Hangul/Hanja keys +#define korean_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(korean:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// esperanto : Esperanto letters with superscripts +#define esperanto_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(esperanto:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// solaris : Old Solaris keycodes compatibility +#define solaris_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(solaris:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + +// terminate : Key sequence to kill the X server +#define terminate_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(terminate:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" + typedef char* string; __attribute__((unused)) static \ @@ -63,7 +123,7 @@ typedef struct { int save_config; config_str launch_arguments; int launch_size; - char *options; + GHashTable *options; GtkTreeStore *layouts_store; GtkListStore *options_list; GtkListStore *models_list; @@ -92,8 +152,8 @@ typedef struct { GtkWidget *ManualEntry; GtkWidget *NumLockCombo; GtkWidget *TTYLayoutCombo; - GtkTreeModelFilter *layoutsFilter; GtkListStore *LayoutsList; + GtkListStore *OptionsList; } main_window; @@ -114,8 +174,11 @@ typedef struct { GtkWidget *MainTree; GtkWidget *CancelButton; GtkWidget *AcceptButton; + GtkWidget *OptionsFilterCombo; GtkCellRenderer *ChosenCell; GtkTreeStore *list; + GtkListStore *OptionsList; + GtkTreeModel *OptionsFilter; } layouts_window; typedef struct { @@ -146,7 +209,7 @@ void on_move_down(GtkWidget *self, main_window *widgets); void on_move_up(GtkWidget *self, main_window *widgets); void on_layouts_accept(GtkWidget *self, layouts_window *window); void on_options_open(GtkWidget *self, main_window *widgets); -void on_options_accept(GtkWidget *self, dictionary *dict); +void on_options_accept(GtkWidget *self, layouts_window *window); void on_model_changed(GtkComboBoxText *self, main_window *widgets); void on_num_lock_changed(GtkComboBox *self, main_window *widgets); void on_layouts_chosen(GtkCellRenderer *self, gchar *path, layouts_window *window); @@ -160,3 +223,13 @@ void yon_layout_build(layouts_window *window); config_str yon_layout_get_children(char *layout_id, int *size); layouts_window *yon_layouts_window_new(); void yon_layout_load(char *layout,main_window *widgets); +void yon_options_setup(layouts_window *window); +layouts_window *yon_options_window_new(); +void on_options_filter_changed(GtkWidget *, layouts_window *window); +gboolean yon_filter_refilter(GtkTreeModel *model, GtkTreeIter *iter, layouts_window *window); +void yon_options_setup(layouts_window *window); +void on_option_chosen(GtkCellRenderer *, gchar *path, layouts_window *window); +void on_options_save(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_option_remove(GtkWidget*, main_window *widgets); \ No newline at end of file diff --git a/ubl-settings-keyboard-options.glade b/ubl-settings-keyboard-options.glade index 0f2d3a5..0b04912 100644 --- a/ubl-settings-keyboard-options.glade +++ b/ubl-settings-keyboard-options.glade @@ -3,56 +3,124 @@ + + + + + + + + + + + + OptionsList + True False - emblem-ok-symbolic + com.ublinux.libublsettingsui-gtk3.accept-symbolic True False - process-stop-symbolic + com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic - + 450 550 True False - dialog - + com.ublinux.ubl-settings-keyboard + + True False - 3 - 3 - 3 - 3 vertical - 5 - - + + + True + False + vertical + + + + + + False + True + 0 + + + + + True False - end + 5 + 5 + 5 + 5 + vertical + 5 - - Cancel + True - True - True - image2 + False - True + False True 0 - - Accept + True True - True - image1 + never + in + + + True + True + OptionsList + + + + + + 2 + + + + + + + Name + + + + 0 + + + + + + + Description + + + word + 250 + + + 1 + + + + + + True @@ -62,51 +130,17 @@ - False - False - 0 + True + True + 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - True False - True True @@ -136,6 +170,31 @@ com.ublinux.ubl-settings-keyboard + + + Cancel + True + True + True + image2 + + + 1 + + + + + Accept + True + True + True + image1 + + + end + 2 + + diff --git a/ubl-settings-keyboard.glade b/ubl-settings-keyboard.glade index 93f054f..c3f410d 100644 --- a/ubl-settings-keyboard.glade +++ b/ubl-settings-keyboard.glade @@ -25,16 +25,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - - - - - - - - - @@ -45,20 +35,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - + - - - - + + True False - com.ublinux.libublsettingsui-gtk3.edit-symbolic + com.ublinux.libublsettingsui-gtk3.increase-symbolic True @@ -238,6 +226,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False True LayoutsList + False True both @@ -257,7 +246,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Designation - 0 @@ -432,30 +420,29 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True True - AdditionalOptionsList - False + OptionsList both - column + Name - 1 + 0 - column + Description - 0 + 1 @@ -685,7 +672,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - + True False 0 From 843a761304c0838cdeea1436a1976d17ffd671dc Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 10 Nov 2025 13:15:46 +0600 Subject: [PATCH 03/24] Improvements, fixes --- source/ubl-settings-keyboard-layouts.c | 50 +++++++++++- source/ubl-settings-keyboard-options.c | 107 ++++++++++--------------- source/ubl-settings-keyboard.c | 51 +++++++++++- source/ubl-settings-keyboard.h | 13 ++- ubl-settings-keyboard-options.glade | 39 +++++++++ ubl-settings-keyboard.glade | 106 +++++++++++++----------- 6 files changed, 248 insertions(+), 118 deletions(-) diff --git a/source/ubl-settings-keyboard-layouts.c b/source/ubl-settings-keyboard-layouts.c index e165df1..0fa9e99 100644 --- a/source/ubl-settings-keyboard-layouts.c +++ b/source/ubl-settings-keyboard-layouts.c @@ -185,4 +185,52 @@ void yon_layout_build(layouts_window *window){ } yon_char_parsed_free(layouts,size); -} \ No newline at end of file +} + +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->LayoutTree)),&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(keyboard_layout_parameter); + char *temp = yon_char_swap_element(layouts,a,b,","); + yon_config_register(keyboard_layout_parameter,keyboard_layout_parameter_command,temp); + free(temp); + gtk_list_store_swap(widgets->LayoutsList,&iter,previter); + gtk_tree_iter_free(previter); + } +} + +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->LayoutTree)),&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(keyboard_layout_parameter); + char *temp = yon_char_swap_element(layouts,a,b,","); + yon_config_register(keyboard_layout_parameter,keyboard_layout_parameter_command,temp); + free(temp); + gtk_list_store_swap(widgets->LayoutsList,&iter,nextiter); + gtk_tree_iter_free(nextiter); + } +} + +// void on_layout_dnd_inserted(GtkTreeModel *, GtkTreePath* , GtkTreeIter* iter, main_window *widgets){ +// char *target; +// gtk_tree_model_get(GTK_TREE_MODEL(widgets->LayoutsList),iter,0,&target,-1); +// } + +// void on_layout_dnd_deleted(GtkTreeModel *, GtkTreePath* , GtkTreeIter* iter, main_window *widgets){ + +// char *target; +// gtk_tree_model_get(GTK_TREE_MODEL(widgets->LayoutsList),iter,0,&target,-1); +// printf("%s\n",target); +// } \ No newline at end of file diff --git a/source/ubl-settings-keyboard-options.c b/source/ubl-settings-keyboard-options.c index d436677..08e4261 100644 --- a/source/ubl-settings-keyboard-options.c +++ b/source/ubl-settings-keyboard-options.c @@ -1,63 +1,25 @@ #include "ubl-settings-keyboard.h" - - -// void on_options_accept(GtkWidget *self, dictionary *dict){ -// main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); -// layouts_window *window = yon_dictionary_get_data(dict->first->next,layouts_window*); -// GtkTreeModel *model = GTK_TREE_MODEL(window->list); -// GtkTreeIter iter; -// char *name, *id; -// if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model,&iter)){ -// gtk_tree_model_get(model,&iter,0,&id,1,&name,-1); -// gtk_entry_set_text(GTK_ENTRY(widgets->OptionsEntry),name); -// yon_config_register(options_parameter,options_parameter_command,id); - -// } -// on_subwindow_close(self); -// } - -// void on_options_open(GtkWidget *, main_window *widgets){ -// GtkBuilder *builder = gtk_builder_new_from_resource(glade_layouts_path); -// layouts_window *window = malloc(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->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree"); -// window->list = main_config.options_list; -// gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree),GTK_TREE_MODEL(window->list)); -// dictionary *dict = NULL; -// gtk_tree_view_remove_column(GTK_TREE_VIEW(window->MainTree),gtk_tree_view_get_column(GTK_TREE_VIEW(window->MainTree),0)); -// 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->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); -// g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_options_accept),dict); -// } - -// GList *yon_get_all_selected(GtkTreeView *tree, int column){ -// GtkTreeIter iter; -// GList *list = NULL; -// GtkTreeModel *model = gtk_tree_view_get_model(tree); -// for_iter(model,&iter){ -// int status; -// gtk_tree_model_get(model,&iter,column,&status,-1); -// if (status){ -// GtkTreePath *path = gtk_tree_model_get_path(model,&iter); -// list = g_list_append(list,path); -// } -// } -// return list; -// } - - void on_option_chosen(GtkCellRenderer *, gchar *path, layouts_window *window){ GtkTreeIter iter; GtkTreeIter itar; gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->OptionsFilter),&iter,path); gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(window->OptionsFilter),&itar,&iter); int chosen; - gtk_tree_model_get(GTK_TREE_MODEL(window->OptionsList),&itar,2,&chosen,-1); + char *target; + gtk_tree_model_get(GTK_TREE_MODEL(window->OptionsList),&itar,0,&target,2,&chosen,-1); gtk_list_store_set(GTK_LIST_STORE(window->OptionsList),&itar,2,!chosen,-1); + + char *options_string = yon_char_new(gtk_entry_get_text(GTK_ENTRY(window->OptionsEntry))); + if (!chosen){ + char *temp = yon_char_append_element(options_string,target,","); + gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),temp); + free(temp); + } else { + char *temp = yon_char_remove_element(options_string,target,","); + gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),temp); + free(temp); + } } gboolean yon_filter_refilter(GtkTreeModel *model, GtkTreeIter *iter, layouts_window *window){ @@ -106,13 +68,15 @@ void yon_options_setup(layouts_window *window){ int filter_size; config_str filter = NULL; + + char *config_options = config(options_parameter); for (int i=0;iOptionsList,&iter); - gtk_list_store_set(window->OptionsList,&iter,0,parsed[0],1,parsed[1],-1); + gtk_list_store_set(window->OptionsList,&iter,0,parsed[0],1,parsed[1],2,yon_char_check_element(config_options,parsed[0],","),-1); char *str = yon_char_new(parsed[0]); char *type = yon_char_divide_search(str,":",-1); if (yon_char_parsed_check_exist(filter,filter_size,type)==-1){ @@ -134,19 +98,31 @@ void on_options_filter_changed(GtkWidget *, layouts_window *window){ void on_options_accept(GtkWidget *self, layouts_window *window){ main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets"); - GtkTreeModel *model = GTK_TREE_MODEL(window->OptionsList); - GtkTreeIter iter, itar; - char *name, *id; - int status; - for_iter(model,&iter){ - gtk_tree_model_get(model,&iter,0,&id,1,&name,2,&status,-1); - if (status){ - gtk_list_store_append(widgets->OptionsList,&itar); - gtk_list_store_set(widgets->OptionsList,&itar,0,id,1,_(name),-1); - } + // char *main_option = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->LayoutChangingCombo)); + char *options = (char*)gtk_entry_get_text(GTK_ENTRY(window->OptionsEntry)); + if (!yon_char_is_empty(options)){ + // char *full_options = yon_char_unite(!yon_char_is_empty(main_option)?main_option:"",",",options,NULL); + yon_config_register(options_parameter,options_parameter_command,options); + // free(full_options); + // } else if (!yon_char_is_empty(main_option)){ + // yon_config_register(options_parameter,options_parameter_command,main_option); + } else { + yon_config_remove_by_key(options_parameter); } + // GtkTreeModel *model = GTK_TREE_MODEL(window->OptionsList); + // GtkTreeIter iter, itar; + // char *name, *id; + // int status; + // for_iter(model,&iter){ + // gtk_tree_model_get(model,&iter,0,&id,1,&name,2,&status,-1); + // if (status){ + // gtk_list_store_append(widgets->OptionsList,&itar); + // gtk_list_store_set(widgets->OptionsList,&itar,0,id,1,_(name),-1); + // } + // } on_subwindow_close(self); - on_options_save(NULL, widgets); + yon_interface_update(widgets); + // on_options_save(NULL, widgets); } void on_options_save(GtkWidget *,main_window *widgets){ @@ -164,11 +140,9 @@ void on_options_save(GtkWidget *,main_window *widgets){ yon_char_parsed_free(parameter_parsed,parameter_parsed_size); if (!yon_char_is_empty(final_parameter)){ yon_config_register(options_parameter,options_parameter_command,final_parameter); - gtk_entry_set_text(GTK_ENTRY(widgets->ManualEntry),final_parameter); free(final_parameter); } else { yon_config_remove_by_key(options_parameter); - gtk_entry_set_text(GTK_ENTRY(widgets->ManualEntry),""); } } @@ -181,6 +155,7 @@ layouts_window *yon_options_window_new(){ window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); window->MainTree = yon_gtk_builder_get_widget(builder,"OptionsTree"); window->OptionsFilterCombo = yon_gtk_builder_get_widget(builder,"OptionsFilterCombo"); + window->OptionsEntry = yon_gtk_builder_get_widget(builder,"OptionsEntry"); window->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"OptionsList")); window->OptionsFilter = GTK_TREE_MODEL(gtk_builder_get_object(builder,"OptionsFilter")); window->ChosenCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ChosenCell")); @@ -191,6 +166,8 @@ layouts_window *yon_options_window_new(){ gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree),GTK_TREE_MODEL(window->OptionsFilter)); gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(window->OptionsFilter),(GtkTreeModelFilterVisibleFunc)yon_filter_refilter,window,NULL); yon_options_setup(window); + char *parameter_options = config(options_parameter); + gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),parameter_options); return window; } diff --git a/source/ubl-settings-keyboard.c b/source/ubl-settings-keyboard.c index 78382b5..36a8454 100644 --- a/source/ubl-settings-keyboard.c +++ b/source/ubl-settings-keyboard.c @@ -8,6 +8,7 @@ gboolean yon_interface_update(main_window *widgets){ g_signal_handlers_block_by_func(G_OBJECT(widgets->OptionsEditButton),G_CALLBACK(on_options_open),widgets); g_signal_handlers_block_by_func(G_OBJECT(widgets->NumLockCombo),G_CALLBACK(on_num_lock_changed),widgets); g_signal_handlers_block_by_func(G_OBJECT(widgets->LayoutChangingCombo),G_CALLBACK(on_options_save),widgets); + g_signal_handlers_block_by_func(G_OBJECT(widgets->TTYLayoutCombo),G_CALLBACK(on_tty_changed),widgets); gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo),0); gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),0); @@ -27,12 +28,35 @@ gboolean yon_interface_update(main_window *widgets){ for(int i=0;iDefaultLayoutsSwitch),1); + } else { + gtk_switch_set_active(GTK_SWITCH(widgets->DefaultLayoutsSwitch),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); + } + } + + char *tty_keymap = config(console_keymap_parameter); + if (!yon_char_is_empty(tty_keymap)){ + gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->TTYLayoutCombo),tty_keymap); + } else { + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYLayoutCombo),0); + } } { gtk_list_store_clear(widgets->OptionsList); char *options = config(options_parameter); if (!yon_char_is_empty(options)){ - gtk_entry_set_text(GTK_ENTRY(widgets->ManualEntry),options); GtkTreeIter iter; int size; config_str parsed = yon_char_parse(options,&size,","); @@ -48,8 +72,6 @@ gboolean yon_interface_update(main_window *widgets){ yon_char_parsed_free(option_parsed,option_parsed_size); } yon_char_parsed_free(parsed,size); - } else { - gtk_entry_set_text(GTK_ENTRY(widgets->ManualEntry),""); } } { @@ -64,6 +86,7 @@ gboolean yon_interface_update(main_window *widgets){ g_signal_handlers_unblock_by_func(G_OBJECT(widgets->OptionsEditButton),G_CALLBACK(on_options_open),widgets); g_signal_handlers_unblock_by_func(G_OBJECT(widgets->NumLockCombo),G_CALLBACK(on_num_lock_changed),widgets); g_signal_handlers_unblock_by_func(G_OBJECT(widgets->LayoutChangingCombo),G_CALLBACK(on_options_save),widgets); + g_signal_handlers_unblock_by_func(G_OBJECT(widgets->TTYLayoutCombo),G_CALLBACK(on_tty_changed),widgets); return G_SOURCE_REMOVE; } @@ -135,6 +158,7 @@ void yon_config_init(){ int options_size; config_str options = yon_config_load(command_full,&options_size); for(int i=0;iTTYLayoutCombo)); + if (!yon_char_is_empty(tty_layout)){ + yon_config_register(console_keymap_parameter,console_keymap_parameter_command,tty_layout); + } else { + yon_config_remove_by_key(console_keymap_parameter); + } +} + void yon_main_window_complete(main_window *widgets){ widgets = yon_remalloc(widgets,sizeof(main_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); @@ -193,13 +227,14 @@ void yon_main_window_complete(main_window *widgets){ widgets->LayoutTree = yon_gtk_builder_get_widget(builder,"LayoutTree"); widgets->LayoutAddButton = yon_gtk_builder_get_widget(builder,"LayoutAddButton"); widgets->LayoutRemoveButton = yon_gtk_builder_get_widget(builder,"LayoutRemoveButton"); + widgets->LayoutMoveUpButton = yon_gtk_builder_get_widget(builder,"LayoutMoveUpButton"); + widgets->LayoutMoveDownButton = yon_gtk_builder_get_widget(builder,"LayoutMoveDownButton"); widgets->LayoutChangingCombo = yon_gtk_builder_get_widget(builder,"LayoutChangingCombo"); widgets->OptionsTree = yon_gtk_builder_get_widget(builder,"OptionsTree"); widgets->OptionsEditButton = yon_gtk_builder_get_widget(builder,"OptionsEditButton"); widgets->OptionsRemoveButton = yon_gtk_builder_get_widget(builder,"OptionsRemoveButton"); widgets->ComposeSwitch = yon_gtk_builder_get_widget(builder,"ComposeSwitch"); widgets->ScrollLockSwitch = yon_gtk_builder_get_widget(builder,"ScrollLockSwitch"); - widgets->ManualEntry = yon_gtk_builder_get_widget(builder,"ManualEntry"); widgets->NumLockCombo = yon_gtk_builder_get_widget(builder,"NumLockCombo"); widgets->TTYLayoutCombo = yon_gtk_builder_get_widget(builder,"TTYLayoutCombo"); widgets->LayoutsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LayoutsList")); @@ -212,6 +247,7 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->LayoutAddButton),"clicked",G_CALLBACK(on_system_layouts_add),widgets); g_signal_connect(G_OBJECT(widgets->LayoutRemoveButton),"clicked",G_CALLBACK(on_system_layouts_remove),widgets); + g_signal_connect(G_OBJECT(widgets->TTYLayoutCombo),"changed",G_CALLBACK(on_tty_changed),widgets); g_signal_connect(G_OBJECT(widgets->KeyboardModelCombo),"changed",G_CALLBACK(on_model_changed),widgets); g_signal_connect(G_OBJECT(widgets->OptionsEditButton),"clicked",G_CALLBACK(on_options_open),widgets); g_signal_connect(G_OBJECT(widgets->OptionsRemoveButton),"clicked",G_CALLBACK(on_option_remove),widgets); @@ -219,10 +255,17 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->LayoutChangingCombo),"changed",G_CALLBACK(on_options_save),widgets); g_signal_connect(G_OBJECT(widgets->ComposeSwitch),"state-set",G_CALLBACK(on_compose_switch),widgets); g_signal_connect(G_OBJECT(widgets->ScrollLockSwitch),"state-set",G_CALLBACK(on_scroll_lock_switch),widgets); + // g_signal_connect(G_OBJECT(widgets->LayoutsList),"row-inserted",G_CALLBACK(on_layout_dnd_inserted),widgets); + // g_signal_connect(G_OBJECT(widgets->LayoutsList),"row-deleted",G_CALLBACK(on_layout_dnd_deleted),widgets); g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutTree); g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutAddButton); g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutRemoveButton); + g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutMoveUpButton); + g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutMoveDownButton); + + g_signal_connect(G_OBJECT(widgets->LayoutMoveUpButton),"clicked",G_CALLBACK(on_layout_move_up),widgets); + g_signal_connect(G_OBJECT(widgets->LayoutMoveDownButton),"clicked",G_CALLBACK(on_layout_move_down),widgets); g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); diff --git a/source/ubl-settings-keyboard.h b/source/ubl-settings-keyboard.h index a4663e6..fbe1dd3 100644 --- a/source/ubl-settings-keyboard.h +++ b/source/ubl-settings-keyboard.h @@ -36,6 +36,8 @@ #define options_parameter_command "ubconfig --source global get keyboard XKBOPTIONS" #define num_lock_boot_parameter "NUMLOCK" #define num_lock_boot_parameter_command "ubconfig --source global get keyboard NUMLOCK" +#define console_keymap_parameter "CONSOLE_KEYMAP" +#define console_keymap_parameter_command "ubconfig --source global get keyboard CONSOLE_KEYMAP" #define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get keyboard XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK",NULL) #define config_get_local_command "ubconfig --source system get keyboard XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK" @@ -143,13 +145,14 @@ typedef struct { GtkWidget *LayoutTree; GtkWidget *LayoutAddButton; GtkWidget *LayoutRemoveButton; + GtkWidget *LayoutMoveUpButton; + GtkWidget *LayoutMoveDownButton; GtkWidget *LayoutChangingCombo; GtkWidget *OptionsTree; GtkWidget *OptionsEditButton; GtkWidget *OptionsRemoveButton; GtkWidget *ComposeSwitch; GtkWidget *ScrollLockSwitch; - GtkWidget *ManualEntry; GtkWidget *NumLockCombo; GtkWidget *TTYLayoutCombo; GtkListStore *LayoutsList; @@ -175,6 +178,7 @@ typedef struct { GtkWidget *CancelButton; GtkWidget *AcceptButton; GtkWidget *OptionsFilterCombo; + GtkWidget *OptionsEntry; GtkCellRenderer *ChosenCell; GtkTreeStore *list; GtkListStore *OptionsList; @@ -232,4 +236,9 @@ void on_option_chosen(GtkCellRenderer *, gchar *path, layouts_window *window); void on_options_save(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_option_remove(GtkWidget*, main_window *widgets); \ No newline at end of file +void on_option_remove(GtkWidget*, main_window *widgets); +void on_layout_move_down(GtkWidget *, main_window *widgets); +void on_layout_move_up(GtkWidget *, main_window *widgets); +void on_layout_dnd_inserted(GtkTreeModel *, GtkTreePath* path, GtkTreeIter* iter, main_window *widgets); +void on_layout_dnd_deleted(GtkTreeModel *, GtkTreePath* path, GtkTreeIter* iter, main_window *widgets); +void on_tty_changed(GtkWidget *, main_window *widgets); \ No newline at end of file diff --git a/ubl-settings-keyboard-options.glade b/ubl-settings-keyboard-options.glade index 0b04912..f0e5d48 100644 --- a/ubl-settings-keyboard-options.glade +++ b/ubl-settings-keyboard-options.glade @@ -84,6 +84,9 @@ True True OptionsList + + + @@ -128,6 +131,42 @@ 1 + + + True + False + 5 + + + True + False + Options: + + + False + True + 0 + + + + + True + True + grp:lalt_lshift_toggle,grp_led:scroll,compose:rwin + + + True + True + 1 + + + + + False + True + 2 + + True diff --git a/ubl-settings-keyboard.glade b/ubl-settings-keyboard.glade index c3f410d..0b0b231 100644 --- a/ubl-settings-keyboard.glade +++ b/ubl-settings-keyboard.glade @@ -58,6 +58,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False com.ublinux.libublsettingsui-gtk3.trash-symbolic + + True + False + com.ublinux.libublsettingsui-gtk3.up-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.down-symbolic + True False @@ -227,7 +237,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True LayoutsList False - True both @@ -280,6 +289,40 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False vertical 5 + + + True + False + True + True + image4 + + + + False + True + 0 + + + + + True + False + True + True + image5 + + + + False + True + 1 + + True @@ -294,7 +337,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False True - 0 + 2 @@ -311,7 +354,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False True - 1 + 3 @@ -616,43 +659,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 4 - - - True - False - 5 - - - True - False - Manual input: - 1 - - - False - True - 0 - - - - - True - True - grp:lalt_lshift_toggle,grp_led:scroll,compose:rwin - - - True - True - 1 - - - - - False - True - 5 - - True @@ -745,9 +751,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - + True False + LayoutsList + 0 + 0 + + + + 2 + + True @@ -787,14 +802,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - - - - + + + + From c64175be2dd34b79bb24ea14e5da002a35f5fbd8 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 10 Nov 2025 18:28:01 +0600 Subject: [PATCH 04/24] Localisation --- locale/ubl-settings-keyboard-layouts.pot | 1761 +++++++++++++++++++ locale/ubl-settings-keyboard-layouts_ru.po | 1780 ++++++++++++++++++++ locale/ubl-settings-keyboard-models.pot | 578 +++++++ locale/ubl-settings-keyboard-models_ru.po | 576 +++++++ locale/ubl-settings-keyboard-options.pot | 425 +++++ locale/ubl-settings-keyboard-options_ru.po | 423 +++++ locale/ubl-settings-keyboard.pot | 429 +---- locale/ubl-settings-keyboard_ru.po | 477 +----- source/ubl-strings.h | 31 +- 9 files changed, 5704 insertions(+), 776 deletions(-) create mode 100644 locale/ubl-settings-keyboard-layouts.pot create mode 100644 locale/ubl-settings-keyboard-layouts_ru.po create mode 100644 locale/ubl-settings-keyboard-models.pot create mode 100644 locale/ubl-settings-keyboard-models_ru.po create mode 100644 locale/ubl-settings-keyboard-options.pot create mode 100644 locale/ubl-settings-keyboard-options_ru.po diff --git a/locale/ubl-settings-keyboard-layouts.pot b/locale/ubl-settings-keyboard-layouts.pot new file mode 100644 index 0000000..89365bb --- /dev/null +++ b/locale/ubl-settings-keyboard-layouts.pot @@ -0,0 +1,1761 @@ + +msgid "Albanian" +msgstr "" + +msgid "Amharic" +msgstr "" + +msgid "Armenian" +msgstr "" + +msgid "Arabic" +msgstr "" + +msgid "Arabic (Egypt)" +msgstr "" + +msgid "Arabic (Iraq)" +msgstr "" + +msgid "Arabic (Morocco)" +msgstr "" + +msgid "Arabic (Syria)" +msgstr "" + +msgid "Azerbaijani" +msgstr "" + +msgid "Bambara" +msgstr "" + +msgid "Bangla" +msgstr "" + +msgid "Belarusian" +msgstr "" + +msgid "Belgian" +msgstr "" + +msgid "Berber (Algeria, Latin)" +msgstr "" + +msgid "Bosnian" +msgstr "" + +msgid "Braille" +msgstr "" + +msgid "Bulgarian" +msgstr "" + +msgid "Burmese" +msgstr "" + +msgid "Chinese" +msgstr "" + +msgid "Croatian" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Danish" +msgstr "" + +msgid "Dari" +msgstr "" + +msgid "Dhivehi" +msgstr "" + +msgid "Dutch" +msgstr "" + +msgid "Dzongkha" +msgstr "" + +msgid "English (Australia)" +msgstr "" + +msgid "English (Cameroon)" +msgstr "" + +msgid "English (Ghana)" +msgstr "" + +msgid "English (New Zealand)" +msgstr "" + +msgid "English (Nigeria)" +msgstr "" + +msgid "English (South Africa)" +msgstr "" + +msgid "English (UK)" +msgstr "" + +msgid "English (US)" +msgstr "" + +msgid "Esperanto" +msgstr "" + +msgid "Estonian" +msgstr "" + +msgid "Faroese" +msgstr "" + +msgid "Filipino" +msgstr "" + +msgid "Finnish" +msgstr "" + +msgid "French" +msgstr "" + +msgid "French (Canada)" +msgstr "" + +msgid "French (Democratic Republic of the Congo)" +msgstr "" + +msgid "French (Togo)" +msgstr "" + +msgid "Georgian" +msgstr "" + +msgid "German" +msgstr "" + +msgid "German (Austria)" +msgstr "" + +msgid "German (Switzerland)" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "Hebrew" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Icelandic" +msgstr "" + +msgid "Indian" +msgstr "" + +msgid "Indonesian (Latin)" +msgstr "" + +msgid "Irish" +msgstr "" + +msgid "Italian" +msgstr "" + +msgid "Japanese" +msgstr "" + +msgid "Kazakh" +msgstr "" + +msgid "Khmer (Cambodia)" +msgstr "" + +msgid "Korean" +msgstr "" + +msgid "Kyrgyz" +msgstr "" + +msgid "Lao" +msgstr "" + +msgid "Latvian" +msgstr "" + +msgid "Lithuanian" +msgstr "" + +msgid "Macedonian" +msgstr "" + +msgid "Malay (Jawi, Arabic Keyboard)" +msgstr "" + +msgid "Maltese" +msgstr "" + +msgid "Moldavian" +msgstr "" + +msgid "Mongolian" +msgstr "" + +msgid "Montenegrin" +msgstr "" + +msgid "Nepali" +msgstr "" + +msgid "N'Ko (AZERTY)" +msgstr "" + +msgid "Norwegian" +msgstr "" + +msgid "Persian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Portuguese (Brazil)" +msgstr "" + +msgid "Romanian" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Serbian" +msgstr "" + +msgid "Sinhala (phonetic)" +msgstr "" + +msgid "Slovak" +msgstr "" + +msgid "Slovenian" +msgstr "" + +msgid "Spanish" +msgstr "" + +msgid "Spanish (Latin American)" +msgstr "" + +msgid "Swahili (Kenya)" +msgstr "" + +msgid "Swahili (Tanzania)" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Taiwanese" +msgstr "" + +msgid "Tajik" +msgstr "" + +msgid "Thai" +msgstr "" + +msgid "Tswana" +msgstr "" + +msgid "Turkmen" +msgstr "" + +msgid "Turkish" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "Urdu (Pakistan)" +msgstr "" + +msgid "Uzbek" +msgstr "" + +msgid "Vietnamese" +msgstr "" + +msgid "Wolof" +msgstr "" + +msgid "Albanian (Plisi)" +msgstr "" + +msgid "Albanian (Veqilharxhi)" +msgstr "" + +msgid "Armenian (phonetic)" +msgstr "" + +msgid "Armenian (alt. phonetic)" +msgstr "" + +msgid "Armenian (eastern)" +msgstr "" + +msgid "Armenian (alt. eastern)" +msgstr "" + +msgid "Armenian (western)" +msgstr "" + +msgid "Arabic (Eastern Arabic numerals)" +msgstr "" + +msgid "Arabic (AZERTY)" +msgstr "" + +msgid "Arabic (AZERTY, Eastern Arabic numerals)" +msgstr "" + +msgid "Arabic (Buckwalter)" +msgstr "" + +msgid "Arabic (Macintosh)" +msgstr "" + +msgid "Arabic (Macintosh, phonetic)" +msgstr "" + +msgid "Arabic (OLPC)" +msgstr "" + +msgid "Kurdish (Iraq, Latin Q)" +msgstr "" + +msgid "Kurdish (Iraq, Latin Alt-Q)" +msgstr "" + +msgid "Kurdish (Iraq, F)" +msgstr "" + +msgid "Kurdish (Iraq, Arabic-Latin)" +msgstr "" + +msgid "Berber (Morocco, Tifinagh)" +msgstr "" + +msgid "Berber (Morocco, Tifinagh alt.)" +msgstr "" + +msgid "alt-Berber (Morocco, Tifinagh phonetic, alt.)" +msgstr "" + +msgid "Berber (Morocco, Tifinagh extended)" +msgstr "" + +msgid "Berber (Morocco, Tifinagh phonetic)" +msgstr "" + +msgid "extended-Berber (Morocco, Tifinagh extended phonetic)" +msgstr "" + +msgid "French (Morocco)" +msgstr "" + +msgid "Tarifit" +msgstr "" + +msgid "Syriac" +msgstr "" + +msgid "Syriac (phonetic)" +msgstr "" + +msgid "Kurdish (Syria, Latin Q)" +msgstr "" + +msgid "Kurdish (Syria, Latin Alt-Q)" +msgstr "" + +msgid "Kurdish (Syria, F)" +msgstr "" + +msgid "Azerbaijani (Cyrillic)" +msgstr "" + +msgid "French (Mali, alt.)" +msgstr "" + +msgid "English (Mali, US, Macintosh)" +msgstr "" + +msgid "English (Mali, US, intl.)" +msgstr "" + +msgid "Bangla (Probhat)" +msgstr "" + +msgid "Belarusian (legacy)" +msgstr "" + +msgid "Belarusian (Latin)" +msgstr "" + +msgid "Belarusian (intl.)" +msgstr "" + +msgid "Belarusian (phonetic)" +msgstr "" + +msgid "Russian (Belarus)" +msgstr "" + +msgid "Belgian (alt.)" +msgstr "" + +msgid "Belgian (Latin-9 only, alt.)" +msgstr "" + +msgid "Belgian (ISO, alt.)" +msgstr "" + +msgid "Belgian (no dead keys)" +msgstr "" + +msgid "Belgian (Wang 724 AZERTY)" +msgstr "" + +msgid "Berber (Algeria, Tifinagh)" +msgstr "" + +msgid "Kabyle (AZERTY, with dead keys)" +msgstr "" + +msgid "gb-Kabyle (QWERTY, UK, with dead keys)" +msgstr "" + +msgid "us-Kabyle (QWERTY, US, with dead keys)" +msgstr "" + +msgid "Arabic (Algeria)" +msgstr "" + +msgid "Bosnian (with guillemets)" +msgstr "" + +msgid "Bosnian (with Bosnian digraphs)" +msgstr "" + +msgid "Bosnian (US, with Bosnian digraphs)" +msgstr "" + +msgid "Bosnian (US)" +msgstr "" + +msgid "Braille (left-handed)" +msgstr "" + +msgid "Braille (left-handed inverted thumb)" +msgstr "" + +msgid "Braille (right-handed)" +msgstr "" + +msgid "Braille (right-handed inverted thumb)" +msgstr "" + +msgid "Bulgarian (traditional phonetic)" +msgstr "" + +msgid "Bulgarian (new phonetic)" +msgstr "" + +msgid "Bulgarian (enhanced)" +msgstr "" + +msgid "Burmese (Zawgyi)" +msgstr "" + +msgid "Mon" +msgstr "" + +msgid "Mon (A1)" +msgstr "" + +msgid "Shan" +msgstr "" + +msgid "Shan (Zawgyi)" +msgstr "" + +msgid "Hanyu Pinyin Letters (with AltGr dead keys)" +msgstr "" + +msgid "Mongolian (Bichig)" +msgstr "" + +msgid "Mongolian (Todo)" +msgstr "" + +msgid "Mongolian (Xibe)" +msgstr "" + +msgid "Mongolian (Manchu)" +msgstr "" + +msgid "Mongolian (Galik)" +msgstr "" + +msgid "Mongolian (Todo Galik)" +msgstr "" + +msgid "Mongolian (Manchu Galik)" +msgstr "" + +msgid "Tibetan" +msgstr "" + +msgid "Tibetan (with ASCII numerals)" +msgstr "" + +msgid "Uyghur" +msgstr "" + +msgid "Croatian (with guillemets)" +msgstr "" + +msgid "Croatian (with Croatian digraphs)" +msgstr "" + +msgid "Croatian (US, with Croatian digraphs)" +msgstr "" + +msgid "Croatian (US)" +msgstr "" + +msgid "Czech (extra backslash)" +msgstr "" + +msgid "Czech (QWERTY)" +msgstr "" + +msgid "Czech (QWERTY, extra backslash)" +msgstr "" + +msgid "Czech (QWERTZ, Windows)" +msgstr "" + +msgid "Czech (QWERTY, Windows)" +msgstr "" + +msgid "Czech (QWERTY, Macintosh)" +msgstr "" + +msgid "Czech (UCW, only accented letters)" +msgstr "" + +msgid "Czech (US, Dvorak, UCW support)" +msgstr "" + +msgid "Russian (Czechia, phonetic)" +msgstr "" + +msgid "Danish (no dead keys)" +msgstr "" + +msgid "Danish (Windows)" +msgstr "" + +msgid "Danish (Macintosh)" +msgstr "" + +msgid "Danish (Macintosh, no dead keys)" +msgstr "" + +msgid "Danish (Dvorak)" +msgstr "" + +msgid "Pashto" +msgstr "" + +msgid "Uzbek (Afghanistan)" +msgstr "" + +msgid "Dari (Afghanistan, OLPC)" +msgstr "" + +msgid "Pashto (Afghanistan, OLPC)" +msgstr "" + +msgid "Uzbek (Afghanistan, OLPC)" +msgstr "" + +msgid "Dutch (US)" +msgstr "" + +msgid "Dutch (Macintosh)" +msgstr "" + +msgid "Dutch (standard)" +msgstr "" + +msgid "French (Cameroon)" +msgstr "" + +msgid "Cameroon Multilingual (QWERTY, intl.)" +msgstr "" + +msgid "Cameroon (AZERTY, intl.)" +msgstr "" + +msgid "Cameroon (Dvorak, intl.)" +msgstr "" + +msgid "Mmuock" +msgstr "" + +msgid "English (Ghana, multilingual)" +msgstr "" + +msgid "English (Ghana, GILLBT)" +msgstr "" + +msgid "Akan" +msgstr "" + +msgid "Avatime" +msgstr "" + +msgid "Ewe" +msgstr "" + +msgid "Fula" +msgstr "" + +msgid "Ga" +msgstr "" + +msgid "Hausa (Ghana)" +msgstr "" + +msgid "Maori" +msgstr "" + +msgid "Hausa (Nigeria)" +msgstr "" + +msgid "Igbo" +msgstr "" + +msgid "Yoruba" +msgstr "" + +msgid "English (UK, extended, Windows)" +msgstr "" + +msgid "English (UK, intl., with dead keys)" +msgstr "" + +msgid "English (UK, Dvorak)" +msgstr "" + +msgid "English (UK, Dvorak, with UK punctuation)" +msgstr "" + +msgid "English (UK, Macintosh)" +msgstr "" + +msgid "English (UK, Macintosh, intl.)" +msgstr "" + +msgid "English (UK, Colemak)" +msgstr "" + +msgid "English (UK, Colemak-DH)" +msgstr "" + +msgid "Scottish Gaelic" +msgstr "" + +msgid "Polish (British keyboard)" +msgstr "" + +msgid "English (US, euro on 5)" +msgstr "" + +msgid "English (US, intl., with dead keys)" +msgstr "" + +msgid "English (US, alt. intl.)" +msgstr "" + +msgid "English (intl., with AltGr dead keys)" +msgstr "" + +msgid "English (Macintosh)" +msgstr "" + +msgid "English (Colemak)" +msgstr "" + +msgid "English (Colemak-DH)" +msgstr "" + +msgid "English (Colemak-DH Wide)" +msgstr "" + +msgid "English (Colemak-DH Ortholinear)" +msgstr "" + +msgid "English (Colemak-DH ISO)" +msgstr "" + +msgid "English (Colemak-DH Wide ISO)" +msgstr "" + +msgid "English (Dvorak)" +msgstr "" + +msgid "English (Dvorak, intl., with dead keys)" +msgstr "" + +msgid "alt-English (Dvorak, alt. intl.)" +msgstr "" + +msgid "English (Dvorak, left-handed)" +msgstr "" + +msgid "English (Dvorak, right-handed)" +msgstr "" + +msgid "English (classic Dvorak)" +msgstr "" + +msgid "English (programmer Dvorak)" +msgstr "" + +msgid "English (Dvorak, Macintosh)" +msgstr "" + +msgid "English (Norman)" +msgstr "" + +msgid "English (US, Symbolic)" +msgstr "" + +msgid "English (Workman)" +msgstr "" + +msgid "English (Workman, intl., with dead keys)" +msgstr "" + +msgid "English (the divide/multiply toggle the layout)" +msgstr "" + +msgid "Cherokee" +msgstr "" + +msgid "Hawaiian" +msgstr "" + +msgid "Russian (US, phonetic)" +msgstr "" + +msgid "Serbo-Croatian (US)" +msgstr "" + +msgid "Esperanto (legacy)" +msgstr "" + +msgid "Estonian (no dead keys)" +msgstr "" + +msgid "Estonian (Dvorak)" +msgstr "" + +msgid "Estonian (US)" +msgstr "" + +msgid "Faroese (no dead keys)" +msgstr "" + +msgid "Filipino (QWERTY, Baybayin)" +msgstr "" + +msgid "Filipino (Capewell-Dvorak, Latin)" +msgstr "" + +msgid "dvorak-Filipino (Capewell-Dvorak, Baybayin)" +msgstr "" + +msgid "Filipino (Capewell-QWERF 2006, Latin)" +msgstr "" + +msgid "qwerf2k6-Filipino (Capewell-QWERF 2006, Baybayin)" +msgstr "" + +msgid "Filipino (Colemak, Latin)" +msgstr "" + +msgid "Filipino (Colemak, Baybayin)" +msgstr "" + +msgid "Filipino (Dvorak, Latin)" +msgstr "" + +msgid "Filipino (Dvorak, Baybayin)" +msgstr "" + +msgid "Finnish (Windows)" +msgstr "" + +msgid "Finnish (classic)" +msgstr "" + +msgid "Finnish (classic, no dead keys)" +msgstr "" + +msgid "Finnish (Macintosh)" +msgstr "" + +msgid "Northern Saami (Finland)" +msgstr "" + +msgid "French (no dead keys)" +msgstr "" + +msgid "French (alt.)" +msgstr "" + +msgid "French (alt., no dead keys)" +msgstr "" + +msgid "French (alt., Latin-9 only)" +msgstr "" + +msgid "French (legacy, alt.)" +msgstr "" + +msgid "French (legacy, alt., no dead keys)" +msgstr "" + +msgid "French (AZERTY)" +msgstr "" + +msgid "French (AZERTY, AFNOR)" +msgstr "" + +msgid "French (BEPO)" +msgstr "" + +msgid "French (BEPO, Latin-9 only)" +msgstr "" + +msgid "French (BEPO, AFNOR)" +msgstr "" + +msgid "French (Dvorak)" +msgstr "" + +msgid "French (Macintosh)" +msgstr "" + +msgid "French (US)" +msgstr "" + +msgid "Breton (France)" +msgstr "" + +msgid "Occitan" +msgstr "" + +msgid "Georgian (France, AZERTY Tskapo)" +msgstr "" + +msgid "French (Canada, Dvorak)" +msgstr "" + +msgid "French (Canada, legacy)" +msgstr "" + +msgid "Canadian (CSA)" +msgstr "" + +msgid "English (Canada)" +msgstr "" + +msgid "Inuktitut" +msgstr "" + +msgid "Georgian (ergonomic)" +msgstr "" + +msgid "Georgian (MESS)" +msgstr "" + +msgid "Ossetian (Georgia)" +msgstr "" + +msgid "Russian (Georgia)" +msgstr "" + +msgid "German (dead acute)" +msgstr "" + +msgid "German (dead grave acute)" +msgstr "" + +msgid "German (dead tilde)" +msgstr "" + +msgid "German (no dead keys)" +msgstr "" + +msgid "German (E1)" +msgstr "" + +msgid "German (E2)" +msgstr "" + +msgid "German (T3)" +msgstr "" + +msgid "German (US)" +msgstr "" + +msgid "German (Dvorak)" +msgstr "" + +msgid "German (Macintosh)" +msgstr "" + +msgid "German (Macintosh, no dead keys)" +msgstr "" + +msgid "German (Neo 2)" +msgstr "" + +msgid "German (QWERTY)" +msgstr "" + +msgid "Lower Sorbian" +msgstr "" + +msgid "Lower Sorbian (QWERTZ)" +msgstr "" + +msgid "Romanian (Germany)" +msgstr "" + +msgid "Romanian (Germany, no dead keys)" +msgstr "" + +msgid "Russian (Germany, phonetic)" +msgstr "" + +msgid "Turkish (Germany)" +msgstr "" + +msgid "German (Austria, no dead keys)" +msgstr "" + +msgid "German (Austria, Macintosh)" +msgstr "" + +msgid "German (Switzerland, no dead keys)" +msgstr "" + +msgid "German (Switzerland, Macintosh)" +msgstr "" + +msgid "German (Switzerland, legacy)" +msgstr "" + +msgid "French (Switzerland)" +msgstr "" + +msgid "French (Switzerland, no dead keys)" +msgstr "" + +msgid "French (Switzerland, Macintosh)" +msgstr "" + +msgid "Greek (simple)" +msgstr "" + +msgid "Greek (no dead keys)" +msgstr "" + +msgid "Greek (polytonic)" +msgstr "" + +msgid "Hebrew (SI-1452-2)" +msgstr "" + +msgid "Hebrew (lyx)" +msgstr "" + +msgid "Hebrew (phonetic)" +msgstr "" + +msgid "Hebrew (Biblical, Tiro)" +msgstr "" + +msgid "Hungarian (standard)" +msgstr "" + +msgid "Hungarian (no dead keys)" +msgstr "" + +msgid "Hungarian (QWERTY)" +msgstr "" + +msgid "Hungarian (QWERTZ, 101-key, comma, dead keys)" +msgstr "" + +msgid "Hungarian (QWERTZ, 101-key, comma, no dead keys)" +msgstr "" + +msgid "Hungarian (QWERTZ, 101-key, dot, dead keys)" +msgstr "" + +msgid "Hungarian (QWERTZ, 101-key, dot, no dead keys)" +msgstr "" + +msgid "Hungarian (QWERTY, 101-key, comma, dead keys)" +msgstr "" + +msgid "Hungarian (QWERTY, 101-key, comma, no dead keys)" +msgstr "" + +msgid "Hungarian (QWERTY, 101-key, dot, dead keys)" +msgstr "" + +msgid "Hungarian (QWERTY, 101-key, dot, no dead keys)" +msgstr "" + +msgid "Hungarian (QWERTZ, 102-key, comma, dead keys)" +msgstr "" + +msgid "Hungarian (QWERTZ, 102-key, comma, no dead keys)" +msgstr "" + +msgid "Hungarian (QWERTZ, 102-key, dot, dead keys)" +msgstr "" + +msgid "Hungarian (QWERTZ, 102-key, dot, no dead keys)" +msgstr "" + +msgid "Hungarian (QWERTY, 102-key, comma, dead keys)" +msgstr "" + +msgid "Hungarian (QWERTY, 102-key, comma, no dead keys)" +msgstr "" + +msgid "Hungarian (QWERTY, 102-key, dot, dead keys)" +msgstr "" + +msgid "Hungarian (QWERTY, 102-key, dot, no dead keys)" +msgstr "" + +msgid "Icelandic (Macintosh, legacy)" +msgstr "" + +msgid "Icelandic (Macintosh)" +msgstr "" + +msgid "Icelandic (Dvorak)" +msgstr "" + +msgid "Assamese (KaGaPa, phonetic)" +msgstr "" + +msgid "Bangla (India)" +msgstr "" + +msgid "Bangla (India, Probhat)" +msgstr "" + +msgid "Bangla (India, Baishakhi)" +msgstr "" + +msgid "Bangla (India, Bornona)" +msgstr "" + +msgid "Bangla (India, KaGaPa, phonetic)" +msgstr "" + +msgid "Bangla (India, Gitanjali)" +msgstr "" + +msgid "Bangla (India, Baishakhi InScript)" +msgstr "" + +msgid "English (India, with rupee)" +msgstr "" + +msgid "Gujarati" +msgstr "" + +msgid "Gujarati (KaGaPa, phonetic)" +msgstr "" + +msgid "Hindi (Bolnagri)" +msgstr "" + +msgid "Hindi (Wx)" +msgstr "" + +msgid "Hindi (KaGaPa, phonetic)" +msgstr "" + +msgid "Kannada" +msgstr "" + +msgid "Kannada (KaGaPa, phonetic)" +msgstr "" + +msgid "Malayalam" +msgstr "" + +msgid "Malayalam (Lalitha)" +msgstr "" + +msgid "Malayalam (enhanced InScript, with rupee)" +msgstr "" + +msgid "Malayalam (Poorna, extended InScript)" +msgstr "" + +msgid "Manipuri (Meitei)" +msgstr "" + +msgid "Marathi (KaGaPa, phonetic)" +msgstr "" + +msgid "Marathi (enhanced InScript)" +msgstr "" + +msgid "Oriya" +msgstr "" + +msgid "Oriya (Bolnagri)" +msgstr "" + +msgid "Oriya (Wx)" +msgstr "" + +msgid "Punjabi (Gurmukhi)" +msgstr "" + +msgid "Punjabi (Gurmukhi Jhelum)" +msgstr "" + +msgid "Sanskrit (KaGaPa, phonetic)" +msgstr "" + +msgid "Santali (Ol Chiki)" +msgstr "" + +msgid "Tamil (TamilNet '99)" +msgstr "" + +msgid "Tamil (TamilNet '99 with Tamil numerals)" +msgstr "" + +msgid "Tamil (TamilNet '99, TAB encoding)" +msgstr "" + +msgid "Tamil (TamilNet '99, TSCII encoding)" +msgstr "" + +msgid "Tamil (InScript, with Arabic numerals)" +msgstr "" + +msgid "Tamil (InScript, with Tamil numerals)" +msgstr "" + +msgid "Telugu" +msgstr "" + +msgid "Telugu (KaGaPa, phonetic)" +msgstr "" + +msgid "Telugu (Sarala)" +msgstr "" + +msgid "Urdu (phonetic)" +msgstr "" + +msgid "Urdu (alt. phonetic)" +msgstr "" + +msgid "Urdu (Windows)" +msgstr "" + +msgid "Indic IPA" +msgstr "" + +msgid "Indonesian (Arab Melayu, phonetic)" +msgstr "" + +msgid "Indonesian (Arab Melayu, extended phonetic)" +msgstr "" + +msgid "Indonesian (Arab Pegon, phonetic)" +msgstr "" + +msgid "Javanese" +msgstr "" + +msgid "Irish (UnicodeExpert)" +msgstr "" + +msgid "CloGaelach" +msgstr "" + +msgid "Ogham" +msgstr "" + +msgid "Ogham (IS434)" +msgstr "" + +msgid "Italian (no dead keys)" +msgstr "" + +msgid "Italian (Windows)" +msgstr "" + +msgid "Italian (Macintosh)" +msgstr "" + +msgid "Italian (US)" +msgstr "" + +msgid "Italian (IBM 142)" +msgstr "" + +msgid "Friulian (Italy)" +msgstr "" + +msgid "Sicilian" +msgstr "" + +msgid "Georgian (Italy)" +msgstr "" + +msgid "Japanese (Kana)" +msgstr "" + +msgid "Japanese (Kana 86)" +msgstr "" + +msgid "Japanese (OADG 109A)" +msgstr "" + +msgid "Japanese (Macintosh)" +msgstr "" + +msgid "Japanese (Dvorak)" +msgstr "" + +msgid "Kazakh (with Russian)" +msgstr "" + +msgid "Kazakh (extended)" +msgstr "" + +msgid "Kazakh (Latin)" +msgstr "" + +msgid "Russian (Kazakhstan, with Kazakh)" +msgstr "" + +msgid "Korean (101/104-key compatible)" +msgstr "" + +msgid "Kyrgyz (phonetic)" +msgstr "" + +msgid "Lao (STEA)" +msgstr "" + +msgid "Latvian (apostrophe)" +msgstr "" + +msgid "Latvian (tilde)" +msgstr "" + +msgid "Latvian (F)" +msgstr "" + +msgid "Latvian (Modern Latin)" +msgstr "" + +msgid "Latvian (Modern Cyrillic)" +msgstr "" + +msgid "Latvian (ergonomic, ŪGJRMV)" +msgstr "" + +msgid "Latvian (adapted)" +msgstr "" + +msgid "Lithuanian (standard)" +msgstr "" + +msgid "Lithuanian (US)" +msgstr "" + +msgid "Lithuanian (IBM)" +msgstr "" + +msgid "Lithuanian (LEKP)" +msgstr "" + +msgid "Lithuanian (LEKPa)" +msgstr "" + +msgid "Lithuanian (Ratise)" +msgstr "" + +msgid "Samogitian" +msgstr "" + +msgid "Macedonian (no dead keys)" +msgstr "" + +msgid "Malay (Jawi, phonetic)" +msgstr "" + +msgid "Maltese (US)" +msgstr "" + +msgid "Maltese (US, with AltGr overrides)" +msgstr "" + +msgid "Maltese (UK, with AltGr overrides)" +msgstr "" + +msgid "Gagauz (Moldova)" +msgstr "" + +msgid "Montenegrin (Cyrillic)" +msgstr "" + +msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)" +msgstr "" + +msgid "Montenegrin (Cyrillic, with guillemets)" +msgstr "" + +msgid "Montenegrin (Latin, Unicode)" +msgstr "" + +msgid "Montenegrin (Latin, QWERTY)" +msgstr "" + +msgid "Montenegrin (Latin, Unicode, QWERTY)" +msgstr "" + +msgid "Montenegrin (Latin, with guillemets)" +msgstr "" + +msgid "Norwegian (no dead keys)" +msgstr "" + +msgid "Norwegian (Windows)" +msgstr "" + +msgid "Norwegian (Macintosh)" +msgstr "" + +msgid "Norwegian (Macintosh, no dead keys)" +msgstr "" + +msgid "Norwegian (Colemak)" +msgstr "" + +msgid "Norwegian (Colemak-DH)" +msgstr "" + +msgid "Norwegian (Colemak-DH Wide)" +msgstr "" + +msgid "Norwegian (Dvorak)" +msgstr "" + +msgid "Northern Saami (Norway)" +msgstr "" + +msgid "Northern Saami (Norway, no dead keys)" +msgstr "" + +msgid "Persian (with Persian keypad)" +msgstr "" + +msgid "Persian (Windows)" +msgstr "" + +msgid "Azerbaijani (Iran)" +msgstr "" + +msgid "Kurdish (Iran, Latin Q)" +msgstr "" + +msgid "Kurdish (Iran, Latin Alt-Q)" +msgstr "" + +msgid "Kurdish (Iran, F)" +msgstr "" + +msgid "Kurdish (Iran, Arabic-Latin)" +msgstr "" + +msgid "Polish (legacy)" +msgstr "" + +msgid "Polish (QWERTZ)" +msgstr "" + +msgid "Polish (Dvorak)" +msgstr "" + +msgid "Polish (Dvorak, with Polish quotes on quotemark key)" +msgstr "" + +msgid "Polish (Dvorak, with Polish quotes on key 1)" +msgstr "" + +msgid "Polish (programmer Dvorak)" +msgstr "" + +msgid "Kashubian" +msgstr "" + +msgid "Silesian" +msgstr "" + +msgid "Russian (Poland, phonetic Dvorak)" +msgstr "" + +msgid "Portuguese (no dead keys)" +msgstr "" + +msgid "Portuguese (Macintosh)" +msgstr "" + +msgid "Portuguese (Macintosh, no dead keys)" +msgstr "" + +msgid "Portuguese (Nativo)" +msgstr "" + +msgid "Portuguese (Nativo for US keyboards)" +msgstr "" + +msgid "Esperanto (Portugal, Nativo)" +msgstr "" + +msgid "Portuguese (Brazil, no dead keys)" +msgstr "" + +msgid "Portuguese (Brazil, Dvorak)" +msgstr "" + +msgid "Portuguese (Brazil, Nativo)" +msgstr "" + +msgid "Portuguese (Brazil, Nativo for US keyboards)" +msgstr "" + +msgid "Portuguese (Brazil, IBM/Lenovo ThinkPad)" +msgstr "" + +msgid "Esperanto (Brazil, Nativo)" +msgstr "" + +msgid "Russian (Brazil, phonetic)" +msgstr "" + +msgid "Romanian (standard)" +msgstr "" + +msgid "Romanian (Windows)" +msgstr "" + +msgid "Russian (phonetic)" +msgstr "" + +msgid "Russian (phonetic, Windows)" +msgstr "" + +msgid "Russian (phonetic, YAZHERTY)" +msgstr "" + +msgid "Russian (phonetic, AZERTY)" +msgstr "" + +msgid "Russian (phonetic, Dvorak)" +msgstr "" + +msgid "Russian (typewriter)" +msgstr "" + +msgid "Russian (engineering, RU)" +msgstr "" + +msgid "Russian (engineering, EN)" +msgstr "" + +msgid "Russian (legacy)" +msgstr "" + +msgid "Russian (typewriter, legacy)" +msgstr "" + +msgid "Russian (DOS)" +msgstr "" + +msgid "Russian (Macintosh)" +msgstr "" + +msgid "Abkhazian (Russia)" +msgstr "" + +msgid "Bashkirian" +msgstr "" + +msgid "Chuvash" +msgstr "" + +msgid "Chuvash (Latin)" +msgstr "" + +msgid "Kalmyk" +msgstr "" + +msgid "Komi" +msgstr "" + +msgid "Mari" +msgstr "" + +msgid "Ossetian (legacy)" +msgstr "" + +msgid "Ossetian (Windows)" +msgstr "" + +msgid "Serbian (Russia)" +msgstr "" + +msgid "Tatar" +msgstr "" + +msgid "Udmurt" +msgstr "" + +msgid "Yakut" +msgstr "" + +msgid "Serbian (Cyrillic, with guillemets)" +msgstr "" + +msgid "Serbian (Cyrillic, ZE and ZHE swapped)" +msgstr "" + +msgid "Serbian (Latin)" +msgstr "" + +msgid "Serbian (Latin, with guillemets)" +msgstr "" + +msgid "Serbian (Latin, Unicode)" +msgstr "" + +msgid "Serbian (Latin, QWERTY)" +msgstr "" + +msgid "Serbian (Latin, Unicode, QWERTY)" +msgstr "" + +msgid "Pannonian Rusyn" +msgstr "" + +msgid "Sinhala (US)" +msgstr "" + +msgid "Tamil (Sri Lanka, TamilNet '99)" +msgstr "" + +msgid "Tamil (Sri Lanka, TamilNet '99, TAB encoding)" +msgstr "" + +msgid "Slovak (extra backslash)" +msgstr "" + +msgid "Slovak (QWERTY)" +msgstr "" + +msgid "Slovak (QWERTY, extra backslash)" +msgstr "" + +msgid "Slovenian (with guillemets)" +msgstr "" + +msgid "Slovenian (US)" +msgstr "" + +msgid "Spanish (no dead keys)" +msgstr "" + +msgid "Spanish (dead tilde)" +msgstr "" + +msgid "Spanish (Windows)" +msgstr "" + +msgid "Spanish (Dvorak)" +msgstr "" + +msgid "Asturian (Spain, with bottom-dot H and L)" +msgstr "" + +msgid "Catalan (Spain, with middle-dot L)" +msgstr "" + +msgid "Spanish (Latin American, no dead keys)" +msgstr "" + +msgid "Spanish (Latin American, dead tilde)" +msgstr "" + +msgid "Spanish (Latin American, Dvorak)" +msgstr "" + +msgid "Spanish (Latin American, Colemak)" +msgstr "" + +msgid "Kikuyu" +msgstr "" + +msgid "Swedish (no dead keys)" +msgstr "" + +msgid "Swedish (Dvorak)" +msgstr "" + +msgid "Swedish (Dvorak, intl.)" +msgstr "" + +msgid "Swedish (Svdvorak)" +msgstr "" + +msgid "Swedish (Macintosh)" +msgstr "" + +msgid "Swedish (US)" +msgstr "" + +msgid "Swedish Sign Language" +msgstr "" + +msgid "Northern Saami (Sweden)" +msgstr "" + +msgid "Russian (Sweden, phonetic)" +msgstr "" + +msgid "Taiwanese (indigenous)" +msgstr "" + +msgid "Saisiyat (Taiwan)" +msgstr "" + +msgid "Tajik (legacy)" +msgstr "" + +msgid "Thai (TIS-820.2538)" +msgstr "" + +msgid "Thai (Pattachote)" +msgstr "" + +msgid "Turkmen (Alt-Q)" +msgstr "" + +msgid "Turkish (F)" +msgstr "" + +msgid "Turkish (E)" +msgstr "" + +msgid "Turkish (Alt-Q)" +msgstr "" + +msgid "Turkish (intl., with dead keys)" +msgstr "" + +msgid "Kurdish (Turkey, Latin Q)" +msgstr "" + +msgid "Kurdish (Turkey, F)" +msgstr "" + +msgid "Kurdish (Turkey, Latin Alt-Q)" +msgstr "" + +msgid "Ukrainian (phonetic)" +msgstr "" + +msgid "Ukrainian (typewriter)" +msgstr "" + +msgid "Ukrainian (Windows)" +msgstr "" + +msgid "Ukrainian (macOS)" +msgstr "" + +msgid "Ukrainian (legacy)" +msgstr "" + +msgid "Ukrainian (homophonic)" +msgstr "" + +msgid "Crimean Tatar (Turkish Q)" +msgstr "" + +msgid "Crimean Tatar (Turkish F)" +msgstr "" + +msgid "Crimean Tatar (Turkish Alt-Q)" +msgstr "" + +msgid "Urdu (Pakistan, CRULP)" +msgstr "" + +msgid "Urdu (Pakistan, NLA)" +msgstr "" + +msgid "Arabic (Pakistan)" +msgstr "" + +msgid "Sindhi" +msgstr "" + +msgid "Uzbek (Latin)" +msgstr "" + +msgid "Vietnamese (US)" +msgstr "" + +msgid "Vietnamese (France)" +msgstr "" \ No newline at end of file diff --git a/locale/ubl-settings-keyboard-layouts_ru.po b/locale/ubl-settings-keyboard-layouts_ru.po new file mode 100644 index 0000000..b891e6f --- /dev/null +++ b/locale/ubl-settings-keyboard-layouts_ru.po @@ -0,0 +1,1780 @@ +# Russian translations for ubl-settings-keyboard package. +# Copyright (C) 2022, UBTech LLC +# This file is distributed under the same license as the ubl-settings-keyboard package. +# UBLinux Team , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: ubl-settings-keyboard 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-22 16:12+0600\n" +"PO-Revision-Date: 2023-01-01 00:00+0600\n" +"Last-Translator: UBLinux Team \n" +"Language-Team: Russian - UBLinux Team \n" +"Language: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + + +msgid "Albanian" +msgstr "Албанский" + +msgid "Amharic" +msgstr "Амхарский" + +msgid "Armenian" +msgstr "Армянский" + +msgid "Arabic" +msgstr "Арабский" + +msgid "Arabic (Egypt)" +msgstr "Арабский (Египет)" + +msgid "Arabic (Iraq)" +msgstr "Арабский (Ирак)" + +msgid "Arabic (Morocco)" +msgstr "Арабский (Марокко)" + +msgid "Arabic (Syria)" +msgstr "Арабский (Сирия)" + +msgid "Azerbaijani" +msgstr "Азербайджанский" + +msgid "Bambara" +msgstr "Бамбара" + +msgid "Bangla" +msgstr "Бенгла" + +msgid "Belarusian" +msgstr "Белорусский" + +msgid "Belgian" +msgstr "Бельгийский" + +msgid "Berber (Algeria, Latin)" +msgstr "Берберский (Алжир, латиница)" + +msgid "Bosnian" +msgstr "Боснийский" + +msgid "Braille" +msgstr "Шрифт Брайля" + +msgid "Bulgarian" +msgstr "Болгарский" + +msgid "Burmese" +msgstr "Бирманский" + +msgid "Chinese" +msgstr "Китайский" + +msgid "Croatian" +msgstr "Хорватский" + +msgid "Czech" +msgstr "Чешский" + +msgid "Danish" +msgstr "Датский" + +msgid "Dari" +msgstr "Дари" + +msgid "Dhivehi" +msgstr "Дхивехи" + +msgid "Dutch" +msgstr "Голландский" + +msgid "Dzongkha" +msgstr "Дзонг-кэ" + +msgid "English (Australia)" +msgstr "Английский (Австралия)" + +msgid "English (Cameroon)" +msgstr "Английский (Камерун)" + +msgid "English (Ghana)" +msgstr "Английский (Гана)" + +msgid "English (New Zealand)" +msgstr "Английский (Новая Зеландия)" + +msgid "English (Nigeria)" +msgstr "Английский (Нигерия)" + +msgid "English (South Africa)" +msgstr "Английский (ЮАР)" + +msgid "English (UK)" +msgstr "Английский (Великобритания)" + +msgid "English (US)" +msgstr "Английский (США)" + +msgid "Esperanto" +msgstr "Эсперанто" + +msgid "Estonian" +msgstr "Эстонский" + +msgid "Faroese" +msgstr "Фарерский" + +msgid "Filipino" +msgstr "Филиппинский" + +msgid "Finnish" +msgstr "Финский" + +msgid "French" +msgstr "Французский" + +msgid "French (Canada)" +msgstr "Французский (Канада)" + +msgid "French (Democratic Republic of the Congo)" +msgstr "Французский (Демократическая Республика Конго) Конголезский" + +msgid "French (Togo)" +msgstr "Французский (Того)" + +msgid "Georgian" +msgstr "Грузинский" + +msgid "German" +msgstr "Немецкий" + +msgid "German (Austria)" +msgstr "Немецкий (Австрия)" + +msgid "German (Switzerland)" +msgstr "Немецкий (Швейцария)" + +msgid "Greek" +msgstr "Греческий" + +msgid "Hebrew" +msgstr "Иврит" + +msgid "Hungarian" +msgstr "Венгерский" + +msgid "Icelandic" +msgstr "Исландский" + +msgid "Indian" +msgstr "Индийский" + +msgid "Indonesian (Latin)" +msgstr "Индонезийский (латиница)" + +msgid "Irish" +msgstr "Ирландский" + +msgid "Italian" +msgstr "Итальянский" + +msgid "Japanese" +msgstr "Японский" + +msgid "Kazakh" +msgstr "Казахский" + +msgid "Khmer (Cambodia)" +msgstr "Кхмерский (Камбоджа)" + +msgid "Korean" +msgstr "Корейский" + +msgid "Kyrgyz" +msgstr "Киргизский" + +msgid "Lao" +msgstr "Лаосский" + +msgid "Latvian" +msgstr "Латышский" + +msgid "Lithuanian" +msgstr "Литовский" + +msgid "Macedonian" +msgstr "Македонский" + +msgid "Malay (Jawi, Arabic Keyboard)" +msgstr "Малайский (джави, арабская раскладка)" + +msgid "Maltese" +msgstr "Мальтийский" + +msgid "Moldavian" +msgstr "Молдавский" + +msgid "Mongolian" +msgstr "Монгольский" + +msgid "Montenegrin" +msgstr "Черногорский" + +msgid "Nepali" +msgstr "Непальский" + +msgid "N'Ko (AZERTY)" +msgstr "Нко (AZERTY)" + +msgid "Norwegian" +msgstr "Норвежский" + +msgid "Persian" +msgstr "Персидский" + +msgid "Polish" +msgstr "Польский" + +msgid "Portuguese" +msgstr "Португальский" + +msgid "Portuguese (Brazil)" +msgstr "Португальский (Бразилия)" + +msgid "Romanian" +msgstr "Румынский" + +msgid "Russian" +msgstr "Русский" + +msgid "Serbian" +msgstr "Сербский" + +msgid "Sinhala (phonetic)" +msgstr "Сингальский (фонетический)" + +msgid "Slovak" +msgstr "Словацкий" + +msgid "Slovenian" +msgstr "Словенский" + +msgid "Spanish" +msgstr "Испанский" + +msgid "Spanish (Latin American)" +msgstr "Испанский (Латинская Америка)" + +msgid "Swahili (Kenya)" +msgstr "Суахили (Кения)" + +msgid "Swahili (Tanzania)" +msgstr "Суахили (Танзания)" + +msgid "Swedish" +msgstr "Шведский" + +msgid "Taiwanese" +msgstr "Тайваньский" + +msgid "Tajik" +msgstr "Таджикский" + +msgid "Thai" +msgstr "Тайский" + +msgid "Tswana" +msgstr "Тсвана" + +msgid "Turkmen" +msgstr "Туркменский" + +msgid "Turkish" +msgstr "Турецкий" + +msgid "Ukrainian" +msgstr "Украинский" + +msgid "Urdu (Pakistan)" +msgstr "Урду (Пакистан)" + +msgid "Uzbek" +msgstr "Узбекский" + +msgid "Vietnamese" +msgstr "Вьетнамский" + +msgid "Wolof" +msgstr "Волоф" + +msgid "Albanian (Plisi)" +msgstr "Албанский (Плиси)" + +msgid "Albanian (Veqilharxhi)" +msgstr "Албанский (Векильхарджи)" + +msgid "Armenian (phonetic)" +msgstr "Армянский (фонетический)" + +msgid "Armenian (alt. phonetic)" +msgstr "Армянский (альтернативный фонетический)" + +msgid "Armenian (eastern)" +msgstr "Армянский (восточный)" + +msgid "Armenian (alt. eastern)" +msgstr "Армянский (альтернативный восточный)" + +msgid "Armenian (western)" +msgstr "Армянский (западный)" + +msgid "Arabic (Eastern Arabic numerals)" +msgstr "Арабский (восточно-арабские цифры)" + +msgid "Arabic (AZERTY)" +msgstr "Арабский (AZERTY)" + +msgid "Arabic (AZERTY, Eastern Arabic numerals)" +msgstr "Арабский (AZERTY, восточно-арабские цифры)" + +msgid "Arabic (Buckwalter)" +msgstr "Арабский (Buckwalter)" + +msgid "Arabic (Macintosh)" +msgstr "Арабский (Macintosh)" + +msgid "Arabic (Macintosh, phonetic)" +msgstr "Арабский (Macintosh, фонетический)" + +msgid "Arabic (OLPC)" +msgstr "Арабский (OLPC)" + +msgid "Kurdish (Iraq, Latin Q)" +msgstr "Курдский (Ирак, латиница Q)" + +msgid "Kurdish (Iraq, Latin Alt-Q)" +msgstr "Курдский (Ирак, латиница Alt-Q)" + +msgid "Kurdish (Iraq, F)" +msgstr "Курдский (Ирак, F)" + +msgid "Kurdish (Iraq, Arabic-Latin)" +msgstr "Курдский (Ирак, арабо-латинский)" + +msgid "Berber (Morocco, Tifinagh)" +msgstr "Берберский (Марокко, тифинаг)" + +msgid "Berber (Morocco, Tifinagh alt.)" +msgstr "Берберский (Марокко, тифинаг альт.)" + +msgid "alt-Berber (Morocco, Tifinagh phonetic, alt.)" +msgstr "alt-берберский (Марокко, тифинаг фонетический, альт.)" + +msgid "Berber (Morocco, Tifinagh extended)" +msgstr "Берберский (Марокко, тифинаг расширенный)" + +msgid "Berber (Morocco, Tifinagh phonetic)" +msgstr "Берберский (Марокко, тифинаг фонетический)" + +msgid "extended-Berber (Morocco, Tifinagh extended phonetic)" +msgstr "extended-берберский (Марокко, тифинаг расширенный фонетический)" + +msgid "French (Morocco)" +msgstr "Французский (Марокко)" + +msgid "Tarifit" +msgstr "Тарифитский" + +msgid "Syriac" +msgstr "Сирийский" + +msgid "Syriac (phonetic)" +msgstr "Сирийский (фонетический)" + +msgid "Kurdish (Syria, Latin Q)" +msgstr "Курдский (Сирия, латиница Q)" + +msgid "Kurdish (Syria, Latin Alt-Q)" +msgstr "Курдский (Сирия, латиница Alt-Q)" + +msgid "Kurdish (Syria, F)" +msgstr "Курдский (Сирия, F)" + +msgid "Azerbaijani (Cyrillic)" +msgstr "Азербайджанский (кириллица)" + +msgid "French (Mali, alt.)" +msgstr "Французский (Мали, альт.)" + +msgid "English (Mali, US, Macintosh)" +msgstr "Английский (Мали, США, Macintosh)" + +msgid "English (Mali, US, intl.)" +msgstr "Английский (Мали, США, межд.)" + +msgid "Bangla (Probhat)" +msgstr "Бенгла (Пробхат)" + +msgid "Belarusian (legacy)" +msgstr "Белорусский (устар.)" + +msgid "Belarusian (Latin)" +msgstr "Белорусский (латиница)" + +msgid "Belarusian (intl.)" +msgstr "Белорусский (межд.)" + +msgid "Belarusian (phonetic)" +msgstr "Белорусский (фонетический)" + +msgid "Russian (Belarus)" +msgstr "Русский (Беларусь)" + +msgid "Belgian (alt.)" +msgstr "Бельгийский (альт.)" + +msgid "Belgian (Latin-9 only, alt.)" +msgstr "Бельгийский (только Latin-9, альт.)" + +msgid "Belgian (ISO, alt.)" +msgstr "Бельгийский (ISO, альт.)" + +msgid "Belgian (no dead keys)" +msgstr "Бельгийский (без мёртвых клавиш)" + +msgid "Belgian (Wang 724 AZERTY)" +msgstr "Бельгийский (Wang 724 AZERTY)" + +msgid "Berber (Algeria, Tifinagh)" +msgstr "Берберский (Алжир, Тифинаг)" + +msgid "Kabyle (AZERTY, with dead keys)" +msgstr "Кабильский (AZERTY, с мёртвыми клавишами)" + +msgid "gb-Kabyle (QWERTY, UK, with dead keys)" +msgstr "gb-кабильский (QWERTY, Великобритания, с мёртвыми клавишами)" + +msgid "us-Kabyle (QWERTY, US, with dead keys)" +msgstr "us-кабильский (QWERTY, США, с мёртвыми клавишами)" + +msgid "Arabic (Algeria)" +msgstr "Арабский (Алжир)" + +msgid "Bosnian (with guillemets)" +msgstr "Боснийский (с гильеметами)" + +msgid "Bosnian (with Bosnian digraphs)" +msgstr "Боснийский (с боснийскими диграфами)" + +msgid "Bosnian (US, with Bosnian digraphs)" +msgstr "Боснийский (США, с боснийскими диграфы)" + +msgid "Bosnian (US)" +msgstr "Боснийский (США)" + +msgid "Braille (left-handed)" +msgstr "Шрифт Брайля (для левшей)" + +msgid "Braille (left-handed inverted thumb)" +msgstr "Шрифт Брайля (для левшей с перевёрнутым большим пальцем)" + +msgid "Braille (right-handed)" +msgstr "Шрифт Брайля (для правшей)" + +msgid "Braille (right-handed inverted thumb)" +msgstr "Шрифт Брайля (для правшей с перевёрнутым большим пальцем)" + +msgid "Bulgarian (traditional phonetic)" +msgstr "Болгарский (традиционная фонетика)" + +msgid "Bulgarian (new phonetic)" +msgstr "Болгарский (новая фонетика)" + +msgid "Bulgarian (enhanced)" +msgstr "Болгарский (расширенная)" + +msgid "Burmese (Zawgyi)" +msgstr "Бирманский (Зауджи)" + +msgid "Mon" +msgstr "Монский" + +msgid "Mon (A1)" +msgstr "Монский (A1)" + +msgid "Shan" +msgstr "Шаньский" + +msgid "Shan (Zawgyi)" +msgstr "Шаньский (Зауджи)" + +msgid "Hanyu Pinyin Letters (with AltGr dead keys)" +msgstr "Буквы ханью пиньинь (с неактивными клавишами AltGr)" + +msgid "Mongolian (Bichig)" +msgstr "Монгольский (Бичиг)" + +msgid "Mongolian (Todo)" +msgstr "Монгольский (Тодо)" + +msgid "Mongolian (Xibe)" +msgstr "Монгольский (Сибе)" + +msgid "Mongolian (Manchu)" +msgstr "Монгольский (маньчжурский)" + +msgid "Mongolian (Galik)" +msgstr "Монгольский (Галик)" + +msgid "Mongolian (Todo Galik)" +msgstr "Монгольский (Тодо Галик)" + +msgid "Mongolian (Manchu Galik)" +msgstr "Монгольский (маньчжурский Галик)" + +msgid "Tibetan" +msgstr "Тибетский" + +msgid "Tibetan (with ASCII numerals)" +msgstr "Тибетский (с ASCII-цифрами)" + +msgid "Uyghur" +msgstr "Уйгурский" + +msgid "Croatian (with guillemets)" +msgstr "Хорватский (с guillemets)" + +msgid "Croatian (with Croatian digraphs)" +msgstr "Хорватский (с хорватскими диграфами)" + +msgid "Croatian (US, with Croatian digraphs)" +msgstr "Хорватский (США, с хорватскими диграфами)" + +msgid "Croatian (US)" +msgstr "Хорватский (США)" + +msgid "Czech (extra backslash)" +msgstr "Чешский (дополнительная обратная косая черта)" + +msgid "Czech (QWERTY)" +msgstr "Чешский (QWERTY)" + +msgid "Czech (QWERTY, extra backslash)" +msgstr "Чешский (QWERTY, дополнительная обратная косая черта)" + +msgid "Czech (QWERTZ, Windows)" +msgstr "Чешский (QWERTZ, Windows)" + +msgid "Czech (QWERTY, Windows)" +msgstr "Чешский (QWERTY, Windows)" + +msgid "Czech (QWERTY, Macintosh)" +msgstr "Чешский (QWERTY, Macintosh)" + +msgid "Czech (UCW, only accented letters)" +msgstr "Чешский (UCW, только буквы с диакритическими знаками)" + +msgid "Czech (US, Dvorak, UCW support)" +msgstr "Чешский (США, поддержка Dvorak, UCW)" + +msgid "Russian (Czechia, phonetic)" +msgstr "Русский (Чехия, фонетическая раскладка)" + +msgid "Danish (no dead keys)" +msgstr "Датский (без мёртвых клавиш)" + +msgid "Danish (Windows)" +msgstr "Датский (Windows)" + +msgid "Danish (Macintosh)" +msgstr "Датский (Macintosh)" + +msgid "Danish (Macintosh, no dead keys)" +msgstr "Датский (Macintosh, без мёртвых клавиш)" + +msgid "Danish (Dvorak)" +msgstr "Датский (Dvorak)" + +msgid "Pashto" +msgstr "Пашто" + +msgid "Uzbek (Afghanistan)" +msgstr "Узбекский (Афганистан)" + +msgid "Dari (Afghanistan, OLPC)" +msgstr "Дари (Афганистан, OLPC)" + +msgid "Pashto (Afghanistan, OLPC)" +msgstr "Пашто (Афганистан, OLPC)" + +msgid "Uzbek (Afghanistan, OLPC)" +msgstr "Узбекский (Афганистан, OLPC)" + +msgid "Dutch (US)" +msgstr "Нидерландский (США)" + +msgid "Dutch (Macintosh)" +msgstr "Нидерландский (Macintosh)" + +msgid "Dutch (standard)" +msgstr "Нидерландский (стандартный)" + +msgid "French (Cameroon)" +msgstr "Французский (Камерун)" + +msgid "Cameroon Multilingual (QWERTY, intl.)" +msgstr "Камерунский многоязычный (QWERTY, международный)" + +msgid "Cameroon (AZERTY, intl.)" +msgstr "Камерунский (AZERTY, международный)" + +msgid "Cameroon (Dvorak, intl.)" +msgstr "Камерунский (Дворак, международный)" + +msgid "Mmuock" +msgstr "Mmuock" + +msgid "English (Ghana, multilingual)" +msgstr "Английский (Гана, многоязычный)" + +msgid "English (Ghana, GILLBT)" +msgstr "Английский (Гана, GILLBT)" + +msgid "Akan" +msgstr "Акан" + +msgid "Avatime" +msgstr "Аватайм" + +msgid "Ewe" +msgstr "Эве" + +msgid "Fula" +msgstr "Фула" + +msgid "Ga" +msgstr "Га" + +msgid "Hausa (Ghana)" +msgstr "Хауса (Гана)" + +msgid "Maori" +msgstr "Маори" + +msgid "Hausa (Nigeria)" +msgstr "Хауса (Нигерия)" + +msgid "Igbo" +msgstr "Игбо" + +msgid "Yoruba" +msgstr "Йоруба" + +msgid "English (UK, extended, Windows)" +msgstr "Английский (Великобритания, расширенный, Windows)" + +msgid "English (UK, intl., with dead keys)" +msgstr "Английский (Великобритания, международный, с неработающими клавишами)" + +msgid "English (UK, Dvorak)" +msgstr "Английский (Великобритания, Дворжак)" + +msgid "English (UK, Dvorak, with UK punctuation)" +msgstr "Английский (Великобритания, Дворжак, с британской пунктуацией)" + +msgid "English (UK, Macintosh)" +msgstr "Английский (Великобритания, Macintosh)" + +msgid "English (UK, Macintosh, intl.)" +msgstr "Английский (Великобритания, Macintosh, интерн.)" + +msgid "English (UK, Colemak)" +msgstr "Английский (Великобритания, Colemak)" + +msgid "English (UK, Colemak-DH)" +msgstr "Английский (Великобритания, Colemak-DH)" + +msgid "Scottish Gaelic" +msgstr "Шотландский гэльский" + +msgid "Polish (British keyboard)" +msgstr "Польский (британская клавиатура)" + +msgid "English (US, euro on 5)" +msgstr "Английский (США, евро на 5)" + +msgid "English (US, intl., with dead keys)" +msgstr "Английский (США, интерн., с неактивными клавишами)" + +msgid "English (US, alt. intl.)" +msgstr "Английский (США, альт. интерн.)" + +msgid "English (intl., with AltGr dead keys)" +msgstr "Английский (интерн., с неактивными клавишами AltGr)" + +msgid "English (Macintosh)" +msgstr "Английский (Macintosh)" + +msgid "English (Colemak)" +msgstr "Английский (Colemak)" + +msgid "English (Colemak-DH)" +msgstr "Английский (Colemak-DH)" + +msgid "English (Colemak-DH Wide)" +msgstr "Английский (Colemak-DH Wide)" + +msgid "English (Colemak-DH Ortholinear)" +msgstr "Английский (Colemak-DH Ortholinear)" + +msgid "English (Colemak-DH ISO)" +msgstr "Английский (Colemak-DH ISO)" + +msgid "English (Colemak-DH Wide ISO)" +msgstr "Английский (Colemak-DH Wide ISO)" + +msgid "English (Dvorak)" +msgstr "Английский (Dvorak)" + +msgid "English (Dvorak, intl., with dead keys)" +msgstr "Английский (Dvorak, интерн., с неактивными клавишами)" + +msgid "alt-English (Dvorak, alt. intl.)" +msgstr "альт-английский (Dvorak, альт. интерн.)" + +msgid "English (Dvorak, left-handed)" +msgstr "Английский (Dvorak, для левшей)" + +msgid "English (Dvorak, right-handed)" +msgstr "Английский (Dvorak, для правшей)" + +msgid "English (classic Dvorak)" +msgstr "Английский (классический Dvorak)" + +msgid "English (programmer Dvorak)" +msgstr "Английский (программист Дворжак)" + +msgid "English (Dvorak, Macintosh)" +msgstr "Английский (Дворжак, Macintosh)" + +msgid "English (Norman)" +msgstr "Английский (нормандский)" + +msgid "English (US, Symbolic)" +msgstr "Английский (США, символьная раскладка)" + +msgid "English (Workman)" +msgstr "Английский (Уоркман)" + +msgid "English (Workman, intl., with dead keys)" +msgstr "Английский (Уоркман, междунар., с неактивными клавишами)" + +msgid "English (the divide/multiply toggle the layout)" +msgstr "Английский (переключение раскладки «деление/умножение»)" + +msgid "Cherokee" +msgstr "Чероки" + +msgid "Hawaiian" +msgstr "Гавайский" + +msgid "Russian (US, phonetic)" +msgstr "Русский (США, фонетическая раскладка)" + +msgid "Serbo-Croatian (US)" +msgstr "Сербско-хорватский (США)" + +msgid "Esperanto (legacy)" +msgstr "Эсперанто (устаревший)" + +msgid "Estonian (no dead keys)" +msgstr "Эстонский (без неактивных клавиш)" + +msgid "Estonian (Dvorak)" +msgstr "Эстонский (Дворжак)" + +msgid "Estonian (US)" +msgstr "Эстонский (США)" + +msgid "Faroese (no dead keys)" +msgstr "Фарерский (без неактивных клавиш)" + +msgid "Filipino (QWERTY, Baybayin)" +msgstr "Филиппинский (QWERTY, байбаин)" + +msgid "Filipino (Capewell-Dvorak, Latin)" +msgstr "Филиппинский (Кейпвелл-Дворжак, латиница)" + +msgid "dvorak-Filipino (Capewell-Dvorak, Baybayin)" +msgstr "Дворжак-филиппинский (Кейпвелл-Дворжак,Байбаин)" + +msgid "Filipino (Capewell-QWERF 2006, Latin)" +msgstr "Филиппинский (Capewell-QWERF 2006, латиница)" + +msgid "qwerf2k6-Filipino (Capewell-QWERF 2006, Baybayin)" +msgstr "qwerf2k6-Филиппинский (Capewell-QWERF 2006, байбаин)" + +msgid "Filipino (Colemak, Latin)" +msgstr "Филиппинский (Colemak, латиница)" + +msgid "Filipino (Colemak, Baybayin)" +msgstr "Филиппинский (Colemak, байбаин)" + +msgid "Filipino (Dvorak, Latin)" +msgstr "Филиппинский (Dvorak, латиница)" + +msgid "Filipino (Dvorak, Baybayin)" +msgstr "Филиппинский (Dvorak, байбаин)" + +msgid "Finnish (Windows)" +msgstr "Финский (Windows)" + +msgid "Finnish (classic)" +msgstr "Финский (классический)" + +msgid "Finnish (classic, no dead keys)" +msgstr "Финский (классический, без мёртвых клавиш)" + +msgid "Finnish (Macintosh)" +msgstr "Финский (Macintosh)" + +msgid "Northern Saami (Finland)" +msgstr "Северосаамский (Финляндия)" + +msgid "French (no dead keys)" +msgstr "Французский (без мёртвых клавиш)" + +msgid "French (alt.)" +msgstr "Французский (альтернативный)" + +msgid "French (alt., no dead keys)" +msgstr "Французский (альтернативный, без мёртвых клавиш)" + +msgid "French (alt., Latin-9 only)" +msgstr "Французский (альтернативный, только Latin-9)" + +msgid "French (legacy, alt.)" +msgstr "Французский (устаревший, альт.)" + +msgid "French (legacy, alt., no dead keys)" +msgstr "Французский (устаревший, альт., без мёртвых клавиш)" + +msgid "French (AZERTY)" +msgstr "Французский (AZERTY)" + +msgid "French (AZERTY, AFNOR)" +msgstr "Французский (AZERTY, AFNOR)" + +msgid "French (BEPO)" +msgstr "Французский (BEPO)" + +msgid "French (BEPO, Latin-9 only)" +msgstr "Французский (BEPO, только Latin-9)" + +msgid "French (BEPO, AFNOR)" +msgstr "Французский (BEPO, AFNOR)" + +msgid "French (Dvorak)" +msgstr "Французский (Дворжак)" + +msgid "French (Macintosh)" +msgstr "Французский (Macintosh)" + +msgid "French (US)" +msgstr "Французский (США)" + +msgid "Breton (France)" +msgstr "Бретонский (Франция)" + +msgid "Occitan" +msgstr "Окситанский" + +msgid "Georgian (France, AZERTY Tskapo)" +msgstr "Грузинский (Франция, AZERTY Tskapo)" + +msgid "French (Canada, Dvorak)" +msgstr "Французский (Канада, Дворжак)" + +msgid "French (Canada, legacy)" +msgstr "Французский (Канада, устаревший)" + +msgid "Canadian (CSA)" +msgstr "Канадский (CSA)" + +msgid "English (Canada)" +msgstr "Английский (Канада)" + +msgid "Inuktitut" +msgstr "Инуктитут" + +msgid "Georgian (ergonomic)" +msgstr "Грузинский (эргономичный)" + +msgid "Georgian (MESS)" +msgstr "Грузинский (MESS)" + +msgid "Ossetian (Georgia)" +msgstr "Осетинский (Грузия)" + +msgid "Russian (Georgia)" +msgstr "Русский (Грузия)" + +msgid "German (dead acute)" +msgstr "Немецкий (dead shark)" + +msgid "German (dead grave acute)" +msgstr "Немецкий (dead grave shark)" + +msgid "German (dead tilde)" +msgstr "Немецкий (dead tilde)" + +msgid "German (no dead keys)" +msgstr "Немецкий (без dead keys)" + +msgid "German (E1)" +msgstr "Немецкий (E1)" + +msgid "German (E2)" +msgstr "Немецкий (E2)" + +msgid "German (T3)" +msgstr "Немецкий (T3)" + +msgid "German (US)" +msgstr "Немецкий (США)" + +msgid "German (Dvorak)" +msgstr "Немецкий (Dvorak)" + +msgid "German (Macintosh)" +msgstr "Немецкий (Macintosh)" + +msgid "German (Macintosh, no dead keys)" +msgstr "Немецкий (Macintosh, без мёртвых клавиш)" + +msgid "German (Neo 2)" +msgstr "Немецкий (Neo 2)" + +msgid "German (QWERTY)" +msgstr "Немецкий (QWERTY)" + +msgid "Lower Sorbian" +msgstr "Нижнелужицкий" + +msgid "Lower Sorbian (QWERTZ)" +msgstr "Нижнелужицкий (QWERTZ)" + +msgid "Romanian (Germany)" +msgstr "Румынский (Германия)" + +msgid "Romanian (Germany, no dead keys)" +msgstr "Румынский (Германия, без мёртвых клавиш)" + +msgid "Russian (Germany, phonetic)" +msgstr "Русский (Германия, фонетическая раскладка)" + +msgid "Turkish (Germany)" +msgstr "Турецкий (Германия)" + +msgid "German (Austria, no dead keys)" +msgstr "Немецкий (Австрия, без мёртвых клавиш)" + +msgid "German (Austria, Macintosh)" +msgstr "Немецкий (Австрия, Macintosh)" + +msgid "German (Switzerland, no dead keys)" +msgstr "Немецкий (Швейцария, без мёртвых клавиш)" + +msgid "German (Switzerland, Macintosh)" +msgstr "Немецкий (Швейцария, Macintosh)" + +msgid "German (Switzerland, legacy)" +msgstr "Немецкий (Швейцария, устаревшая раскладка)" + +msgid "French (Switzerland)" +msgstr "Французский (Швейцария)" + +msgid "French (Switzerland, no dead keys)" +msgstr "Французский (Швейцария, без мёртвых клавиш)" + +msgid "French (Switzerland, Macintosh)" +msgstr "Французский (Швейцария, Macintosh)" + +msgid "Greek (simple)" +msgstr "Греческий (простой)" + +msgid "Greek (no dead keys)" +msgstr "Греческий (без мёртвых клавиш)" + +msgid "Greek (polytonic)" +msgstr "Греческий (политонический)" + +msgid "Hebrew (SI-1452-2)" +msgstr "Иврит (SI-1452-2)" + +msgid "Hebrew (lyx)" +msgstr "Иврит (lyx)" + +msgid "Hebrew (phonetic)" +msgstr "Иврит (фонетический)" + +msgid "Hebrew (Biblical, Tiro)" +msgstr "Иврит (библейский, тиро)" + +msgid "Hungarian (standard)" +msgstr "Венгерский (стандартный)" + +msgid "Hungarian (no dead keys)" +msgstr "Венгерский (без мёртвых клавиш)" + +msgid "Hungarian (QWERTY)" +msgstr "Венгерский (QWERTY)" + +msgid "Hungarian (QWERTZ, 101-key, comma, dead keys)" +msgstr "Венгерский (QWERTZ, 101 клавиша, запятая, мёртвые клавиши)" + +msgid "Hungarian (QWERTZ, 101-key, comma, no dead keys)" +msgstr "Венгерский (QWERTZ, 101 клавиша, запятая, без мёртвых клавиш)" + +msgid "Hungarian (QWERTZ, 101-key, dot, dead keys)" +msgstr "Венгерский (QWERTZ, 101 клавиша, точка, мёртвые клавиши)" + +msgid "Hungarian (QWERTZ, 101-key, dot, no dead keys)" +msgstr "Венгерский (QWERTZ, 101 клавиша, точка, без мёртвых клавиш)" + +msgid "Hungarian (QWERTY, 101-key, comma, dead keys)" +msgstr "Венгерский (QWERTY, 101 клавиша, запятая, мёртвые клавиши)" + +msgid "Hungarian (QWERTY, 101-key, comma, no dead keys)" +msgstr "Венгерский (QWERTY, 101 клавиша, запятая, без мёртвых клавиш)" + +msgid "Hungarian (QWERTY, 101-key, dot, dead keys)" +msgstr "Венгерский (QWERTY, 101 клавиша, точка, мёртвые клавиши)" + +msgid "Hungarian (QWERTY, 101-key, dot, no dead keys)" +msgstr "Венгерский (QWERTY, 101 клавиша, точка, мёртвые клавиши)" + +msgid "Hungarian (QWERTZ, 102-key, comma, dead keys)" +msgstr "Венгерский (QWERTZ, 102 клавиши, запятая, неактивные клавиши)" + +msgid "Hungarian (QWERTZ, 102-key, comma, no dead keys)" +msgstr "Венгерская (QWERTZ, 102 клавиши, запятая, без неактивных клавиш)" + +msgid "Hungarian (QWERTZ, 102-key, dot, dead keys)" +msgstr "Венгерская (QWERTZ, 102 клавиши, точка, неактивные клавиши)" + +msgid "Hungarian (QWERTZ, 102-key, dot, no dead keys)" +msgstr "Венгерская (QWERTZ, 102 клавиши, точка, без неактивных клавиш)" + +msgid "Hungarian (QWERTY, 102-key, comma, dead keys)" +msgstr "Венгерская (QWERTY, 102 клавиши, запятая, неактивные клавиши)" + +msgid "Hungarian (QWERTY, 102-key, comma, no dead keys)" +msgstr "Венгерская (QWERTY, 102 клавиши, запятая, без неактивных клавиш)" + +msgid "Hungarian (QWERTY, 102-key, dot, dead keys)" +msgstr "Венгерская (QWERTY, 102 клавиши, точка, без неактивных клавиш)" + +msgid "Hungarian (QWERTY, 102-key, dot, no dead keys)" +msgstr "Венгерская (QWERTY, 102 клавиши, точка, неактивные клавиши)" + +msgid "Icelandic (Macintosh, legacy)" +msgstr "Исландская (Macintosh, устаревшая)" + +msgid "Icelandic (Macintosh)" +msgstr "Исландская (Macintosh)" + +msgid "Icelandic (Dvorak)" +msgstr "Исландская (Dvorak)" + +msgid "Assamese (KaGaPa, phonetic)" +msgstr "Ассамский (KaGaPa, фонетическая)" + +msgid "Bangla (India)" +msgstr "Бенгальский (Индия)" + +msgid "Bangla (India, Probhat)" +msgstr "Бенгальский (Индия, Пробхат)" + +msgid "Bangla (India, Baishakhi)" +msgstr "Бангла (Индия, Байшакхи)" + +msgid "Bangla (India, Bornona)" +msgstr "Бангла (Индия, Борнона)" + +msgid "Bangla (India, KaGaPa, phonetic)" +msgstr "Бангла (Индия, КаГаПа, фонетика)" + +msgid "Bangla (India, Gitanjali)" +msgstr "Бангла (Индия, Гитанджали)" + +msgid "Bangla (India, Baishakhi InScript)" +msgstr "Бангла (Индия, шрифт Байшакхи)" + +msgid "English (India, with rupee)" +msgstr "Английский (Индия, рупия)" + +msgid "Gujarati" +msgstr "Гуджарати" + +msgid "Gujarati (KaGaPa, phonetic)" +msgstr "Гуджарати (КаГаПа, фонетика)" + +msgid "Hindi (Bolnagri)" +msgstr "Хинди (Болнагри)" + +msgid "Hindi (Wx)" +msgstr "Хинди (Wx)" + +msgid "Hindi (KaGaPa, phonetic)" +msgstr "Хинди (КаГаПа, фонетический)" + +msgid "Kannada" +msgstr "Каннада" + +msgid "Kannada (KaGaPa, phonetic)" +msgstr "Каннада (КаГаПа, фонетический)" + +msgid "Malayalam" +msgstr "малаялам" + +msgid "Malayalam (Lalitha)" +msgstr "Малаялам (Лалита)" + +msgid "Malayalam (enhanced InScript, with rupee)" +msgstr "Малаялам (расширенный InScript, с рупиями)" + +msgid "Malayalam (Poorna, extended InScript)" +msgstr "Малаялам (Пурна, расширенный InScript)" + +msgid "Manipuri (Meitei)" +msgstr "Манипури (Мэйтей)" + +msgid "Marathi (KaGaPa, phonetic)" +msgstr "Маратхи (КаГаПа, фонетический)" + +msgid "Marathi (enhanced InScript)" +msgstr "Маратхи (расширенный InScript)" + +msgid "Oriya" +msgstr "Ория" + +msgid "Oriya (Bolnagri)" +msgstr "Ория (Болнагри)" + +msgid "Oriya (Wx)" +msgstr "Ория (Wx)" + +msgid "Punjabi (Gurmukhi)" +msgstr "Пенджаби (Гурмухи)" + +msgid "Punjabi (Gurmukhi Jhelum)" +msgstr "Пенджаби (Гурмухи Джелум)" + +msgid "Sanskrit (KaGaPa, phonetic)" +msgstr "Санскрит (КаГаПа, фонетический)" + +msgid "Santali (Ol Chiki)" +msgstr "Сантали (Ол Чики)" + +msgid "Tamil (TamilNet '99)" +msgstr "Тамильский (TamilNet '99)" + +msgid "Tamil (TamilNet '99 with Tamil numerals)" +msgstr "Тамильский (TamilNet '99 с тамильскими цифрами)" + +msgid "Tamil (TamilNet '99, TAB encoding)" +msgstr "Тамильский (TamilNet '99, кодировка TAB)" + +msgid "Tamil (TamilNet '99, TSCII encoding)" +msgstr "Тамильский (TamilNet '99, кодировка TSCII)" + +msgid "Tamil (InScript, with Arabic numerals)" +msgstr "Тамильский (InScript, с арабскими цифрами)" + +msgid "Tamil (InScript, with Tamil numerals)" +msgstr "Тамильский (InScript, с тамильскими цифрами)" + +msgid "Telugu" +msgstr "телугу" + +msgid "Telugu (KaGaPa, phonetic)" +msgstr "Телугу (КаГаПа, фонетический)" + +msgid "Telugu (Sarala)" +msgstr "Телугу (Сарала)" + +msgid "Urdu (phonetic)" +msgstr "Урду (фонетический)" + +msgid "Urdu (alt. phonetic)" +msgstr "Урду (альт. фонетический)" + +msgid "Urdu (Windows)" +msgstr "Урду (Windows)" + +msgid "Indic IPA" +msgstr "Индийский ИПА" + +msgid "Indonesian (Arab Melayu, phonetic)" +msgstr "Индонезийский (арабский мелайу, фонетический)" + +msgid "Indonesian (Arab Melayu, extended phonetic)" +msgstr "Индонезийский (арабский мелайу, расширенный Фонетический)" + +msgid "Indonesian (Arab Pegon, phonetic)" +msgstr "Индонезийский (арабский пегон, фонетический)" + +msgid "Javanese" +msgstr "Яванский" + +msgid "Irish (UnicodeExpert)" +msgstr "Ирландский (UnicodeExpert)" + +msgid "CloGaelach" +msgstr "Кло-гэльский" + +msgid "Ogham" +msgstr "Огам" + +msgid "Ogham (IS434)" +msgstr "Огам (IS434)" + +msgid "Italian (no dead keys)" +msgstr "Итальянский (без мёртвых клавиш)" + +msgid "Italian (Windows)" +msgstr "Итальянский (Windows)" + +msgid "Italian (Macintosh)" +msgstr "Итальянский (Macintosh)" + +msgid "Italian (US)" +msgstr "Итальянский (США)" + +msgid "Italian (IBM 142)" +msgstr "Итальянский (IBM 142)" + +msgid "Friulian (Italy)" +msgstr "Фриульский (Италия)" + +msgid "Sicilian" +msgstr "Сицилийский" + +msgid "Georgian (Italy)" +msgstr "Грузинский (Италия)" + +msgid "Japanese (Kana)" +msgstr "Японский (Кана)" + +msgid "Japanese (Kana 86)" +msgstr "Японский (Кана 86)" + +msgid "Japanese (OADG 109A)" +msgstr "Японский (OADG 109A)" + +msgid "Japanese (Macintosh)" +msgstr "Японский (Macintosh)" + +msgid "Japanese (Dvorak)" +msgstr "Японский (Дворак)" + +msgid "Kazakh (with Russian)" +msgstr "Казахский (с русским)" + +msgid "Kazakh (extended)" +msgstr "Казахский (расширенный)" + +msgid "Kazakh (Latin)" +msgstr "Казахский (латиница)" + +msgid "Russian (Kazakhstan, with Kazakh)" +msgstr "Русский (Казахстан, с казахским)" + +msgid "Korean (101/104-key compatible)" +msgstr "Корейский (совместимый с 101/104 клавишами)" + +msgid "Kyrgyz (phonetic)" +msgstr "Киргизский (фонетический)" + +msgid "Lao (STEA)" +msgstr "Лаосский (STEA)" + +msgid "Latvian (apostrophe)" +msgstr "Латышский (апостроф)" + +msgid "Latvian (tilde)" +msgstr "Латышский (тильда)" + +msgid "Latvian (F)" +msgstr "Латышский (F)" + +msgid "Latvian (Modern Latin)" +msgstr "Латышский (современная латиница)" + +msgid "Latvian (Modern Cyrillic)" +msgstr "Латышский (современная кириллица)" + +msgid "Latvian (ergonomic, ŪGJRMV)" +msgstr "Латышский (эргономичный, ŪGJRMV)" + +msgid "Latvian (adapted)" +msgstr "Латышский (адаптированный)" + +msgid "Lithuanian (standard)" +msgstr "Литовский (стандартный)" + +msgid "Lithuanian (US)" +msgstr "Литовский (США)" + +msgid "Lithuanian (IBM)" +msgstr "Литовский (IBM)" + +msgid "Lithuanian (LEKP)" +msgstr "Литовский (LEKP)" + +msgid "Lithuanian (LEKPa)" +msgstr "Литовский (LEKPa)" + +msgid "Lithuanian (Ratise)" +msgstr "Литовский (Ratise)" + +msgid "Samogitian" +msgstr "Жямайтийский" + +msgid "Macedonian (no dead keys)" +msgstr "Македонский (без мёртвых клавиш)" + +msgid "Malay (Jawi, phonetic)" +msgstr "Малайский (Jawi, фонетический)" + +msgid "Maltese (US)" +msgstr "Мальтийский (США)" + +msgid "Maltese (US, with AltGr overrides)" +msgstr "Мальтийский (США, с переопределением AltGr)" + +msgid "Maltese (UK, with AltGr overrides)" +msgstr "Мальтийский (Великобритания, с переопределением AltGr)" + +msgid "Gagauz (Moldova)" +msgstr "Гагаузский (Молдова)" + +msgid "Montenegrin (Cyrillic)" +msgstr "Черногорский (кириллица)" + +msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)" +msgstr "Черногорский (кириллица, ZE и ZHE поменялись местами)" + +msgid "Montenegrin (Cyrillic, with guillemets)" +msgstr "Черногорский (кириллица, с кайриллицей)" + +msgid "Montenegrin (Latin, Unicode)" +msgstr "Черногорский (латиница, Unicode)" + +msgid "Montenegrin (Latin, QWERTY)" +msgstr "Черногорский (латиница, QWERTY)" + +msgid "Montenegrin (Latin, Unicode, QWERTY)" +msgstr "Черногорский (латиница, Unicode, QWERTY)" + +msgid "Montenegrin (Latin, with guillemets)" +msgstr "Черногорский (латиница, с кайриллицей)" + +msgid "Norwegian (no dead keys)" +msgstr "Норвежский (без мёртвых клавиш)" + +msgid "Norwegian (Windows)" +msgstr "Норвежский (Windows)" + +msgid "Norwegian (Macintosh)" +msgstr "Норвежский (Macintosh)" + +msgid "Norwegian (Macintosh, no dead keys)" +msgstr "Норвежский (Macintosh, без мёртвых клавиш)" + +msgid "Norwegian (Colemak)" +msgstr "Норвежский (Colemak)" + +msgid "Norwegian (Colemak-DH)" +msgstr "Норвежский (Colemak-DH)" + +msgid "Norwegian (Colemak-DH Wide)" +msgstr "Норвежский (Colemak-DH Wide)" + +msgid "Norwegian (Dvorak)" +msgstr "Норвежский (Dvorak)" + +msgid "Northern Saami (Norway)" +msgstr "Северосаамский (Норвегия)" + +msgid "Northern Saami (Norway, no dead keys)" +msgstr "Северосаамский (Норвегия, без мёртвых клавиш)" + +msgid "Persian (with Persian keypad)" +msgstr "Персидский (с персидской клавиатурой)" + +msgid "Persian (Windows)" +msgstr "Персидский (Windows)" + +msgid "Azerbaijani (Iran)" +msgstr "Азербайджанский (Иран)" + +msgid "Kurdish (Iran, Latin Q)" +msgstr "Курдский (Иран,Латинская Q)" + +msgid "Kurdish (Iran, Latin Alt-Q)" +msgstr "Курдский (Иран, латинская раскладка Alt-Q)" + +msgid "Kurdish (Iran, F)" +msgstr "Курдский (Иран, F)" + +msgid "Kurdish (Iran, Arabic-Latin)" +msgstr "Курдский (Иран, арабская латиница)" + +msgid "Polish (legacy)" +msgstr "Польский (устаревший)" + +msgid "Polish (QWERTZ)" +msgstr "Польский (QWERTZ)" + +msgid "Polish (Dvorak)" +msgstr "Польский (Дворжак)" + +msgid "Polish (Dvorak, with Polish quotes on quotemark key)" +msgstr "Польский (Дворжак, с польскими кавычками на клавише с кавычками)" + +msgid "Polish (Dvorak, with Polish quotes on key 1)" +msgstr "Польский (Дворжак, с польскими кавычками на клавише 1)" + +msgid "Polish (programmer Dvorak)" +msgstr "Польский (программистский Дворжак)" + +msgid "Kashubian" +msgstr "Кашубский" + +msgid "Silesian" +msgstr "Силезский" + +msgid "Russian (Poland, phonetic Dvorak)" +msgstr "Русский (Польша, фонетическая раскладка Дворжак)" + +msgid "Portuguese (no dead keys)" +msgstr "Португальский (без мёртвых клавиш)" + +msgid "Portuguese (Macintosh)" +msgstr "Португальский (Macintosh)" + +msgid "Portuguese (Macintosh, no dead keys)" +msgstr "Португальский (Macintosh, без мёртвых клавиш)" + +msgid "Portuguese (Nativo)" +msgstr "Португальский (Nativo)" + +msgid "Portuguese (Nativo for US keyboards)" +msgstr "Португальский (Nativo для клавиатур США)" + +msgid "Esperanto (Portugal, Nativo)" +msgstr "Эсперанто (Португалия, Nativo)" + +msgid "Portuguese (Brazil, no dead keys)" +msgstr "Португальский (Бразилия, без мёртвых клавиш)" + +msgid "Portuguese (Brazil, Dvorak)" +msgstr "Португальский (Бразилия, Дворжак)" + +msgid "Portuguese (Brazil, Nativo)" +msgstr "Португальский (Бразилия, Nativo)" + +msgid "Portuguese (Brazil, Nativo for US keyboards)" +msgstr "Португальский (Бразилия, Nativo для клавиатур США)" + +msgid "Portuguese (Brazil, IBM/Lenovo ThinkPad)" +msgstr "Португальский (Бразилия, IBM/Lenovo ThinkPad)" + +msgid "Esperanto (Brazil, Nativo)" +msgstr "Эсперанто (Бразилия, Nativo)" + +msgid "Russian (Brazil, phonetic)" +msgstr "Русский (Бразилия, фонетический)" + +msgid "Romanian (standard)" +msgstr "Румынский (стандартный)" + +msgid "Romanian (Windows)" +msgstr "Румынский (Windows)" + +msgid "Russian (phonetic)" +msgstr "Русский (фонетический)" + +msgid "Russian (phonetic, Windows)" +msgstr "Русский (фонетический, Windows)" + +msgid "Russian (phonetic, YAZHERTY)" +msgstr "Русский (фонетический, ЯЖЕРТЫ)" + +msgid "Russian (phonetic, AZERTY)" +msgstr "Русский (фонетический, AZERTY)" + +msgid "Russian (phonetic, Dvorak)" +msgstr "Русский (фонетический, Дворжак)" + +msgid "Russian (typewriter)" +msgstr "Русский (пишущая машинка)" + +msgid "Russian (engineering, RU)" +msgstr "Русский (инженерный, RU)" + +msgid "Russian (engineering, EN)" +msgstr "Русский (инженерный, EN)" + +msgid "Russian (legacy)" +msgstr "Русский (устаревший)" + +msgid "Russian (typewriter, legacy)" +msgstr "Русский (пишущая машинка, устаревший)" + +msgid "Russian (DOS)" +msgstr "Русский (DOS)" + +msgid "Russian (Macintosh)" +msgstr "Русский (Macintosh)" + +msgid "Abkhazian (Russia)" +msgstr "Абхазский (Россия)" + +msgid "Bashkirian" +msgstr "Башкирский" + +msgid "Chuvash" +msgstr "Чувашский" + +msgid "Chuvash (Latin)" +msgstr "Чувашский (латиница)" + +msgid "Kalmyk" +msgstr "Калмыцкий" + +msgid "Komi" +msgstr "Коми" + +msgid "Mari" +msgstr "Марийский" + +msgid "Ossetian (legacy)" +msgstr "Осетинский (устаревший)" + +msgid "Ossetian (Windows)" +msgstr "Осетинский (Windows)" + +msgid "Serbian (Russia)" +msgstr "Сербский (Россия)" + +msgid "Tatar" +msgstr "Татарский" + +msgid "Udmurt" +msgstr "Удмуртский" + +msgid "Yakut" +msgstr "Якутский" + +msgid "Serbian (Cyrillic, with guillemets)" +msgstr "Сербский (кириллица, с кайрами)" + +msgid "Serbian (Cyrillic, ZE and ZHE swapped)" +msgstr "Сербский (кириллица, ZE и ZHE поменяны местами)" + +msgid "Serbian (Latin)" +msgstr "Сербский (латиница)" + +msgid "Serbian (Latin, with guillemets)" +msgstr "Сербский (латиница, с кайрами)" + +msgid "Serbian (Latin, Unicode)" +msgstr "Сербский (латиница, Unicode)" + +msgid "Serbian (Latin, QWERTY)" +msgstr "Сербский (латиница, QWERTY)" + +msgid "Serbian (Latin, Unicode, QWERTY)" +msgstr "Сербский (латиница, Unicode, QWERTY)" + +msgid "Pannonian Rusyn" +msgstr "Паннонский русинский" + +msgid "Sinhala (US)" +msgstr "Сингальский (США)" + +msgid "Tamil (Sri Lanka, TamilNet '99)" +msgstr "Тамильский (Шри-Ланка, TamilNet '99)" + +msgid "Tamil (Sri Lanka, TamilNet '99, TAB encoding)" +msgstr "Тамильский (Шри-Ланка, TamilNet '99, кодировка TAB)" + +msgid "Slovak (extra backslash)" +msgstr "Словацкий (дополнительная обратная косая черта)" + +msgid "Slovak (QWERTY)" +msgstr "Словацкий (QWERTY)" + +msgid "Slovak (QWERTY, extra backslash)" +msgstr "Словацкий (QWERTY, дополнительная обратная косая черта)" + +msgid "Slovenian (with guillemets)" +msgstr "Словенский (с кайрами)" + +msgid "Slovenian (US)" +msgstr "Словенский (США)" + +msgid "Spanish (no dead keys)" +msgstr "Испанский (без мёртвых клавиш)" + +msgid "Spanish (dead tilde)" +msgstr "Испанский (с тильдой)" + +msgid "Spanish (Windows)" +msgstr "Испанский (Windows)" + +msgid "Spanish (Dvorak)" +msgstr "Испанский (Дворжак)" + +msgid "Asturian (Spain, with bottom-dot H and L)" +msgstr "Астурийский (Испания, с точками H и L в нижней части)" + +msgid "Catalan (Spain, with middle-dot L)" +msgstr "Каталанский (Испания, с точкой L в средней части)" + +msgid "Spanish (Latin American, no dead keys)" +msgstr "Испанский (Латиноамериканский, без тильды)" + +msgid "Spanish (Latin American, dead tilde)" +msgstr "Испанский (Латиноамериканский, с тильдой)" + +msgid "Spanish (Latin American, Dvorak)" +msgstr "Испанский (Латиноамериканский, Дворжак)" + +msgid "Spanish (Latin American, Colemak)" +msgstr "Испанский (Латиноамериканский, Колемак)" + +msgid "Kikuyu" +msgstr "Кикуйю" + +msgid "Swedish (no dead keys)" +msgstr "Шведский (без тильды)" + +msgid "Swedish (Dvorak)" +msgstr "Шведский (Дворжак)" + +msgid "Swedish (Dvorak, intl.)" +msgstr "Шведский (Дворжак, международный)" + +msgid "Swedish (Svdvorak)" +msgstr "Шведский (Свдвожак)" + +msgid "Swedish (Macintosh)" +msgstr "Шведский (Macintosh)" + +msgid "Swedish (US)" +msgstr "Шведский (США)" + +msgid "Swedish Sign Language" +msgstr "Шведский жестовый язык" + +msgid "Northern Saami (Sweden)" +msgstr "Северосаамский (Швеция)" + +msgid "Russian (Sweden, phonetic)" +msgstr "Русский (Швеция, фонетический)" + +msgid "Taiwanese (indigenous)" +msgstr "Тайваньский (коренной)" + +msgid "Saisiyat (Taiwan)" +msgstr "Сайсият (Тайвань)" + +msgid "Tajik (legacy)" +msgstr "Таджикский (устаревший)" + +msgid "Thai (TIS-820.2538)" +msgstr "Тайский (TIS-820.2538)" + +msgid "Thai (Pattachote)" +msgstr "Тайский (паттачот)" + +msgid "Turkmen (Alt-Q)" +msgstr "Туркменский (Alt-Q)" + +msgid "Turkish (F)" +msgstr "Турецкий (F)" + +msgid "Turkish (E)" +msgstr "Турецкий (E)" + +msgid "Turkish (Alt-Q)" +msgstr "Турецкий (Alt-Q)" + +msgid "Turkish (intl., with dead keys)" +msgstr "Турецкий (международный, с неактивными клавишами)" + +msgid "Kurdish (Turkey, Latin Q)" +msgstr "Курдский (Турция, латинская Q)" + +msgid "Kurdish (Turkey, F)" +msgstr "Курдский (Турция, F)" + +msgid "Kurdish (Turkey, Latin Alt-Q)" +msgstr "Курдский (Турция, латинская Alt-Q)" + +msgid "Ukrainian (phonetic)" +msgstr "Украинский (фонетический)" + +msgid "Ukrainian (typewriter)" +msgstr "Украинский (печатная машинка)" + +msgid "Ukrainian (Windows)" +msgstr "Украинский (Windows)" + +msgid "Ukrainian (macOS)" +msgstr "Украинский (macOS)" + +msgid "Ukrainian (legacy)" +msgstr "Украинский (устаревший)" + +msgid "Ukrainian (homophonic)" +msgstr "Украинский (омофонный)" + +msgid "Crimean Tatar (Turkish Q)" +msgstr "Крымско-татарский (турецкая Q)" + +msgid "Crimean Tatar (Turkish F)" +msgstr "Крымско-татарский (турецкая F)" + +msgid "Crimean Tatar (Turkish Alt-Q)" +msgstr "Крымско-татарский (турецкая Alt-Q)" + +msgid "Urdu (Pakistan, CRULP)" +msgstr "Урду (Пакистан, CRULP)" + +msgid "Urdu (Pakistan, NLA)" +msgstr "Урду (Пакистан, NLA)" + +msgid "Arabic (Pakistan)" +msgstr "Арабский (Пакистан)" + +msgid "Sindhi" +msgstr "Синдхи" + +msgid "Uzbek (Latin)" +msgstr "Узбекский (латиница)" + +msgid "Vietnamese (US)" +msgstr "Вьетнамский (США)" + +msgid "Vietnamese (France)" +msgstr "Вьетнамский (Франция)" diff --git a/locale/ubl-settings-keyboard-models.pot b/locale/ubl-settings-keyboard-models.pot new file mode 100644 index 0000000..2be8d9a --- /dev/null +++ b/locale/ubl-settings-keyboard-models.pot @@ -0,0 +1,578 @@ +# Language translations for ubl-settings-keyboard package. +# Copyright (C) 2022, UBTech LLC +# This file is distributed under the same license as the ubl-settings-keyboard package. +# UBLinux Team , 2022 +# +#, fuzzy +msgid "" +msgstr """Project-Id-Version: ubl-settings-keyboard 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-22 16:12+0600\n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Generic 86-key PC" +msgstr "" + +msgid "Generic 101-key PC" +msgstr "" + +msgid "Generic 102-key PC" +msgstr "" + +msgid "Generic 104-key PC" +msgstr "" + +msgid "Generic 104-key PC with L-shaped Enter key" +msgstr "" + +msgid "Generic 105-key PC" +msgstr "" + +msgid "A4Tech KB-21" +msgstr "" + +msgid "A4Tech KBS-8" +msgstr "" + +msgid "A4Tech Wireless Desktop RFKB-23" +msgstr "" + +msgid "Acer AirKey V" +msgstr "" + +msgid "Acer C300" +msgstr "" + +msgid "Acer Ferrari 4000" +msgstr "" + +msgid "Acer laptop" +msgstr "" + +msgid "Advance Scorpius KI" +msgstr "" + +msgid "Apple" +msgstr "" + +msgid "Apple Aluminium (ANSI)" +msgstr "" + +msgid "Apple Aluminium (ISO)" +msgstr "" + +msgid "Apple Aluminium (JIS)" +msgstr "" + +msgid "Asus laptop" +msgstr "" + +msgid "Azona RF2300 Wireless Internet" +msgstr "" + +msgid "BenQ X-Touch" +msgstr "" + +msgid "BenQ X-Touch 730" +msgstr "" + +msgid "BenQ X-Touch 800" +msgstr "" + +msgid "Brother Internet" +msgstr "" + +msgid "BTC 5090" +msgstr "" + +msgid "BTC 5113RF Multimedia" +msgstr "" + +msgid "BTC 5126T" +msgstr "" + +msgid "BTC 6301URF" +msgstr "" + +msgid "BTC 9000" +msgstr "" + +msgid "BTC 9000A" +msgstr "" + +msgid "BTC 9001AH" +msgstr "" + +msgid "BTC 9019U" +msgstr "" + +msgid "BTC 9116U Mini Wireless Internet and Gaming" +msgstr "" + +msgid "Cherry Blue Line CyBo@rd" +msgstr "" + +msgid "Cherry Blue Line CyBo@rd (alt.)" +msgstr "" + +msgid "Cherry B.UNLIMITED" +msgstr "" + +msgid "Cherry CyBo@rd USB-Hub" +msgstr "" + +msgid "Cherry CyMotion Expert" +msgstr "" + +msgid "Cherry CyMotion Master Linux" +msgstr "" + +msgid "Cherry CyMotion Master XPress" +msgstr "" + +msgid "Chicony Internet" +msgstr "" + +msgid "Chicony KB-9885" +msgstr "" + +msgid "Chicony KU-0108" +msgstr "" + +msgid "Chicony KU-0420" +msgstr "" + +msgid "Chromebook" +msgstr "" + +msgid "Classmate PC" +msgstr "" + +msgid "Compal FL90" +msgstr "" + +msgid "Compaq Armada laptop" +msgstr "" + +msgid "Compaq Easy Access" +msgstr "" + +msgid "Compaq Internet (7 keys)" +msgstr "" + +msgid "Compaq Internet (13 keys)" +msgstr "" + +msgid "Compaq Internet (18 keys)" +msgstr "" + +msgid "Compaq iPaq" +msgstr "" + +msgid "Compaq Presario laptop" +msgstr "" + +msgid "Creative Desktop Wireless 7000" +msgstr "" + +msgid "Dell" +msgstr "" + +msgid "Dell 101-key PC" +msgstr "" + +msgid "Dell Latitude laptop" +msgstr "" + +msgid "Dell Inspiron 6000/8000 laptop" +msgstr "" + +msgid "Dell Precision M laptop" +msgstr "" + +msgid "Dell Precision M65 laptop" +msgstr "" + +msgid "Dell SK-8125" +msgstr "" + +msgid "Dell SK-8135" +msgstr "" + +msgid "Dell USB Multimedia" +msgstr "" + +msgid "Dexxa Wireless Desktop" +msgstr "" + +msgid "Diamond 9801/9802" +msgstr "" + +msgid "DTK2000" +msgstr "" + +msgid "eMachines m6800 laptop" +msgstr "" + +msgid "Ennyah DKB-1008" +msgstr "" + +msgid "Everex STEPnote" +msgstr "" + +msgid "Fujitsu-Siemens Amilo laptop" +msgstr "" + +msgid "Genius Comfy KB-16M/Multimedia KWD-910" +msgstr "" + +msgid "Genius Comfy KB-12e" +msgstr "" + +msgid "Genius Comfy KB-21e-Scroll" +msgstr "" + +msgid "Genius KB-19e NB" +msgstr "" + +msgid "Genius KKB-2050HS" +msgstr "" + +msgid "Gyration" +msgstr "" + +msgid "Happy Hacking" +msgstr "" + +msgid "Happy Hacking for Mac" +msgstr "" + +msgid "Hewlett-Packard Internet" +msgstr "" + +msgid "Hewlett-Packard Mini 110 laptop" +msgstr "" + +msgid "Hewlett-Packard nx9020" +msgstr "" + +msgid "Hewlett-Packard Omnibook 500" +msgstr "" + +msgid "Hewlett-Packard Omnibook 500 FA" +msgstr "" + +msgid "Hewlett-Packard Omnibook 6000/6100" +msgstr "" + +msgid "Hewlett-Packard Omnibook XE3 GC" +msgstr "" + +msgid "Hewlett-Packard Omnibook XE3 GF" +msgstr "" + +msgid "Hewlett-Packard Omnibook XT1000" +msgstr "" + +msgid "Hewlett-Packard Pavilion dv5" +msgstr "" + +msgid "Hewlett-Packard Pavilion ZT1100" +msgstr "" + +msgid "Hewlett-Packard SK-2501 Multimedia" +msgstr "" + +msgid "Honeywell Euroboard" +msgstr "" + +msgid "IBM Rapid Access" +msgstr "" + +msgid "IBM Rapid Access II" +msgstr "" + +msgid "IBM Space Saver" +msgstr "" + +msgid "IBM ThinkPad 560Z/600/600E/A22E" +msgstr "" + +msgid "IBM ThinkPad R60/T60/R61/T61" +msgstr "" + +msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" +msgstr "" + +msgid "Keytronic FlexPro" +msgstr "" + +msgid "Kinesis" +msgstr "" + +msgid "Logitech" +msgstr "" + +msgid "Logitech Access" +msgstr "" + +msgid "Logitech Cordless Desktop" +msgstr "" + +msgid "Logitech Cordless Desktop (alt.)" +msgstr "" + +msgid "Logitech Cordless Desktop EX110" +msgstr "" + +msgid "Logitech Cordless Desktop iTouch" +msgstr "" + +msgid "Logitech Cordless Desktop LX-300" +msgstr "" + +msgid "Logitech Cordless Desktop Navigator" +msgstr "" + +msgid "Logitech Cordless Desktop Optical" +msgstr "" + +msgid "Logitech diNovo" +msgstr "" + +msgid "Logitech diNovo Edge" +msgstr "" + +msgid "Logitech G15 extra keys via G15daemon" +msgstr "" + +msgid "Logitech Internet" +msgstr "" + +msgid "Logitech Internet 350" +msgstr "" + +msgid "Logitech Internet 350" +msgstr "" + +msgid "Logitech Internet Navigator" +msgstr "" + +msgid "Logitech iTouch" +msgstr "" + +msgid "Logitech iTouch Cordless Y-RB6" +msgstr "" + +msgid "Logitech iTouch Internet Navigator SE" +msgstr "" + +msgid "Logitech iTouch Internet Navigator SE USB" +msgstr "" + +msgid "Logitech Ultra-X" +msgstr "" + +msgid "Logitech Ultra-X Cordless Media Desktop" +msgstr "" + +msgid "MacBook/MacBook Pro" +msgstr "" + +msgid "MacBook/MacBook Pro (intl.)" +msgstr "" + +msgid "Macintosh" +msgstr "" + +msgid "Macintosh Old" +msgstr "" + +msgid "Memorex MX1998" +msgstr "" + +msgid "Memorex MX2500 EZ-Access" +msgstr "" + +msgid "Memorex MX2750" +msgstr "" + +msgid "Microsoft Comfort Curve 2000" +msgstr "" + +msgid "Microsoft Internet" +msgstr "" + +msgid "Microsoft Internet Pro (Swedish)" +msgstr "" + +msgid "Microsoft Natural" +msgstr "" + +msgid "Microsoft Natural Elite" +msgstr "" + +msgid "Microsoft Natural Ergonomic 4000" +msgstr "" + +msgid "Microsoft Natural Wireless Ergonomic 7000" +msgstr "" + +msgid "Microsoft Natural Pro/Internet Pro" +msgstr "" + +msgid "Microsoft Natural Pro USB/Internet Pro" +msgstr "" + +msgid "Microsoft Natural Pro OEM" +msgstr "" + +msgid "Microsoft Office Keyboard" +msgstr "" + +msgid "Microsoft Surface" +msgstr "" + +msgid "Microsoft Wireless Multimedia 1.0A" +msgstr "" + +msgid "NEC SK-1300" +msgstr "" + +msgid "NEC SK-2500" +msgstr "" + +msgid "NEC SK-6200" +msgstr "" + +msgid "NEC SK-7100" +msgstr "" + +msgid "Northgate OmniKey 101" +msgstr "" + +msgid "OLPC" +msgstr "" + +msgid "Ortek Multimedia/Internet MCK-800" +msgstr "" + +msgid "PC-98" +msgstr "" + +msgid "PinePhone Keyboard" +msgstr "" + +msgid "Propeller Voyager KTEZ-1000" +msgstr "" + +msgid "QTronix Scorpius 98N+" +msgstr "" + +msgid "Samsung SDM 4500P" +msgstr "" + +msgid "Samsung SDM 4510P" +msgstr "" + +msgid "Sanwa Supply SKB-KG3" +msgstr "" + +msgid "Silvercrest Multimedia Wireless" +msgstr "" + +msgid "SteelSeries Apex 300 (Apex RAW)" +msgstr "" + +msgid "Sun Type 6 (Japanese)" +msgstr "" + +msgid "Sun Type 6 USB (Japanese)" +msgstr "" + +msgid "Sun Type 6 USB (Unix)" +msgstr "" + +msgid "Sun Type 6/7 USB" +msgstr "" + +msgid "Sun Type 6/7 USB (European)" +msgstr "" + +msgid "Sun Type 7 USB" +msgstr "" + +msgid "Sun Type 7 USB (European)" +msgstr "" + +msgid "Sun Type 7 USB (Japanese)/Japanese 106-key" +msgstr "" + +msgid "Sun Type 7 USB (Unix)" +msgstr "" + +msgid "Super Power Multimedia" +msgstr "" + +msgid "SVEN Ergonomic 2500" +msgstr "" + +msgid "SVEN Slim 303" +msgstr "" + +msgid "Symplon PaceBook tablet" +msgstr "" + +msgid "Targa Visionary 811" +msgstr "" + +msgid "Toshiba Satellite S3000" +msgstr "" + +msgid "Truly Ergonomic 227" +msgstr "" + +msgid "Truly Ergonomic 229" +msgstr "" + +msgid "Trust Direct Access" +msgstr "" + +msgid "Trust Slimline" +msgstr "" + +msgid "Trust Wireless Classic" +msgstr "" + +msgid "TypeMatrix EZ-Reach 2020" +msgstr "" + +msgid "TypeMatrix EZ-Reach 2030 PS2" +msgstr "" + +msgid "TypeMatrix EZ-Reach 2030 USB" +msgstr "" + +msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)" +msgstr "" + +msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)" +msgstr "" + +msgid "Unitek KB-1925" +msgstr "" + +msgid "ViewSonic KU-306 Internet" +msgstr "" + +msgid "Winbook Model XP5" +msgstr "" + +msgid "Yahoo! Internet" +msgstr "" \ No newline at end of file diff --git a/locale/ubl-settings-keyboard-models_ru.po b/locale/ubl-settings-keyboard-models_ru.po new file mode 100644 index 0000000..e9549a9 --- /dev/null +++ b/locale/ubl-settings-keyboard-models_ru.po @@ -0,0 +1,576 @@ +# Russian translations for ubl-settings-keyboard package. +# Copyright (C) 2022, UBTech LLC +# This file is distributed under the same license as the ubl-settings-keyboard package. +# UBLinux Team , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: ubl-settings-keyboard 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-22 16:12+0600\n" +"PO-Revision-Date: 2023-01-01 00:00+0600\n" +"Last-Translator: UBLinux Team \n" +"Language-Team: Russian - UBLinux Team \n" +"Language: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Generic 86-key PC" +msgstr "Универсальный ПК с 86 клавишами" + +msgid "Generic 101-key PC" +msgstr "Универсальный ПК с 101 клавишами" + +msgid "Generic 102-key PC" +msgstr "Универсальный ПК с 102 клавишами" + +msgid "Generic 104-key PC" +msgstr "Универсальный ПК с 104 клавишами" + +msgid "Generic 104-key PC with L-shaped Enter key" +msgstr "Универсальный ПК с 104 клавишами и Г-образной клавишей Enter" + +msgid "Generic 105-key PC" +msgstr "Универсальный ПК с 105 клавишами" + +msgid "A4Tech KB-21" +msgstr "A4Tech KB-21" + +msgid "A4Tech KBS-8" +msgstr "A4Tech KBS-8" + +msgid "A4Tech Wireless Desktop RFKB-23" +msgstr "Беспроводной настольный компьютер A4Tech RFKB-23" + +msgid "Acer AirKey V" +msgstr "Acer AirKey V" + +msgid "Acer C300" +msgstr "Acer C300" + +msgid "Acer Ferrari 4000" +msgstr "Acer Ferrari 4000" + +msgid "Acer laptop" +msgstr "Ноутбук Acer" + +msgid "Advance Scorpius KI" +msgstr "Advance Scorpius KI" + +msgid "Apple" +msgstr "Apple" + +msgid "Apple Aluminium (ANSI)" +msgstr "Apple Aluminium (ANSI)" + +msgid "Apple Aluminium (ISO)" +msgstr "Apple Aluminium (ISO)" + +msgid "Apple Aluminium (JIS)" +msgstr "Apple Aluminium (JIS)" + +msgid "Asus laptop" +msgstr "Ноутбук Asus" + +msgid "Azona RF2300 Wireless Internet" +msgstr "Azona RF2300 Wireless Internet" + +msgid "BenQ X-Touch" +msgstr "BenQ X-Touch" + +msgid "BenQ X-Touch 730" +msgstr "BenQ X-Touch 730" + +msgid "BenQ X-Touch 800" +msgstr "BenQ X-Touch 800" + +msgid "Brother Internet" +msgstr "Brother Internet" + +msgid "BTC 5090" +msgstr "BTC 5090" + +msgid "BTC 5113RF Multimedia" +msgstr "BTC 5113RF Multimedia" + +msgid "BTC 5126T" +msgstr "BTC 5126T" + +msgid "BTC 6301URF" +msgstr "BTC 6301URF" + +msgid "BTC 9000" +msgstr "BTC 9000" + +msgid "BTC 9000A" +msgstr "BTC 9000A" + +msgid "BTC 9001AH" +msgstr "BTC 9001AH" + +msgid "BTC 9019U" +msgstr "BTC 9019U" + +msgid "BTC 9116U Mini Wireless Internet and Gaming" +msgstr "BTC 9116U Mini Wireless Internet and Gaming" + +msgid "Cherry Blue Line CyBo@rd" +msgstr "Cherry Blue Line CyBo@rd" + +msgid "Cherry Blue Line CyBo@rd (alt.)" +msgstr "Cherry Blue Line CyBo@rd (альт.)" + +msgid "Cherry B.UNLIMITED" +msgstr "Cherry B.UNLIMITED" + +msgid "Cherry CyBo@rd USB-Hub" +msgstr "USB-концентратор Cherry CyBo@rd" + +msgid "Cherry CyMotion Expert" +msgstr "Cherry CyMotion Expert" + +msgid "Cherry CyMotion Master Linux" +msgstr "Cherry CyMotion Master Linux" + +msgid "Cherry CyMotion Master XPress" +msgstr "Cherry CyMotion Master XPress" + +msgid "Chicony Internet" +msgstr "Chicony Internet" + +msgid "Chicony KB-9885" +msgstr "Chicony KB-9885" + +msgid "Chicony KU-0108" +msgstr "Chicony KU-0108" + +msgid "Chicony KU-0420" +msgstr "Chicony KU-0420" + +msgid "Chromebook" +msgstr "Chromebook" + +msgid "Classmate PC" +msgstr "ПК Classmate" + +msgid "Compal FL90" +msgstr "Compal FL90" + +msgid "Compaq Armada laptop" +msgstr "Ноутбук Compaq Armada" + +msgid "Compaq Easy Access" +msgstr "Compaq Easy Access" + +msgid "Compaq Internet (7 keys)" +msgstr "Compaq Internet (7 клавиш)" + +msgid "Compaq Internet (13 keys)" +msgstr "Compaq Internet (13 клавиш)" + +msgid "Compaq Internet (18 keys)" +msgstr "Compaq Internet (18 клавиш)" + +msgid "Compaq iPaq" +msgstr "Compaq iPaq" + +msgid "Compaq Presario laptop" +msgstr "Ноутбук Compaq Presario" + +msgid "Creative Desktop Wireless 7000" +msgstr "Беспроводной настольный компьютер Creative Desktop Wireless 7000" + +msgid "Dell" +msgstr "Dell" + +msgid "Dell 101-key PC" +msgstr "Компьютер Dell с 101 клавишей" + +msgid "Dell Latitude laptop" +msgstr "Ноутбук Dell Latitude" + +msgid "Dell Inspiron 6000/8000 laptop" +msgstr "Ноутбук Dell Inspiron 6000/8000" + +msgid "Dell Precision M laptop" +msgstr "Ноутбук Dell Precision M" + +msgid "Dell Precision M65 laptop" +msgstr "Ноутбук Dell Precision M65" + +msgid "Dell SK-8125" +msgstr "Dell SK-8125" + +msgid "Dell SK-8135" +msgstr "Dell SK-8135" + +msgid "Dell USB Multimedia" +msgstr "Мультимедиа Dell USB" + +msgid "Dexxa Wireless Desktop" +msgstr "Беспроводной настольный компьютер Dexxa" + +msgid "Diamond 9801/9802" +msgstr "Diamond 9801/9802" + +msgid "DTK2000" +msgstr "DTK2000" + +msgid "eMachines m6800 laptop" +msgstr "Ноутбук eMachines m6800" + +msgid "Ennyah DKB-1008" +msgstr "Ennyah DKB-1008" + +msgid "Everex STEPnote" +msgstr "Everex STEPnote" + +msgid "Fujitsu-Siemens Amilo laptop" +msgstr "Ноутбук Fujitsu-Siemens Amilo" + +msgid "Genius Comfy KB-16M/Multimedia KWD-910" +msgstr "Ноутбук Genius Comfy KB-16M/Multimedia KWD-910" + +msgid "Genius Comfy KB-12e" +msgstr "Genius Comfy KB-12e" + +msgid "Genius Comfy KB-21e-Scroll" +msgstr "Genius Comfy KB-21e-Scroll" + +msgid "Genius KB-19e NB" +msgstr "Ноутбук Genius KB-19e" + +msgid "Genius KKB-2050HS" +msgstr "Genius KKB-2050HS" + +msgid "Gyration" +msgstr "Гирация" + +msgid "Happy Hacking" +msgstr "Счастливый взлом" + +msgid "Happy Hacking for Mac" +msgstr "Счастливый взлом для Mac" + +msgid "Hewlett-Packard Internet" +msgstr "Интернет Hewlett-Packard" + +msgid "Hewlett-Packard Mini 110 laptop" +msgstr "Ноутбук Hewlett-Packard Mini 110" + +msgid "Hewlett-Packard nx9020" +msgstr "Hewlett-Packard nx9020" + +msgid "Hewlett-Packard Omnibook 500" +msgstr "Hewlett-Packard Omnibook 500" + +msgid "Hewlett-Packard Omnibook 500 FA" +msgstr "Hewlett-Packard Omnibook 500 FA" + +msgid "Hewlett-Packard Omnibook 6000/6100" +msgstr "Hewlett-Packard Omnibook 6000/6100" + +msgid "Hewlett-Packard Omnibook XE3 GC" +msgstr "Hewlett-Packard Omnibook XE3 GC" + +msgid "Hewlett-Packard Omnibook XE3 GF" +msgstr "Hewlett-Packard Omnibook XE3 GF" + +msgid "Hewlett-Packard Omnibook XT1000" +msgstr "Hewlett-Packard Omnibook XT1000" + +msgid "Hewlett-Packard Pavilion dv5" +msgstr "Hewlett-Packard Pavilion dv5" + +msgid "Hewlett-Packard Pavilion ZT1100" +msgstr "Hewlett-Packard Pavilion ZT1100" + +msgid "Hewlett-Packard SK-2501 Multimedia" +msgstr "Hewlett-Packard SK-2501 Multimedia" + +msgid "Honeywell Euroboard" +msgstr "Honeywell Euroboard" + +msgid "IBM Rapid Access" +msgstr "IBM Rapid Access" + +msgid "IBM Rapid Access II" +msgstr "IBM Rapid Access II" + +msgid "IBM Space Saver" +msgstr "IBM Space Saver" + +msgid "IBM ThinkPad 560Z/600/600E/A22E" +msgstr "IBM ThinkPad 560Z/600/600E/A22E" + +msgid "IBM ThinkPad R60/T60/R61/T61" +msgstr "IBM ThinkPad R60/T60/R61/T61" + +msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" +msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" + +msgid "Keytronic FlexPro" +msgstr "Keytronic FlexPro" + +msgid "Kinesis" +msgstr "Kinesis" + +msgid "Logitech" +msgstr "Logitech" + +msgid "Logitech Access" +msgstr "Logitech Access" + +msgid "Logitech Cordless Desktop" +msgstr "Logitech Cordless Desktop" + +msgid "Logitech Cordless Desktop (alt.)" +msgstr "Logitech Cordless Desktop (альтернативный)" + +msgid "Logitech Cordless Desktop EX110" +msgstr "Logitech Cordless Desktop EX110" + +msgid "Logitech Cordless Desktop iTouch" +msgstr "Logitech Cordless Desktop iTouch" + +msgid "Logitech Cordless Desktop LX-300" +msgstr "Logitech Cordless Desktop LX-300" + +msgid "Logitech Cordless Desktop Navigator" +msgstr "Logitech Cordless Desktop Navigator" + +msgid "Logitech Cordless Desktop Optical" +msgstr "Logitech Cordless Desktop Optical" + +msgid "Logitech diNovo" +msgstr "Logitech diNovo" + +msgid "Logitech diNovo Edge" +msgstr "Logitech diNovo Edge" + +msgid "Logitech G15 extra keys via G15daemon" +msgstr "Дополнительные клавиши Logitech G15 через G15daemon" + +msgid "Logitech Internet" +msgstr "Logitech Internet" + +msgid "Logitech Internet 350" +msgstr "Logitech Internet 350" + +msgid "Logitech Internet Navigator" +msgstr "Logitech Internet Navigator" + +msgid "Logitech iTouch" +msgstr "Logitech iTouch" + +msgid "Logitech iTouch Cordless Y-RB6" +msgstr "Logitech iTouch Cordless Y-RB6" + +msgid "Logitech iTouch Internet Navigator SE" +msgstr "Logitech iTouch Internet Navigator SE" + +msgid "Logitech iTouch Internet Navigator SE USB" +msgstr "Logitech iTouch Internet Navigator SE USB" + +msgid "Logitech Ultra-X" +msgstr "Logitech Ultra-X" + +msgid "Logitech Ultra-X Cordless Media Desktop" +msgstr "Logitech Ultra-X Cordless Media Desktop" + +msgid "MacBook/MacBook Pro" +msgstr "MacBook/MacBook Pro" + +msgid "MacBook/MacBook Pro (intl.)" +msgstr "MacBook/MacBook Pro (международный)" + +msgid "Macintosh" +msgstr "Macintosh" + +msgid "Macintosh Old" +msgstr "Macintosh Old" + +msgid "Memorex MX1998" +msgstr "Memorex MX1998" + +msgid "Memorex MX2500 EZ-Access" +msgstr "Memorex MX2500 EZ-Access" + +msgid "Memorex MX2750" +msgstr "Memorex MX2750" + +msgid "Microsoft Comfort Curve 2000" +msgstr "Microsoft Comfort Curve 2000" + +msgid "Microsoft Internet" +msgstr "Microsoft Internet" + +msgid "Microsoft Internet Pro (Swedish)" +msgstr "Microsoft Internet Pro (шведский)" + +msgid "Microsoft Natural" +msgstr "Microsoft Natural" + +msgid "Microsoft Natural Elite" +msgstr "Microsoft Natural Elite" + +msgid "Microsoft Natural Ergonomic 4000" +msgstr "Microsoft Natural Ergonomic 4000" + +msgid "Microsoft Natural Wireless Ergonomic 7000" +msgstr "Microsoft Natural Wireless Ergonomic 7000" + +msgid "Microsoft Natural Pro/Internet Pro" +msgstr "Microsoft Natural Pro/Internet Pro" + +msgid "Microsoft Natural Pro USB/Internet Pro" +msgstr "Microsoft Natural Pro USB/Internet Pro" + +msgid "Microsoft Natural Pro OEM" +msgstr "Microsoft Natural Pro OEM" + +msgid "Microsoft Office Keyboard" +msgstr "Клавиатура Microsoft Office" + +msgid "Microsoft Surface" +msgstr "Microsoft Surface" + +msgid "Microsoft Wireless Multimedia 1.0A" +msgstr "Беспроводная мультимедийная клавиатура Microsoft 1,0 А" + +msgid "NEC SK-1300" +msgstr "NEC SK-1300" + +msgid "NEC SK-2500" +msgstr "NEC SK-2500" + +msgid "NEC SK-6200" +msgstr "NEC SK-6200" + +msgid "NEC SK-7100" +msgstr "NEC SK-7100" + +msgid "Northgate OmniKey 101" +msgstr "Northgate OmniKey 101" + +msgid "OLPC" +msgstr "OLPC" + +msgid "Ortek Multimedia/Internet MCK-800" +msgstr "Ortek Multimedia/Internet MCK-800" + +msgid "PC-98" +msgstr "PC-98" + +msgid "PinePhone Keyboard" +msgstr "Клавиатура PinePhone" + +msgid "Propeller Voyager KTEZ-1000" +msgstr "Propeller Voyager KTEZ-1000" + +msgid "QTronix Scorpius 98N+" +msgstr "QTronix Scorpius 98N+" + +msgid "Samsung SDM 4500P" +msgstr "Samsung SDM 4500P" + +msgid "Samsung SDM 4510P" +msgstr "Samsung SDM 4510P" + +msgid "Sanwa Supply SKB-KG3" +msgstr "Sanwa Supply SKB-KG3" + +msgid "Silvercrest Multimedia Wireless" +msgstr "Беспроводная мультимедийная клавиатура Silvercrest" + +msgid "SteelSeries Apex 300 (Apex RAW)" +msgstr "SteelSeries Apex 300 (Apex RAW)" + +msgid "Sun Type 6 (Japanese)" +msgstr "Sun Type 6 (японский)" + +msgid "Sun Type 6 USB (Japanese)" +msgstr "Sun Type 6 USB (японский)" + +msgid "Sun Type 6 USB (Unix)" +msgstr "Sun Type 6 USB (Unix)" + +msgid "Sun Type 6/7 USB" +msgstr "Sun Type 6/7 USB" + +msgid "Sun Type 6/7 USB (European)" +msgstr "Sun Type 6/7 USB (европейский)" + +msgid "Sun Type 7 USB" +msgstr "Sun Type 7 USB" + +msgid "Sun Type 7 USB (European)" +msgstr "Sun Type 7 USB (европейский)" + +msgid "Sun Type 7 USB (Japanese)/Japanese 106-key" +msgstr "Sun Type 7 USB (японский)/японская 106-клавишная клавиатура" + +msgid "Sun Type 7 USB (Unix)" +msgstr "Sun Type 7 USB (Unix)" + +msgid "Super Power Multimedia" +msgstr "Сверхмощная мультимедийная клавиатура" + +msgid "SVEN Ergonomic 2500" +msgstr "SVEN Ergonomic 2500" + +msgid "SVEN Slim 303" +msgstr "SVEN Slim 303" + +msgid "Symplon PaceBook tablet" +msgstr "Планшет Symplon PaceBook" + +msgid "Targa Visionary 811" +msgstr "Targa Visionary 811" + +msgid "Toshiba Satellite S3000" +msgstr "Toshiba Satellite S3000" + +msgid "Truly Ergonomic 227" +msgstr "Truly Ergonomic 227" + +msgid "Truly Ergonomic 229" +msgstr "Truly Ergonomic 229" + +msgid "Trust Direct Access" +msgstr "Trust Direct Access" + +msgid "Trust Slimline" +msgstr "Trust Slimline" + +msgid "Trust Wireless Classic" +msgstr "Trust Wireless Classic" + +msgid "TypeMatrix EZ-Reach 2020" +msgstr "TypeMatrix EZ-Reach 2020" + +msgid "TypeMatrix EZ-Reach 2030 PS2" +msgstr "TypeMatrix EZ-Reach 2030 PS2" + +msgid "TypeMatrix EZ-Reach 2030 USB" +msgstr "TypeMatrix EZ-Reach 2030 USB" + +msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)" +msgstr "TypeMatrix EZ-Reach 2030 USB (102/105: режим ЕС)" + +msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)" +msgstr "TypeMatrix EZ-Reach 2030 USB (106: японский режим)" + +msgid "Unitek KB-1925" +msgstr "Unitek KB-1925" + +msgid "ViewSonic KU-306 Internet" +msgstr "Интернет ViewSonic KU-306" + +msgid "Winbook Model XP5" +msgstr "Winbook Модель XP5" + +msgid "Yahoo! Internet" +msgstr "Интернет Yahoo!" \ No newline at end of file diff --git a/locale/ubl-settings-keyboard-options.pot b/locale/ubl-settings-keyboard-options.pot new file mode 100644 index 0000000..21d1ef8 --- /dev/null +++ b/locale/ubl-settings-keyboard-options.pot @@ -0,0 +1,425 @@ +# Language translations for ubl-settings-keyboard package. +# Copyright (C) 2022, UBTech LLC +# This file is distributed under the same license as the ubl-settings-keyboard package. +# UBLinux Team , 2022 +# +#, fuzzy +msgid "" +msgstr """Project-Id-Version: ubl-settings-keyboard 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-22 16:12+0600\n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "The \"< >\" key" +msgstr "" + +msgid "Right Ctrl" +msgstr "" + +msgid "Menu" +msgstr "" + +msgid "Any Win" +msgstr "" + +msgid "Left Win" +msgstr "" + +msgid "Right Win" +msgstr "" + +msgid "Any Alt" +msgstr "" + +msgid "Left Alt" +msgstr "" + +msgid "Right Alt" +msgstr "" + +msgid "Right Alt; Shift+Right Alt as Compose" +msgstr "" + +msgid "Right Alt never chooses 3rd level" +msgstr "" + +msgid "Enter on keypad" +msgstr "" + +msgid "Caps Lock" +msgstr "" + +msgid "Backslash" +msgstr "" + +msgid "Caps Lock; acts as onetime lock when pressed together with another 3rd-level chooser" +msgstr "" + +msgid "Backslash; acts as onetime lock when pressed together with another 3rd level chooser" +msgstr "" + +msgid "The "< >" key; acts as onetime lock when pressed together with another 3rd level chooser" +msgstr "" + +msgid "Caps Lock as Ctrl" +msgstr "" + +msgid "Left Ctrl as Meta" +msgstr "" + +msgid "Swap Ctrl and Caps Lock" +msgstr "" + +msgid "Caps Lock as Ctrl, Ctrl as Hyper" +msgstr "" + +msgid "To the left of \"A\"" +msgstr "" + +msgid "At the bottom left" +msgstr "" + +msgid "Right Ctrl as Right Alt" +msgstr "" + +msgid "Menu as Right Ctrl" +msgstr "" + +msgid "Swap Left Alt with Left Ctrl" +msgstr "" + +msgid "Swap Right Alt with Right Ctrl" +msgstr "" + +msgid "Swap Left Win with Left Ctrl" +msgstr "" + +msgid "Swap Right Win with Right Ctrl" +msgstr "" + +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Left Alt" +msgstr "" + +msgid "Num Lock" +msgstr "" + +msgid "Scroll Lock" +msgstr "" + +msgid "Compose" +msgstr "" + +msgid "Legacy" +msgstr "" + +msgid "Unicode arrows and math operators" +msgstr "" + +msgid "Unicode arrows and math operators on default level" +msgstr "" + +msgid "Legacy Wang 724" +msgstr "" + +msgid "Wang 724 keypad with Unicode arrows and math operators" +msgstr "" + +msgid "Wang 724 keypad with Unicode arrows and math operators on default level" +msgstr "" + +msgid "Hexadecimal" +msgstr "" + +msgid "Phone and ATM style" +msgstr "" + +msgid "Shift + Num Lock enables PointerKeys" +msgstr "" + +msgid "Legacy key with dot" +msgstr "" + +msgid "Legacy key with comma" +msgstr "" + +msgid "Four-level key with dot" +msgstr "" + +msgid "Four-level key with dot, Latin-9 only" +msgstr "" + +msgid "Four-level key with comma" +msgstr "" + +msgid "Four-level key with momayyez" +msgstr "" + +msgid "Four-level key with abstract separators" +msgstr "" + +msgid "Semicolon on third level" +msgstr "" + +msgid "Caps Lock uses internal capitalization; Shift "pauses" Caps Lock" +msgstr "" + +msgid "Caps Lock uses internal capitalization; Shift does not affect Caps Lock" +msgstr "" + +msgid "Caps Lock acts as Shift with locking; Shift "pauses" Caps Lock" +msgstr "" + +msgid "Caps Lock acts as Shift with locking; Shift does not affect Caps Lock" +msgstr "" + +msgid "Caps Lock toggles normal capitalization of alphabetic characters" +msgstr "" + +msgid "Caps Lock toggles Shift Lock (affects all keys)" +msgstr "" + +msgid "Swap Esc and Caps Lock" +msgstr "" + +msgid "Make Caps Lock an additional Esc" +msgstr "" + +msgid "Make Caps Lock an additional Esc, but Shift + Caps Lock is the regular Caps Lock" +msgstr "" + +msgid "Make Caps Lock an additional Backspace" +msgstr "" + +msgid "Make Caps Lock an additional Super" +msgstr "" + +msgid "Make Caps Lock an additional Hyper" +msgstr "" + +msgid "Make Caps Lock an additional Menu key" +msgstr "" + +msgid "Make Caps Lock an additional Num Lock" +msgstr "" + +msgid "Make Caps Lock an additional Ctrl" +msgstr "" + +msgid "Caps Lock is disabled" +msgstr "" + +msgid "Add the standard behavior to Menu key" +msgstr "" + +msgid "Menu is mapped to Win" +msgstr "" + +msgid "Alt and Meta are on Alt" +msgstr "" + +msgid "Alt is mapped to Win and the usual Alt" +msgstr "" + +msgid "Ctrl is mapped to Win and the usual Ctrl" +msgstr "" + +msgid "Ctrl is mapped to Right Win and the usual Ctrl" +msgstr "" + +msgid "Ctrl is mapped to Alt, Alt to Win" +msgstr "" + +msgid "Meta is mapped to Win" +msgstr "" + +msgid "Meta is mapped to Left Win" +msgstr "" + +msgid "Hyper is mapped to Win" +msgstr "" + +msgid "Alt is mapped to Right Win, Super to Menu" +msgstr "" + +msgid "Left Alt is swapped with Left Win" +msgstr "" + +msgid "Alt is swapped with Win" +msgstr "" + +msgid "Win is mapped to PrtSc and the usual Win" +msgstr "" + +msgid "3rd level of Left Win" +msgstr "" + +msgid "3rd level of Right Win" +msgstr "" + +msgid "3rd level of Menu" +msgstr "" + +msgid "Left Ctrl" +msgstr "" + +msgid "3rd level of Left Ctrl" +msgstr "" + +msgid "3rd level of Right Ctrl" +msgstr "" + +msgid "3rd level of Caps Lock" +msgstr "" + +msgid "3rd level of the "< >" key" +msgstr "" + +msgid "Pause" +msgstr "" + +msgid "Insert" +msgstr "" + +msgid "PrtSc" +msgstr "" + +msgid "keypad" +msgstr "" + +msgid "numpad" +msgstr "" + +msgid "srvrkeys" +msgstr "" + +msgid "apple" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "misc" +msgstr "" + +msgid "grab" +msgstr "" + +msgid "eurosign" +msgstr "" + +msgid "rupeesign" +msgstr "" + +msgid "Caps Lock chooses 5th level" +msgstr "" + +msgid "The "< >" key chooses 5th level" +msgstr "" + +msgid "Right Alt chooses 5th level" +msgstr "" + +msgid "Menu chooses 5th level" +msgstr "" + +msgid "Right Ctrl chooses 5th level" +msgstr "" + +msgid "The \"< >\" key chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser" +msgstr "" + +msgid "Right Alt chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser" +msgstr "" + +msgid "Left Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser" +msgstr "" + +msgid "Right Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser" +msgstr "" + +msgid "The \"< >\" key chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser" +msgstr "" + +msgid "Usual space at any level" +msgstr "" + +msgid "Non-breaking space at the 2nd level" +msgstr "" + +msgid "Non-breaking space at the 3rd level" +msgstr "" + +msgid "Non-breaking space at the 3rd level, thin non-breaking space at the 4th level" +msgstr "" + +msgid "Non-breaking space at the 4th level" +msgstr "" + +msgid "Non-breaking space at the 4th level, thin non-breaking space at the 6th level" +msgstr "" + +msgid "Non-breaking space at the 4th level, thin non-breaking space at the 6th level (via Ctrl+Shift)" +msgstr "" + +msgid "Zero-width non-joiner at the 2nd level" +msgstr "" + +msgid "Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level" +msgstr "" + +msgid "Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level, non-breaking space at the 4th level" +msgstr "" + +msgid "Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level" +msgstr "" + +msgid "Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, zero-width joiner at the 4th level" +msgstr "" + +msgid "Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, thin non-breaking space at the 4th level" +msgstr "" + +msgid "Zero-width non-joiner at the 3rd level, zero-width joiner at the 4th level" +msgstr "" + +msgid "Kana Lock key is locking" +msgstr "" + +msgid "NICOLA-F style Backspace" +msgstr "" + +msgid "Make Zenkaku Hankaku an additional Esc" +msgstr "" + +msgid "Make right Alt a Hangul key" +msgstr "" + +msgid "Make right Ctrl a Hangul key" +msgstr "" + +msgid "Make right Alt a Hanja key" +msgstr "" + +msgid "Make right Ctrl a Hanja key" +msgstr "" + +msgid "At the corresponding key in a QWERTY layout" +msgstr "" + +msgid "At the corresponding key in a Dvorak layout" +msgstr "" + +msgid "At the corresponding key in a Colemak layout" +msgstr "" + +msgid "Sun key compatibility" +msgstr "" + +msgid "Ctrl+Alt+Backspace" +msgstr "" \ No newline at end of file diff --git a/locale/ubl-settings-keyboard-options_ru.po b/locale/ubl-settings-keyboard-options_ru.po new file mode 100644 index 0000000..1eba714 --- /dev/null +++ b/locale/ubl-settings-keyboard-options_ru.po @@ -0,0 +1,423 @@ +# Russian translations for ubl-settings-keyboard package. +# Copyright (C) 2022, UBTech LLC +# This file is distributed under the same license as the ubl-settings-keyboard package. +# UBLinux Team , 2022 +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: ubl-settings-keyboard 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-22 16:12+0600\n" +"PO-Revision-Date: 2023-01-01 00:00+0600\n" +"Last-Translator: UBLinux Team \n" +"Language-Team: Russian - UBLinux Team \n" +"Language: Russian\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "The \"&lt; &gt;\" key" +msgstr "Клавиша \"&lt; &gt;\"" + +msgid "Right Ctrl" +msgstr "Правый Ctrl" + +msgid "Menu" +msgstr "Меню" + +msgid "Any Win" +msgstr "Любая клавиша Win" + +msgid "Left Win" +msgstr "Левая клавиша Win" + +msgid "Right Win" +msgstr "Правая клавиша Win" + +msgid "Any Alt" +msgstr "Любая клавиша Alt" + +msgid "Left Alt" +msgstr "Левая клавиша Alt" + +msgid "Right Alt" +msgstr "Правый Alt" + +msgid "Right Alt; Shift+Right Alt as Compose" +msgstr "Правый Alt; Shift+Правый Alt для ввода текста" + +msgid "Right Alt never chooses 3rd level" +msgstr "Правый Alt никогда не выбирает 3-й уровень" + +msgid "Enter on keypad" +msgstr "Enter на цифровой клавиатуре" + +msgid "Caps Lock" +msgstr "Caps Lock" + +msgid "Backslash" +msgstr "Обратная косая черта" + +msgid "Caps Lock; acts as onetime lock when pressed together with another 3rd-level chooser" +msgstr "Caps Lock; действует как однократная блокировка при одновременном нажатии с другим переключателем 3-го уровня" + +msgid "Backslash; acts as onetime lock when pressed together with another 3rd level chooser" +msgstr "Обратная косая черта; действует как однократная блокировка при одновременном нажатии с другим переключателем 3-го уровня" + +msgid "The \"&lt; &gt;\" key; acts as onetime lock when pressed together with another 3rd level chooser" +msgstr "Клавиша \"&lt; &gt;\"; Действует как однократная блокировка при одновременном нажатии с другим селектором 3-го уровня." + +msgid "Caps Lock as Ctrl" +msgstr "Caps Lock как Ctrl" + +msgid "Left Ctrl as Meta" +msgstr "Left Ctrl как Meta" + +msgid "Swap Ctrl and Caps Lock" +msgstr "Поменять местами Ctrl и Caps Lock" + +msgid "Caps Lock as Ctrl, Ctrl as Hyper" +msgstr "Caps Lock как Ctrl, Ctrl как Hyper" + +msgid "To the left of \"A\"" +msgstr "Слева от \"A\"" + +msgid "At the bottom left" +msgstr "В левом нижнем углу" + +msgid "Right Ctrl as Right Alt" +msgstr "Right Ctrl как Right Alt" + +msgid "Menu as Right Ctrl" +msgstr "Menu как Right Ctrl" + +msgid "Swap Left Alt with Left Ctrl" +msgstr "Поменять местами Left Alt и Left Ctrl" + +msgid "Swap Right Alt with Right Ctrl" +msgstr "Поменять местами Right Alt и Right Ctrl" + +msgid "Swap Left Win with Left Ctrl" +msgstr "Поменять местами Left Win и Left Ctrl" + +msgid "Swap Right Win with Right Ctrl" +msgstr "Поменять местами Right Win и Right Ctrl" + +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Left Alt" +msgstr "Left Alt как Ctrl, Left Ctrl как Win, Left Win как Left Alt" + +msgid "Num Lock" +msgstr "Num Lock" + +msgid "Scroll Lock" +msgstr "Scroll Lock" + +msgid "Compose" +msgstr "Compose" + +msgid "Legacy" +msgstr "Legacy" + +msgid "Unicode arrows and math operators" +msgstr "Стрелки Unicode и математические операторы" + +msgid "Unicode arrows and math operators on default level" +msgstr "Стрелки Unicode и математические операторы по умолчанию" + +msgid "Legacy Wang 724" +msgstr "Legacy Wang 724" + +msgid "Wang 724 keypad with Unicode arrows and math operators" +msgstr "Клавиатура Wang 724 со стрелками Unicode и математическими операторами" + +msgid "Wang 724 keypad with Unicode arrows and math operators on default level" +msgstr "Клавиатура Wang 724 со стрелками Unicode и математическими операторами по умолчанию уровень" + +msgid "Hexadecimal" +msgstr "Шестнадцатеричный" + +msgid "Phone and ATM style" +msgstr "Стиль телефона и банкомата" + +msgid "Shift + Num Lock enables PointerKeys" +msgstr "Shift + Num Lock включает клавиши указателя" + +msgid "Legacy key with dot" +msgstr "Устаревшая клавиша с точкой" + +msgid "Legacy key with comma" +msgstr "Устаревшая клавиша с запятой" + +msgid "Four-level key with dot" +msgstr "Четырехуровневая клавиша с точкой" + +msgid "Four-level key with dot, Latin-9 only" +msgstr "Четырехуровневая клавиша с точкой, только Latin-9" + +msgid "Four-level key with comma" +msgstr "Четырехуровневая клавиша с запятой" + +msgid "Four-level key with momayyez" +msgstr "Четырехуровневая клавиша с momayyez" + +msgid "Four-level key with abstract separators" +msgstr "Четырехуровневая клавиша с абстрактными разделителями" + +msgid "Semicolon on third level" +msgstr "Точка с запятой на третьем уровне" + +msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" +msgstr "Caps Lock использует внутреннюю заглавную клавишу; Shift «приостанавливает» Caps Lock" + +msgid "Caps Lock uses internal capitalization; Shift does not affect Caps Lock" +msgstr "Caps Lock использует внутреннюю заглавную клавишу; Shift не влияет на Caps Lock" + +msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" +msgstr "Caps Lock действует как Shift с блокировкой; Shift «приостанавливает» Caps Lock" + +msgid "Caps Lock acts as Shift with locking; Shift does not affect Caps Lock" +msgstr "Caps Lock действует как Shift с блокировкой; Shift не влияет на Caps Lock" + +msgid "Caps Lock toggles normal capitalization of alphabetic characters" +msgstr "Caps Lock переключает обычный режим заглавных букв алфавита" + +msgid "Caps Lock toggles Shift Lock (affects all keys)" +msgstr "Caps Lock переключает Shift Lock (действует на все клавиши)" + +msgid "Swap Esc and Caps Lock" +msgstr "Поменять местами Esc и Caps Lock" + +msgid "Make Caps Lock an additional Esc" +msgstr "Сделать Caps Lock дополнительным Esc" + +msgid "Make Caps Lock an additional Esc, but Shift + Caps Lock is the regular Caps Lock" +msgstr "Сделать Caps Lock дополнительным Esc, но Shift + Caps Lock — это обычный Caps Lock" + +msgid "Make Caps Lock an additional Backspace" +msgstr "Сделать Caps Lock дополнительным Backspace" + +msgid "Make Caps Lock an additional Super" +msgstr "Сделать Caps Lock дополнительной клавишей Super" + +msgid "Make Caps Lock an additional Hyper" +msgstr "Сделать Caps Lock дополнительной клавишей Hyper" + +msgid "Make Caps Lock an additional Menu key" +msgstr "Сделать Caps Lock дополнительной клавишей Menu" + +msgid "Make Caps Lock an additional Num Lock" +msgstr "Сделать Caps Lock дополнительной клавишей Num Lock" + +msgid "Make Caps Lock an additional Ctrl" +msgstr "Сделать Caps Lock дополнительной клавишей Ctrl" + +msgid "Caps Lock is disabled" +msgstr "Caps Lock отключен" + +msgid "Add the standard behavior to Menu key" +msgstr "Добавить стандартное поведение клавиши Menu" + +msgid "Menu is mapped to Win" +msgstr "Меню назначено на Win" + +msgid "Alt and Meta are on Alt" +msgstr "Alt и Meta назначены на Alt" + +msgid "Alt is mapped to Win and the usual Alt" +msgstr "Alt назначены на Win и обычный Alt" + +msgid "Ctrl is mapped to Win and the usual Ctrl" +msgstr "Ctrl назначены на Win и обычный Ctrl" + +msgid "Ctrl is mapped to Right Win and the usual Ctrl" +msgstr "Ctrl назначены на Right Win и обычный Ctrl" + +msgid "Ctrl is mapped to Alt, Alt to Win" +msgstr "Ctrl назначены на Alt, Alt — на Win" + +msgid "Meta is mapped to Win" +msgstr "Meta назначены на Win" + +msgid "Meta is mapped to Left Win" +msgstr "Meta назначены на Left Win" + +msgid "Hyper is mapped to Win" +msgstr "Гипер сопоставлена ​​с Win" + +msgid "Alt is mapped to Right Win, Super to Menu" +msgstr "Alt сопоставлена ​​с правой Win, Super — с Menu" + +msgid "Left Alt is swapped with Left Win" +msgstr "Левый Alt поменян на левый Win" + +msgid "Alt is swapped with Win" +msgstr "Alt поменян на Win" + +msgid "Win is mapped to PrtSc and the usual Win" +msgstr "Win сопоставлена ​​с PrtSc и обычной Win" + +msgid "3rd level of Left Win" +msgstr "3-й уровень левой Win" + +msgid "3rd level of Right Win" +msgstr "3-й уровень правой Win" + +msgid "3rd level of Menu" +msgstr "3-й уровень Menu" + +msgid "Left Ctrl" +msgstr "Левый Ctrl" + +msgid "3rd level of Left Ctrl" +msgstr "3-й уровень левой Ctrl" + +msgid "3rd level of Right Ctrl" +msgstr "3-й уровень правой Ctrl" + +msgid "3rd level of Caps Lock" +msgstr "3-й уровень Caps Lock" + +msgid "3rd level of the \"&lt; &gt;\" key" +msgstr "3-й уровень клавиши \"&lt; &gt;\"" + +msgid "Pause" +msgstr "Pause" + +msgid "Insert" +msgstr "Insert" + +msgid "PrtSc" +msgstr "PrtSc" + +msgid "keypad" +msgstr "клавиатура" + +msgid "numpad" +msgstr "цифровая клавиатура" + +msgid "srvrkeys" +msgstr "srvrkeys" + +msgid "apple" +msgstr "apple" + +msgid "shift" +msgstr "shift" + +msgid "misc" +msgstr "разное" + +msgid "grab" +msgstr "grab" + +msgid "eurosign" +msgstr "евро" + +msgid "rupeesign" +msgstr "рупия" + +msgid "Caps Lock chooses 5th level" +msgstr "Caps Lock выбирает 5-й уровень" + +msgid "The \"&lt; &gt;\" key chooses 5th level" +msgstr "Клавиша \"&lt; &gt;\" Клавиша выбора 5-го уровня" + +msgid "Right Alt chooses 5th level" +msgstr "Правый Alt выбирает 5-й уровень" + +msgid "Menu chooses 5th level" +msgstr "Меню выбирает 5-й уровень" + +msgid "Right Ctrl chooses 5th level" +msgstr "Правый Ctrl выбирает 5-й уровень" + +msgid "Right Alt chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser" +msgstr "Правый Alt выбирает 5-й уровень и действует как однократная блокировка при нажатии с другим переключателем 5-го уровня" + +msgid "Left Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser" +msgstr "Левая Win выбирает 5-й уровень и действует как однократная блокировка при нажатии с другим переключателем 5-го уровня" + +msgid "Right Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser" +msgstr "Правая Win выбирает 5-й уровень и действует как однократная блокировка при нажатии с другим переключателем 5-го уровня" + +msgid "The \"&lt; &gt;\" key chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser" +msgstr "Клавиша \"&lt; &gt;\" выбирает 5-й уровень и действует как однократная блокировка при нажатии с другим переключателем 5-го уровня" + +msgid "Usual space at any level" +msgstr "Обычный пробел на любом уровне" + +msgid "Non-breaking space at the 2nd level" +msgstr "Неразрывный пробел на 2-м уровне" + +msgid "Non-breaking space at the 3rd level" +msgstr "Неразрывный пробел на 3-м уровне" + +msgid "Non-breaking space at the 3rd level, thin non-breaking space at the 4th level" +msgstr "Неразрывный пробел на 3-м уровне уровень, тонкий неразрывный пробел на 4-м уровне" + +msgid "Non-breaking space at the 4th level" +msgstr "Неразрывный пробел на 4-м уровне" + +msgid "Non-breaking space at the 4th level, thin non-breaking space at the 6th level" +msgstr "Неразрывный пробел на 4-м уровне, тонкий неразрывный пробел на 6-м уровне" + +msgid "Non-breaking space at the 4th level, thin non-breaking space at the 6th level (via Ctrl+Shift)" +msgstr "Неразрывный пробел на 4-м уровне, тонкий неразрывный пробел на 6-м уровне (через Ctrl+Shift)" + +msgid "Zero-width non-joiner at the 2nd level" +msgstr "Необъединитель нулевой ширины на 2-м уровне" + +msgid "Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level" +msgstr "Необъединитель нулевой ширины на 2-м уровне, объединитель нулевой ширины на 3-м уровне" + +msgid "Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level, non-breaking space at the 4th level" +msgstr "Необъединитель нулевой ширины на 2-м уровне, объединитель нулевой ширины на 3-м уровне, неразрывный пробел на 4-м уровне" + +msgid "Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level" +msgstr "Необъединитель нулевой ширины на 2-м уровне, неразрывный пробел на 3-м уровне" + +msgid "Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, zero-width joiner at the 4th level" +msgstr "Необъединитель нулевой ширины на 2-м уровне, неразрывный пробел на 3-м уровне, объединитель нулевой ширины на 4-й уровень" + +msgid "Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, thin non-breaking space at the 4th level" +msgstr "Нулевой ширины необъединяющий символ на 2-м уровне, неразрывный пробел на 3-м уровне, тонкий неразрывный пробел на 4-м уровне" + +msgid "Zero-width non-joiner at the 3rd level, zero-width joiner at the 4th level" +msgstr "Нулевой ширины необъединяющий символ на 3-м уровне, нулевой ширины объединяющий символ на 4-м уровне" + +msgid "Kana Lock key is locking" +msgstr "Клавиша Kana Lock блокирует" + +msgid "NICOLA-F style Backspace" +msgstr "Клавиша Backspace в стиле NICOLA-F" + +msgid "Make Zenkaku Hankaku an additional Esc" +msgstr "Сделать Zenkaku Hankaku дополнительной клавишей Esc" + +msgid "Make right Alt a Hangul key" +msgstr "Сделать правый Alt клавишей Hangul" + +msgid "Make right Ctrl a Hangul key" +msgstr "Сделать правый Ctrl клавишей Hangul" + +msgid "Make right Alt a Hanja key" +msgstr "Сделать правый Alt клавишей Hanja" + +msgid "Make right Ctrl a Hanja key" +msgstr "Сделать правый Ctrl клавишей Hanja" + +msgid "At the corresponding key in a QWERTY layout" +msgstr "На соответствующей клавише в раскладке QWERTY" + +msgid "At the corresponding key in a Dvorak layout" +msgstr "На соответствующей клавише в раскладке Dvorak" + +msgid "At the corresponding key in a Colemak layout" +msgstr "На соответствующей клавише в раскладке Colemak" + +msgid "Sun key compatibility" +msgstr "Совместимость с клавишей Sun" + +msgid "Ctrl+Alt+Backspace" +msgstr "Ctrl+Alt+Backspac" \ No newline at end of file diff --git a/locale/ubl-settings-keyboard.pot b/locale/ubl-settings-keyboard.pot index 933a9a2..8bf6b76 100644 --- a/locale/ubl-settings-keyboard.pot +++ b/locale/ubl-settings-keyboard.pot @@ -18,463 +18,146 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: source/ubl-strings.h:1 -msgid "Version:" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "ubl-settings-keyboard version:" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Usage:" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "[OPTIONS]" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Options:" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Show this help" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Show package version" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Lock this help menu" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Lock configuration saving" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Lock local configration saving" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Lock global configration saving" -msgstr "" - -#: source/ubl-strings.h:2 -msgid "Lock global configration loading" +msgid "" +"https://wiki.ublinux.com/Software/Programs_and_utilities/All/ubl-settings-keyboard" msgstr "" -#: source/ubl-strings.h:4 source/ubl-strings.h:42 +#: source/ubl-strings.h:3 source/ubl-strings.h:8 msgid "Keyboard" msgstr "" -#: source/ubl-strings.h:5 +#: source/ubl-strings.h:4 msgid "Keyboard configuration" msgstr "" -#: source/ubl-strings.h:7 -msgid "Operation succeeded" -msgstr "" - -#: source/ubl-strings.h:8 -msgid "" -"Warning! Application was launched without root - root-dependent actions are " -"locked" -msgstr "" - -#: source/ubl-strings.h:10 -msgid "About" -msgstr "" - -#: source/ubl-strings.h:11 -msgid "Documentation" -msgstr "" - -#: source/ubl-strings.h:13 -msgid "Save to local configuration" -msgstr "" - -#: source/ubl-strings.h:14 -msgid "Save to global configuration" -msgstr "" - -#: source/ubl-strings.h:15 -msgid "Save configuration" -msgstr "" - -#: source/ubl-strings.h:16 -msgid "Save" -msgstr "" - -#: source/ubl-strings.h:18 -msgid "Load local configuration" -msgstr "" - -#: source/ubl-strings.h:19 -msgid "Load global configuration" -msgstr "" - -#: source/ubl-strings.h:20 -msgid "Load" -msgstr "" - -#: source/ubl-strings.h:22 -msgid "Cancel" -msgstr "" - -#: source/ubl-strings.h:24 -msgid "Would you like to read documentation in the Web?" -msgstr "" - -#: source/ubl-strings.h:25 -msgid "" -"You will be redirected to documentation website where documentation is\n" -"translated and supported by community." -msgstr "" - -#: source/ubl-strings.h:26 -msgid "Always redirect to online documentation" -msgstr "" - -#: source/ubl-strings.h:27 -msgid "Open documentation" -msgstr "" - -#: source/ubl-strings.h:28 -msgid "Project Home Page" -msgstr "" - -#: source/ubl-strings.h:29 -msgid "Nothing were chosen" -msgstr "" - -#: source/ubl-strings.h:32 -msgid "Global configuration loading succseeded." -msgstr "" - -#: source/ubl-strings.h:33 -msgid "Local configuration loading succseeded." -msgstr "" - -#: source/ubl-strings.h:34 -msgid "Config loading failed" -msgstr "" - -#: source/ubl-strings.h:36 -msgid "Local and global configuration saving succseeded." -msgstr "" - -#: source/ubl-strings.h:37 -msgid "Global configuration saving succseeded." -msgstr "" - -#: source/ubl-strings.h:38 -msgid "Local configuration saving succseeded." -msgstr "" - -#: source/ubl-strings.h:40 +#: source/ubl-strings.h:6 msgid "Console" msgstr "" -#: source/ubl-strings.h:41 +#: source/ubl-strings.h:7 msgid "Num Lock on boot:" msgstr "" -#: source/ubl-strings.h:43 +#: source/ubl-strings.h:9 source/ubl-strings.h:23 msgid "Keyboard model:" msgstr "" -#: source/ubl-strings.h:44 +#: source/ubl-strings.h:10 msgid "Keyboard options:" msgstr "" -#: source/ubl-strings.h:45 +#: source/ubl-strings.h:11 msgid "Keyboard layouts:" msgstr "" -#: source/ubl-strings.h:46 +#: source/ubl-strings.h:12 msgid "Pick an option" msgstr "" -#: source/ubl-strings.h:47 +#: source/ubl-strings.h:13 msgid "Move layout up" msgstr "" -#: source/ubl-strings.h:48 +#: source/ubl-strings.h:14 msgid "Move layout down" msgstr "" -#: source/ubl-strings.h:49 +#: source/ubl-strings.h:15 msgid "Add layout" msgstr "" -#: source/ubl-strings.h:50 +#: source/ubl-strings.h:16 msgid "Remove layout" msgstr "" -#: source/ubl-strings.h:51 +#: source/ubl-strings.h:17 msgid "Default" msgstr "" -#: source/ubl-strings.h:52 +#: source/ubl-strings.h:18 source/ubl-strings.h:30 msgid "On" msgstr "" -#: source/ubl-strings.h:53 +#: source/ubl-strings.h:19 source/ubl-strings.h:31 msgid "Off" msgstr "" -#: source/ubl-strings.h:54 +#: source/ubl-strings.h:20 msgid "Accept" msgstr "" - -msgid "Afrikaans" -msgstr "" - -msgid "Arabic" -msgstr "" - -msgid "Assamese" -msgstr "" - -msgid "Azerbaijani" -msgstr "" - -msgid "Belarusian" -msgstr "" - -msgid "Bulgarian" -msgstr "" - -msgid "Bengali" -msgstr "" - -msgid "Bosnian" -msgstr "" - -msgid "Catalan" -msgstr "" - -msgid "Czech" -msgstr "" - -msgid "Danish" -msgstr "" - -msgid "German" -msgstr "" - -msgid "Greek" -msgstr "" - -msgid "English" -msgstr "" - -msgid "Spanish" -msgstr "" - -msgid "Estonian" -msgstr "" - -msgid "Finnish" -msgstr "" - -msgid "French" -msgstr "" - -msgid "Gujarati" -msgstr "" - -msgid "Hebrew" -msgstr "" - -msgid "Hindi" -msgstr "" - -msgid "Croatian" -msgstr "" - -msgid "Hungarian" -msgstr "" - -msgid "Armenian" -msgstr "" - -msgid "Indonesian" -msgstr "" - -msgid "Icelandic" -msgstr "" - -msgid "Italian" -msgstr "" - -msgid "Japanese" -msgstr "" - -msgid "Georgian" -msgstr "" - -msgid "Kazakh" -msgstr "" - -msgid "Kannada" -msgstr "" - -msgid "Korean" -msgstr "" - -msgid "Kashmiri" -msgstr "" - -msgid "Kurdish" -msgstr "" - -msgid "Kirghiz" -msgstr "" - -msgid "Lithuanian" -msgstr "" - -msgid "Latvian" -msgstr "" - -msgid "Macedonian" -msgstr "" - -msgid "Malayalam" -msgstr "" - -msgid "Marathi" -msgstr "" - -msgid "Malay" -msgstr "" - -msgid "Maltese" -msgstr "" - -msgid "Bokmal" -msgstr "" - -msgid "Dutch" -msgstr "" - -msgid "Nynorsk" -msgstr "" - -msgid "Oriya" -msgstr "" - -msgid "Punjabi" -msgstr "" - -msgid "Polish" -msgstr "" - -msgid "Portuguese" -msgstr "" - -msgid "Romanian" -msgstr "" - -msgid "Russian" -msgstr "" - -msgid "Sanskrit" -msgstr "" - -msgid "Slovak" -msgstr "" - -msgid "Slovenian" -msgstr "" - -msgid "Albanian" -msgstr "" - -msgid "Serbian" -msgstr "" - -msgid "Swedish" -msgstr "" - -msgid "Tamil" -msgstr "" - -msgid "Telugu" -msgstr "" - -msgid "Thai" -msgstr "" - -msgid "Turkish" -msgstr "" - -msgid "Ukrainian" -msgstr "" - -msgid "American" -msgstr "" - -msgid "Vietnamese" +#: source/ubl-strings.h:20 +msgid "Cancel" msgstr "" -msgid "Simplified Chinese" +#: source/ubl-strings.h:22 +msgid "System" msgstr "" -msgid "Traditional Chinese" +#: source/ubl-strings.h:24 +msgid "Layouts:" msgstr "" -msgid "Chinese" +#: source/ubl-strings.h:25 +msgid "Default layout" msgstr "" -msgid "Generic 86-key PC" +#: source/ubl-strings.h:26 +msgid "Changing the layout:" msgstr "" -msgid "Generic 101-key PC" +#: source/ubl-strings.h:27 +msgid "Additional options:" msgstr "" -msgid "Generic 102-key PC" +#: source/ubl-strings.h:28 +msgid "Set Compose (Multi_Key) to the right Win key" msgstr "" -msgid "Generic 104-key PC" +#: source/ubl-strings.h:29 +msgid "Scroll Lock indication when switching layouts" msgstr "" -msgid "Generic 104-key PC with L-shaped Enter key" +#: source/ubl-strings.h:32 +msgid "Numlock:" msgstr "" -msgid "Generic 105-key PC" +#: source/ubl-strings.h:33 +msgid "Setting up TTY VT" msgstr "" -msgid "Dell 101-key PC" +#: source/ubl-strings.h:34 +msgid "Secondary layout:" msgstr "" -msgid "Dell Latitude laptop" +#: source/ubl-strings.h:35 +msgid "Keyboard layout" msgstr "" -msgid "Dell Precision M65 laptop" +#: source/ubl-strings.h:36 +msgid "Designation" msgstr "" -msgid "Dell Inspiron 6000/8000 laptop" +#: source/ubl-strings.h:37 +msgid "Variant" msgstr "" -msgid "Dell Precision M laptop" +#: source/ubl-strings.h:38 +msgid "Name" msgstr "" -msgid "Fujitsu-Siemens Amilo laptop" +#: source/ubl-strings.h:39 +msgid "Description" msgstr "" -msgid "Hewlett-Packard Mini 110 laptop" +#: source/ubl-strings.h:20 +msgid "Options:" msgstr "" -msgid "Asus laptop" +#: source/ubl-strings.h:20 +msgid "Keymap and layout change:" msgstr "" -msgid "Apple laptop" +#: source/ubl-strings.h:20 +msgid "Font:" msgstr "" - -msgid "eMachines m6800 laptop" -msgstr "" \ No newline at end of file diff --git a/locale/ubl-settings-keyboard_ru.po b/locale/ubl-settings-keyboard_ru.po index 9257e06..7aa79f9 100644 --- a/locale/ubl-settings-keyboard_ru.po +++ b/locale/ubl-settings-keyboard_ru.po @@ -18,469 +18,148 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #: source/ubl-strings.h:1 -msgid "Version:" -msgstr "Версия:" - -#: source/ubl-strings.h:2 -msgid "ubl-settings-keyboard version:" -msgstr "Версия ubl-settings-keyboard: " - -#: source/ubl-strings.h:2 -msgid "Usage:" -msgstr "Использование:" - -#: source/ubl-strings.h:2 -msgid "[OPTIONS]" -msgstr "[АРГУМЕНТЫ]" - -#: source/ubl-strings.h:2 -msgid "Options:" -msgstr "Аргументы:" - -#: source/ubl-strings.h:2 -msgid "Show this help" -msgstr "Показать параметры справки" - -#: source/ubl-strings.h:2 -msgid "Show package version" -msgstr "Показать текущую версию" - -#: source/ubl-strings.h:2 -msgid "Lock this help menu" -msgstr "Блокировка вызова справки" - -#: source/ubl-strings.h:2 -msgid "Lock configuration saving" -msgstr "Блокировка сохранения локальной и глобальной конфигурации" - -#: source/ubl-strings.h:2 -msgid "Lock local configration saving" -msgstr "Блокировка сохранения локальной конфигурации" - -#: source/ubl-strings.h:2 -msgid "Lock global configration saving" -msgstr "Блокировка сохранения глобальной конфигурации" - -#: source/ubl-strings.h:2 -msgid "Lock global configration loading" -msgstr "Блокировка загрузки глобальной конфигурации" +msgid "" +"https://wiki.ublinux.com/Software/Programs_and_utilities/All/ubl-settings-" +"keyboard" +msgstr "https://wiki.ublinux.com/Software/Programs_and_utilities/All/ubl-settings-" +"keyboard" -#: source/ubl-strings.h:4 source/ubl-strings.h:42 +#: source/ubl-strings.h:3 source/ubl-strings.h:8 msgid "Keyboard" msgstr "Клавиатура" -#: source/ubl-strings.h:5 +#: source/ubl-strings.h:4 msgid "Keyboard configuration" msgstr "Настройки Клавиатуры" -#: source/ubl-strings.h:7 -msgid "Operation succeeded" -msgstr "Операция завершена" - -#: source/ubl-strings.h:8 -msgid "" -"Warning! Application was launched without root - root-dependent actions are " -"locked" -msgstr "" -"Внимание! Приложение было запущено без прав суперпользователя - действия, " -"требующие их наличия заблокированы" - -#: source/ubl-strings.h:10 -msgid "About" -msgstr "О программе" - -#: source/ubl-strings.h:11 -msgid "Documentation" -msgstr "Справка" - -#: source/ubl-strings.h:13 -msgid "Save to local configuration" -msgstr "Сохранить в локальную конфигурацию" - -#: source/ubl-strings.h:14 -msgid "Save to global configuration" -msgstr "Сохранить в глобальную конфигурацию" - -#: source/ubl-strings.h:15 -msgid "Save configuration" -msgstr "Сохранить конфигурацию" - -#: source/ubl-strings.h:16 -msgid "Save" -msgstr "Сохранить" - -#: source/ubl-strings.h:18 -msgid "Load local configuration" -msgstr "Загрузить локальную конфигуруцию" - -#: source/ubl-strings.h:19 -msgid "Load global configuration" -msgstr "Загрузить глобальную конфигурацию" - -#: source/ubl-strings.h:20 -msgid "Load" -msgstr "Загрузить" - -#: source/ubl-strings.h:22 -msgid "Cancel" -msgstr "Отмена" - -#: source/ubl-strings.h:24 -msgid "Would you like to read documentation in the Web?" -msgstr "Вы хотите прочитать справку в Сети?" - -#: source/ubl-strings.h:25 -msgid "" -"You will be redirected to documentation website where documentation is\n" -"translated and supported by community." -msgstr "" -"Вы будете перенаправлены на сайт с документацией, где страницы помощи\n" -"переводятся и поддерживаются сообществом." - -#: source/ubl-strings.h:26 -msgid "Always redirect to online documentation" -msgstr "Всегда перенаправлять" - -#: source/ubl-strings.h:27 -msgid "Open documentation" -msgstr "Прочитать справку" - -#: source/ubl-strings.h:28 -msgid "Project Home Page" -msgstr "Домашняя страница проекта" - -#: source/ubl-strings.h:29 -msgid "Nothing were chosen" -msgstr "Ничего не было выбрано" - -#: source/ubl-strings.h:32 -msgid "Global configuration loading succseeded." -msgstr "Успешно загружена глобальная конфигурация" - -#: source/ubl-strings.h:33 -msgid "Local configuration loading succseeded." -msgstr "Успешно загружена локальная конфигурация" - -#: source/ubl-strings.h:34 -msgid "Config loading failed" -msgstr "Ошибка загрузки конфигурации" - -#: source/ubl-strings.h:36 -msgid "Local and global configuration saving succseeded." -msgstr "Успешно записаны локальная и глобальная конфигурация" - -#: source/ubl-strings.h:37 -msgid "Global configuration saving succseeded." -msgstr "Успешно записана глобальная конфигурация" - -#: source/ubl-strings.h:38 -msgid "Local configuration saving succseeded." -msgstr "Успешно записана локальная конфигурация" - -#: source/ubl-strings.h:40 +#: source/ubl-strings.h:6 msgid "Console" msgstr "Консоль" -#: source/ubl-strings.h:41 +#: source/ubl-strings.h:7 msgid "Num Lock on boot:" msgstr "Num Lock при загрузке:" -#: source/ubl-strings.h:43 +#: source/ubl-strings.h:9 source/ubl-strings.h:23 msgid "Keyboard model:" msgstr "Модель клавиатуры:" -#: source/ubl-strings.h:44 +#: source/ubl-strings.h:10 msgid "Keyboard options:" msgstr "Опции клавиатуры:" -#: source/ubl-strings.h:45 +#: source/ubl-strings.h:11 msgid "Keyboard layouts:" msgstr "Раскладки клавиатуры:" -#: source/ubl-strings.h:46 +#: source/ubl-strings.h:12 msgid "Pick an option" msgstr "Выбрать опцию" -#: source/ubl-strings.h:47 +#: source/ubl-strings.h:13 msgid "Move layout up" msgstr "Переместить раскладку выше" -#: source/ubl-strings.h:48 +#: source/ubl-strings.h:14 msgid "Move layout down" msgstr "Переместить раскладку ниже" -#: source/ubl-strings.h:49 +#: source/ubl-strings.h:15 msgid "Add layout" msgstr "Добавить раскладку" -#: source/ubl-strings.h:50 +#: source/ubl-strings.h:16 msgid "Remove layout" msgstr "Удалить раскладку" -#: source/ubl-strings.h:51 +#: source/ubl-strings.h:17 msgid "Default" msgstr "По умолчанию" -#: source/ubl-strings.h:52 +#: source/ubl-strings.h:18 source/ubl-strings.h:30 msgid "On" msgstr "Включить" -#: source/ubl-strings.h:53 +#: source/ubl-strings.h:19 source/ubl-strings.h:31 msgid "Off" msgstr "Выключить" -#: source/ubl-strings.h:54 +#: source/ubl-strings.h:20 msgid "Accept" msgstr "Принять" -msgid "Afrikaans" -msgstr "Африканский" - -msgid "Arabic" -msgstr "Арабский" - -msgid "Assamese" -msgstr "Ассамский" - -msgid "Azerbaijani" -msgstr "Азербайджанский" - -msgid "Belarusian" -msgstr "Беларусский" - -msgid "Bulgarian" -msgstr "Болгарский" - -msgid "Bengali" -msgstr "Бенгальский" - -msgid "Bosnian" -msgstr "Боснийский" - -msgid "Catalan" -msgstr "Каталонский" - -msgid "Czech" -msgstr "Чешский" - -msgid "Danish" -msgstr "Датский" - -msgid "German" -msgstr "Немецкий" - -msgid "Greek" -msgstr "Греческий" - -msgid "English" -msgstr "Английский" - -msgid "Spanish" -msgstr "Испанский" - -msgid "Estonian" -msgstr "Эстонский" - -msgid "Finnish" -msgstr "Финский" - -msgid "French" -msgstr "Французский" - -msgid "Gujarati" -msgstr "Гуджаратский" - -msgid "Hebrew" -msgstr "Иврит" - -msgid "Hindi" -msgstr "Хинди" - -msgid "Croatian" -msgstr "Хорватский" - -msgid "Hungarian" -msgstr "Венгерский" - -msgid "Armenian" -msgstr "Армянский" - -msgid "Indonesian" -msgstr "Индонезийский" - -msgid "Icelandic" -msgstr "Исландский" - -msgid "Italian" -msgstr "Итальянский" - -msgid "Japanese" -msgstr "Японский" - -msgid "Georgian" -msgstr "Грузинский" - -msgid "Kazakh" -msgstr "Казахский" - -msgid "Kannada" -msgstr "Каннада" - -msgid "Korean" -msgstr "Корейский" - -msgid "Kashmiri" -msgstr "Кашмирский" - -msgid "Kurdish" -msgstr "Курдский" - -msgid "Kirghiz" -msgstr "Киргизский" - -msgid "Lithuanian" -msgstr "Литовский" - -msgid "Latvian" -msgstr "Латышский" - -msgid "Macedonian" -msgstr "Македонский" - -msgid "Malayalam" -msgstr "Малаялам" - -msgid "Marathi" -msgstr "Маратхи" - -msgid "Malay" -msgstr "Малайский" - -msgid "Maltese" -msgstr "Мальтийский" - -msgid "Bokmal" -msgstr "Букмол" - -msgid "Dutch" -msgstr "Нидерландский" - -msgid "Nynorsk" -msgstr "Норвежский" - -msgid "Oriya" -msgstr "Ория" - -msgid "Punjabi" -msgstr "Панджаби" - -msgid "Polish" -msgstr "Польский" - -msgid "Portuguese" -msgstr "Португальский" - -msgid "Romanian" -msgstr "Румынский" - -msgid "Russian" -msgstr "Русский" - -msgid "Sanskrit" -msgstr "Санскрит" - -msgid "Slovak" -msgstr "Словацкий" - -msgid "Slovenian" -msgstr "Словенский" - -msgid "Albanian" -msgstr "Албанский" - -msgid "Serbian" -msgstr "Сербский" - -msgid "Swedish" -msgstr "Шведский" - -msgid "Tamil" -msgstr "Тамильский" - -msgid "Telugu" -msgstr "Тулугу" - -msgid "Thai" -msgstr "Тайский" - -msgid "Turkish" -msgstr "Турецкий" - -msgid "Ukrainian" -msgstr "Украинский" - -msgid "American" -msgstr "Американский английский" - -msgid "Vietnamese" -msgstr "Вьетнамский" - -msgid "Simplified Chinese" -msgstr "Упрощённый Китайский" - -msgid "Traditional Chinese" -msgstr "Традиционный Китайский" +#: source/ubl-strings.h:20 +msgid "Cancel" +msgstr "Отмена" -msgid "Chinese" -msgstr "Китайский" +#: source/ubl-strings.h:22 +msgid "System" +msgstr "Система" -msgid "Generic 86-key PC" -msgstr "Обычная 86-клавишная" +#: source/ubl-strings.h:24 +msgid "Layouts:" +msgstr "Раскладки:" -msgid "Generic 101-key PC" -msgstr "Обычная 101-клавишная" +#: source/ubl-strings.h:25 +msgid "Default layout" +msgstr "Раскладка по умолчанию" -msgid "Generic 102-key PC" -msgstr "Обычная 102-клавишная" +#: source/ubl-strings.h:26 +msgid "Changing the layout:" +msgstr "Смена раскладки:" -msgid "Generic 104-key PC" -msgstr "Обычная 104-клавишная" +#: source/ubl-strings.h:27 +msgid "Additional options:" +msgstr "Дополнительные опции:" -msgid "Generic 104-key PC with L-shaped Enter key" -msgstr "Обычная 104-клавишная (Enter в форме буквы L)" +#: source/ubl-strings.h:28 +msgid "Set Compose (Multi_Key) to the right Win key" +msgstr "Установить Compose (Multi_Key) на клавишу \"правая Win\"" -msgid "Generic 105-key PC" -msgstr "Обычная 105-клавишная" +#: source/ubl-strings.h:29 +msgid "Scroll Lock indication when switching layouts" +msgstr "Индикация Scroll Lock при переключении раскладки" -msgid "Dell 101-key PC" -msgstr "Dell 101-клавишная" +#: source/ubl-strings.h:32 +msgid "Numlock:" +msgstr "NumLock:" -msgid "Dell Latitude laptop" -msgstr "Ноутбук Dell Latitude" +#: source/ubl-strings.h:33 +msgid "Setting up TTY VT" +msgstr "Настройка TTY VT" -msgid "Dell Precision M65 laptop" -msgstr "Ноутбук Dell Precision M65" +#: source/ubl-strings.h:34 +msgid "Secondary layout:" +msgstr "Вторичная раскладка:" -msgid "Dell Inspiron 6000/8000 laptop" -msgstr "Ноутбук Dell Inspiron 6000/8000" +#: source/ubl-strings.h:35 +msgid "Keyboard layout" +msgstr "Раскладка клавиатуры" -msgid "Dell Precision M laptop" -msgstr "Ноутбук Dell Precision M" +#: source/ubl-strings.h:36 +msgid "Designation" +msgstr "Обозначение" -msgid "Fujitsu-Siemens Amilo laptop" -msgstr "Ноутбук Fujitsu-Siemens Amilo" +#: source/ubl-strings.h:37 +msgid "Variant" +msgstr "Вариант" -msgid "Hewlett-Packard Mini 110 laptop" -msgstr "Ноутбук Hewlett-Packard Mini 110" +#: source/ubl-strings.h:38 +msgid "Name" +msgstr "Имя" -msgid "Asus laptop" -msgstr "Ноутбук Asus" +#: source/ubl-strings.h:39 +msgid "Description" +msgstr "Описание" -msgid "Apple laptop" -msgstr "Ноутбук Apple" +#: source/ubl-strings.h:20 +msgid "Options:" +msgstr "Опции:" -msgid "eMachines m6800 laptop" -msgstr "Ноутбук eMachines m6800" +#: source/ubl-strings.h:20 +msgid "Keymap and layout change:" +msgstr "Карта клавиш и смена раскладки:" -#~ msgid "Acer laptop" -#~ msgstr "Ноутбук Acer" +#: source/ubl-strings.h:20 +msgid "Font:" +msgstr "Шрифт:" diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 21c8f9d..e80fcfb 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -1,4 +1,4 @@ -#define WIKI_LINK _("https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-keyboard") +#define WIKI_LINK _("https://wiki.ublinux.com/Software/Programs_and_utilities/All/ubl-settings-keyboard") #define TITLE_LABEL _("Keyboard") #define TITLE_INFO_LABEL _("Keyboard configuration") @@ -7,8 +7,8 @@ #define NUM_LOCK_LABEL _("Num Lock on boot:") #define KEYBOARD_LABEL _("Keyboard") #define MODEL_LABEL _("Keyboard model:") -#define OPTIONS_LABEL _("Keyboard options:") -#define LAYOUTS_LABEL _("Keyboard layouts:") +#define KEYBOARD_OPTIONS_LABEL _("Keyboard options:") +#define KEYBOARD_LAYOUTS_LABEL _("Keyboard layouts:") #define EDIT_LABEL _("Pick an option") #define MOVE_UP_LABEL _("Move layout up") #define MOVE_DOWN_LABEL _("Move layout down") @@ -17,4 +17,27 @@ #define DEFAULT_LABEL _("Default") #define ON_LABEL _("On") #define OFF_LABEL _("Off") -#define ACCEPT_LABEL _("Accept") \ No newline at end of file +#define ACCEPT_LABEL _("Accept") +#define CANCEL_LABEL _("Cancel") + +#define SYSTEM_LABEL _("System") +#define KEYBOARD_MODEL_LABEL _("Keyboard model:") +#define LAYOUTS_LABEL _("Layouts:") +#define DEFAULT_LAYOUT_LABEL _("Default layout") +#define LAYOUT_CHANGING_LABEL _("Changing the layout:") +#define ADDITIONAL_OPTIONS_LABEL _("Additional options:") +#define SET_COMPOSE_LABEL _("Set Compose (Multi_Key) to the right Win key") +#define SCROLL_LOCK_LABEL _("Scroll Lock indication when switching layouts") +#define ON_LABEL _("On") +#define OFF_LABEL _("Off") +#define NUMLOCK_LABEL _("Numlock:") +#define TTY_LAYOUT_LABEL _("Setting up TTY VT") +#define SECONDARY_LAYOUT_LABEL _("Secondary layout:") +#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 KEYMAP_LABEL _("Keymap and layout change:") +#define FONT_LABEL _("Font:") \ No newline at end of file From 6183fafafc53b193ec94e447c0f24cb0a8fb410d Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Mon, 10 Nov 2025 18:28:22 +0600 Subject: [PATCH 05/24] Fixes; Added new console settings --- source/ubl-settings-keyboard-layouts.c | 55 ++--- source/ubl-settings-keyboard-options.c | 20 +- source/ubl-settings-keyboard.c | 42 +++- source/ubl-settings-keyboard.h | 13 +- ubl-settings-keyboard-layouts.glade | 142 ++++------- ubl-settings-keyboard.glade | 329 ++++++++++++++++--------- 6 files changed, 343 insertions(+), 258 deletions(-) diff --git a/source/ubl-settings-keyboard-layouts.c b/source/ubl-settings-keyboard-layouts.c index 0fa9e99..a81eec0 100644 --- a/source/ubl-settings-keyboard-layouts.c +++ b/source/ubl-settings-keyboard-layouts.c @@ -2,35 +2,8 @@ void on_layouts_accept(GtkWidget *self, layouts_window *window){ main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets"); - gtk_list_store_clear(widgets->LayoutsList); - GtkTreeModel *model = GTK_TREE_MODEL(window->list); - GtkTreeIter window_iter; - char *save_string = NULL; - for_iter(window->list,&window_iter){ - char *id, *variant, *name; - int status; - gtk_tree_model_get(model,&window_iter,0,&id,2,&name,3,&status,-1); - if (status){ - char *temp = yon_char_append_element(save_string,id,","); - if (!yon_char_is_empty(save_string)) free(save_string); - save_string = temp; - } - GtkTreeIter child_iter; - if (gtk_tree_model_iter_children(model,&child_iter,&window_iter)){ - for (int valid2=1;valid2;valid2=gtk_tree_model_iter_next(model,&child_iter)){ - gtk_tree_model_get(model,&child_iter,0,&id,1,&variant,2,&name,3,&status,-1); - if (status){ - char *full_id = yon_char_unite(id,"_",variant,NULL); - char *temp = yon_char_append_element(save_string,full_id,","); - if (!yon_char_is_empty(save_string)) free(save_string); - save_string = temp; - free(full_id); - } - } - } - } - if (!yon_char_is_empty(save_string)){ - yon_config_register(keyboard_layout_parameter,keyboard_layout_parameter_command,save_string); + if (!yon_char_is_empty(window->parameters)){ + yon_config_register(keyboard_layout_parameter,keyboard_layout_parameter_command,window->parameters); } else { yon_config_remove_by_key(keyboard_layout_parameter); } @@ -42,8 +15,27 @@ void on_layouts_chosen(GtkCellRenderer *, gchar *path, layouts_window *window){ GtkTreeIter iter; gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->list),&iter,path); int chosen; - gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,3,&chosen,-1); + 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); + + + char *full_layout = NULL; + if (!yon_char_is_empty(variant)){ + yon_char_unite(layout,"_",variant,NULL); + } else { + full_layout = layout; + } + 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 on_system_layouts_add(GtkWidget *, main_window *widgets){ @@ -59,6 +51,7 @@ layouts_window *yon_layouts_window_new(){ 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(keyboard_layout_parameter)); g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); g_signal_connect(G_OBJECT(window->ChosenCell),"toggled",G_CALLBACK(on_layouts_chosen),window); @@ -183,7 +176,7 @@ void yon_layout_build(layouts_window *window){ yon_char_parsed_free(variants,variants_size); } - yon_char_parsed_free(layouts,size); + yon_char_parsed_free(layouts,size); } diff --git a/source/ubl-settings-keyboard-options.c b/source/ubl-settings-keyboard-options.c index 08e4261..3825691 100644 --- a/source/ubl-settings-keyboard-options.c +++ b/source/ubl-settings-keyboard-options.c @@ -76,7 +76,7 @@ void yon_options_setup(layouts_window *window){ int parsed_size; config_str parsed = yon_char_parse(options[i],&parsed_size,"|"); gtk_list_store_append(window->OptionsList,&iter); - gtk_list_store_set(window->OptionsList,&iter,0,parsed[0],1,parsed[1],2,yon_char_check_element(config_options,parsed[0],","),-1); + gtk_list_store_set(window->OptionsList,&iter,0,parsed[0],1,_(parsed[1]),2,yon_char_check_element(config_options,parsed[0],","),-1); char *str = yon_char_new(parsed[0]); char *type = yon_char_divide_search(str,":",-1); if (yon_char_parsed_check_exist(filter,filter_size,type)==-1){ @@ -98,31 +98,14 @@ void on_options_filter_changed(GtkWidget *, layouts_window *window){ void on_options_accept(GtkWidget *self, layouts_window *window){ main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets"); - // char *main_option = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->LayoutChangingCombo)); char *options = (char*)gtk_entry_get_text(GTK_ENTRY(window->OptionsEntry)); if (!yon_char_is_empty(options)){ - // char *full_options = yon_char_unite(!yon_char_is_empty(main_option)?main_option:"",",",options,NULL); yon_config_register(options_parameter,options_parameter_command,options); - // free(full_options); - // } else if (!yon_char_is_empty(main_option)){ - // yon_config_register(options_parameter,options_parameter_command,main_option); } else { yon_config_remove_by_key(options_parameter); } - // GtkTreeModel *model = GTK_TREE_MODEL(window->OptionsList); - // GtkTreeIter iter, itar; - // char *name, *id; - // int status; - // for_iter(model,&iter){ - // gtk_tree_model_get(model,&iter,0,&id,1,&name,2,&status,-1); - // if (status){ - // gtk_list_store_append(widgets->OptionsList,&itar); - // gtk_list_store_set(widgets->OptionsList,&itar,0,id,1,_(name),-1); - // } - // } on_subwindow_close(self); yon_interface_update(widgets); - // on_options_save(NULL, widgets); } void on_options_save(GtkWidget *,main_window *widgets){ @@ -173,7 +156,6 @@ layouts_window *yon_options_window_new(){ void on_options_open(GtkWidget *, main_window *widgets){ layouts_window *window = yon_options_window_new(); - // window->list = main_config.options_list; g_object_set_data(G_OBJECT(window->Window),"widgets",widgets); g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_options_accept),window); } diff --git a/source/ubl-settings-keyboard.c b/source/ubl-settings-keyboard.c index 36a8454..2695140 100644 --- a/source/ubl-settings-keyboard.c +++ b/source/ubl-settings-keyboard.c @@ -12,7 +12,6 @@ gboolean yon_interface_update(main_window *widgets){ gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo),0); gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),0); - // gtk_entry_set_text(GTK_ENTRY(widgets->SystemKeyboardOptionsCombo),DEFAULT_LABEL); { char *kbmodel = yon_config_get_by_key(model_parameter); if (kbmodel) { @@ -52,6 +51,18 @@ gboolean yon_interface_update(main_window *widgets){ } else { gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYLayoutCombo),0); } + char *tty_keymap_change = config(console_keymap_toggle_parameter); + if (!yon_char_is_empty(tty_keymap_change)){ + gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->TTYKeymapCombo),tty_keymap_change); + } else { + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYKeymapCombo),0); + } + char *tty_font = config(console_font_parameter); + if (!yon_char_is_empty(tty_font)){ + gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->TTYFontCombo),tty_font); + } else { + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYFontCombo),0); + } } { gtk_list_store_clear(widgets->OptionsList); @@ -215,6 +226,24 @@ void on_tty_changed(GtkWidget *, main_window *widgets){ } } +void on_tty_keymap_changed(GtkWidget *, main_window *widgets){ + char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYKeymapCombo)); + if (!yon_char_is_empty(tty_layout)){ + yon_config_register(console_keymap_toggle_parameter,console_keymap_toggle_parameter_command,tty_layout); + } else { + yon_config_remove_by_key(console_keymap_toggle_parameter); + } +} + +void on_tty_font_changed(GtkWidget *, main_window *widgets){ + char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYFontCombo)); + if (!yon_char_is_empty(tty_layout)){ + yon_config_register(console_font_parameter,console_font_parameter_command,tty_layout); + } else { + yon_config_remove_by_key(console_font_parameter); + } +} + void yon_main_window_complete(main_window *widgets){ widgets = yon_remalloc(widgets,sizeof(main_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); @@ -237,6 +266,8 @@ void yon_main_window_complete(main_window *widgets){ widgets->ScrollLockSwitch = yon_gtk_builder_get_widget(builder,"ScrollLockSwitch"); widgets->NumLockCombo = yon_gtk_builder_get_widget(builder,"NumLockCombo"); widgets->TTYLayoutCombo = yon_gtk_builder_get_widget(builder,"TTYLayoutCombo"); + widgets->TTYKeymapCombo = yon_gtk_builder_get_widget(builder,"TTYKeymapCombo"); + widgets->TTYFontCombo = yon_gtk_builder_get_widget(builder,"TTYFontCombo"); widgets->LayoutsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LayoutsList")); widgets->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"OptionsList")); @@ -248,6 +279,8 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->LayoutAddButton),"clicked",G_CALLBACK(on_system_layouts_add),widgets); g_signal_connect(G_OBJECT(widgets->LayoutRemoveButton),"clicked",G_CALLBACK(on_system_layouts_remove),widgets); g_signal_connect(G_OBJECT(widgets->TTYLayoutCombo),"changed",G_CALLBACK(on_tty_changed),widgets); + g_signal_connect(G_OBJECT(widgets->TTYKeymapCombo),"changed",G_CALLBACK(on_tty_keymap_changed),widgets); + g_signal_connect(G_OBJECT(widgets->TTYFontCombo),"changed",G_CALLBACK(on_tty_font_changed),widgets); g_signal_connect(G_OBJECT(widgets->KeyboardModelCombo),"changed",G_CALLBACK(on_model_changed),widgets); g_signal_connect(G_OBJECT(widgets->OptionsEditButton),"clicked",G_CALLBACK(on_options_open),widgets); g_signal_connect(G_OBJECT(widgets->OptionsRemoveButton),"clicked",G_CALLBACK(on_option_remove),widgets); @@ -302,6 +335,13 @@ void yon_main_window_complete(main_window *widgets){ } yon_char_parsed_free(models,size); + { + config_str parsed = yon_config_load(tty_keymaps_command,&size); + for (int i=0;iTTYKeymapCombo),parsed[i],parsed[i]); + } + } yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size); yon_save_window_set_postsave_function(on_save_done,widgets); gtk_tree_view_column_clicked(GTK_TREE_VIEW_COLUMN(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->LayoutTree),0))); diff --git a/source/ubl-settings-keyboard.h b/source/ubl-settings-keyboard.h index fbe1dd3..066d0b9 100644 --- a/source/ubl-settings-keyboard.h +++ b/source/ubl-settings-keyboard.h @@ -38,6 +38,10 @@ #define num_lock_boot_parameter_command "ubconfig --source global get keyboard NUMLOCK" #define console_keymap_parameter "CONSOLE_KEYMAP" #define console_keymap_parameter_command "ubconfig --source global get keyboard CONSOLE_KEYMAP" +#define console_keymap_toggle_parameter "CONSOLE_KEYMAP_TOGGLE" +#define console_keymap_toggle_parameter_command "ubconfig --source global get keyboard CONSOLE_KEYMAP_TOGGLE" +#define console_font_parameter "CONSOLE_FONT" +#define console_font_parameter_command "ubconfig --source global get keyboard CONSOLE_FONT" #define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get keyboard XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK",NULL) #define config_get_local_command "ubconfig --source system get keyboard XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK" @@ -115,6 +119,8 @@ // terminate : Key sequence to kill the X server #define terminate_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(terminate:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" +#define tty_keymaps_command "find /usr/share/kbd/keymaps/ -type f -name \"*.map.*\" | sed -E \"s:.*/(.*)\\..*\\..*:\\1:g\" | sort -u" + typedef char* string; __attribute__((unused)) static \ @@ -155,6 +161,8 @@ typedef struct { GtkWidget *ScrollLockSwitch; GtkWidget *NumLockCombo; GtkWidget *TTYLayoutCombo; + GtkWidget *TTYKeymapCombo; + GtkWidget *TTYFontCombo; GtkListStore *LayoutsList; GtkListStore *OptionsList; } main_window; @@ -183,6 +191,7 @@ typedef struct { GtkTreeStore *list; GtkListStore *OptionsList; GtkTreeModel *OptionsFilter; + char *parameters; } layouts_window; typedef struct { @@ -241,4 +250,6 @@ void on_layout_move_down(GtkWidget *, main_window *widgets); void on_layout_move_up(GtkWidget *, main_window *widgets); void on_layout_dnd_inserted(GtkTreeModel *, GtkTreePath* path, GtkTreeIter* iter, main_window *widgets); void on_layout_dnd_deleted(GtkTreeModel *, GtkTreePath* path, GtkTreeIter* iter, main_window *widgets); -void on_tty_changed(GtkWidget *, main_window *widgets); \ No newline at end of file +void on_tty_changed(GtkWidget *, main_window *widgets); +void on_tty_keymap_changed(GtkWidget *, main_window *widgets); +void on_tty_font_changed(GtkWidget *, main_window *widgets); \ No newline at end of file diff --git a/ubl-settings-keyboard-layouts.glade b/ubl-settings-keyboard-layouts.glade index 71f15cf..7a0cb5a 100644 --- a/ubl-settings-keyboard-layouts.glade +++ b/ubl-settings-keyboard-layouts.glade @@ -5,114 +5,54 @@ True False - emblem-ok-symbolic + com.ublinux.libublsettingsui-gtk3.accept-symbolic True False - process-stop-symbolic + com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic - + 450 550 True False - dialog - - - False - 3 - 3 - 3 - 3 - vertical - 5 - - - False - end - - - Cancel - True - True - True - image2 - - - True - True - 0 - - - - - Accept - True - True - True - image1 - - - True - True - 1 - - - - - False - False - 0 - - + com.ublinux.ubl-settings-keyboard + + + True + True + in - + True True - in + False + 1 - - True - True - False - 1 - - - none - - + + column - - column - - - - 3 - - - + + + 3 + + + + + + column + 0 - - column - 0 - - - - 2 - - - + + + 2 + - - True - True - 1 - @@ -120,7 +60,6 @@ True False - True True @@ -150,6 +89,31 @@ com.ublinux.ubl-settings-keyboard + + + Cancel + True + True + True + image2 + + + 1 + + + + + Accept + True + True + True + image1 + + + end + 2 + + diff --git a/ubl-settings-keyboard.glade b/ubl-settings-keyboard.glade index 0b0b231..8f52c9c 100644 --- a/ubl-settings-keyboard.glade +++ b/ubl-settings-keyboard.glade @@ -43,6 +43,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + True False @@ -162,20 +163,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True False 5 - - - True - False - start - Layouts: - 1 - - - False - True - 0 - - True @@ -187,6 +174,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True False 10 + + + True + False + Layouts: + 1 + + + False + True + 0 + + True @@ -196,7 +196,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False True - 0 + 1 @@ -208,7 +208,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False True - 1 + 2 @@ -295,6 +295,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False True True + Move layout up image4 + + + False + True + 0 + + - - - 1 - + + True + True + True + image3 + + + + False + True + 1 + + + False + True + 1 + - - - - True - True - 1 - - - - - True - False - vertical - 5 - - - True - True - True - image1 - - - False - True - 0 - - - - - True - True - True - image3 - - - - False + True True 1 - False + True True - 2 + 0 @@ -736,13 +749,46 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True False + vertical 5 - + True False - Secondary layout: - 1 + 5 + + + True + False + Secondary layout: + 1 + + + False + True + 0 + + + + + True + False + LayoutsList + 0 + 0 + + + + 2 + + + + + True + True + 1 + + False @@ -751,25 +797,85 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - + True False - LayoutsList - 0 - 0 + 5 + + + True + False + Keymap and layout change: + 1 + + + False + True + 0 + + - - - 2 - + + True + False + 0 + + Default + + + + True + True + 1 + - True + False True 1 + + + True + False + 5 + + + True + False + Font: + 1 + + + False + True + 0 + + + + + True + False + 0 + + Default + + + + True + True + 1 + + + + + False + True + 2 + + @@ -778,7 +884,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True False - TTY layout + Setting up TTY VT @@ -800,17 +906,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - - - - - - - - - - From 9e5138c82ed27093aa2f1b58ae1d70ab309ebaf9 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 11 Nov 2025 10:15:15 +0600 Subject: [PATCH 06/24] Added new console settings; localisation update --- locale/ubl-settings-keyboard.pot | 6 ++--- locale/ubl-settings-keyboard_ru.po | 10 +++---- source/ubl-settings-keyboard.c | 19 +++++++++++++- source/ubl-settings-keyboard.h | 4 ++- source/ubl-strings.h | 6 ++--- ubl-settings-keyboard.glade | 42 ++++++++++++++++-------------- 6 files changed, 55 insertions(+), 32 deletions(-) diff --git a/locale/ubl-settings-keyboard.pot b/locale/ubl-settings-keyboard.pot index 8bf6b76..490493d 100644 --- a/locale/ubl-settings-keyboard.pot +++ b/locale/ubl-settings-keyboard.pot @@ -119,7 +119,7 @@ msgid "Scroll Lock indication when switching layouts" msgstr "" #: source/ubl-strings.h:32 -msgid "Numlock:" +msgid "NumLock:" msgstr "" #: source/ubl-strings.h:33 @@ -127,7 +127,7 @@ msgid "Setting up TTY VT" msgstr "" #: source/ubl-strings.h:34 -msgid "Secondary layout:" +msgid "Keyboard layout:" msgstr "" #: source/ubl-strings.h:35 @@ -155,7 +155,7 @@ msgid "Options:" msgstr "" #: source/ubl-strings.h:20 -msgid "Keymap and layout change:" +msgid "Second keyboard layout:" msgstr "" #: source/ubl-strings.h:20 diff --git a/locale/ubl-settings-keyboard_ru.po b/locale/ubl-settings-keyboard_ru.po index 7aa79f9..74aeb7b 100644 --- a/locale/ubl-settings-keyboard_ru.po +++ b/locale/ubl-settings-keyboard_ru.po @@ -121,7 +121,7 @@ msgid "Scroll Lock indication when switching layouts" msgstr "Индикация Scroll Lock при переключении раскладки" #: source/ubl-strings.h:32 -msgid "Numlock:" +msgid "NumLock:" msgstr "NumLock:" #: source/ubl-strings.h:33 @@ -129,8 +129,8 @@ msgid "Setting up TTY VT" msgstr "Настройка TTY VT" #: source/ubl-strings.h:34 -msgid "Secondary layout:" -msgstr "Вторичная раскладка:" +msgid "Keyboard layout:" +msgstr "Раскладка клавиш для клавиатуры:" #: source/ubl-strings.h:35 msgid "Keyboard layout" @@ -157,8 +157,8 @@ msgid "Options:" msgstr "Опции:" #: source/ubl-strings.h:20 -msgid "Keymap and layout change:" -msgstr "Карта клавиш и смена раскладки:" +msgid "Second keyboard layout:" +msgstr "Вторая раскладка клавиш для клавиатуры:" #: source/ubl-strings.h:20 msgid "Font:" diff --git a/source/ubl-settings-keyboard.c b/source/ubl-settings-keyboard.c index 2695140..740ab83 100644 --- a/source/ubl-settings-keyboard.c +++ b/source/ubl-settings-keyboard.c @@ -336,11 +336,28 @@ void yon_main_window_complete(main_window *widgets){ yon_char_parsed_free(models,size); { - config_str parsed = yon_config_load(tty_keymaps_command,&size); + config_str parsed = yon_config_load(tty_layout_command,&size); + for (int i=0;iTTYLayoutCombo),parsed[i],parsed[i]); + } + yon_char_parsed_free(parsed,size); + } + { + config_str parsed = yon_config_load(tty_keymap_command,&size); for (int i=0;iTTYKeymapCombo),parsed[i],parsed[i]); } + yon_char_parsed_free(parsed,size); + } + { + config_str parsed = yon_config_load(tty_font_command,&size); + for (int i=0;iTTYFontCombo),parsed[i],parsed[i]); + } + yon_char_parsed_free(parsed,size); } yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size); yon_save_window_set_postsave_function(on_save_done,widgets); diff --git a/source/ubl-settings-keyboard.h b/source/ubl-settings-keyboard.h index 066d0b9..6de6fa3 100644 --- a/source/ubl-settings-keyboard.h +++ b/source/ubl-settings-keyboard.h @@ -119,7 +119,9 @@ // terminate : Key sequence to kill the X server #define terminate_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(terminate:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst" -#define tty_keymaps_command "find /usr/share/kbd/keymaps/ -type f -name \"*.map.*\" | sed -E \"s:.*/(.*)\\..*\\..*:\\1:g\" | sort -u" +#define tty_layout_command "find /usr/share/kbd/keymaps/ -type f -name \"*.map.*\" | sed -En \"s:.*/(.*)\\..*\\..*:\\1:p\" | sort -ufV" +#define tty_keymap_command "find /usr/share/kbd/keymaps/ -type f -name \"*.map.*\" | sed -En \"s:.*/(.*)\\..*\\..*:\\1:p\" | sort -ufV" +#define tty_font_command "find /usr/share/kbd/consolefonts -maxdepth 1 -type f -name \"*.gz\" | sed -En \"s:.*/(.*)(\\.psf\\.gz|\\.psfu\\.gz)$:\\1:p\" | sort -ufV" typedef char* string; diff --git a/source/ubl-strings.h b/source/ubl-strings.h index e80fcfb..a5fa9f2 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -30,14 +30,14 @@ #define SCROLL_LOCK_LABEL _("Scroll Lock indication when switching layouts") #define ON_LABEL _("On") #define OFF_LABEL _("Off") -#define NUMLOCK_LABEL _("Numlock:") +#define NUMLOCK_LABEL _("NumLock:") #define TTY_LAYOUT_LABEL _("Setting up TTY VT") -#define SECONDARY_LAYOUT_LABEL _("Secondary layout:") +#define SECONDARY_LAYOUT_LABEL _("Keyboard layout:") #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 KEYMAP_LABEL _("Keymap and layout change:") +#define KEYMAP_LABEL _("Second keyboard layout:") #define FONT_LABEL _("Font:") \ No newline at end of file diff --git a/ubl-settings-keyboard.glade b/ubl-settings-keyboard.glade index 8f52c9c..2531f56 100644 --- a/ubl-settings-keyboard.glade +++ b/ubl-settings-keyboard.glade @@ -43,7 +43,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - True False @@ -467,6 +466,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True OptionsList both + + + Name @@ -681,7 +683,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True False - Numlock: + NumLock: 1 @@ -757,11 +759,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False 5 - + True False - Secondary layout: - 1 + Keyboard layout: + 0 False @@ -770,18 +772,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - + True False - LayoutsList 0 - 0 - - - - 2 - - + + Default + True @@ -805,8 +802,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True False - Keymap and layout change: - 1 + Second keyboard layout: + 0 False @@ -833,7 +830,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False True - 1 + 2 @@ -846,7 +843,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True False Font: - 1 + 0 False @@ -873,7 +870,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False True - 2 + 3 @@ -906,6 +903,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + + + + + + From 37bb867e3e3999ca11cc3be7bffa6991ddedb160 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 11 Nov 2025 15:06:57 +0600 Subject: [PATCH 07/24] Console settings edits; localisation updates; localisation fixes --- font-list.csv | 377 +++++++++++++++++++++ gresource.xml | 5 +- keymap-list.csv | 248 ++++++++++++++ locale/ubl-settings-keyboard-options.pot | 120 +++++++ locale/ubl-settings-keyboard-options_ru.po | 96 +++++- locale/ubl-settings-keyboard.pot | 12 + locale/ubl-settings-keyboard_ru.po | 12 + source/CMakeLists.txt | 7 +- source/ubl-settings-keyboard-font.c | 87 +++++ source/ubl-settings-keyboard-keymaps.c | 105 ++++++ source/ubl-settings-keyboard.c | 156 ++++----- source/ubl-settings-keyboard.h | 41 ++- source/ubl-strings.h | 6 +- ubl-settings-keyboard-font.glade | 239 +++++++++++++ ubl-settings-keyboard-keymaps.glade | 254 ++++++++++++++ ubl-settings-keyboard.glade | 117 ++++++- 16 files changed, 1776 insertions(+), 106 deletions(-) create mode 100644 font-list.csv create mode 100644 keymap-list.csv create mode 100644 source/ubl-settings-keyboard-font.c create mode 100644 source/ubl-settings-keyboard-keymaps.c create mode 100644 ubl-settings-keyboard-font.glade create mode 100644 ubl-settings-keyboard-keymaps.glade diff --git a/font-list.csv b/font-list.csv new file mode 100644 index 0000000..5834028 --- /dev/null +++ b/font-list.csv @@ -0,0 +1,377 @@ +FONT;DESCRIPTION +Agafari-12; +Agafari-14; +Agafari-16; +aply16; +cp850-8x8; +cp850-8x14; +cp850-8x16; +cp865-8x8; +cp865-8x14; +cp865-8x16; +cp866-8x8; +cp866-8x14; +cp866-8x16; +cp1250; +cyr-sun16;Fonts that support Cyrillic characters +Cyr_a8x8;Fonts that support Cyrillic characters +Cyr_a8x14;Fonts that support Cyrillic characters +Cyr_a8x16;Fonts that support Cyrillic characters +default8x9; +default8x16; +drdos8x6; +drdos8x8; +drdos8x14; +drdos8x16; +eurlatgr; +GohaClassic-12; +GohaClassic-14; +GohaClassic-16; +Goha-12; +Goha-14; +Goha-16; +gr737a-8x8; +gr737a-9x14; +gr737a-9x16; +gr737b-8x11; +gr737b-9x16-medieval; +gr737c-8x6; +gr737c-8x7; +gr737c-8x8; +gr737c-8x14; +gr737c-8x16; +gr737d-8x16; +gr928a-8x14; +gr928a-8x16; +gr928b-8x14; +gr928b-8x16; +gr928-8x16-thin; +gr928-9x14; +gr928-9x16; +greek-polytonic; +iso01-12x22; +iso02-12x22; +iso07u-16; +koi8r.8x8;Fonts that support Cyrillic characters +koi8u_8x8;Fonts that support Cyrillic characters +koi8u_8x14;Fonts that support Cyrillic characters +koi8u_8x16;Fonts that support Cyrillic characters +koi8-14;Fonts that support Cyrillic characters +lat0-08; +lat0-10; +lat0-12; +lat0-14; +lat0-16; +lat0-sun16; +lat1-08; +lat1-10; +lat1-12; +lat1-14; +lat1-16; +lat2a-16; +lat2-08; +lat2-10; +lat2-12; +lat2-14; +lat2-16; +lat2-sun16; +Lat2-Terminus16; +lat4a-08; +lat4a-10; +lat4a-12; +lat4a-14; +lat4a-16+; +lat4a-16; +lat4a-19; +lat4-08; +lat4-10; +lat4-12; +lat4-14; +lat4-16+; +lat4-16; +lat4-19; +lat5-12; +lat5-14; +lat5-16; +lat7a-14; +lat7a-16; +lat7-14; +lat9u-08; +lat9u-10; +lat9u-12; +lat9u-14; +lat9u-16; +lat9v-08; +lat9v-10; +lat9v-12; +lat9v-14; +lat9v-16; +lat9w-08; +lat9w-10; +lat9w-12; +lat9w-14; +lat9w-16; +lat9-08; +lat9-10; +lat9-12; +lat9-14; +lat9-16; +LatArCyrHeb-08;Fonts that support Latin Arabic Cyrillic Hebrew characters +LatArCyrHeb-14;Fonts that support Latin Arabic Cyrillic Hebrew characters +LatArCyrHeb-16+;Fonts that support Latin Arabic Cyrillic Hebrew characters +LatArCyrHeb-16;Fonts that support Latin Arabic Cyrillic Hebrew characters +LatArCyrHeb-19;Fonts that support Latin Arabic Cyrillic Hebrew characters +latarcyrheb-sun16;Fonts that support Latin Arabic Cyrillic Hebrew characters +latarcyrheb-sun32;Fonts that support Latin Arabic Cyrillic Hebrew characters +LatGrkCyr-8x16;Fonts that support Latin Greek Cyrillic characters +LatGrkCyr-12x22;Fonts that support Latin Greek Cyrillic characters +LatKaCyrHeb-14; +pancyrillic.f16; +ruscii_8x8;Fonts that support Cyrillic characters +ruscii_8x16;Fonts that support Cyrillic characters +solar24x32; +sun12x22; +tcvn8x16; +ter-112n;Terminus fonts that support Cyrillic characters +ter-114b; +ter-114n; +ter-116b; +ter-116n; +ter-118b; +ter-118n; +ter-120b; +ter-120n; +ter-122b; +ter-122n; +ter-124b; +ter-124n; +ter-128b; +ter-128n; +ter-132b; +ter-132n; +ter-212n; +ter-214b; +ter-214n; +ter-216b; +ter-216n; +ter-218b; +ter-218n; +ter-220b; +ter-220n; +ter-222b; +ter-222n; +ter-224b; +ter-224n; +ter-228b; +ter-228n; +ter-232b; +ter-232n; +ter-712n; +ter-714b; +ter-714n; +ter-716b; +ter-716n; +ter-718b; +ter-718n; +ter-720b; +ter-720n; +ter-722b; +ter-722n; +ter-724b; +ter-724n; +ter-728b; +ter-728n; +ter-732b; +ter-732n; +ter-912n; +ter-914b; +ter-914n; +ter-916b; +ter-916n; +ter-918b; +ter-918n; +ter-920b; +ter-920n; +ter-922b; +ter-922n; +ter-924b; +ter-924n; +ter-928b; +ter-928n; +ter-932b; +ter-932n; +ter-c12n; +ter-c14b; +ter-c14n; +ter-c16b; +ter-c16n; +ter-c18b; +ter-c18n; +ter-c20b; +ter-c20n; +ter-c22b; +ter-c22n; +ter-c24b; +ter-c24n; +ter-c28b; +ter-c28n; +ter-c32b; +ter-c32n; +ter-d12n; +ter-d14b; +ter-d14n; +ter-d16b; +ter-d16n; +ter-d18b; +ter-d18n; +ter-d20b; +ter-d20n; +ter-d22b; +ter-d22n; +ter-d24b; +ter-d24n; +ter-d28b; +ter-d28n; +ter-d32b; +ter-d32n; +ter-g12n; +ter-g14b; +ter-g14n; +ter-g16b; +ter-g16n; +ter-g18b; +ter-g18n; +ter-g20b; +ter-g20n; +ter-g22b; +ter-g22n; +ter-g24b; +ter-g24n; +ter-g28b; +ter-g28n; +ter-g32b; +ter-g32n; +ter-h12n; +ter-h14b; +ter-h14n; +ter-h16b; +ter-h16n; +ter-h18b; +ter-h18n; +ter-h20b; +ter-h20n; +ter-h22b; +ter-h22n; +ter-h24b; +ter-h24n; +ter-h28b; +ter-h28n; +ter-h32b; +ter-h32n; +ter-i12n; +ter-i14b; +ter-i14n; +ter-i16b; +ter-i16n; +ter-i18b; +ter-i18n; +ter-i20b; +ter-i20n; +ter-i22b; +ter-i22n; +ter-i24b; +ter-i24n; +ter-i28b; +ter-i28n; +ter-i32b; +ter-i32n; +ter-k12n; +ter-k14b; +ter-k14n; +ter-k16b; +ter-k16n; +ter-k18b; +ter-k18n; +ter-k20b; +ter-k20n; +ter-k22b; +ter-k22n; +ter-k24b; +ter-k24n; +ter-k28b; +ter-k28n; +ter-k32b; +ter-k32n; +ter-m12n; +ter-m14b; +ter-m14n; +ter-m16b; +ter-m16n; +ter-m18b; +ter-m18n; +ter-m20b; +ter-m20n; +ter-m22b; +ter-m22n; +ter-m24b; +ter-m24n; +ter-m28b; +ter-m28n; +ter-m32b; +ter-m32n; +ter-p12n; +ter-p14b; +ter-p14n; +ter-p16b; +ter-p16n; +ter-p18b; +ter-p18n; +ter-p20b; +ter-p20n; +ter-p22b; +ter-p22n; +ter-p24b; +ter-p24n; +ter-p28b; +ter-p28n; +ter-p32b; +ter-p32n; +ter-u12n; +ter-u14b; +ter-u14n; +ter-u16b; +ter-u16n; +ter-u18b; +ter-u18n; +ter-u20b; +ter-u20n; +ter-u22b; +ter-u22n; +ter-u24b; +ter-u24n; +ter-u28b; +ter-u28n; +ter-u32b; +ter-u32n; +ter-v12n; +ter-v14b; +ter-v14n; +ter-v16b; +ter-v16n; +ter-v18b; +ter-v18n; +ter-v20b; +ter-v20n; +ter-v22b; +ter-v22n; +ter-v24b; +ter-v24n; +ter-v28b; +ter-v28n; +ter-v32b; +ter-v32n; +UniCyrExt_8x16; +UniCyr_8x8; +UniCyr_8x14; +UniCyr_8x16; +viscii10-8x16; \ No newline at end of file diff --git a/gresource.xml b/gresource.xml index 507d914..056455f 100644 --- a/gresource.xml +++ b/gresource.xml @@ -4,11 +4,14 @@ ubl-settings-keyboard.glade ubl-settings-keyboard-layouts.glade ubl-settings-keyboard-options.glade + ubl-settings-keyboard-keymaps.glade + ubl-settings-keyboard-font.glade ubl-settings-keyboard.css - layouts.csv + keymap-list.csv + font-list.csv \ No newline at end of file diff --git a/keymap-list.csv b/keymap-list.csv new file mode 100644 index 0000000..ad2f730 --- /dev/null +++ b/keymap-list.csv @@ -0,0 +1,248 @@ +KEYMAP;GROUP;DESCRIPTION +3l;; +adnw;; +amiga-de;amiga; +amiga-us;amiga; +ANSI-dvorak;; +apple-a1048-sv;mac; +apple-a1243-sv-fn-reverse;mac; +apple-a1243-sv;mac; +apple-internal-0x0253-sv-fn-reverse;mac; +apple-internal-0x0253-sv;mac; +applkey;; +atari-de;atari; +atari-se;atari; +atari-uk-falcon;atari; +atari-us;atari; +azerty;; +backspace;; +bashkir;; +be-latin1;; +bg-cp855;; +bg-cp1251;; +bg_bds-cp1251;; +bg_bds-utf8;; +bg_pho-cp1251;; +bg_pho-utf8;; +bone;; +br-abnt2;; +br-abnt;; +br-latin1-abnt2;; +br-latin1-us;; +bywin-cp1251;; +by-cp1251;; +by;; +carpalx-full;; +carpalx;; +ca;; +cf;; +colemak;; +croat;; +ctrl;; +cz-cp1250;; +cz-lat2-prog;; +cz-lat2;; +cz-qwertz;; +cz-us-qwertz;; +cz;; +defkeymap;; +defkeymap_V1.0;; +de-latin1-nodeadkeys;; +de-latin1;; +de-mobii;; +de;; +de_alt_UTF-8;; +de_CH-latin1;; +dk-latin1;; +dk;; +dvorak-ca-fr;; +dvorak-de;; +dvorak-es;; +dvorak-fr;; +dvorak-la;; +dvorak-l;; +dvorak-no;; +dvorak-programmer;; +dvorak-ru;; +dvorak-r;; +dvorak-sv-a1;; +dvorak-sv-a5;; +dvorak-ukp;; +dvorak-uk;; +dvorak;; +emacs2;; +emacs;; +en;pine; +es-cp850;; +es-olpc;; +es;; +et-nodeadkeys;; +et;; +euro1;; +euro2;; +euro;; +fa;qwerty;Persian ISIRI-2901 Unicode console. Toggled by Shift+AltGr key. +fi;; +fr-bepo-latin9;; +fr-bepo;; +fr-latin1;; +fr-latin9;; +fr-pc;; +fr;; +fr_CH-latin1;; +fr_CH;; +gr-pc;; +gr;; +hu101;; +hu;; +ie;; +il-heb;; +il-phonetic;; +il;; +is-latin1-us;; +is-latin1;; +it2;; +it-ibm;; +it;; +jp106;; +kazakh;; +keypad;; +koy;; +kyrgyz;; +ky_alt_sh-UTF-8;; +la-latin1;; +lt.baltic;; +lt.l4;; +lt;; +lv-tilde;; +lv;; +mac-be;mac; +mac-de-latin1-nodeadkeys;mac; +mac-de-latin1;mac; +mac-de_CH;mac; +mac-dk-latin1;mac; +mac-dvorak;mac; +mac-es;mac; +mac-euro2;mac; +mac-euro;mac; +mac-fi-latin1;mac; +mac-fr-legacy;mac; +mac-fr;mac; +mac-fr_CH-latin1;mac; +mac-it;mac; +mac-no-latin1;mac; +mac-pl;mac; +mac-pt-latin1;mac; +mac-se;mac; +mac-template;mac; +mac-uk;mac; +mac-us;mac; +mk0;; +mk-cp1251;; +mk-utf;; +mk;; +mod-dh-ansi-us-awing;; +mod-dh-ansi-us-fatz-wide;; +mod-dh-ansi-us-fatz;; +mod-dh-ansi-us-wide;; +mod-dh-ansi-us;; +mod-dh-iso-uk-wide;; +mod-dh-iso-uk;; +mod-dh-iso-us-wide;; +mod-dh-iso-us;; +mod-dh-matrix-us;; +neoqwertz;; +neo;; +nl2;; +nl;; +no-latin1;; +no;; +pc110;; +pl1;; +pl2;; +pl3;; +pl4;; +pl;; +pt-latin1;; +pt-latin9;; +pt-olpc;; +ro;; +ro_std;; +ro_win;; +ru1;qwerty; +ru2;qwerty; +ru3;qwerty; +ru4;qwerty; +ruwin_alt-CP1251;qwerty; +ruwin_alt-KOI8-R;qwerty; +ruwin_alt-UTF-8;qwerty; +ruwin_alt_sh-UTF-8;qwerty; +ruwin_cplk-CP1251;qwerty; +ruwin_cplk-KOI8-R;qwerty; +ruwin_cplk-UTF-8;qwerty; +ruwin_ctrl-CP1251;qwerty; +ruwin_ctrl-KOI8-R;qwerty; +ruwin_ctrl-UTF-8;qwerty; +ruwin_ct_sh-CP1251;qwerty; +ruwin_ct_sh-KOI8-R;qwerty; +ruwin_ct_sh-UTF-8;qwerty; +ru-cp1251;qwerty;Russian CP1251 Cyrillic keyboard.map. "Cyrillic" mode is toggled by Right_Ctrl key and shifted by AltGr key. +ru-ms;qwerty; +ru-yawerty;qwerty; +ru;qwerty;Only Russian UTF-8 keymap (GOST 19768-74) for a 102 key keyboard. Both Ctrl+Shift is used to change rus/lat. +ru_win;qwerty; +se-fi-ir209;; +se-fi-lat6;; +se-ir209;; +se-lat6;; +sg-latin1-lk450;; +sg-latin1;; +sg;; +sk-prog-qwerty;; +sk-prog-qwertz;; +sk-qwerty;; +sk-qwertz;; +slovene;; +sr-cy;; +sr-latin;; +sundvorak;sun; +sunkeymap;sun; +sunt4-es;sun; +sunt4-fi-latin1;sun; +sunt4-no-latin1;sun; +sunt5-cz-us;sun; +sunt5-de-latin1;sun; +sunt5-es;sun; +sunt5-fi-latin1;sun; +sunt5-fr-latin1;sun; +sunt5-ru;sun; +sunt5-uk;sun; +sunt5-us-cz;sun; +sunt6-uk;sun; +sun-pl-altgraph;sun; +sun-pl;sun; +sv-latin1;; +tj_alt-UTF8;; +tralt;; +trf-fgGIod;; +trf;; +trq;; +tr_f-latin5;; +tr_q-latin5;; +ttwin_alt-UTF-8;; +ttwin_cplk-UTF-8;; +ttwin_ctrl-UTF-8;; +ttwin_ct_sh-UTF-8;; +ua-cp1251;; +ua-utf-ws;; +ua-utf;; +ua-ws;; +ua;; +uk;; +unicode;; +us1;; +us-acentos;; +us;; +wangbe2;; +wangbe;; +windowkeys;; \ No newline at end of file diff --git a/locale/ubl-settings-keyboard-options.pot b/locale/ubl-settings-keyboard-options.pot index 21d1ef8..96ca08d 100644 --- a/locale/ubl-settings-keyboard-options.pot +++ b/locale/ubl-settings-keyboard-options.pot @@ -422,4 +422,124 @@ msgid "Sun key compatibility" msgstr "" msgid "Ctrl+Alt+Backspace" +msgstr "" + +msgid "Right Alt (while pressed)" +msgstr "" + +msgid "Left Alt (while pressed)" +msgstr "" + +msgid "Left Win (while pressed)" +msgstr "" + +msgid "Right Win (while pressed)" +msgstr "" + +msgid "Any Win (while pressed)" +msgstr "" + +msgid "Menu (while pressed), Shift+Menu for Menu" +msgstr "" + +msgid "Caps Lock (while pressed), Alt+Caps Lock for the original Caps Lock action" +msgstr "" + +msgid "Right Ctrl (while pressed)" +msgstr "" + +msgid "Right Alt" +msgstr "" + +msgid "Left Alt" +msgstr "" + +msgid "Caps Lock" +msgstr "" + +msgid "Shift+Caps Lock" +msgstr "" + +msgid "Caps Lock to first layout; Shift+Caps Lock to second layout" +msgstr "" + +msgid "Left Win to first layout; Right Win/Menu to second layout" +msgstr "" + +msgid "Left Ctrl to first layout; Right Ctrl to second layout" +msgstr "" + +msgid "Alt+Caps Lock" +msgstr "" + +msgid "Both Shifts together" +msgstr "" + +msgid "Both Alts together" +msgstr "" + +msgid "Both Alts together; AltGr alone chooses third level" +msgstr "" + +msgid "Both Ctrls together" +msgstr "" + +msgid "Ctrl+Shift" +msgstr "" + +msgid "Left Ctrl+Left Shift" +msgstr "" + +msgid "Right Ctrl+Right Shift" +msgstr "" + +msgid "Alt+Ctrl" +msgstr "" + +msgid "Alt+Shift" +msgstr "" + +msgid "Left Alt+Left Shift" +msgstr "" + +msgid "Right Alt+Right Shift" +msgstr "" + +msgid "Menu" +msgstr "" + +msgid "Left Win" +msgstr "" + +msgid "Alt+Space" +msgstr "" + +msgid "Win+Space" +msgstr "" + +msgid "Ctrl+Space" +msgstr "" + +msgid "Right Win" +msgstr "" + +msgid "Left Shift" +msgstr "" + +msgid "Right Shift" +msgstr "" + +msgid "Left Ctrl" +msgstr "" + +msgid "Right Ctrl" +msgstr "" + +msgid "Scroll Lock" +msgstr "" + +msgid "Ctrl+Left Win to first layout; Ctrl+Menu to second layout" +msgstr "" + +msgid "Left Ctrl+Left Win" msgstr "" \ No newline at end of file diff --git a/locale/ubl-settings-keyboard-options_ru.po b/locale/ubl-settings-keyboard-options_ru.po index 1eba714..cd1775f 100644 --- a/locale/ubl-settings-keyboard-options_ru.po +++ b/locale/ubl-settings-keyboard-options_ru.po @@ -420,4 +420,98 @@ msgid "Sun key compatibility" msgstr "Совместимость с клавишей Sun" msgid "Ctrl+Alt+Backspace" -msgstr "Ctrl+Alt+Backspac" \ No newline at end of file +msgstr "Ctrl+Alt+Backspac" + +msgid "Right Alt (while pressed)" +msgstr "Правый Alt (удерживая нажатой)" + +msgid "Left Alt (while pressed)" +msgstr "Левый Alt (удерживая нажатой)" + +msgid "Left Win (while pressed)" +msgstr "Левая Win (удерживая нажатой)" + +msgid "Right Win (while pressed)" +msgstr "Правая Win (удерживая нажатой)" + +msgid "Any Win (while pressed)" +msgstr "Любая Win (удерживая нажатой)" + +msgid "Menu (while pressed), Shift+Menu for Menu" +msgstr "Меню (удерживая нажатой), Shift+Menu для меню" + +msgid "Caps Lock (while pressed), Alt+Caps Lock for the original Caps Lock action" +msgstr "Caps Lock (удерживая нажатой), Alt+Caps Lock для исходного действия Caps Lock" + +msgid "Right Ctrl (while pressed)" +msgstr "Правый Ctrl (удерживая нажатой)" + +msgid "Shift+Caps Lock" +msgstr "Shift+Caps Lock" + +msgid "Caps Lock to first layout; Shift+Caps Lock to second layout" +msgstr "Caps Lock на первую раскладку; Shift+Caps Lock на вторую раскладку" + +msgid "Left Win to first layout; Right Win/Menu to second layout" +msgstr "Левая Win на первую раскладку; Правая Win/Menu на вторую раскладку" + +msgid "Left Ctrl to first layout; Right Ctrl to second layout" +msgstr "Левый Ctrl на первую раскладку; Правый Ctrl на вторую раскладку" + +msgid "Alt+Caps Lock" +msgstr "Alt+Caps Lock" + +msgid "Both Shifts together" +msgstr "Оба Shift одновременно" + +msgid "Both Alts together" +msgstr "Оба Alt одновременно" + +msgid "Both Alts together; AltGr alone chooses third level" +msgstr "Оба Alt одновременно; AltGr отдельно выбирает третий уровень" + +msgid "Both Ctrls together" +msgstr "Оба Ctrl вместе" + +msgid "Ctrl+Shift" +msgstr "Ctrl+Shift" + +msgid "Left Ctrl+Left Shift" +msgstr "Левый Ctrl+Левый Shift" + +msgid "Right Ctrl+Right Shift" +msgstr "Правый Ctrl+Правый Shift" + +msgid "Alt+Ctrl" +msgstr "Alt+Ctrl" + +msgid "Alt+Shift" +msgstr "Alt+Shift" + +msgid "Left Alt+Left Shift" +msgstr "Левый Alt+Левый Shift" + +msgid "Right Alt+Right Shift" +msgstr "Правый Alt+Правый Shift" + +msgid "Alt+Space" +msgstr "Alt+Пробел" + +msgid "Win+Space" +msgstr "Win+Пробел" + +msgid "Ctrl+Space" +msgstr "Ctrl+Пробел" + +msgid "Left Shift" +msgstr "Левый Shift" + +msgid "Right Shift" +msgstr "Правый Shift" + + +msgid "Ctrl+Left Win to first layout; Ctrl+Menu to second layout" +msgstr "Ctrl+Левый Win на первую раскладку; Ctrl+Меню на вторую раскладку" + +msgid "Left Ctrl+Left Win" +msgstr "Левый Ctrl+Левый Win" \ No newline at end of file diff --git a/locale/ubl-settings-keyboard.pot b/locale/ubl-settings-keyboard.pot index 490493d..d58bcb3 100644 --- a/locale/ubl-settings-keyboard.pot +++ b/locale/ubl-settings-keyboard.pot @@ -161,3 +161,15 @@ msgstr "" #: source/ubl-strings.h:20 msgid "Font:" msgstr "" + +#: source/ubl-strings.h:20 +msgid "Group" +msgstr "" + +#: source/ubl-strings.h:20 +msgid "Second keyboard layout" +msgstr "" + +#: source/ubl-strings.h:20 +msgid "Font" +msgstr "" diff --git a/locale/ubl-settings-keyboard_ru.po b/locale/ubl-settings-keyboard_ru.po index 74aeb7b..0284af2 100644 --- a/locale/ubl-settings-keyboard_ru.po +++ b/locale/ubl-settings-keyboard_ru.po @@ -163,3 +163,15 @@ msgstr "Вторая раскладка клавиш для клавиатуры #: source/ubl-strings.h:20 msgid "Font:" msgstr "Шрифт:" + +#: source/ubl-strings.h:20 +msgid "Group" +msgstr "Группа" + +#: source/ubl-strings.h:20 +msgid "Second keyboard layout" +msgstr "Вторая раскладка клавиш для клавиатуры" + +#: source/ubl-strings.h:20 +msgid "Font" +msgstr "Шрифт" diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 416c8fd..f6ef902 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -34,7 +34,10 @@ set(DEPENDFILES ../ubl-settings-keyboard.glade ../ubl-settings-keyboard-layouts.glade ../ubl-settings-keyboard-options.glade - ../layouts.csv + ../ubl-settings-keyboard-keymaps.glade + ../ubl-settings-keyboard-font.glade + ../keymap-list.csv + ../font-list.csv ../gresource.xml ../ubl-settings-keyboard.css ) @@ -77,6 +80,8 @@ set(SOURCE_FILES ubl-settings-keyboard-layouts.c ubl-settings-keyboard-options.c ubl-settings-keyboard-save.c + ubl-settings-keyboard-font.c + ubl-settings-keyboard-keymaps.c ubl-settings-keyboard.h ubl-strings.h ) diff --git a/source/ubl-settings-keyboard-font.c b/source/ubl-settings-keyboard-font.c new file mode 100644 index 0000000..c61470c --- /dev/null +++ b/source/ubl-settings-keyboard-font.c @@ -0,0 +1,87 @@ +#include "ubl-settings-keyboard.h" + +void on_font_accept(GtkWidget *, layouts_window *window){ + GtkWidget *output_widget = g_object_get_data(G_OBJECT(window->Window),"output"); + if (gtk_switch_get_active(GTK_SWITCH(window->OptionsFilterCombo))){ + gtk_entry_set_text(GTK_ENTRY(output_widget),""); + yon_config_remove_by_key(console_keymap_parameter); + on_subwindow_close(window->Window); + return; + } + char *target = (char*)gtk_entry_get_text(GTK_ENTRY(window->OptionsEntry)); + if (yon_char_is_empty(target)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(NOTHING_CHOSEN_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + gtk_entry_set_text(GTK_ENTRY(output_widget),target); + yon_config_register(console_font_parameter,console_font_parameter_command,target); + on_subwindow_close(window->Window); +} + +void on_font_selection_changed(GtkWidget *,layouts_window *window){ + GtkTreeModel *model; + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model, &iter)){ + char *target; + gtk_tree_model_get(model,&iter,0,&target,-1); + gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),target); + } else { + gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),""); + } +} + +layouts_window *yon_font_window_new(){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_font_path); + layouts_window *window = malloc(sizeof(layouts_window)); + memset(window,0,sizeof(layouts_window)); + window->Window = yon_gtk_builder_get_widget(builder,"Window"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton"); + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->MainTree = yon_gtk_builder_get_widget(builder,"FontTree"); + window->OptionsEntry = yon_gtk_builder_get_widget(builder,"ManualEntry"); + window->OptionsFilterCombo = yon_gtk_builder_get_widget(builder,"DefaultSwitch"); + window->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"FontList")); + window->parameters = yon_char_new(config(keyboard_layout_parameter)); + + g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->MainTree); + g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->OptionsEntry); + g_signal_connect(G_OBJECT(window->MainTree),"cursor-changed",G_CALLBACK(on_font_selection_changed),window); + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + int font_size; + int size; + config_str fonts = yon_resource_open_file(font_list_path, &font_size); + for (int i=0;iOptionsList),&iter); + gtk_list_store_set(GTK_LIST_STORE(window->OptionsList),&iter,0,parsed[0],1,parsed[1],-1); + if (!yon_char_is_empty(config_value)&&!strcmp(parsed[0],config_value)){ + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&iter); + gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),config_value); + } + } + } + if (yon_char_is_empty(config_value)){ + gtk_switch_set_active(GTK_SWITCH(window->OptionsFilterCombo),1); + } + return window; +} + +void yon_font_open(GtkWidget *,main_window *widgets){ + layouts_window *window = yon_font_window_new(); + g_object_set_data(G_OBJECT(window->Window),"output",widgets->TTYFontEntry); + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),FONT_TITLE_LABEL,icon_path,"font-window"); + + g_object_set_data(G_OBJECT(window->Window),"widgets",widgets); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_font_accept),window); +} \ No newline at end of file diff --git a/source/ubl-settings-keyboard-keymaps.c b/source/ubl-settings-keyboard-keymaps.c new file mode 100644 index 0000000..f0cbbaa --- /dev/null +++ b/source/ubl-settings-keyboard-keymaps.c @@ -0,0 +1,105 @@ +#include "ubl-settings-keyboard.h" + +void on_keymaps_accept(GtkWidget *, layouts_window *window){ + main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets"); + GtkWidget *output_widget = g_object_get_data(G_OBJECT(window->Window),"output"); + if (gtk_switch_get_active(GTK_SWITCH(window->OptionsFilterCombo))){ + gtk_entry_set_text(GTK_ENTRY(output_widget),""); + yon_config_remove_by_key(console_keymap_parameter); + on_subwindow_close(window->Window); + return; + } + char *target = (char*)gtk_entry_get_text(GTK_ENTRY(window->OptionsEntry)); + if (yon_char_is_empty(target)){ + yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(NOTHING_CHOSEN_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE); + return; + } + if (output_widget == widgets->TTYLayoutEntry){ + gtk_entry_set_text(GTK_ENTRY(output_widget),target); + yon_config_register(console_keymap_parameter,console_keymap_parameter_command,target); + + } else { + gtk_entry_set_text(GTK_ENTRY(output_widget),target); + yon_config_register(console_keymap_toggle_parameter,console_keymap_parameter_command,target); + + } + on_subwindow_close(window->Window); +} + +void on_keymaps_selection_changed(GtkWidget *,layouts_window *window){ + GtkTreeModel *model; + GtkTreeIter iter; + if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model, &iter)){ + char *target; + gtk_tree_model_get(model,&iter,0,&target,-1); + gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),target); + } else { + gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),""); + } +} + +layouts_window *yon_keymaps_window_new(){ + GtkBuilder *builder = gtk_builder_new_from_resource(glade_keymaps_path); + layouts_window *window = malloc(sizeof(layouts_window)); + memset(window,0,sizeof(layouts_window)); + window->Window = yon_gtk_builder_get_widget(builder,"Window"); + window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); + window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton"); + window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); + window->MainTree = yon_gtk_builder_get_widget(builder,"KeymapTree"); + window->parameters = yon_char_new(config(keyboard_layout_parameter)); + window->OptionsEntry = yon_gtk_builder_get_widget(builder,"ManualEntry"); + window->OptionsFilterCombo = yon_gtk_builder_get_widget(builder,"DefaultSwitch"); + window->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"KeymapList")); + + g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->MainTree); + g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->OptionsEntry); + g_signal_connect(G_OBJECT(window->MainTree),"cursor-changed",G_CALLBACK(on_keymaps_selection_changed),window); + g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); + return window; +} + +void yon_keymaps_open(GtkWidget *self,main_window *widgets){ + layouts_window *window = yon_keymaps_window_new(); + if (self == widgets->TTYLayoutButton){ + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),KEYBOARD_LAYOUT_LABEL,icon_path,"font-window"); + g_object_set_data(G_OBJECT(window->Window),"output",widgets->TTYLayoutEntry); + } else { + yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),KEYMAP_TITLE_LABEL,icon_path,"font-window"); + g_object_set_data(G_OBJECT(window->Window),"output",widgets->TTYSecondLayoutEntry); + } + g_object_set_data(G_OBJECT(window->Window),"widgets",widgets); + g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_keymaps_accept),window); + + int keymap_size; + int size; + config_str keymaps = yon_resource_open_file(keymap_list_path, &keymap_size); + for (int i=0;iTTYLayoutButton){ + config_value = config(console_keymap_parameter); + } else { + config_value = config(console_keymap_toggle_parameter); + } + for (int i=0;iOptionsList),&iter); + gtk_list_store_set(GTK_LIST_STORE(window->OptionsList),&iter,0,parsed[0],1,parsed[1],2,parsed[2],-1); + if (!yon_char_is_empty(config_value)&&!strcmp(parsed[0],config_value)){ + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&iter); + gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),config_value); + } + } + } + if (yon_char_is_empty(config_value)){ + gtk_switch_set_active(GTK_SWITCH(window->OptionsFilterCombo),1); + } +} \ No newline at end of file diff --git a/source/ubl-settings-keyboard.c b/source/ubl-settings-keyboard.c index 740ab83..4b8b262 100644 --- a/source/ubl-settings-keyboard.c +++ b/source/ubl-settings-keyboard.c @@ -8,7 +8,7 @@ gboolean yon_interface_update(main_window *widgets){ g_signal_handlers_block_by_func(G_OBJECT(widgets->OptionsEditButton),G_CALLBACK(on_options_open),widgets); g_signal_handlers_block_by_func(G_OBJECT(widgets->NumLockCombo),G_CALLBACK(on_num_lock_changed),widgets); g_signal_handlers_block_by_func(G_OBJECT(widgets->LayoutChangingCombo),G_CALLBACK(on_options_save),widgets); - g_signal_handlers_block_by_func(G_OBJECT(widgets->TTYLayoutCombo),G_CALLBACK(on_tty_changed),widgets); + // g_signal_handlers_block_by_func(G_OBJECT(widgets->TTYLayoutCombo),G_CALLBACK(on_tty_changed),widgets); gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo),0); gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),0); @@ -45,24 +45,24 @@ gboolean yon_interface_update(main_window *widgets){ } } - char *tty_keymap = config(console_keymap_parameter); - if (!yon_char_is_empty(tty_keymap)){ - gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->TTYLayoutCombo),tty_keymap); - } else { - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYLayoutCombo),0); - } - char *tty_keymap_change = config(console_keymap_toggle_parameter); - if (!yon_char_is_empty(tty_keymap_change)){ - gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->TTYKeymapCombo),tty_keymap_change); - } else { - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYKeymapCombo),0); - } - char *tty_font = config(console_font_parameter); - if (!yon_char_is_empty(tty_font)){ - gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->TTYFontCombo),tty_font); - } else { - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYFontCombo),0); - } + // char *tty_keymap = config(console_keymap_parameter); + // if (!yon_char_is_empty(tty_keymap)){ + // gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->TTYLayoutCombo),tty_keymap); + // } else { + // gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYLayoutCombo),0); + // } + // char *tty_keymap_change = config(console_keymap_toggle_parameter); + // if (!yon_char_is_empty(tty_keymap_change)){ + // gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->TTYKeymapCombo),tty_keymap_change); + // } else { + // gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYKeymapCombo),0); + // } + // char *tty_font = config(console_font_parameter); + // if (!yon_char_is_empty(tty_font)){ + // gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->TTYFontCombo),tty_font); + // } else { + // gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->TTYFontCombo),0); + // } } { gtk_list_store_clear(widgets->OptionsList); @@ -97,7 +97,7 @@ gboolean yon_interface_update(main_window *widgets){ g_signal_handlers_unblock_by_func(G_OBJECT(widgets->OptionsEditButton),G_CALLBACK(on_options_open),widgets); g_signal_handlers_unblock_by_func(G_OBJECT(widgets->NumLockCombo),G_CALLBACK(on_num_lock_changed),widgets); g_signal_handlers_unblock_by_func(G_OBJECT(widgets->LayoutChangingCombo),G_CALLBACK(on_options_save),widgets); - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->TTYLayoutCombo),G_CALLBACK(on_tty_changed),widgets); + // g_signal_handlers_unblock_by_func(G_OBJECT(widgets->TTYLayoutCombo),G_CALLBACK(on_tty_changed),widgets); return G_SOURCE_REMOVE; } @@ -217,32 +217,32 @@ void on_scroll_lock_switch(GtkWidget *,int status,main_window *widgets){ yon_interface_update(widgets); } -void on_tty_changed(GtkWidget *, main_window *widgets){ - char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYLayoutCombo)); - if (!yon_char_is_empty(tty_layout)){ - yon_config_register(console_keymap_parameter,console_keymap_parameter_command,tty_layout); - } else { - yon_config_remove_by_key(console_keymap_parameter); - } -} - -void on_tty_keymap_changed(GtkWidget *, main_window *widgets){ - char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYKeymapCombo)); - if (!yon_char_is_empty(tty_layout)){ - yon_config_register(console_keymap_toggle_parameter,console_keymap_toggle_parameter_command,tty_layout); - } else { - yon_config_remove_by_key(console_keymap_toggle_parameter); - } -} - -void on_tty_font_changed(GtkWidget *, main_window *widgets){ - char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYFontCombo)); - if (!yon_char_is_empty(tty_layout)){ - yon_config_register(console_font_parameter,console_font_parameter_command,tty_layout); - } else { - yon_config_remove_by_key(console_font_parameter); - } -} +// void on_tty_changed(GtkWidget *, main_window *widgets){ +// char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYLayoutCombo)); +// if (!yon_char_is_empty(tty_layout)){ +// yon_config_register(console_keymap_parameter,console_keymap_parameter_command,tty_layout); +// } else { +// yon_config_remove_by_key(console_keymap_parameter); +// } +// } + +// void on_tty_keymap_changed(GtkWidget *, main_window *widgets){ +// char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYKeymapCombo)); +// if (!yon_char_is_empty(tty_layout)){ +// yon_config_register(console_keymap_toggle_parameter,console_keymap_toggle_parameter_command,tty_layout); +// } else { +// yon_config_remove_by_key(console_keymap_toggle_parameter); +// } +// } + +// void on_tty_font_changed(GtkWidget *, main_window *widgets){ +// char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYFontCombo)); +// if (!yon_char_is_empty(tty_layout)){ +// yon_config_register(console_font_parameter,console_font_parameter_command,tty_layout); +// } else { +// yon_config_remove_by_key(console_font_parameter); +// } +// } void yon_main_window_complete(main_window *widgets){ widgets = yon_remalloc(widgets,sizeof(main_window)); @@ -265,9 +265,13 @@ void yon_main_window_complete(main_window *widgets){ widgets->ComposeSwitch = yon_gtk_builder_get_widget(builder,"ComposeSwitch"); widgets->ScrollLockSwitch = yon_gtk_builder_get_widget(builder,"ScrollLockSwitch"); widgets->NumLockCombo = yon_gtk_builder_get_widget(builder,"NumLockCombo"); - widgets->TTYLayoutCombo = yon_gtk_builder_get_widget(builder,"TTYLayoutCombo"); - widgets->TTYKeymapCombo = yon_gtk_builder_get_widget(builder,"TTYKeymapCombo"); - widgets->TTYFontCombo = yon_gtk_builder_get_widget(builder,"TTYFontCombo"); + + widgets->TTYLayoutEntry = yon_gtk_builder_get_widget(builder,"TTYLayoutEntry"); + widgets->TTYLayoutButton = yon_gtk_builder_get_widget(builder,"TTYLayoutButton"); + widgets->TTYSecondLayoutEntry = yon_gtk_builder_get_widget(builder,"TTYSecondLayoutEntry"); + widgets->TTYSecondLayoutButton = yon_gtk_builder_get_widget(builder,"TTYSecondLayoutButton"); + widgets->TTYFontEntry = yon_gtk_builder_get_widget(builder,"TTYFontEntry"); + widgets->TTYFontButton = yon_gtk_builder_get_widget(builder,"TTYFontButton"); widgets->LayoutsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LayoutsList")); widgets->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"OptionsList")); @@ -278,9 +282,9 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->LayoutAddButton),"clicked",G_CALLBACK(on_system_layouts_add),widgets); g_signal_connect(G_OBJECT(widgets->LayoutRemoveButton),"clicked",G_CALLBACK(on_system_layouts_remove),widgets); - g_signal_connect(G_OBJECT(widgets->TTYLayoutCombo),"changed",G_CALLBACK(on_tty_changed),widgets); - g_signal_connect(G_OBJECT(widgets->TTYKeymapCombo),"changed",G_CALLBACK(on_tty_keymap_changed),widgets); - g_signal_connect(G_OBJECT(widgets->TTYFontCombo),"changed",G_CALLBACK(on_tty_font_changed),widgets); + g_signal_connect(G_OBJECT(widgets->TTYLayoutButton),"clicked",G_CALLBACK(yon_keymaps_open),widgets); + g_signal_connect(G_OBJECT(widgets->TTYSecondLayoutButton),"clicked",G_CALLBACK(yon_keymaps_open),widgets); + g_signal_connect(G_OBJECT(widgets->TTYFontButton),"clicked",G_CALLBACK(yon_font_open),widgets); g_signal_connect(G_OBJECT(widgets->KeyboardModelCombo),"changed",G_CALLBACK(on_model_changed),widgets); g_signal_connect(G_OBJECT(widgets->OptionsEditButton),"clicked",G_CALLBACK(on_options_open),widgets); g_signal_connect(G_OBJECT(widgets->OptionsRemoveButton),"clicked",G_CALLBACK(on_option_remove),widgets); @@ -335,30 +339,30 @@ void yon_main_window_complete(main_window *widgets){ } yon_char_parsed_free(models,size); - { - config_str parsed = yon_config_load(tty_layout_command,&size); - for (int i=0;iTTYLayoutCombo),parsed[i],parsed[i]); - } - yon_char_parsed_free(parsed,size); - } - { - config_str parsed = yon_config_load(tty_keymap_command,&size); - for (int i=0;iTTYKeymapCombo),parsed[i],parsed[i]); - } - yon_char_parsed_free(parsed,size); - } - { - config_str parsed = yon_config_load(tty_font_command,&size); - for (int i=0;iTTYFontCombo),parsed[i],parsed[i]); - } - yon_char_parsed_free(parsed,size); - } + // { + // config_str parsed = yon_config_load(tty_layout_command,&size); + // for (int i=0;iTTYLayoutCombo),parsed[i],parsed[i]); + // } + // yon_char_parsed_free(parsed,size); + // } + // { + // config_str parsed = yon_config_load(tty_keymap_command,&size); + // for (int i=0;iTTYKeymapCombo),parsed[i],parsed[i]); + // } + // yon_char_parsed_free(parsed,size); + // } + // { + // config_str parsed = yon_config_load(tty_font_command,&size); + // for (int i=0;iTTYFontCombo),parsed[i],parsed[i]); + // } + // yon_char_parsed_free(parsed,size); + // } yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size); yon_save_window_set_postsave_function(on_save_done,widgets); gtk_tree_view_column_clicked(GTK_TREE_VIEW_COLUMN(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->LayoutTree),0))); diff --git a/source/ubl-settings-keyboard.h b/source/ubl-settings-keyboard.h index 6de6fa3..ebbee16 100644 --- a/source/ubl-settings-keyboard.h +++ b/source/ubl-settings-keyboard.h @@ -21,27 +21,33 @@ #define glade_path "/com/ublinux/ui/ubl-settings-keyboard.glade" #define glade_layouts_path "/com/ublinux/ui/ubl-settings-keyboard-layouts.glade" #define glade_options_path "/com/ublinux/ui/ubl-settings-keyboard-options.glade" +#define glade_keymaps_path "/com/ublinux/ui/ubl-settings-keyboard-keymaps.glade" +#define glade_font_path "/com/ublinux/ui/ubl-settings-keyboard-font.glade" #define banner_path "/com/ublinux/images/ubl-settings-keyboard-banner.png" #define CssPath "/com/ublinux/css/ubl-settings-keyboard.css" #define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL) #define icon_path "com.ublinux.ubl-settings-keyboard" +#define keymap_list_path "resource://com/ublinux/csv/keymap-list.csv" +#define font_list_path "resource://com/ublinux/csv/font-list.csv" + #define LocaleName "ubl-settings-keyboard" #define model_parameter "XKBMODEL" -#define model_parameter_command "ubconfig --source global get keyboard XKBMODEL" +#define model_parameter_command "ubconfig --source global get [keyboard] XKBMODEL" #define keyboard_layout_parameter "XKBLAYOUT" -#define keyboard_layout_parameter_command "ubconfig --source global get keyboard XKBLAYOUT" +#define keyboard_layout_parameter_command "ubconfig --source global get [keyboard] XKBLAYOUT" #define options_parameter "XKBOPTIONS" -#define options_parameter_command "ubconfig --source global get keyboard XKBOPTIONS" +#define options_parameter_command "ubconfig --source global get [keyboard] XKBOPTIONS" #define num_lock_boot_parameter "NUMLOCK" -#define num_lock_boot_parameter_command "ubconfig --source global get keyboard NUMLOCK" +#define num_lock_boot_parameter_command "ubconfig --source global get [keyboard] NUMLOCK" + #define console_keymap_parameter "CONSOLE_KEYMAP" -#define console_keymap_parameter_command "ubconfig --source global get keyboard CONSOLE_KEYMAP" +#define console_keymap_parameter_command "ubconfig --source global get [keyboard] CONSOLE_KEYMAP" #define console_keymap_toggle_parameter "CONSOLE_KEYMAP_TOGGLE" -#define console_keymap_toggle_parameter_command "ubconfig --source global get keyboard CONSOLE_KEYMAP_TOGGLE" +#define console_keymap_toggle_parameter_command "ubconfig --source global get [keyboard] CONSOLE_KEYMAP_TOGGLE" #define console_font_parameter "CONSOLE_FONT" -#define console_font_parameter_command "ubconfig --source global get keyboard CONSOLE_FONT" +#define console_font_parameter_command "ubconfig --source global get [locale] CONSOLE_FONT" #define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get keyboard XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK",NULL) #define config_get_local_command "ubconfig --source system get keyboard XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK" @@ -162,9 +168,12 @@ typedef struct { GtkWidget *ComposeSwitch; GtkWidget *ScrollLockSwitch; GtkWidget *NumLockCombo; - GtkWidget *TTYLayoutCombo; - GtkWidget *TTYKeymapCombo; - GtkWidget *TTYFontCombo; + GtkWidget *TTYLayoutEntry; + GtkWidget *TTYLayoutButton; + GtkWidget *TTYSecondLayoutEntry; + GtkWidget *TTYSecondLayoutButton; + GtkWidget *TTYFontEntry; + GtkWidget *TTYFontButton; GtkListStore *LayoutsList; GtkListStore *OptionsList; } main_window; @@ -184,6 +193,7 @@ typedef struct { typedef struct { GtkWidget *Window; + GtkWidget *StatusBox; GtkWidget *MainTree; GtkWidget *CancelButton; GtkWidget *AcceptButton; @@ -254,4 +264,13 @@ void on_layout_dnd_inserted(GtkTreeModel *, GtkTreePath* path, GtkTreeIter* it void on_layout_dnd_deleted(GtkTreeModel *, GtkTreePath* path, GtkTreeIter* iter, main_window *widgets); void on_tty_changed(GtkWidget *, main_window *widgets); void on_tty_keymap_changed(GtkWidget *, main_window *widgets); -void on_tty_font_changed(GtkWidget *, main_window *widgets); \ No newline at end of file +void on_tty_font_changed(GtkWidget *, main_window *widgets); +void yon_keymaps_open(GtkWidget *,main_window *widgets); +layouts_window *yon_keymaps_window_new(); +void on_keymaps_accept(GtkWidget *, layouts_window *window); +void on_font_accept(GtkWidget *, layouts_window *window); +layouts_window *yon_font_window_new(); +void yon_font_open(GtkWidget *,main_window *widgets); +void on_keymaps_selection_changed(GtkWidget *,layouts_window *window); +void on_font_accept(GtkWidget *, layouts_window *window); +void on_font_selection_changed(GtkWidget *,layouts_window *window); \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index a5fa9f2..2b265c5 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -40,4 +40,8 @@ #define DESCRIPTION_LABEL _("Description") #define OPTIONS_LABEL _("Options:") #define KEYMAP_LABEL _("Second keyboard layout:") -#define FONT_LABEL _("Font:") \ No newline at end of file +#define FONT_LABEL _("Font:") + +#define GROUP_LABEL _("Group") +#define KEYMAP_TITLE_LABEL _("Second keyboard layout") +#define FONT_TITLE_LABEL _("Font") \ No newline at end of file diff --git a/ubl-settings-keyboard-font.glade b/ubl-settings-keyboard-font.glade new file mode 100644 index 0000000..7a336ad --- /dev/null +++ b/ubl-settings-keyboard-font.glade @@ -0,0 +1,239 @@ + + + + + + + + + + + + + + 450 + 550 + True + False + com.ublinux.ubl-settings-keyboard + + + True + False + 5 + vertical + 5 + + + True + False + vertical + 5 + + + + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + + + True + True + + + False + True + 0 + + + + + True + False + Default + + + False + True + 1 + + + + + False + True + 1 + + + + + True + True + 5 + 5 + in + + + True + True + FontList + 1 + both + + + Font + True + 0 + + + + 0 + + + + + + + Description + + + + 1 + + + + + + + + + True + True + 2 + + + + + True + False + 5 + 5 + 5 + + + True + False + Manual input: + + + False + True + 0 + + + + + True + True + + + True + True + 1 + + + + + False + True + 3 + + + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 2 + Keyboard + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 32 + com.ublinux.ubl-settings-keyboard + + + + + Cancel + True + True + True + image2 + + + 1 + + + + + Accept + True + True + True + image1 + + + end + 2 + + + + + + + + True + False + com.ublinux.libublsettingsui-gtk3.accept-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic + + diff --git a/ubl-settings-keyboard-keymaps.glade b/ubl-settings-keyboard-keymaps.glade new file mode 100644 index 0000000..b6788ac --- /dev/null +++ b/ubl-settings-keyboard-keymaps.glade @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + 450 + 550 + True + False + com.ublinux.ubl-settings-keyboard + + + True + False + 5 + vertical + 5 + + + True + False + vertical + 5 + + + + + + False + True + 0 + + + + + True + False + 5 + 5 + 5 + + + True + True + + + False + True + 0 + + + + + True + False + Default + + + False + True + 1 + + + + + False + True + 1 + + + + + True + True + 5 + 5 + in + + + True + True + KeymapList + 1 + both + + + Name + 0 + + + + 0 + + + + + + + Group + + + + 1 + + + + + + + Description + + + word + 120 + + + 2 + + + + + + + + + True + True + 2 + + + + + True + False + 5 + 5 + 5 + + + True + False + Manual input: + + + False + True + 0 + + + + + True + True + + + True + True + 1 + + + + + False + True + 3 + + + + + + + True + False + + + True + False + 5 + 5 + 5 + 5 + 2 + Keyboard + + + + + + + + True + False + 5 + 5 + 5 + 5 + 6 + 6 + 32 + com.ublinux.ubl-settings-keyboard + + + + + Cancel + True + True + True + image2 + + + 1 + + + + + Accept + True + True + True + image1 + + + end + 2 + + + + + + + + True + False + com.ublinux.libublsettingsui-gtk3.accept-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic + + diff --git a/ubl-settings-keyboard.glade b/ubl-settings-keyboard.glade index 2531f56..4c5cb4f 100644 --- a/ubl-settings-keyboard.glade +++ b/ubl-settings-keyboard.glade @@ -73,6 +73,21 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. False com.ublinux.libublsettingsui-gtk3.trash-symbolic + + True + False + com.ublinux.libublsettingsui-gtk3.edit-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.edit-symbolic + + + True + False + com.ublinux.libublsettingsui-gtk3.edit-symbolic + True False @@ -772,13 +787,37 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - + True False - 0 - - Default - + 5 + + + True + True + + + True + True + 0 + + + + + True + True + True + image9 + + + + False + True + 1 + + True @@ -812,13 +851,37 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - + True False - 0 - - Default - + 5 + + + True + True + + + True + True + 0 + + + + + True + True + True + image8 + + + + False + True + 1 + + True @@ -852,13 +915,37 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - + True False - 0 - - Default - + 5 + + + True + True + + + True + True + 0 + + + + + True + True + True + image7 + + + + False + True + 1 + + True From 8a50520e8e1b73d120a37ebf9d47d914c4dcce4c Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Tue, 11 Nov 2025 16:01:35 +0600 Subject: [PATCH 08/24] Fixes --- locale/ubl-settings-keyboard.pot | 4 ++-- locale/ubl-settings-keyboard_ru.po | 8 ++++---- source/ubl-settings-keyboard.c | 23 +++++++++++++++++++++++ source/ubl-settings-keyboard.h | 10 ++++++---- source/ubl-strings.h | 4 ++-- ubl-settings-keyboard.glade | 2 +- 6 files changed, 38 insertions(+), 13 deletions(-) diff --git a/locale/ubl-settings-keyboard.pot b/locale/ubl-settings-keyboard.pot index d58bcb3..d9599fa 100644 --- a/locale/ubl-settings-keyboard.pot +++ b/locale/ubl-settings-keyboard.pot @@ -155,7 +155,7 @@ msgid "Options:" msgstr "" #: source/ubl-strings.h:20 -msgid "Second keyboard layout:" +msgid "Additional key layout for the keyboard:" msgstr "" #: source/ubl-strings.h:20 @@ -167,7 +167,7 @@ msgid "Group" msgstr "" #: source/ubl-strings.h:20 -msgid "Second keyboard layout" +msgid "Additional key layout for the keyboard" msgstr "" #: source/ubl-strings.h:20 diff --git a/locale/ubl-settings-keyboard_ru.po b/locale/ubl-settings-keyboard_ru.po index 0284af2..9479fb9 100644 --- a/locale/ubl-settings-keyboard_ru.po +++ b/locale/ubl-settings-keyboard_ru.po @@ -157,8 +157,8 @@ msgid "Options:" msgstr "Опции:" #: source/ubl-strings.h:20 -msgid "Second keyboard layout:" -msgstr "Вторая раскладка клавиш для клавиатуры:" +msgid "Additional key layout for the keyboard:" +msgstr "Дополнительная раскладка клавиш для клавиатуры:" #: source/ubl-strings.h:20 msgid "Font:" @@ -169,8 +169,8 @@ msgid "Group" msgstr "Группа" #: source/ubl-strings.h:20 -msgid "Second keyboard layout" -msgstr "Вторая раскладка клавиш для клавиатуры" +msgid "Additional key layout for the keyboard" +msgstr "Дополнительная раскладка клавиш для клавиатуры" #: source/ubl-strings.h:20 msgid "Font" diff --git a/source/ubl-settings-keyboard.c b/source/ubl-settings-keyboard.c index 4b8b262..d3eebc8 100644 --- a/source/ubl-settings-keyboard.c +++ b/source/ubl-settings-keyboard.c @@ -93,6 +93,29 @@ gboolean yon_interface_update(main_window *widgets){ } } + { + char *tty_layout = config(console_keymap_parameter); + if (!yon_char_is_empty(tty_layout)){ + gtk_entry_set_text(GTK_ENTRY(widgets->TTYLayoutEntry),tty_layout); + } else { + gtk_entry_set_text(GTK_ENTRY(widgets->TTYLayoutEntry),""); + } + + char *tty_keymap = config(console_keymap_toggle_parameter); + if (!yon_char_is_empty(tty_keymap)){ + gtk_entry_set_text(GTK_ENTRY(widgets->TTYSecondLayoutEntry),tty_keymap); + } else { + gtk_entry_set_text(GTK_ENTRY(widgets->TTYSecondLayoutEntry),""); + } + + char *tty_font = config(console_font_parameter); + if (!yon_char_is_empty(tty_font)){ + gtk_entry_set_text(GTK_ENTRY(widgets->TTYFontEntry),tty_font); + } else { + gtk_entry_set_text(GTK_ENTRY(widgets->TTYFontEntry),""); + } + } + 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->OptionsEditButton),G_CALLBACK(on_options_open),widgets); g_signal_handlers_unblock_by_func(G_OBJECT(widgets->NumLockCombo),G_CALLBACK(on_num_lock_changed),widgets); diff --git a/source/ubl-settings-keyboard.h b/source/ubl-settings-keyboard.h index ebbee16..b6e16e3 100644 --- a/source/ubl-settings-keyboard.h +++ b/source/ubl-settings-keyboard.h @@ -44,15 +44,17 @@ #define console_keymap_parameter "CONSOLE_KEYMAP" #define console_keymap_parameter_command "ubconfig --source global get [keyboard] CONSOLE_KEYMAP" + #define console_keymap_toggle_parameter "CONSOLE_KEYMAP_TOGGLE" #define console_keymap_toggle_parameter_command "ubconfig --source global get [keyboard] CONSOLE_KEYMAP_TOGGLE" + #define console_font_parameter "CONSOLE_FONT" #define console_font_parameter_command "ubconfig --source global get [locale] CONSOLE_FONT" -#define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get keyboard XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK",NULL) -#define config_get_local_command "ubconfig --source system get keyboard XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK" -#define config_get_global_command "ubconfig --source global get keyboard XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK" -#define config_get_default_command "" +#define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," -ea get [keyboard] XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK CONSOLE_KEYMAP CONSOLE_KEYMAP_TOGGLE -- [locale] CONSOLE_FONT",NULL) +#define config_get_local_command "ubconfig --source system -ea get [keyboard] XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK CONSOLE_KEYMAP CONSOLE_KEYMAP_TOGGLE -- [locale] CONSOLE_FONT" +#define config_get_global_command "ubconfig --source global -ea get [keyboard] XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK CONSOLE_KEYMAP CONSOLE_KEYMAP_TOGGLE -- [locale] CONSOLE_FONT" +#define config_get_default_command "ubconfig --source default -ea get [keyboard] XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK CONSOLE_KEYMAP CONSOLE_KEYMAP_TOGGLE -- [locale] CONSOLE_FONT" #define config_get_global_only_parameters "" #define config_get_local_only_parameters "" diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 2b265c5..9b3f49a 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -39,9 +39,9 @@ #define NAME_LABEL _("Name") #define DESCRIPTION_LABEL _("Description") #define OPTIONS_LABEL _("Options:") -#define KEYMAP_LABEL _("Second keyboard layout:") +#define KEYMAP_LABEL _("Additional key layout for the keyboard:") #define FONT_LABEL _("Font:") #define GROUP_LABEL _("Group") -#define KEYMAP_TITLE_LABEL _("Second keyboard layout") +#define KEYMAP_TITLE_LABEL _("Additional key layout for the keyboard") #define FONT_TITLE_LABEL _("Font") \ No newline at end of file diff --git a/ubl-settings-keyboard.glade b/ubl-settings-keyboard.glade index 4c5cb4f..6cc890b 100644 --- a/ubl-settings-keyboard.glade +++ b/ubl-settings-keyboard.glade @@ -841,7 +841,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. True False - Second keyboard layout: + Additional key layout for the keyboard: 0 From dae38fab19bc6aed3430829e84519e7ea36b65b2 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 12 Nov 2025 15:33:17 +0600 Subject: [PATCH 09/24] Fixed default layouts setting --- source/ubl-settings-keyboard-save.c | 18 ++++++++++++++---- source/ubl-settings-keyboard.h | 3 ++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/source/ubl-settings-keyboard-save.c b/source/ubl-settings-keyboard-save.c index 5112e4c..e339eda 100644 --- a/source/ubl-settings-keyboard-save.c +++ b/source/ubl-settings-keyboard-save.c @@ -21,24 +21,34 @@ void on_save_done(main_window *, config_str output, int size){ } -void on_config_global_local_save(GtkWidget *, main_window *){ +void yon_interface_save(main_window *widgets){ + if (gtk_switch_get_active(GTK_SWITCH(widgets->DefaultLayoutsSwitch))){ + yon_config_remove_by_key(keyboard_layout_parameter); + } +} + +void on_config_global_local_save(GtkWidget *, main_window *widgets){ + yon_interface_save(widgets); main_config.save_config=YON_CONFIG_BOTH; yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL); } -void on_config_local_save(GtkWidget *, main_window *){ +void on_config_local_save(GtkWidget *, main_window *widgets){ + yon_interface_save(widgets); main_config.save_config=YON_CONFIG_LOCAL; yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_local_command,NULL); } -void on_config_global_save(GtkWidget *, main_window *){ +void on_config_global_save(GtkWidget *, main_window *widgets){ + yon_interface_save(widgets); main_config.save_config=YON_CONFIG_GLOBAL; yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL); } -void on_config_custom_save(GtkWidget *, main_window *){ +void on_config_custom_save(GtkWidget *, main_window *widgets){ + yon_interface_save(widgets); main_config.save_config=YON_CONFIG_LOCAL; template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,yon_config_get_custom_command("system"),NULL); if (window){}; diff --git a/source/ubl-settings-keyboard.h b/source/ubl-settings-keyboard.h index b6e16e3..a1778c6 100644 --- a/source/ubl-settings-keyboard.h +++ b/source/ubl-settings-keyboard.h @@ -275,4 +275,5 @@ layouts_window *yon_font_window_new(); void yon_font_open(GtkWidget *,main_window *widgets); void on_keymaps_selection_changed(GtkWidget *,layouts_window *window); void on_font_accept(GtkWidget *, layouts_window *window); -void on_font_selection_changed(GtkWidget *,layouts_window *window); \ No newline at end of file +void on_font_selection_changed(GtkWidget *,layouts_window *window); +void yon_interface_save(main_window *widgets); \ No newline at end of file From 577c25569031233ea5bc7d3659f890da128ab607 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Wed, 12 Nov 2025 16:16:57 +0600 Subject: [PATCH 10/24] Saving fix --- source/ubl-settings-keyboard.c | 38 ++++++++++++++++++++++++++-------- source/ubl-settings-keyboard.h | 3 ++- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/source/ubl-settings-keyboard.c b/source/ubl-settings-keyboard.c index d3eebc8..a261281 100644 --- a/source/ubl-settings-keyboard.c +++ b/source/ubl-settings-keyboard.c @@ -267,6 +267,30 @@ void on_scroll_lock_switch(GtkWidget *,int status,main_window *widgets){ // } // } +void on_layout_default_toggled(GtkWidget *, int status, main_window *widgets){ + gtk_widget_set_sensitive(widgets->LayoutTree,!status); + gtk_widget_set_sensitive(widgets->LayoutAddButton,!status); + gtk_widget_set_sensitive(widgets->LayoutRemoveButton,!status); + gtk_widget_set_sensitive(widgets->LayoutMoveUpButton,!status); + gtk_widget_set_sensitive(widgets->LayoutMoveDownButton,!status); + 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); + char *temp = yon_char_append_element(locales?locales:"",target,","); + if (!yon_char_is_empty(locales)) free(locales); + locales = temp; + } + if (!yon_char_is_empty(locales)){ + yon_config_register(keyboard_layout_parameter,keyboard_layout_parameter_command,locales); + } + } +} + void yon_main_window_complete(main_window *widgets){ widgets = yon_remalloc(widgets,sizeof(main_window)); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); @@ -318,11 +342,7 @@ void yon_main_window_complete(main_window *widgets){ // g_signal_connect(G_OBJECT(widgets->LayoutsList),"row-inserted",G_CALLBACK(on_layout_dnd_inserted),widgets); // g_signal_connect(G_OBJECT(widgets->LayoutsList),"row-deleted",G_CALLBACK(on_layout_dnd_deleted),widgets); - g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutTree); - g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutAddButton); - g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutRemoveButton); - g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutMoveUpButton); - g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),widgets->LayoutMoveDownButton); + g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(on_layout_default_toggled),widgets); g_signal_connect(G_OBJECT(widgets->LayoutMoveUpButton),"clicked",G_CALLBACK(on_layout_move_up),widgets); g_signal_connect(G_OBJECT(widgets->LayoutMoveDownButton),"clicked",G_CALLBACK(on_layout_move_down),widgets); @@ -331,10 +351,10 @@ void yon_main_window_complete(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets); - g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_global_local_save),NULL); - g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),NULL); - g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),NULL); - g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),NULL); + g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_global_local_save),widgets); + g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),widgets); + g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),widgets); + g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),widgets); } int size; diff --git a/source/ubl-settings-keyboard.h b/source/ubl-settings-keyboard.h index a1778c6..b86beac 100644 --- a/source/ubl-settings-keyboard.h +++ b/source/ubl-settings-keyboard.h @@ -276,4 +276,5 @@ void yon_font_open(GtkWidget *,main_window *widgets); void on_keymaps_selection_changed(GtkWidget *,layouts_window *window); void on_font_accept(GtkWidget *, layouts_window *window); void on_font_selection_changed(GtkWidget *,layouts_window *window); -void yon_interface_save(main_window *widgets); \ No newline at end of file +void yon_interface_save(main_window *widgets); +void on_layout_default_toggled(GtkWidget *, int status, main_window *widgets); \ No newline at end of file From 5515f6cca1a202a5e8e5754f8443d7118c7c7793 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 13 Nov 2025 14:15:13 +0600 Subject: [PATCH 11/24] Fixed default value for layout switching --- ubl-settings-keyboard.glade | 79 ++----------------------------------- 1 file changed, 4 insertions(+), 75 deletions(-) diff --git a/ubl-settings-keyboard.glade b/ubl-settings-keyboard.glade index 6cc890b..9b27cd2 100644 --- a/ubl-settings-keyboard.glade +++ b/ubl-settings-keyboard.glade @@ -1,5 +1,5 @@ -