| 4373 GList **matches, const char *name) |
4373 GList **matches, const char *name) |
| 4374 { |
4374 { |
| 4375 char *nick_partial; |
4375 char *nick_partial; |
| 4376 gsize name_len = g_utf8_strlen(name, -1); |
4376 gsize name_len = g_utf8_strlen(name, -1); |
| 4377 |
4377 |
| 4378 if ((glong)entered_chars > name_len) |
4378 if (entered_chars > name_len) |
| 4379 return; |
4379 return; |
| 4380 |
4380 |
| 4381 nick_partial = g_utf8_substring(name, 0, entered_chars); |
4381 nick_partial = g_utf8_substring(name, 0, entered_chars); |
| 4382 if (purple_utf8_strcasecmp(nick_partial, entered)) { |
4382 if (purple_utf8_strcasecmp(nick_partial, entered)) { |
| 4383 g_free(nick_partial); |
4383 g_free(nick_partial); |
| 4472 if (caret >= 2) { |
4472 if (caret >= 2) { |
| 4473 ch = g_utf8_offset_to_pointer(content, caret - 2); |
4473 ch = g_utf8_offset_to_pointer(content, caret - 2); |
| 4474 ch2 = g_utf8_find_next_char(ch, NULL); |
4474 ch2 = g_utf8_find_next_char(ch, NULL); |
| 4475 } |
4475 } |
| 4476 |
4476 |
| 4477 if (caret >= 2 && *ch == ':' && (*ch2 == ' ' || g_utf8_get_char(ch2) == 0xA0)) |
4477 if (caret >= 2 && *ch == ':' && g_unichar_isspace(g_utf8_get_char(ch2))) |
| 4478 colon = 2; |
4478 colon = 2; |
| 4479 else if (caret >= 1 && content[caret - 1] == ':') |
4479 else if (caret >= 1 && content[caret - 1] == ':') |
| 4480 colon = 1; |
4480 colon = 1; |
| 4481 |
4481 |
| 4482 caret -= colon; |
4482 caret -= colon; |
| 4483 word_start = caret; |
4483 word_start = caret; |
| 4484 |
4484 |
| 4485 /* find the start of the word that we're tabbing. */ |
4485 /* find the start of the word that we're tabbing. */ |
| 4486 ch = g_utf8_offset_to_pointer(content, caret); |
4486 ch = g_utf8_offset_to_pointer(content, caret); |
| 4487 while ((ch = g_utf8_find_prev_char(content, ch))) { |
4487 while ((ch = g_utf8_find_prev_char(content, ch))) { |
| 4488 if (*ch != ' ' && g_utf8_get_char(ch) != 0xA0) |
4488 if (!g_unichar_isspace(g_utf8_get_char(ch))) |
| 4489 --word_start; |
4489 --word_start; |
| 4490 else |
4490 else |
| 4491 break; |
4491 break; |
| 4492 } |
4492 } |
| 4493 |
4493 |
| 4573 if (!colon && !word_start && is_first_container(container)) { |
4573 if (!colon && !word_start && is_first_container(container)) { |
| 4574 char *tmp = NULL; |
4574 char *tmp = NULL; |
| 4575 if (caret < content_len) { |
4575 if (caret < content_len) { |
| 4576 tmp = g_strdup_printf("%s: ", (char *)matches->data); |
4576 tmp = g_strdup_printf("%s: ", (char *)matches->data); |
| 4577 } else { |
4577 } else { |
| 4578 char utf[6] = {0}; |
4578 char nbsp[6] = {0}; |
| 4579 g_unichar_to_utf8(0xA0, utf); |
4579 g_unichar_to_utf8(0xA0, nbsp); |
| 4580 tmp = g_strdup_printf("%s:%s", (char *)matches->data, utf); |
4580 tmp = g_strdup_printf("%s:%s", (char *)matches->data, nbsp); |
| 4581 } |
4581 } |
| 4582 |
4582 |
| 4583 modified = g_strdup_printf("%s%s", tmp, sub2); |
4583 modified = g_strdup_printf("%s%s", tmp, sub2); |
| 4584 webkit_dom_node_set_node_value(container, modified, NULL); |
4584 webkit_dom_node_set_node_value(container, modified, NULL); |
| 4585 gtk_webview_set_caret(GTK_WEBVIEW(gtkconv->entry), container, |
4585 gtk_webview_set_caret(GTK_WEBVIEW(gtkconv->entry), container, |
| 5655 G_CALLBACK(entry_stop_rclick_cb), NULL); |
5655 G_CALLBACK(entry_stop_rclick_cb), NULL); |
| 5656 #endif |
5656 #endif |
| 5657 |
5657 |
| 5658 if (!chat) { |
5658 if (!chat) { |
| 5659 /* For sending typing notifications for IMs */ |
5659 /* For sending typing notifications for IMs */ |
| 5660 #if 0 |
|
| 5661 /* TODO WebKit */ |
|
| 5662 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "insert_text", |
|
| 5663 G_CALLBACK(insert_text_cb), gtkconv); |
|
| 5664 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "delete_range", |
|
| 5665 G_CALLBACK(delete_text_cb), gtkconv); |
|
| 5666 #endif |
|
| 5667 gtkconv->u.im->typing_timer = 0; |
5660 gtkconv->u.im->typing_timer = 0; |
| 5668 gtkconv->u.im->animate = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/animate_buddy_icons"); |
5661 gtkconv->u.im->animate = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/im/animate_buddy_icons"); |
| 5669 gtkconv->u.im->show_icon = TRUE; |
5662 gtkconv->u.im->show_icon = TRUE; |
| 5670 } |
5663 } |
| 5671 |
5664 |