WIP Keyboard remake

pull/17/head
parent fc4217c4a7
commit 4b18a3ef3b
No known key found for this signature in database
GPG Key ID: FF1D842BF4DDE92B

@ -102,13 +102,16 @@ void yon_layouts_remove(GtkTreeView *tree, GtkListStore *cur_list, main_window *
GtkTreeModel *model = GTK_TREE_MODEL(cur_list); GtkTreeModel *model = GTK_TREE_MODEL(cur_list);
GtkTreeIter iter; GtkTreeIter iter;
if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(tree),&model,&iter)){ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(tree),&model,&iter)){
GtkTreeIter iter_converted; char *layout, *variant;
char *target; gtk_tree_model_get(model,&iter,0,&layout,1,&variant,-1);
gtk_tree_model_get(model,&iter,1,&target,-1); if (!yon_char_is_empty(variant)){
gtk_tree_model_filter_convert_iter_to_child_iter(widgets->layoutsFilter,&iter_converted,&iter); char *temp = yon_char_unite(layout,"_",variant,NULL);
gtk_list_store_remove(cur_list,&iter_converted); free(layout);
yon_config_remove_element(keyboard_layout_parameter,target,","); layout = temp;
} }
yon_config_remove_element(keyboard_layout_parameter,layout,",");
}
yon_interface_update(widgets);
} }
void on_system_layouts_remove(GtkWidget *, main_window *widgets){ void on_system_layouts_remove(GtkWidget *, main_window *widgets){

@ -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 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);
void on_options_accept(GtkWidget *self, dictionary *dict){ char *command_full = yon_char_parsed_to_string(option_commands,size,"; ");
main_window *widgets = yon_dictionary_get_data(dict->first,main_window*);
layouts_window *window = yon_dictionary_get_data(dict->first->next,layouts_window*); int options_size;
GtkTreeModel *model = GTK_TREE_MODEL(window->list); config_str options = yon_config_load(command_full,&options_size);
GtkTreeIter iter; 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);
int filter_size;
config_str filter = NULL;
for (int i=0;i<options_size;i++){
yon_char_remove_last_symbol(options[i],'\n');
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],-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;
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_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,&parameter_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,&parameter_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); GtkBuilder *builder = gtk_builder_new_from_resource(glade_options_path);
layouts_window *window = malloc(sizeof(layouts_window)); layouts_window *window = malloc(sizeof(layouts_window));
window->Window = yon_gtk_builder_get_widget(builder,"Window"); window->Window = yon_gtk_builder_get_widget(builder,"Window");
window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton"); window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton"); window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
window->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree"); window->MainTree = yon_gtk_builder_get_widget(builder,"OptionsTree");
// window->list = main_config.options_list; window->OptionsFilterCombo = yon_gtk_builder_get_widget(builder,"OptionsFilterCombo");
gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree),GTK_TREE_MODEL(window->list)); window->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"OptionsList"));
dictionary *dict = NULL; window->OptionsFilter = GTK_TREE_MODEL(gtk_builder_get_object(builder,"OptionsFilter"));
gtk_tree_view_remove_column(GTK_TREE_VIEW(window->MainTree),gtk_tree_view_get_column(GTK_TREE_VIEW(window->MainTree),0)); window->ChosenCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ChosenCell"));
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->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->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);
} }

@ -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->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->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->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->KeyboardModelCombo),0);
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),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); 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;i<size;i++){
char *cur_string = (char*)g_hash_table_lookup(main_config.options,parsed[i]);
if (yon_char_is_empty(cur_string)) continue;
int option_parsed_size;
config_str option_parsed = yon_char_parse(cur_string,&option_parsed_size,"|");
gtk_list_store_append(widgets->OptionsList,&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); char *name = yon_config_get_by_key(num_lock_boot_parameter);
if (name) { if (name) {
if (!strcmp(name,"yes")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),1); 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 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;i<size;i++){
for_iter(main_config.layouts_list,&iter){
gtk_tree_model_get(GTK_TREE_MODEL(main_config.layouts_list),&iter,0,&rid,1,&rname,-1);
if (!strcmp(layouts[i],rid)){
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->KeyboardModelCombo),G_CALLBACK(on_model_changed),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->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->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; return G_SOURCE_REMOVE;
} }
@ -85,10 +93,10 @@ void on_model_changed(GtkComboBoxText *self, main_window *widgets){
} }
void yon_config_init(){ void yon_config_init(){
int size; 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); main_config.models_list = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN);
GtkTreeIter iter; 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.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); main_config.layouts_list = yon_config_load(layouts_command,&main_config.layouts_size);
for (int i=0;i<main_config.variants_size;i++){ for (int i=0;i<main_config.variants_size;i++){
@ -98,6 +106,44 @@ void yon_config_init(){
yon_char_remove_last_symbol(main_config.layouts_list[i],'\n'); yon_char_remove_last_symbol(main_config.layouts_list[i],'\n');
} }
{
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,"; ");
main_config.options = g_hash_table_new(g_str_hash,g_str_equal);
int options_size;
config_str options = yon_config_load(command_full,&options_size);
for(int i=0;i<options_size;i++){
int parsed_size;
config_str parsed = yon_char_parse(options[i],&parsed_size,"|");
g_hash_table_insert(main_config.options,yon_char_new(parsed[0]),yon_char_new(options[i]));
yon_char_parsed_free(parsed,parsed_size);
}
free(command_full);
yon_char_parsed_free(options,options_size);
yon_char_parsed_free(option_commands,size);
}
main_config.options_list = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN); 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); config_str rtn = yon_config_load(get_options_command,&size);
@ -111,6 +157,30 @@ void yon_config_init(){
yon_char_parsed_free(rtn,size); yon_char_parsed_free(rtn,size);
} }
void on_compose_switch(GtkWidget *,int status,main_window *widgets){
switch(status){
case 0:{
yon_config_remove_element(options_parameter,"compose:rwin",",");
} break;
case 1:{
yon_config_append_element(options_parameter,"compose:rwin",",");
} break;
}
yon_interface_update(widgets);
}
void on_scroll_lock_switch(GtkWidget *,int status,main_window *widgets){
switch(status){
case 0:{
yon_config_remove_element(options_parameter,"grp_led:scroll",",");
} break;
case 1:{
yon_config_append_element(options_parameter,"grp_led:scroll",",");
} break;
}
yon_interface_update(widgets);
}
void yon_main_window_complete(main_window *widgets){ void yon_main_window_complete(main_window *widgets){
widgets = yon_remalloc(widgets,sizeof(main_window)); widgets = yon_remalloc(widgets,sizeof(main_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
@ -130,9 +200,10 @@ void yon_main_window_complete(main_window *widgets){
widgets->ComposeSwitch = yon_gtk_builder_get_widget(builder,"ComposeSwitch"); widgets->ComposeSwitch = yon_gtk_builder_get_widget(builder,"ComposeSwitch");
widgets->ScrollLockSwitch = yon_gtk_builder_get_widget(builder,"ScrollLockSwitch"); widgets->ScrollLockSwitch = yon_gtk_builder_get_widget(builder,"ScrollLockSwitch");
widgets->ManualEntry = yon_gtk_builder_get_widget(builder,"ManualEntry"); 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->TTYLayoutCombo = yon_gtk_builder_get_widget(builder,"TTYLayoutCombo");
widgets->LayoutsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LayoutsList")); 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 | Регистрация виджетов для мониторинга конфига */ /* Widget registration for config monitoring | Регистрация виджетов для мониторинга конфига */
// yon_window_config_add_custom_parameter(widgets->HeadInfoLabel,"head-text","label",YON_TYPE_STRING); // 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->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->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->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->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->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->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->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])); gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->KeyboardModelCombo),parsed[0],_(parsed[1]));
yon_char_parsed_free(parsed,parsed_size); yon_char_parsed_free(parsed,parsed_size);
} }
{
int size;
config_str options = yon_config_load(grp_options_command,&size);
for (int i=0;i<size;i++){
yon_char_remove_last_symbol(options[i],'\n');
int parsed_size;
config_str parsed = yon_char_parse(options[i],&parsed_size,"|");
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(widgets->LayoutChangingCombo),parsed[0],_(parsed[1]));
yon_char_parsed_free(parsed,parsed_size);
}
yon_char_parsed_free(options,size);
}
yon_char_parsed_free(models,size); yon_char_parsed_free(models,size);
yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_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[]){ int main(int argc, char *argv[]){
setlocale(LC_ALL, ""); setlocale(LC_ALL, "");
textdomain (LocaleName); textdomain (LocaleName);
yon_config_init();
yon_ubl_connect_config((_template_config*)&main_config); yon_ubl_connect_config((_template_config*)&main_config);
yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK); yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK);
config_str unfound = NULL; config_str unfound = NULL;

@ -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_command "sed -En '/^! layout$/,/^ *$/!d;s/[[:blank:]]+([^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
#define layouts_variant_command "sed -En '/^! variant$/,/^ *$/!d;s/[[:blank:]]+([^ ]+)[[:blank:]]+([^ :]+):[[:blank:]]+(.*)/\\2|\\1|\\3/p' /usr/share/X11/xkb/rules/evdev.lst" #define 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; typedef char* string;
__attribute__((unused)) static \ __attribute__((unused)) static \
@ -63,7 +123,7 @@ typedef struct {
int save_config; int save_config;
config_str launch_arguments; config_str launch_arguments;
int launch_size; int launch_size;
char *options; GHashTable *options;
GtkTreeStore *layouts_store; GtkTreeStore *layouts_store;
GtkListStore *options_list; GtkListStore *options_list;
GtkListStore *models_list; GtkListStore *models_list;
@ -92,8 +152,8 @@ typedef struct {
GtkWidget *ManualEntry; GtkWidget *ManualEntry;
GtkWidget *NumLockCombo; GtkWidget *NumLockCombo;
GtkWidget *TTYLayoutCombo; GtkWidget *TTYLayoutCombo;
GtkTreeModelFilter *layoutsFilter;
GtkListStore *LayoutsList; GtkListStore *LayoutsList;
GtkListStore *OptionsList;
} main_window; } main_window;
@ -114,8 +174,11 @@ typedef struct {
GtkWidget *MainTree; GtkWidget *MainTree;
GtkWidget *CancelButton; GtkWidget *CancelButton;
GtkWidget *AcceptButton; GtkWidget *AcceptButton;
GtkWidget *OptionsFilterCombo;
GtkCellRenderer *ChosenCell; GtkCellRenderer *ChosenCell;
GtkTreeStore *list; GtkTreeStore *list;
GtkListStore *OptionsList;
GtkTreeModel *OptionsFilter;
} layouts_window; } layouts_window;
typedef struct { 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_move_up(GtkWidget *self, main_window *widgets);
void on_layouts_accept(GtkWidget *self, layouts_window *window); void on_layouts_accept(GtkWidget *self, layouts_window *window);
void on_options_open(GtkWidget *self, main_window *widgets); 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_model_changed(GtkComboBoxText *self, main_window *widgets);
void on_num_lock_changed(GtkComboBox *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); 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); config_str yon_layout_get_children(char *layout_id, int *size);
layouts_window *yon_layouts_window_new(); layouts_window *yon_layouts_window_new();
void yon_layout_load(char *layout,main_window *widgets); 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);

@ -3,102 +3,137 @@
<interface domain="ubl-settings-keyboard"> <interface domain="ubl-settings-keyboard">
<requires lib="gtk+" version="3.24"/> <requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-keyboard.css --> <!-- interface-css-provider-path ubl-settings-keyboard.css -->
<object class="GtkListStore" id="OptionsList">
<columns>
<!-- column-name Id -->
<column type="gchararray"/>
<!-- column-name Name -->
<column type="gchararray"/>
<!-- column-name Chosen -->
<column type="gboolean"/>
</columns>
</object>
<object class="GtkTreeModelFilter" id="OptionsFilter">
<property name="child-model">OptionsList</property>
</object>
<object class="GtkImage" id="image1"> <object class="GtkImage" id="image1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="icon-name">emblem-ok-symbolic</property> <property name="icon-name">com.ublinux.libublsettingsui-gtk3.accept-symbolic</property>
</object> </object>
<object class="GtkImage" id="image2"> <object class="GtkImage" id="image2">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="icon-name">process-stop-symbolic</property> <property name="icon-name">com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic</property>
</object> </object>
<object class="GtkDialog" id="Window"> <object class="GtkWindow" id="Window">
<property name="width-request">450</property> <property name="width-request">450</property>
<property name="height-request">550</property> <property name="height-request">550</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="type-hint">dialog</property> <property name="icon-name">com.ublinux.ubl-settings-keyboard</property>
<child internal-child="vbox"> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="margin-start">3</property>
<property name="margin-end">3</property>
<property name="margin-top">3</property>
<property name="margin-bottom">3</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">5</property>
<child internal-child="action_area">
<object class="GtkButtonBox">
<property name="can-focus">False</property>
<property name="layout-style">end</property>
<child> <child>
<object class="GtkButton" id="CancelButton"> <object class="GtkBox" id="StatusBox">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">False</property>
<property name="receives-default">True</property> <property name="orientation">vertical</property>
<property name="image">image2</property> <child>
<placeholder/>
</child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="AcceptButton"> <object class="GtkBox">
<property name="label" translatable="yes">Accept</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">False</property>
<property name="receives-default">True</property> <property name="margin-start">5</property>
<property name="image">image1</property> <property name="margin-end">5</property>
</object> <property name="margin-top">5</property>
<packing> <property name="margin-bottom">5</property>
<property name="expand">True</property> <property name="orientation">vertical</property>
<property name="fill">True</property> <property name="spacing">5</property>
<property name="position">1</property> <child>
</packing> <object class="GtkComboBoxText" id="OptionsFilterCombo">
</child> <property name="visible">True</property>
<property name="can-focus">False</property>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">False</property> <property name="fill">True</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child> <child>
<placeholder/> <object class="GtkScrolledWindow">
</child> <property name="visible">True</property>
<property name="can-focus">True</property>
<property name="hscrollbar-policy">never</property>
<property name="shadow-type">in</property>
<child> <child>
<placeholder/> <object class="GtkTreeView" id="OptionsTree">
</child> <property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">OptionsList</property>
<child> <child>
<placeholder/> <object class="GtkTreeViewColumn">
</child>
<child> <child>
<placeholder/> <object class="GtkCellRendererToggle" id="ChosenCell"/>
<attributes>
<attribute name="active">2</attribute>
</attributes>
</child> </child>
<child> </object>
<placeholder/>
</child> </child>
<child> <child>
<placeholder/> <object class="GtkTreeViewColumn">
</child> <property name="title" translatable="yes">Name</property>
<child> <child>
<placeholder/> <object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child> </child>
<child> </object>
<placeholder/>
</child> </child>
<child> <child>
<placeholder/> <object class="GtkTreeViewColumn">
</child> <property name="title" translatable="yes">Description</property>
<child> <child>
<placeholder/> <object class="GtkCellRendererText">
<property name="wrap-mode">word</property>
<property name="wrap-width">250</property>
</object>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child> </child>
<child> </object>
<placeholder/> </child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child> </child>
</object> </object>
</child> </child>
@ -106,7 +141,6 @@
<object class="GtkHeaderBar" id="headerBar"> <object class="GtkHeaderBar" id="headerBar">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="show-close-button">True</property>
<child type="title"> <child type="title">
<object class="GtkLabel" id="headerTopic"> <object class="GtkLabel" id="headerTopic">
<property name="visible">True</property> <property name="visible">True</property>
@ -136,6 +170,31 @@
<property name="icon-name">com.ublinux.ubl-settings-keyboard</property> <property name="icon-name">com.ublinux.ubl-settings-keyboard</property>
</object> </object>
</child> </child>
<child>
<object class="GtkButton" id="CancelButton">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image2</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="AcceptButton">
<property name="label" translatable="yes">Accept</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image1</property>
</object>
<packing>
<property name="pack-type">end</property>
<property name="position">2</property>
</packing>
</child>
<style> <style>
<class name="toolbar"/> <class name="toolbar"/>
</style> </style>

@ -25,16 +25,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<!-- interface-license-type gplv2 --> <!-- interface-license-type gplv2 -->
<!-- interface-name ubl-settings-keyboard --> <!-- interface-name ubl-settings-keyboard -->
<!-- interface-copyright UBGroup --> <!-- interface-copyright UBGroup -->
<object class="GtkListStore" id="AdditionalOptionsList">
<columns>
<!-- column-name Name -->
<column type="gchararray"/>
<!-- column-name Id -->
<column type="gchararray"/>
<!-- column-name Chosen -->
<column type="gboolean"/>
</columns>
</object>
<object class="GtkListStore" id="LayoutsList"> <object class="GtkListStore" id="LayoutsList">
<columns> <columns>
<!-- column-name Id --> <!-- column-name Id -->
@ -45,20 +35,18 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<column type="gchararray"/> <column type="gchararray"/>
</columns> </columns>
</object> </object>
<object class="GtkListStore" id="MainOptionList"> <object class="GtkListStore" id="OptionsList">
<columns> <columns>
<!-- column-name Name -->
<column type="gchararray"/>
<!-- column-name Id --> <!-- column-name Id -->
<column type="gchararray"/> <column type="gchararray"/>
<!-- column-name Chosen --> <!-- column-name Name -->
<column type="gboolean"/> <column type="gchararray"/>
</columns> </columns>
</object> </object>
<object class="GtkImage" id="image1"> <object class="GtkImage" id="image1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="icon-name">com.ublinux.libublsettingsui-gtk3.edit-symbolic</property> <property name="icon-name">com.ublinux.libublsettingsui-gtk3.increase-symbolic</property>
</object> </object>
<object class="GtkImage" id="image2"> <object class="GtkImage" id="image2">
<property name="visible">True</property> <property name="visible">True</property>
@ -238,6 +226,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="sensitive">False</property> <property name="sensitive">False</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="model">LayoutsList</property> <property name="model">LayoutsList</property>
<property name="headers-clickable">False</property>
<property name="reorderable">True</property> <property name="reorderable">True</property>
<property name="enable-grid-lines">both</property> <property name="enable-grid-lines">both</property>
<child internal-child="selection"> <child internal-child="selection">
@ -257,7 +246,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<child> <child>
<object class="GtkTreeViewColumn"> <object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Designation</property> <property name="title" translatable="yes">Designation</property>
<property name="sort-column-id">0</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkCellRendererText"/>
<attributes> <attributes>
@ -432,30 +420,29 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<object class="GtkTreeView" id="OptionsTree"> <object class="GtkTreeView" id="OptionsTree">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">True</property> <property name="can-focus">True</property>
<property name="model">AdditionalOptionsList</property> <property name="model">OptionsList</property>
<property name="headers-visible">False</property>
<property name="enable-grid-lines">both</property> <property name="enable-grid-lines">both</property>
<child internal-child="selection"> <child internal-child="selection">
<object class="GtkTreeSelection"/> <object class="GtkTreeSelection"/>
</child> </child>
<child> <child>
<object class="GtkTreeViewColumn"> <object class="GtkTreeViewColumn">
<property name="title" translatable="yes">column</property> <property name="title" translatable="yes">Name</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkCellRendererText"/>
<attributes> <attributes>
<attribute name="text">1</attribute> <attribute name="text">0</attribute>
</attributes> </attributes>
</child> </child>
</object> </object>
</child> </child>
<child> <child>
<object class="GtkTreeViewColumn"> <object class="GtkTreeViewColumn">
<property name="title" translatable="yes">column</property> <property name="title" translatable="yes">Description</property>
<child> <child>
<object class="GtkCellRendererText"/> <object class="GtkCellRendererText"/>
<attributes> <attributes>
<attribute name="text">0</attribute> <attribute name="text">1</attribute>
</attributes> </attributes>
</child> </child>
</object> </object>
@ -685,7 +672,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkComboBoxText" id="NumlockCombo"> <object class="GtkComboBoxText" id="NumLockCombo">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="active">0</property> <property name="active">0</property>

Loading…
Cancel
Save