Mercurial > pidgin.yaz
comparison pidgin/gtkconv.c @ 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 | ef855b0026d1 |
children | e9a7bd891880 8922d61c738a |
comparison
equal
deleted
inserted
replaced
21730:e501c2c675cd | 21731:ea32d04d87dd |
---|---|
6474 markup = pidgin_blist_get_name_markup(buddy, FALSE, FALSE); | 6474 markup = pidgin_blist_get_name_markup(buddy, FALSE, FALSE); |
6475 } else { | 6475 } else { |
6476 markup = title; | 6476 markup = title; |
6477 } | 6477 } |
6478 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { | 6478 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { |
6479 const char *topic = gtk_entry_get_text(GTK_ENTRY(gtkconv->u.chat->topic_text)); | 6479 const char *topic = gtkconv->u.chat->topic_text ? gtk_entry_get_text(GTK_ENTRY(gtkconv->u.chat->topic_text)) : NULL; |
6480 char *esc = NULL; | 6480 char *esc = NULL; |
6481 #if GTK_CHECK_VERSION(2,6,0) | 6481 #if GTK_CHECK_VERSION(2,6,0) |
6482 esc = topic ? g_markup_escape_text(topic, -1) : NULL; | 6482 esc = topic ? g_markup_escape_text(topic, -1) : NULL; |
6483 #else | 6483 #else |
6484 /* GTK < 2.6 doesn't have auto ellipsization, so we do a crude | 6484 /* GTK < 2.6 doesn't have auto ellipsization, so we do a crude |
8672 if (buddy != NULL) { | 8672 if (buddy != NULL) { |
8673 purple_blist_alias_buddy(buddy, | 8673 purple_blist_alias_buddy(buddy, |
8674 gtk_entry_get_text(entry)); | 8674 gtk_entry_get_text(entry)); |
8675 } | 8675 } |
8676 serv_alias_buddy(buddy); | 8676 serv_alias_buddy(buddy); |
8677 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { | 8677 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { |
8678 gtk_entry_set_text(GTK_ENTRY(gtkconv->u.chat->topic_text), gtk_entry_get_text(entry)); | 8678 gtk_entry_set_text(GTK_ENTRY(gtkconv->u.chat->topic_text), gtk_entry_get_text(entry)); |
8679 topic_callback(NULL, gtkconv); | 8679 topic_callback(NULL, gtkconv); |
8680 } | 8680 } |
8681 remove_edit_entry(user_data, GTK_WIDGET(entry)); | 8681 remove_edit_entry(user_data, GTK_WIDGET(entry)); |
8682 } | 8682 } |
8683 | 8683 |
8684 static gboolean | 8684 static gboolean |
8685 infopane_entry_activate(PidginConversation *gtkconv) | 8685 infopane_entry_activate(PidginConversation *gtkconv) |
8686 { | 8686 { |
8687 GtkWidget *entry = NULL; | 8687 GtkWidget *entry = NULL; |
8688 PurpleConversation *conv = gtkconv->active_conv; | 8688 PurpleConversation *conv = gtkconv->active_conv; |
8689 const char *text = NULL; | 8689 const char *text = NULL; |
8690 | 8690 |
8691 if (!GTK_WIDGET_VISIBLE(gtkconv->tab_label)) { | 8691 if (!GTK_WIDGET_VISIBLE(gtkconv->tab_label)) { |
8692 /* There's already an entry for alias. Let's not create another one. */ | 8692 /* There's already an entry for alias. Let's not create another one. */ |
8693 return FALSE; | 8693 return FALSE; |
8699 } | 8699 } |
8700 | 8700 |
8701 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { | 8701 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { |
8702 PurpleBuddy *buddy = purple_find_buddy(gtkconv->active_conv->account, gtkconv->active_conv->name); | 8702 PurpleBuddy *buddy = purple_find_buddy(gtkconv->active_conv->account, gtkconv->active_conv->name); |
8703 if (!buddy) | 8703 if (!buddy) |
8704 /* This buddy isn't in your buddy list, so we can't alias him */ | |
8704 return FALSE; | 8705 return FALSE; |
8706 | |
8705 text = purple_buddy_get_contact_alias(buddy); | 8707 text = purple_buddy_get_contact_alias(buddy); |
8706 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { | 8708 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { |
8709 PurpleConnection *gc; | |
8710 PurplePluginProtocolInfo *prpl_info = NULL; | |
8711 | |
8712 gc = purple_conversation_get_gc(conv); | |
8713 if (gc != NULL) | |
8714 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
8715 if (prpl_info && prpl_info->set_chat_topic == NULL) | |
8716 /* This protocol doesn't support setting the chat room topic */ | |
8717 return FALSE; | |
8718 | |
8707 text = purple_conv_chat_get_topic(PURPLE_CONV_CHAT(conv)); | 8719 text = purple_conv_chat_get_topic(PURPLE_CONV_CHAT(conv)); |
8708 } | 8720 } |
8709 | 8721 |
8710 /* alias label */ | 8722 /* alias label */ |
8711 entry = gtk_entry_new(); | 8723 entry = gtk_entry_new(); |
8720 gtk_box_reorder_child(GTK_BOX(gtkconv->infopane_hbox), entry, 0); | 8732 gtk_box_reorder_child(GTK_BOX(gtkconv->infopane_hbox), entry, 0); |
8721 | 8733 |
8722 g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(alias_cb), gtkconv); | 8734 g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(alias_cb), gtkconv); |
8723 g_signal_connect(G_OBJECT(entry), "focus-out-event", G_CALLBACK(alias_focus_cb), gtkconv); | 8735 g_signal_connect(G_OBJECT(entry), "focus-out-event", G_CALLBACK(alias_focus_cb), gtkconv); |
8724 g_signal_connect(G_OBJECT(entry), "key-press-event", G_CALLBACK(alias_key_press_cb), gtkconv); | 8736 g_signal_connect(G_OBJECT(entry), "key-press-event", G_CALLBACK(alias_key_press_cb), gtkconv); |
8725 | 8737 |
8726 | 8738 if (text != NULL) |
8727 | 8739 gtk_entry_set_text(GTK_ENTRY(entry), text); |
8728 gtk_entry_set_text(GTK_ENTRY(entry), text); | |
8729 gtk_widget_show(entry); | 8740 gtk_widget_show(entry); |
8730 gtk_widget_hide(gtkconv->infopane); | 8741 gtk_widget_hide(gtkconv->infopane); |
8731 gtk_widget_grab_focus(entry); | 8742 gtk_widget_grab_focus(entry); |
8732 | 8743 |
8733 return TRUE; | 8744 return TRUE; |