# HG changeset patch # User Richard Laager # Date 1126296872 0 # Node ID 16b0da1f376f2a56ee57be0fdf96af0595cc9b8a # Parent 4539174a88bd82a044a50c0f2c7c7ea19b7f5a94 [gaim-migrate @ 13727] Fix the /nick weirdness bug I introduced. Also, patch 1283539, from Peter Lawler (two changes) 1. When in a chat where Gaim can tell which users are buddies (i.e. non-Jabber chats), only the names of buddies are bolded. I'm not sure if I'll like this, but I'm committing it so we can all try it out. 2. "remove bold, underline, and italics when we're ignoring formatting, as well" committer: Tailor Script diff -r 4539174a88bd -r 16b0da1f376f plugins/ChangeLog.API --- a/plugins/ChangeLog.API Fri Sep 09 20:06:13 2005 +0000 +++ b/plugins/ChangeLog.API Fri Sep 09 20:14:32 2005 +0000 @@ -93,6 +93,7 @@ same behavior as before) * Changed: chat_add_users in GaimConversationUiOps, added aliases list * Removed: chat_add_user from GaimConversationUiOps + * Changed: chat_rename_user in GaimConversationUiOps, added new_alias * Changed: GaimConversation.log became GList * GaimConversation.logs, so that a conversation can have multiple logs at once * Changed: gaim_conv_chat_add_user, added extra_msgs list diff -r 4539174a88bd -r 16b0da1f376f src/conversation.c --- a/src/conversation.c Fri Sep 09 20:06:13 2005 +0000 +++ b/src/conversation.c Fri Sep 09 20:14:32 2005 +0000 @@ -2051,10 +2051,13 @@ { GaimConversation *conv; GaimConversationUiOps *ops; + GaimConnection *gc; + GaimPluginProtocolInfo *prpl_info; GaimConvChatBuddy *cb; GaimConvChatBuddyFlags flags; + const char *new_alias = new_user; char tmp[BUF_LONG]; - gboolean its_me = FALSE; + gboolean is_me = FALSE; g_return_if_fail(chat != NULL); g_return_if_fail(old_user != NULL); @@ -2063,13 +2066,25 @@ conv = gaim_conv_chat_get_conversation(chat); ops = gaim_conversation_get_ui_ops(conv); + gc = gaim_conversation_get_gc(conv); + g_return_if_fail(gc != NULL); + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); + g_return_if_fail(prpl_info != NULL); + flags = gaim_conv_chat_user_get_flags(chat, old_user); cb = gaim_conv_chat_cb_new(new_user, flags); gaim_conv_chat_set_users(chat, g_list_prepend(gaim_conv_chat_get_users(chat), cb)); + if (!(prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME)) { + GaimBuddy *buddy; + + if ((buddy = gaim_find_buddy(gc->account, new_user)) != NULL) + new_alias = gaim_buddy_get_contact_alias(buddy); + } + if (ops != NULL && ops->chat_rename_user != NULL) - ops->chat_rename_user(conv, old_user, new_user); + ops->chat_rename_user(conv, old_user, new_user, new_alias); cb = gaim_conv_chat_cb_find(chat, old_user); @@ -2086,25 +2101,21 @@ else if (gaim_conv_chat_is_user_ignored(chat, new_user)) gaim_conv_chat_unignore(chat, new_user); + /* This should use gaim_normalize on the two values and strcmp them. */ if(!g_utf8_collate(old_user, chat->nick)) { gaim_conv_chat_set_nick(chat, new_user); - its_me = TRUE; + is_me = TRUE; } if (gaim_prefs_get_bool("/core/conversations/chat/show_nick_change") && !gaim_conv_chat_is_user_ignored(chat, new_user)) { - if(its_me) { + if(is_me) { g_snprintf(tmp, sizeof(tmp), _("You are now known as %s"), new_user); } else { - GaimConnection *gc = gaim_conversation_get_gc(conv); - GaimPluginProtocolInfo *prpl_info; const char *old_alias = old_user; const char *new_alias = new_user; - - if (!gc || !(prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl))) - return; if (!(prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME)) { GaimBuddy *buddy; diff -r 4539174a88bd -r 16b0da1f376f src/conversation.h --- a/src/conversation.h Fri Sep 09 20:06:13 2005 +0000 +++ b/src/conversation.h Fri Sep 09 20:14:32 2005 +0000 @@ -189,8 +189,8 @@ time_t mtime); void (*chat_add_users)(GaimConversation *conv, GList *users, GList *aliases); - void (*chat_rename_user)(GaimConversation *conv, - const char *old_name, const char *new_name); + void (*chat_rename_user)(GaimConversation *conv, const char *old_name, + const char *new_name, const char *new_alias); void (*chat_remove_user)(GaimConversation *conv, const char *user); void (*chat_remove_users)(GaimConversation *conv, GList *users); void (*chat_update_user)(GaimConversation *conv, const char *user); diff -r 4539174a88bd -r 16b0da1f376f src/gtkconv.c --- a/src/gtkconv.c Fri Sep 09 20:06:13 2005 +0000 +++ b/src/gtkconv.c Fri Sep 09 20:14:32 2005 +0000 @@ -5219,6 +5219,8 @@ GaimGtkConversation *gtkconv; GaimConvWindow *win; GaimConnection *gc; + GaimAccount *account; + GaimPluginProtocolInfo *prpl_info; int gtk_font_options = 0; int max_scrollback_lines = gaim_prefs_get_int( "/gaim/gtk/conversations/scrollback_lines"); @@ -5234,8 +5236,9 @@ gtkconv = GAIM_GTK_CONVERSATION(conv); gtkconv->active_conv = conv; gc = gaim_conversation_get_gc(conv); - + account = gaim_conversation_get_account(conv); win = gaim_conversation_get_window(conv); + prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); line_count = gtk_text_buffer_get_line_count( gtk_text_view_get_buffer(GTK_TEXT_VIEW( @@ -5270,7 +5273,7 @@ gtk_font_options |= GTK_IMHTML_NO_COMMENTS; if (!gaim_prefs_get_bool("/gaim/gtk/conversations/show_incoming_formatting")) - gtk_font_options |= GTK_IMHTML_NO_COLOURS | GTK_IMHTML_NO_FONTS | GTK_IMHTML_NO_SIZES; + gtk_font_options |= GTK_IMHTML_NO_COLOURS | GTK_IMHTML_NO_FONTS | GTK_IMHTML_NO_SIZES | GTK_IMHTML_NO_FORMATTING; /* this is gonna crash one day, I can feel it. */ if (GAIM_PLUGIN_PROTOCOL_INFO(gaim_find_prpl(gaim_account_get_protocol_id(conv->account)))->options & @@ -5375,10 +5378,31 @@ if(alias_escaped) g_free(alias_escaped); - g_snprintf(buf2, BUF_LONG, - "" - "%s ", - color, sml_attrib ? sml_attrib : "", mdate, str); + + /* Are we in a chat where we can tell which users are buddies? */ + if (!(prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME) && + gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) { + + /* Bold buddies to make them stand out from non-buddies. */ + if (gaim_find_buddy(account, name) != NULL) { + g_snprintf(buf2, BUF_LONG, + "" + "%s ", + color, sml_attrib ? sml_attrib : "", mdate, str); + } else { + g_snprintf(buf2, BUF_LONG, + "" + "%s ", + color, sml_attrib ? sml_attrib : "", mdate, str); + + } + } else { + /* Bold everyone's name to make the name stand out from the message. */ + g_snprintf(buf2, BUF_LONG, + "" + "%s ", + color, sml_attrib ? sml_attrib : "", mdate, str); + } gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), buf2, 0); @@ -5471,7 +5495,7 @@ static void gaim_gtkconv_chat_rename_user(GaimConversation *conv, const char *old_name, - const char *new_name) + const char *new_name, const char *new_alias) { GaimConvChat *chat; GaimGtkConversation *gtkconv; @@ -5479,7 +5503,6 @@ GtkTreeIter iter; GtkTreeModel *model; int f = 1; - char *alias = NULL; chat = GAIM_CONV_CHAT(conv); gtkconv = GAIM_GTK_CONVERSATION(conv); @@ -5496,7 +5519,6 @@ gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &val, -1); if (!gaim_utf8_strcasecmp(old_name, val)) { - gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_ALIAS_COLUMN, &alias, -1); gtk_list_store_remove(GTK_LIST_STORE(model), &iter); g_free(val); break; @@ -5510,10 +5532,9 @@ if (!gaim_conv_chat_find_user(chat, old_name)) return; - g_return_if_fail(alias != NULL); - - add_chat_buddy_common(conv, new_name, alias); - g_free(alias); + g_return_if_fail(new_alias != NULL); + + add_chat_buddy_common(conv, new_name, new_alias); } static void diff -r 4539174a88bd -r 16b0da1f376f src/gtkimhtml.c --- a/src/gtkimhtml.c Fri Sep 09 20:06:13 2005 +0000 +++ b/src/gtkimhtml.c Fri Sep 09 20:14:32 2005 +0000 @@ -2367,60 +2367,71 @@ case 1: /* B */ case 2: /* BOLD */ case 54: /* STRONG */ - - gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); - - if ((bold == 0) && (imhtml->format_functions & GTK_IMHTML_BOLD)) - gtk_imhtml_toggle_bold(imhtml); - bold++; - ws[0] = '\0'; wpos = 0; + if (!(options & GTK_IMHTML_NO_FORMATTING)) { + gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); + + if ((bold == 0) && (imhtml->format_functions & GTK_IMHTML_BOLD)) + gtk_imhtml_toggle_bold(imhtml); + bold++; + ws[0] = '\0'; wpos = 0; + } break; case 3: /* /B */ case 4: /* /BOLD */ case 55: /* /STRONG */ - gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); - ws[0] = '\0'; wpos = 0; - - if (bold) - bold--; - if ((bold == 0) && (imhtml->format_functions & GTK_IMHTML_BOLD) && !imhtml->wbfo) - gtk_imhtml_toggle_bold(imhtml); + if (!(options & GTK_IMHTML_NO_FORMATTING)) { + gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); + ws[0] = '\0'; wpos = 0; + + if (bold) + bold--; + if ((bold == 0) && (imhtml->format_functions & GTK_IMHTML_BOLD) && !imhtml->wbfo) + gtk_imhtml_toggle_bold(imhtml); + } break; case 5: /* I */ case 6: /* ITALIC */ case 52: /* EM */ - gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); - ws[0] = '\0'; wpos = 0; - if ((italics == 0) && (imhtml->format_functions & GTK_IMHTML_ITALIC)) - gtk_imhtml_toggle_italic(imhtml); - italics++; + if (!(options & GTK_IMHTML_NO_FORMATTING)) { + gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); + ws[0] = '\0'; wpos = 0; + if ((italics == 0) && (imhtml->format_functions & GTK_IMHTML_ITALIC)) + gtk_imhtml_toggle_italic(imhtml); + italics++; + } break; case 7: /* /I */ case 8: /* /ITALIC */ case 53: /* /EM */ - gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); - ws[0] = '\0'; wpos = 0; - if (italics) - italics--; - if ((italics == 0) && (imhtml->format_functions & GTK_IMHTML_ITALIC) && !imhtml->wbfo) - gtk_imhtml_toggle_italic(imhtml); + if (!(options & GTK_IMHTML_NO_FORMATTING)) { + gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); + ws[0] = '\0'; wpos = 0; + if (italics) + italics--; + if ((italics == 0) && (imhtml->format_functions & GTK_IMHTML_ITALIC) && !imhtml->wbfo) + gtk_imhtml_toggle_italic(imhtml); + } break; case 9: /* U */ case 10: /* UNDERLINE */ - gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); - ws[0] = '\0'; wpos = 0; - if ((underline == 0) && (imhtml->format_functions & GTK_IMHTML_UNDERLINE)) - gtk_imhtml_toggle_underline(imhtml); - underline++; + if (!(options & GTK_IMHTML_NO_FORMATTING)) { + gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); + ws[0] = '\0'; wpos = 0; + if ((underline == 0) && (imhtml->format_functions & GTK_IMHTML_UNDERLINE)) + gtk_imhtml_toggle_underline(imhtml); + underline++; + } break; case 11: /* /U */ case 12: /* /UNDERLINE */ - gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); - ws[0] = '\0'; wpos = 0; - if (underline) - underline--; - if ((underline == 0) && (imhtml->format_functions & GTK_IMHTML_UNDERLINE) && !imhtml->wbfo) - gtk_imhtml_toggle_underline(imhtml); + if (!(options & GTK_IMHTML_NO_FORMATTING)) { + gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); + ws[0] = '\0'; wpos = 0; + if (underline) + underline--; + if ((underline == 0) && (imhtml->format_functions & GTK_IMHTML_UNDERLINE) && !imhtml->wbfo) + gtk_imhtml_toggle_underline(imhtml); + } break; case 13: /* S */ case 14: /* STRIKE */ diff -r 4539174a88bd -r 16b0da1f376f src/gtkimhtml.h --- a/src/gtkimhtml.h Fri Sep 09 20:06:13 2005 +0000 +++ b/src/gtkimhtml.h Fri Sep 09 20:14:32 2005 +0000 @@ -189,7 +189,8 @@ GTK_IMHTML_NO_SIZES = 1 << 5, GTK_IMHTML_NO_SCROLL = 1 << 6, GTK_IMHTML_RETURN_LOG = 1 << 7, - GTK_IMHTML_USE_POINTSIZE = 1 << 8 + GTK_IMHTML_USE_POINTSIZE = 1 << 8, + GTK_IMHTML_NO_FORMATTING = 1 << 9 } GtkIMHtmlOptions; enum {