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;