about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/tools/autocomplete.c29
1 files changed, 10 insertions, 19 deletions
diff --git a/src/tools/autocomplete.c b/src/tools/autocomplete.c
index afabaed2..77d8c7ae 100644
--- a/src/tools/autocomplete.c
+++ b/src/tools/autocomplete.c
@@ -101,30 +101,21 @@ autocomplete_add(Autocomplete ac, const char *item)
 gboolean
 autocomplete_remove(Autocomplete ac, const char * const item)
 {
-    // reset last found if it points to the item to be removed
-    if (ac->last_found != NULL)
-        if (g_strcmp0(ac->last_found->data, item) == 0)
-            ac->last_found = NULL;
+    GSList *curr = g_slist_find_custom(ac->items, item, (GCompareFunc)strcmp);
 
-    if (!ac->items) {
+    if (!curr) {
         return FALSE;
-    } else {
-        GSList *curr = ac->items;
-
-        while(curr) {
-            if (g_strcmp0(curr->data, item) == 0) {
-                void *current_item = curr->data;
-                ac->items = g_slist_remove(ac->items, curr->data);
-                free(current_item);
+    }
 
-                return TRUE;
-            }
+    // reset last found if it points to the item to be removed
+    if (ac->last_found == curr) {
+        ac->last_found = NULL;
+    }
 
-            curr = g_slist_next(curr);
-        }
+    free(curr->data);
+    ac->items = g_slist_delete_link(ac->items, curr);
 
-        return FALSE;
-    }
+    return TRUE;
 }
 
 GSList *