43 GtkTreeIter *iter, gpointer user_data)
45 const int column = gtk_entry_completion_get_text_column(completion);
46 if(gtk_tree_model_get_column_type(
model, column) != G_TYPE_STRING)
return TRUE;
48 GtkEditable *entry = GTK_EDITABLE(gtk_entry_completion_get_entry(completion));
49 if(!GTK_IS_EDITABLE(entry))
return FALSE;
52 gtk_tree_model_get(
model, iter, column, &tag, -1);
53 gint cursor_position = gtk_editable_get_position(entry);
54 gchar *current_text = gtk_editable_get_chars(entry, 0, -1);
55 const gchar *last_tag = g_strrstr(current_text,
",");
56 const gint cut_off = last_tag
57 ? (int)(g_utf8_strlen(current_text, -1) - g_utf8_strlen(last_tag, -1)) + 1
61 const gboolean inline_completion = gtk_entry_completion_get_inline_completion(completion);
62 gtk_entry_completion_set_inline_completion(completion,
FALSE);
63 gtk_editable_delete_text(entry, cut_off, cursor_position);
64 cursor_position = cut_off;
65 gtk_editable_insert_text(entry, tag, -1, &cursor_position);
66 gtk_editable_set_position(entry, cursor_position);
67 gtk_entry_completion_set_inline_completion(completion, inline_completion);
74 GtkEntryCompletion *completion = gtk_entry_get_completion(entry);
77 g_object_ref(completion);
78 gtk_entry_set_completion(entry, NULL);
80 gtk_entry_set_text(entry,
"");
83 gtk_entry_set_completion(entry, completion);
84 g_object_unref(completion);
87 if(!
IS_NULL_PTR(key_handler) && g_signal_handlers_disconnect_by_func(entry, key_handler, user_data))
88 g_signal_connect(entry,
"key-press-event", key_handler, user_data);