| 4095 static void |
4095 static void |
| 4096 written_msg_update_ui_cb(PurpleAccount *account, const char *who, const char *message, |
4096 written_msg_update_ui_cb(PurpleAccount *account, const char *who, const char *message, |
| 4097 PurpleConversation *conv, PurpleMessageFlags flag, PurpleBlistNode *node) |
4097 PurpleConversation *conv, PurpleMessageFlags flag, PurpleBlistNode *node) |
| 4098 { |
4098 { |
| 4099 PidginBlistNode *ui = node->ui_data; |
4099 PidginBlistNode *ui = node->ui_data; |
| 4100 if (ui->conv.conv != conv || PIDGIN_CONVERSATION(conv) || |
4100 if (ui->conv.conv != conv || !pidgin_conv_is_hidden(PIDGIN_CONVERSATION(conv)) || |
| 4101 !(flag & (PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_RECV))) |
4101 !(flag & (PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_RECV))) |
| 4102 return; |
4102 return; |
| 4103 ui->conv.flags |= PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE; |
4103 ui->conv.flags |= PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE; |
| 4104 ui->conv.last_message = time(NULL); /* XXX: for lack of better data */ |
4104 ui->conv.last_message = time(NULL); /* XXX: for lack of better data */ |
| 4105 pidgin_blist_update(purple_get_blist(), node); |
4105 pidgin_blist_update(purple_get_blist(), node); |
| 4106 } |
4106 } |
| 4107 |
4107 |
| 4108 static void |
4108 static void |
| 4109 displayed_msg_update_ui_cb(PurpleAccount *account, const char *who, const char *message, |
4109 displayed_msg_update_ui_cb(PidginConversation *gtkconv, PurpleBlistNode *node) |
| 4110 PurpleConversation *conv, PurpleMessageFlags flag, PurpleBlistNode *node) |
|
| 4111 { |
4110 { |
| 4112 PidginBlistNode *ui = node->ui_data; |
4111 PidginBlistNode *ui = node->ui_data; |
| 4113 if (ui->conv.conv != conv) |
4112 if (ui->conv.conv != gtkconv->active_conv) |
| 4114 return; |
4113 return; |
| 4115 ui->conv.flags &= ~PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE; |
4114 ui->conv.flags &= ~PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE; |
| 4116 pidgin_blist_update(purple_get_blist(), node); |
4115 pidgin_blist_update(purple_get_blist(), node); |
| 4117 } |
4116 } |
| 4118 |
4117 |
| 4134 ui->conv.last_message = 0; |
4133 ui->conv.last_message = 0; |
| 4135 purple_signal_connect(purple_conversations_get_handle(), "deleting-conversation", |
4134 purple_signal_connect(purple_conversations_get_handle(), "deleting-conversation", |
| 4136 ui, PURPLE_CALLBACK(conversation_deleted_update_ui_cb), ui); |
4135 ui, PURPLE_CALLBACK(conversation_deleted_update_ui_cb), ui); |
| 4137 purple_signal_connect(purple_conversations_get_handle(), "wrote-im-msg", |
4136 purple_signal_connect(purple_conversations_get_handle(), "wrote-im-msg", |
| 4138 ui, PURPLE_CALLBACK(written_msg_update_ui_cb), buddy); |
4137 ui, PURPLE_CALLBACK(written_msg_update_ui_cb), buddy); |
| 4139 purple_signal_connect(pidgin_conversations_get_handle(), "displayed-im-msg", |
4138 purple_signal_connect(pidgin_conversations_get_handle(), "conversation-displayed", |
| 4140 ui, PURPLE_CALLBACK(displayed_msg_update_ui_cb), buddy); |
4139 ui, PURPLE_CALLBACK(displayed_msg_update_ui_cb), buddy); |
| 4141 } |
4140 } |
| 4142 } |
4141 } |
| |
4142 break; |
| 4143 case PURPLE_CONV_TYPE_CHAT: |
4143 case PURPLE_CONV_TYPE_CHAT: |
| 4144 { |
4144 { |
| 4145 PurpleChat *chat = purple_blist_find_chat(conv->account, conv->name); |
4145 PurpleChat *chat = purple_blist_find_chat(conv->account, conv->name); |
| 4146 struct _pidgin_blist_node *ui; |
4146 struct _pidgin_blist_node *ui; |
| 4147 if (!chat) |
4147 if (!chat) |
| 4154 ui->conv.last_message = 0; |
4154 ui->conv.last_message = 0; |
| 4155 purple_signal_connect(purple_conversations_get_handle(), "deleting-conversation", |
4155 purple_signal_connect(purple_conversations_get_handle(), "deleting-conversation", |
| 4156 ui, PURPLE_CALLBACK(conversation_deleted_update_ui_cb), ui); |
4156 ui, PURPLE_CALLBACK(conversation_deleted_update_ui_cb), ui); |
| 4157 purple_signal_connect(purple_conversations_get_handle(), "wrote-chat-msg", |
4157 purple_signal_connect(purple_conversations_get_handle(), "wrote-chat-msg", |
| 4158 ui, PURPLE_CALLBACK(written_msg_update_ui_cb), chat); |
4158 ui, PURPLE_CALLBACK(written_msg_update_ui_cb), chat); |
| 4159 purple_signal_connect(pidgin_conversations_get_handle(), "displayed-chat-msg", |
4159 purple_signal_connect(pidgin_conversations_get_handle(), "conversation-displayed", |
| 4160 ui, PURPLE_CALLBACK(displayed_msg_update_ui_cb), chat); |
4160 ui, PURPLE_CALLBACK(displayed_msg_update_ui_cb), chat); |
| 4161 } |
4161 } |
| |
4162 break; |
| 4162 default: |
4163 default: |
| 4163 break; |
4164 break; |
| 4164 } |
4165 } |
| 4165 } |
4166 } |
| 4166 |
4167 |
| 5965 if (!insert_node(list, node, &iter)) |
5966 if (!insert_node(list, node, &iter)) |
| 5966 return; |
5967 return; |
| 5967 |
5968 |
| 5968 ui = node->ui_data; |
5969 ui = node->ui_data; |
| 5969 conv = ui->conv.conv; |
5970 conv = ui->conv.conv; |
| 5970 hidden = (conv && (ui->conv.flags & PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE)); |
5971 hidden = (conv && (ui->conv.flags & PIDGIN_BLIST_NODE_HAS_PENDING_MESSAGE) && |
| |
5972 pidgin_conv_is_hidden(PIDGIN_CONVERSATION(conv))); |
| 5971 |
5973 |
| 5972 status = pidgin_blist_get_status_icon(node, |
5974 status = pidgin_blist_get_status_icon(node, |
| 5973 biglist ? PIDGIN_STATUS_ICON_LARGE : PIDGIN_STATUS_ICON_SMALL); |
5975 biglist ? PIDGIN_STATUS_ICON_LARGE : PIDGIN_STATUS_ICON_SMALL); |
| 5974 emblem = pidgin_blist_get_emblem(node); |
5976 emblem = pidgin_blist_get_emblem(node); |
| 5975 |
5977 |