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 873b37b..081cd69 100644 --- a/source/ubl-settings-keyboard.c +++ b/source/ubl-settings-keyboard.c @@ -2,157 +2,32 @@ 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->ModelCombo),G_CALLBACK(on_model_changed),widgets); - g_signal_handlers_block_by_func(G_OBJECT(widgets->MoveDownButton),G_CALLBACK(on_move_down),widgets); - g_signal_handlers_block_by_func(G_OBJECT(widgets->MoveUpButton),G_CALLBACK(on_move_up),widgets); - g_signal_handlers_block_by_func(G_OBJECT(widgets->OptionsButton),G_CALLBACK(on_options_open),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); - gtk_list_store_clear(widgets->layoutsList); - gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ModelCombo),0); + gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo),0); gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),0); - GtkTreeIter iter; - gtk_entry_set_text(GTK_ENTRY(widgets->OptionsEntry),DEFAULT_LABEL); + // gtk_entry_set_text(GTK_ENTRY(widgets->SystemKeyboardOptionsCombo),DEFAULT_LABEL); { - char *name = yon_config_get_by_key(model_parameter); - char *id; - if (name) { - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->modelsList),&iter); - for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->modelsList),&iter)){ - gtk_tree_model_get(GTK_TREE_MODEL(widgets->modelsList),&iter,1,&id,-1); - if (!strcmp(name,id)){ - gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widgets->ModelCombo),&iter); - break; - } - } - } else gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ModelCombo),0); + char *kbmodel = yon_config_get_by_key(model_parameter); + if (kbmodel) { + gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo),kbmodel); + } } { - char *name = yon_config_get_by_key(options_parameter); - if (name) { - char *id, *rname; - gtk_entry_set_text(GTK_ENTRY(widgets->OptionsEntry),name); - int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.options_list),&iter); - for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.options_list),&iter)){ - gtk_tree_model_get(GTK_TREE_MODEL(main_config.options_list),&iter,0,&id,1,&rname,-1); - if (!strcmp(id,name)){ - gtk_list_store_set(main_config.options_list,&iter,2,1,-1); - gtk_entry_set_text(GTK_ENTRY(widgets->OptionsEntry),rname); - break; - } - } + 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); @@ -165,23 +40,21 @@ gboolean yon_interface_update(main_window *widgets){ config_str layouts = yon_char_parse(name,&size,","); GtkTreeIter iter, itar; char *rid,*rname; - gtk_list_store_clear(widgets->layoutsList); + 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); + gtk_list_store_append(widgets->LayoutsList,&itar); + gtk_list_store_set(widgets->LayoutsList,&itar,0,rname,1,rid,2,1,-1); } } } } } - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->ModelCombo),G_CALLBACK(on_model_changed),widgets); - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->MoveDownButton),G_CALLBACK(on_move_down),widgets); - g_signal_handlers_unblock_by_func(G_OBJECT(widgets->MoveUpButton),G_CALLBACK(on_move_up),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->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); return G_SOURCE_REMOVE; } @@ -204,203 +77,40 @@ void on_model_changed(GtkComboBoxText *self, main_window *widgets){ yon_config_remove_by_key(model_parameter); break; default: - char *id; - GtkTreeIter iter; - gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widgets->ModelCombo),&iter); - gtk_tree_model_get(GTK_TREE_MODEL(widgets->modelsList),&iter,1,&id,-1); + 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 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 yon_layouts_save(main_window *widgets){ - GtkTreeIter iter; - GtkTreeIter child_iter; +void yon_config_init(){ 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(widgets->layoutsList),&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){ + 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; - 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); - GList *list = yon_get_all_selected(GTK_TREE_VIEW(window->MainTree),2); - char *name; - char *id; - GtkTreeIter iter, lwiter; - GtkTreePath *pth; - for (guint i=0;ilayoutsList,&iter); - gtk_tree_model_get(model,&lwiter,0,&name,1,&id,-1); - gtk_list_store_set(widgets->layoutsList,&iter,1,name,0,id,2,1,-1); + 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;ilist),&iter,path); - int chosen; - gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,2,&chosen,-1); - gtk_list_store_set(window->list,&iter,2,!chosen,-1); -} - -void on_layouts_add(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->ChosenCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ChosenCell")); - window->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree"); - window->list = main_config.layouts_list; - gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree), GTK_TREE_MODEL(window->list)); - 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"); - - 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_list_store_set(window->list,&iter,2,0,-1); - } + for (int i=0;ilayoutsList); - GtkTreeIter iter; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LayoutsTree)),&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(widgets->layoutsList,&iter_converted); - yon_config_remove_element(keyboard_layout_parameter,target,","); - } -} -void on_move_up(GtkWidget *, main_window *widgets){ - GtkTreeModel *model = GTK_TREE_MODEL(widgets->layoutsFilter); - GtkTreeIter iter,*previter; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LayoutsTree)),&model,&iter)){ - previter = gtk_tree_iter_copy(&iter); - if (gtk_tree_model_iter_previous(model,previter)) - { - GtkTreeIter iter_converted, previter_converted; - gtk_tree_model_filter_convert_iter_to_child_iter(widgets->layoutsFilter,&iter_converted,&iter); - gtk_tree_model_filter_convert_iter_to_child_iter(widgets->layoutsFilter,&previter_converted,previter); - gtk_list_store_move_before(widgets->layoutsList,&iter_converted,&previter_converted); - yon_layouts_save(widgets); - } - } -} - -void on_move_down(GtkWidget *, main_window *widgets){ - GtkTreeModel *model = GTK_TREE_MODEL(widgets->layoutsFilter); - GtkTreeIter iter,*nextiter; - if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LayoutsTree)),&model,&iter)){ - nextiter = gtk_tree_iter_copy(&iter); - if (gtk_tree_model_iter_next(model,nextiter)){ - GtkTreeIter iter_converted, nextiter_converted; - gtk_tree_model_filter_convert_iter_to_child_iter(widgets->layoutsFilter,&iter_converted,&iter); - gtk_tree_model_filter_convert_iter_to_child_iter(widgets->layoutsFilter,&nextiter_converted,nextiter); - gtk_list_store_move_after(widgets->layoutsList,&iter_converted,&nextiter_converted); - yon_layouts_save(widgets); - } + main_config.options_list = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN); + config_str rtn = yon_config_load(get_options_command,&size); + for (int i=0; iKeyboardModelCombo = yon_gtk_builder_get_widget(builder,"KeyboardModelCombo"); + 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->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->ModelCombo = yon_gtk_builder_get_widget(builder,"ModelCombo"); - widgets->keyboard = yon_gtk_builder_get_widget(builder,"keyboard"); - widgets->keytable = yon_gtk_builder_get_widget(builder,"keytable"); - widgets->grp_toggle = yon_gtk_builder_get_widget(builder,"grp_toggle"); - widgets->OptionsEntry = yon_gtk_builder_get_widget(builder,"OptionsEntry"); - widgets->OptionsButton = yon_gtk_builder_get_widget(builder,"OptionsButton"); - widgets->LayoutsTree = yon_gtk_builder_get_widget(builder,"LayoutsTree"); - widgets->MoveUpButton = yon_gtk_builder_get_widget(builder,"MoveUpButton"); - widgets->MoveDownButton = yon_gtk_builder_get_widget(builder,"MoveDownButton"); - widgets->AddButton = yon_gtk_builder_get_widget(builder,"AddButton"); - widgets->RemoveButton = yon_gtk_builder_get_widget(builder,"RemoveButton"); - widgets->layoutsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1")); - widgets->layoutsFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"LayoutsFilter")); - widgets->modelsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore2")); - - int size; - GtkTreeIter iter; - config_str models = yon_config_load(get_models_command,&size); - for (int i=0;imodelsList,&iter); - gtk_list_store_set(widgets->modelsList,&iter,1,models[i],0,_(models[i+1]),-1); - } - main_config.layouts_list = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN); - int laysize; - config_str rtn = yon_resource_open_file(layouts_path,&size); - for (int i=0; iTTYLayoutCombo = yon_gtk_builder_get_widget(builder,"TTYLayoutCombo"); + widgets->LayoutsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LayoutsList")); /* Widget registration for config monitoring | Регистрация виджетов для мониторинга конфига */ // yon_window_config_add_custom_parameter(widgets->HeadInfoLabel,"head-text","label",YON_TYPE_STRING); /* Signal connection | Присоединение сигналов */ - g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_layouts_add),widgets); - g_signal_connect(G_OBJECT(widgets->RemoveButton),"clicked",G_CALLBACK(on_layouts_remove),widgets); - g_signal_connect(G_OBJECT(widgets->ModelCombo),"changed",G_CALLBACK(on_model_changed),widgets); - g_signal_connect(G_OBJECT(widgets->MoveDownButton),"clicked",G_CALLBACK(on_move_down),widgets); - g_signal_connect(G_OBJECT(widgets->MoveUpButton),"clicked",G_CALLBACK(on_move_up),widgets); - g_signal_connect(G_OBJECT(widgets->OptionsButton),"clicked",G_CALLBACK(on_options_open),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->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); @@ -475,9 +156,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))); on_config_local_load(NULL,widgets); } diff --git a/source/ubl-settings-keyboard.h b/source/ubl-settings-keyboard.h index e6a5eaf..6cd46db 100644 --- a/source/ubl-settings-keyboard.h +++ b/source/ubl-settings-keyboard.h @@ -47,9 +47,12 @@ #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 "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; __attribute__((unused)) static \ @@ -61,28 +64,36 @@ typedef struct { config_str launch_arguments; int launch_size; char *options; - GtkListStore *layouts_list; + GtkTreeStore *layouts_store; GtkListStore *options_list; + GtkListStore *models_list; + 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 *DefaultLayoutsSwitch; + GtkWidget *LayoutTree; + GtkWidget *LayoutAddButton; + GtkWidget *LayoutRemoveButton; + GtkWidget *LayoutChangingCombo; + GtkWidget *OptionsTree; + GtkWidget *OptionsEditButton; + GtkWidget *OptionsRemoveButton; + GtkWidget *ComposeSwitch; + GtkWidget *ScrollLockSwitch; + GtkWidget *ManualEntry; GtkWidget *NumLockCombo; - GtkWidget *ModelCombo; - GtkWidget *keyboard; - GtkWidget *keytable; - GtkWidget *grp_toggle; - GtkWidget *OptionsEntry; - GtkWidget *OptionsButton; - GtkWidget *LayoutsTree; - GtkWidget *MoveUpButton; - GtkWidget *MoveDownButton; - GtkWidget *AddButton; - GtkWidget *RemoveButton; + GtkWidget *TTYLayoutCombo; GtkTreeModelFilter *layoutsFilter; - GtkListStore *layoutsList; - GtkListStore *modelsList; + GtkListStore *LayoutsList; } main_window; @@ -104,7 +115,7 @@ typedef struct { GtkWidget *CancelButton; GtkWidget *AcceptButton; GtkCellRenderer *ChosenCell; - GtkListStore *list; + GtkTreeStore *list; } layouts_window; typedef struct { @@ -133,13 +144,19 @@ 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_add(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 on_layouts_remove(GtkWidget *, 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); \ No newline at end of file +GList *yon_get_all_selected(GtkTreeView *tree, int column); +void on_system_layouts_add(GtkWidget *, main_window *widgets); +void yon_layouts_add(GtkTreeView *tree, GtkListStore *cur_list, main_window *widgets); +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(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); diff --git a/ubl-settings-keyboard-layouts.glade b/ubl-settings-keyboard-layouts.glade index f36fbe5..71f15cf 100644 --- a/ubl-settings-keyboard-layouts.glade +++ b/ubl-settings-keyboard-layouts.glade @@ -1,5 +1,5 @@ - + @@ -12,16 +12,6 @@ False process-stop-symbolic - - - - - - - - - - 450 550 @@ -85,11 +75,12 @@ True True - liststore1 False 1 - + + none + @@ -97,7 +88,7 @@ - 2 + 3 @@ -109,7 +100,7 @@ - 1 + 2 diff --git a/ubl-settings-keyboard-options.glade b/ubl-settings-keyboard-options.glade index d9d8518..0f2d3a5 100644 --- a/ubl-settings-keyboard-options.glade +++ b/ubl-settings-keyboard-options.glade @@ -3,6 +3,16 @@ + + True + False + emblem-ok-symbolic + + + True + False + process-stop-symbolic + 450 550 @@ -132,14 +142,4 @@ - - True - False - emblem-ok-symbolic - - - True - False - process-stop-symbolic - diff --git a/ubl-settings-keyboard.glade b/ubl-settings-keyboard.glade index 3445b85..93f054f 100644 --- a/ubl-settings-keyboard.glade +++ b/ubl-settings-keyboard.glade @@ -25,563 +25,873 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - True - False - user-trash-symbolic - - - True - False - value-increase-symbolic - - - True - False - document-edit-symbolic - - + - + - + - + - - liststore1 - - + - + - + + + - - - Default - - - - - True - False - False - - - True - False - Load global configuration - - - - - - True - False - Load local configuration - - - + + + + + + + + + - + True False - False - False + com.ublinux.libublsettingsui-gtk3.edit-symbolic - + True False - False - - - True - False - Save configuration - - - - - - True - False - Save to global configuration - - - - - - True - False - Save to local configuration - - - + com.ublinux.libublsettingsui-gtk3.increase-symbolic - + True False + com.ublinux.libublsettingsui-gtk3.trash-symbolic - + True False + com.ublinux.libublsettingsui-gtk3.trash-symbolic True False - 5 - 5 - 5 - 5 - 5 - 5 - True - True vertical - 5 - - - True - False - 0.019999999552965164 - in - - - True - False - 5 - 5 - 5 - - - True - False - 5 - - - True - False - Num Lock on boot: - 0 - - - False - True - 0 - - - - - True - False - 0 - - Default - On - Off - - - - True - True - 1 - - - - - - - - - True - False - Console - - - - - False - True - 0 - - - + True - False - 0.019999999552965164 + True + never in - + True False - 5 - 5 - 5 True False + 5 + 5 + 5 + 5 + 5 + 5 + True + True vertical - 6 - - - True - False - 5 - - - True - False - Keyboard model: - 0 - - - False - True - 0 - - - - - True - False - liststore2 - 0 - 1 - - - - 0 - - - - - True - True - 1 - - - - - False - True - 0 - - + 5 - + True False - 5 + 0.019999999552965164 + in - + True False - vertical - 5 + 5 + 5 + 5 - + True - True - in + False + vertical + 6 + + + True + False + 5 + + + True + False + Keyboard model: + 1 + + + False + True + 0 + + + + + True + False + 0 + + + True + True + 1 + + + + + False + True + 0 + + - + True - True - LayoutsFilter - False + False + 5 - - column + + True + False + start + Layouts: + 1 + + + False + True + 0 + + + + + True + False + vertical + 5 - - - 0 - + + True + False + 10 + + + True + True + True + + + False + True + 0 + + + + + True + False + Default layout + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + 5 + + + True + True + in + 100 + 150 + + + True + False + True + LayoutsList + True + both + + + + + + Keyboard layout + + + + 2 + + + + + + + Designation + 0 + + + + 0 + + + + + + + Variant + + + + 1 + + + + + + + + + True + True + 0 + + + + + True + False + vertical + 5 + + + True + False + True + True + image2 + + + + False + True + 0 + + + + + True + False + True + True + image6 + + + + False + True + 1 + + + + + False + True + 1 + + + + + True + True + 1 + + + True + True + 1 + + + True + True + 1 + - - - True - True - 0 - - - - - True - True - 0 - - - - - True - False - vertical - 5 - - - True - True - True - Move layout up - + True - True - False - True - menu4 - up + False + 5 + + + True + False + Changing the layout: + 1 + + + False + True + 0 + + - + + True + False + + + True + True + 1 + - + + False + True + 2 + + + + + True + False + 5 + + + True + False + vertical + 5 + + + True + False + Additional options: + 1 + + + False + True + 0 + + + + + False + True + 0 + + + + + True + True + in + 100 + 150 + + + True + True + AdditionalOptionsList + False + both + + + + + + column + + + + 1 + + + + + + + column + + + + 0 + + + + + + + + + True + True + 1 + + + + + True + False + vertical + 5 + + + True + True + True + image1 + + + + False + True + 0 + + + + + True + True + True + image3 + + + + False + True + 1 + + + + + False + True + 2 + + + + + True + True + 3 + - - - - False - True - 0 - - - - - True - True - True - Move layout down - + True - True - False - True - menu5 + False + 5 - + + True + False + start + 1 + + + False + True + 0 + + + + + True + False + vertical + 5 + + + True + False + 5 + + + True + True + + + False + True + 0 + + + + + True + False + Set Compose (Multi_Key) to the right Win key + + + False + True + 1 + + + + + False + True + 0 + + + + + True + False + 5 + + + True + True + + + False + True + 0 + + + + + True + False + Scroll Lock indication when switching layouts + + + False + True + 1 + + + + + False + True + 1 + + + + + False + True + 1 + - + + False + True + 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 + False + 5 + + + True + False + Numlock: + 1 + + + False + True + 0 + + + + + True + False + 0 + + Default + On + Off + + + + True + True + 1 + + + + + False + True + 6 + - - - - False - True - 1 - - - - - True - True - True - Добавить раскладку - image3 - - - - False - True - 2 - - - - - True - True - True - Удалить раскладку - image1 - - - False - True - 4 - - - False - True - 1 - - - - True - True - end - 2 - - - - - True - False - Keyboard layouts: - 0 - - - False - True - end - 4 - - - - - False - 5 - - + + True False - KEYBOARD: - 0 - - - False - True - 0 - - - - - True - True + System - - True - True - 1 - - False + True True - 4 + 0 - + True False - 5 + 0.019999999552965164 + in - + True False - Keyboard options: - 0 + 5 + 5 + 5 + + + True + False + 5 + + + True + False + Secondary layout: + 1 + + + False + True + 0 + + + + + True + False + + + True + True + 1 + + + + - - False - True - 0 - - - + + True False + TTY layout - - True - True - 1 - - - - - True - True - True - Pick an option - image4 - - - - False - True - 2 - False True - 7 + 3 - - - True - False - Keyboard - - True True - 3 + 1 + + - + + + + + + + + + + + + + + + True + False + False + + + True + False + Load global configuration + + + + + + True + False + Load local configuration + + + + + + True + False + False + False + + + True + False + False + + + True + False + Save configuration + + + + + + True + False + Save to global configuration + + + + + + True + False + Save to local configuration + + + + + + True + False + + + True + False +