]> git.0d.be Git - empathy.git/commitdiff
Fix autocompletion for non-alphanumeric nicknames
authorThomas Meire <blackskad@gmail.com>
Wed, 6 Jan 2010 11:03:23 +0000 (11:03 +0000)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Wed, 6 Jan 2010 11:03:23 +0000 (11:03 +0000)
This bug is caused by the behaviour of gtk_text_iter_backward_word_start. It
searches the text for delimiters, based on languages in pango. Numbers and
characters as | and [ are not considered to be part of a word in most
languages, while they are a part of nicknames. Therefore, empathy fails to get
the typed part of the nickname.
The attached patch will instead search backwards for a space character. The
text that needs to be completed, is the text between the caret and the first
space before that. (#554767)

libempathy-gtk/empathy-chat.c

index 3e565585bf029a6ce2965810408e7eef30f360d0..61a6f53ba7c08e759256d0157c99c09eda8725eb 100644 (file)
@@ -1270,6 +1270,13 @@ chat_input_text_buffer_changed_cb (GtkTextBuffer *buffer,
        }
 }
 
+static gboolean
+empathy_isspace_cb (gunichar c,
+                gpointer data)
+{
+       return g_unichar_isspace (c);
+}
+
 static gboolean
 chat_input_key_press_event_cb (GtkWidget   *widget,
                               GdkEventKey *event,
@@ -1364,7 +1371,9 @@ chat_input_key_press_event_cb (GtkWidget   *widget,
 
                /* Get the start of the nick to complete. */
                gtk_text_buffer_get_iter_at_mark (buffer, &start, gtk_text_buffer_get_insert (buffer));
-               gtk_text_iter_backward_word_start (&start);
+               if (gtk_text_iter_backward_find_char (&start, &empathy_isspace_cb, NULL, NULL)) {
+                       gtk_text_iter_set_offset (&start, gtk_text_iter_get_offset (&start) + 1);
+               }
                is_start_of_buffer = gtk_text_iter_is_start (&start);
 
                list = empathy_contact_list_get_members (EMPATHY_CONTACT_LIST (priv->tp_chat));