use a GTree to remove duplicates and sort
This commit is contained in:
parent
3f0911676f
commit
1e66a76914
18
termite.c
18
termite.c
|
@ -30,9 +30,17 @@ static gboolean always_selected(__attribute__((unused)) VteTerminal *vte,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean add_to_list_store(char *key,
|
||||||
|
__attribute__((unused)) void *value,
|
||||||
|
GtkListStore *store) {
|
||||||
|
GtkTreeIter iter;
|
||||||
|
gtk_list_store_append(store, &iter);
|
||||||
|
gtk_list_store_set(store, &iter, 0, key, -1);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static GtkTreeModel *create_completion_model(VteTerminal *vte) {
|
static GtkTreeModel *create_completion_model(VteTerminal *vte) {
|
||||||
GtkListStore *store;
|
GtkListStore *store;
|
||||||
GtkTreeIter iter;
|
|
||||||
|
|
||||||
store = gtk_list_store_new(1, G_TYPE_STRING);
|
store = gtk_list_store_new(1, G_TYPE_STRING);
|
||||||
|
|
||||||
|
@ -49,16 +57,18 @@ static GtkTreeModel *create_completion_model(VteTerminal *vte) {
|
||||||
|
|
||||||
char *s_ptr = content, *saveptr;
|
char *s_ptr = content, *saveptr;
|
||||||
|
|
||||||
// TODO: remove duplicates
|
GTree *tree = g_tree_new((GCompareFunc)strcmp);
|
||||||
|
|
||||||
for (int j = 1; ; j++, s_ptr = NULL) {
|
for (int j = 1; ; j++, s_ptr = NULL) {
|
||||||
char *token = strtok_r(s_ptr, " \n", &saveptr);
|
char *token = strtok_r(s_ptr, " \n", &saveptr);
|
||||||
if (!token) {
|
if (!token) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
gtk_list_store_append(store, &iter);
|
g_tree_insert(tree, token, NULL);
|
||||||
gtk_list_store_set(store, &iter, 0, token, -1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_tree_foreach(tree, (GTraverseFunc)add_to_list_store, store);
|
||||||
|
g_tree_destroy(tree);
|
||||||
g_free(content);
|
g_free(content);
|
||||||
|
|
||||||
return GTK_TREE_MODEL(store);
|
return GTK_TREE_MODEL(store);
|
||||||
|
|
Loading…
Reference in New Issue