diff --git a/source/ubinstall-gtk-keyboard.c b/source/ubinstall-gtk-keyboard.c index 9e1c7f1..3492b9a 100644 --- a/source/ubinstall-gtk-keyboard.c +++ b/source/ubinstall-gtk-keyboard.c @@ -216,6 +216,22 @@ void on_system_layouts_add(GtkWidget *, main_window *widgets){ yon_layouts_add(GTK_TREE_VIEW(widgets->KeyboardLayoutTree),widgets->LayoutsList,widgets); } +gboolean on_keyboard_search_func(GtkTreeModel *model, gint ,const char *key, GtkTreeIter *iter, main_window *){ + char *target; + char *loc_target; + char *code; + gtk_tree_model_get(model, iter, 0,&code, 4,&target, 2, &loc_target,-1); + char *string_utf = g_utf8_casefold(key,-1); + char *target_utf = g_utf8_casefold(target,-1); + char *loc_target_utf = g_utf8_casefold(loc_target,-1); + + char *string_normalized = g_utf8_strdown(g_utf8_normalize(string_utf,-1,G_NORMALIZE_DEFAULT),-1); + char *target_normalized = g_utf8_strdown(g_utf8_normalize(target_utf,-1,G_NORMALIZE_DEFAULT),-1); + char *loc_target_normalized = g_utf8_strdown(g_utf8_normalize(loc_target_utf,-1,G_NORMALIZE_DEFAULT),-1); + + return !(g_str_has_prefix(target_normalized,string_normalized) || g_str_has_prefix(loc_target_normalized,string_normalized) || !strcmp(code,string_normalized)); +} + layouts_window *yon_layouts_window_new(){ GtkBuilder *builder = gtk_builder_new_from_resource(glade_layouts_path); layouts_window *window = malloc(sizeof(layouts_window)); @@ -227,6 +243,7 @@ layouts_window *yon_layouts_window_new(){ window->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree"); window->parameters = yon_char_new(config(xkblayout_parameter)); + gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(window->MainTree),(GtkTreeViewSearchEqualFunc)on_keyboard_search_func,window,NULL); 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; @@ -351,14 +368,14 @@ void yon_layout_build(layouts_window *window){ int parsed_size; config_str parsed = yon_char_parse(layouts[i],&parsed_size,"|"); gtk_tree_store_append(window->list,&parent,NULL); - gtk_tree_store_set(window->list,&parent,0,parsed[0],2,_(parsed[1]),-1); + gtk_tree_store_set(window->list,&parent,0,parsed[0],2,_(parsed[1]),4,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); + gtk_tree_store_set(window->list,&iter,0,parsed[0],1,parsed[1],2,_(parsed[2]),4,parsed[2],-1); yon_char_parsed_free(parsed,parsed_size); } yon_char_parsed_free(variants,variants_size); diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index 8ecde4c..67bde5c 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -204,7 +204,7 @@ void config_init(){ } yon_char_parsed_free(languages,size); - main_config.layouts_store = gtk_tree_store_new(4,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN); + main_config.layouts_store = gtk_tree_store_new(5,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN,G_TYPE_STRING); 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;iTrue True treeviewcolumn1 - 0 + 2