42 GtkTreeIter *iter, gpointer user_data)
44 const int column = gtk_entry_completion_get_text_column(completion);
45 if(gtk_tree_model_get_column_type(
model, column) != G_TYPE_STRING)
return TRUE;
47 GtkEditable *entry = GTK_EDITABLE(gtk_entry_completion_get_entry(completion));
48 if(!GTK_IS_EDITABLE(entry))
return FALSE;
51 gtk_tree_model_get(
model, iter, column, &tag, -1);
52 gint cursor_position = gtk_editable_get_position(entry);
53 gchar *current_text = gtk_editable_get_chars(entry, 0, -1);
54 const gchar *last_tag = g_strrstr(current_text,
",");
55 const gint cut_off = last_tag
56 ? (int)(g_utf8_strlen(current_text, -1) - g_utf8_strlen(last_tag, -1)) + 1
60 const gboolean inline_completion = gtk_entry_completion_get_inline_completion(completion);
61 gtk_entry_completion_set_inline_completion(completion,
FALSE);
62 gtk_editable_delete_text(entry, cut_off, cursor_position);
63 cursor_position = cut_off;
64 gtk_editable_insert_text(entry, tag, -1, &cursor_position);
65 gtk_editable_set_position(entry, cursor_position);
66 gtk_entry_completion_set_inline_completion(completion, inline_completion);
73 GtkEntryCompletion *completion = gtk_entry_get_completion(entry);
76 g_object_ref(completion);
77 gtk_entry_set_completion(entry, NULL);
79 gtk_entry_set_text(entry,
"");
82 gtk_entry_set_completion(entry, completion);
83 g_object_unref(completion);