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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user