Mercurial > pidgin
changeset 21731:ea32d04d87dd
Fix a few assertion failures:
* Don't cal gtk_entry_get_text(GTK_ENTRY(gtkconv->u.chat->topic_text))
if gtkconv->u.chat->topic_text is NULL, which happens for AIM group
chats
* Don't allow double-clicking on the tab for an AIM group chat to set
the topic because AIM doesn't support chat room topics
* Don't call gtk_entry_set_text(GTK_ENTRY(entry), text) when
initializing the entry and text is NULL
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 02 Dec 2007 21:46:32 +0000 |
parents | e501c2c675cd |
children | 200b79605991 |
files | pidgin/gtkconv.c |
diffstat | 1 files changed, 18 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/pidgin/gtkconv.c Sun Dec 02 20:22:32 2007 +0000 +++ b/pidgin/gtkconv.c Sun Dec 02 21:46:32 2007 +0000 @@ -6476,7 +6476,7 @@ markup = title; } } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { - const char *topic = gtk_entry_get_text(GTK_ENTRY(gtkconv->u.chat->topic_text)); + const char *topic = gtkconv->u.chat->topic_text ? gtk_entry_get_text(GTK_ENTRY(gtkconv->u.chat->topic_text)) : NULL; char *esc = NULL; #if GTK_CHECK_VERSION(2,6,0) esc = topic ? g_markup_escape_text(topic, -1) : NULL; @@ -8674,7 +8674,7 @@ gtk_entry_get_text(entry)); } serv_alias_buddy(buddy); - } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { + } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { gtk_entry_set_text(GTK_ENTRY(gtkconv->u.chat->topic_text), gtk_entry_get_text(entry)); topic_callback(NULL, gtkconv); } @@ -8685,7 +8685,7 @@ infopane_entry_activate(PidginConversation *gtkconv) { GtkWidget *entry = NULL; - PurpleConversation *conv = gtkconv->active_conv; + PurpleConversation *conv = gtkconv->active_conv; const char *text = NULL; if (!GTK_WIDGET_VISIBLE(gtkconv->tab_label)) { @@ -8701,9 +8701,21 @@ if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { PurpleBuddy *buddy = purple_find_buddy(gtkconv->active_conv->account, gtkconv->active_conv->name); if (!buddy) + /* This buddy isn't in your buddy list, so we can't alias him */ return FALSE; + text = purple_buddy_get_contact_alias(buddy); } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { + PurpleConnection *gc; + PurplePluginProtocolInfo *prpl_info = NULL; + + gc = purple_conversation_get_gc(conv); + if (gc != NULL) + prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); + if (prpl_info && prpl_info->set_chat_topic == NULL) + /* This protocol doesn't support setting the chat room topic */ + return FALSE; + text = purple_conv_chat_get_topic(PURPLE_CONV_CHAT(conv)); } @@ -8722,10 +8734,9 @@ g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(alias_cb), gtkconv); g_signal_connect(G_OBJECT(entry), "focus-out-event", G_CALLBACK(alias_focus_cb), gtkconv); g_signal_connect(G_OBJECT(entry), "key-press-event", G_CALLBACK(alias_key_press_cb), gtkconv); - - - - gtk_entry_set_text(GTK_ENTRY(entry), text); + + if (text != NULL) + gtk_entry_set_text(GTK_ENTRY(entry), text); gtk_widget_show(entry); gtk_widget_hide(gtkconv->infopane); gtk_widget_grab_focus(entry);