comparison finch/gntconv.c @ 32819:2c6510167895 default tip

propagate from branch 'im.pidgin.pidgin.2.x.y' (head 3315c5dfbd0ad16511bdcf865e5b07c02d07df24) to branch 'im.pidgin.pidgin' (head cbd1eda6bcbf0565ae7766396bb8f6f419cb6a9a)
author Elliott Sales de Andrade <qulogic@pidgin.im>
date Sat, 02 Jun 2012 02:30:49 +0000
parents f5e193735392
children
comparison
equal deleted inserted replaced
32818:01ff09d4a463 32819:2c6510167895
50 #include "gntentry.h" 50 #include "gntentry.h"
51 #include "gntlabel.h" 51 #include "gntlabel.h"
52 #include "gntmenu.h" 52 #include "gntmenu.h"
53 #include "gntmenuitem.h" 53 #include "gntmenuitem.h"
54 #include "gntmenuitemcheck.h" 54 #include "gntmenuitemcheck.h"
55 #include "gntmenuutil.h"
55 #include "gntstyle.h" 56 #include "gntstyle.h"
56 #include "gnttextview.h" 57 #include "gnttextview.h"
57 #include "gnttree.h" 58 #include "gnttree.h"
58 #include "gntutils.h" 59 #include "gntutils.h"
59 #include "gntwindow.h" 60 #include "gntwindow.h"
121 purple_conv_im_stop_send_typed_timeout(im); 122 purple_conv_im_stop_send_typed_timeout(im);
122 purple_conv_im_start_send_typed_timeout(im); 123 purple_conv_im_start_send_typed_timeout(im);
123 if (send || (purple_conv_im_get_type_again(im) != 0 && 124 if (send || (purple_conv_im_get_type_again(im) != 0 &&
124 time(NULL) > purple_conv_im_get_type_again(im))) { 125 time(NULL) > purple_conv_im_get_type_again(im))) {
125 unsigned int timeout; 126 unsigned int timeout;
126 timeout = serv_send_typing(purple_conversation_get_gc(conv), 127 timeout = serv_send_typing(purple_conversation_get_connection(conv),
127 purple_conversation_get_name(conv), 128 purple_conversation_get_name(conv),
128 PURPLE_TYPING); 129 PURPLE_TYPING);
129 purple_conv_im_set_type_again(im, timeout); 130 purple_conv_im_set_type_again(im, timeout);
130 } 131 }
131 } else { 132 } else {
132 purple_conv_im_stop_send_typed_timeout(im); 133 purple_conv_im_stop_send_typed_timeout(im);
133 134
134 serv_send_typing(purple_conversation_get_gc(conv), 135 serv_send_typing(purple_conversation_get_connection(conv),
135 purple_conversation_get_name(conv), 136 purple_conversation_get_name(conv),
136 PURPLE_NOT_TYPING); 137 PURPLE_NOT_TYPING);
137 } 138 }
138 } 139 }
139 } 140 }
280 281
281 if (!conv) 282 if (!conv)
282 return; 283 return;
283 284
284 im = PURPLE_CONV_IM(conv); 285 im = PURPLE_CONV_IM(conv);
285 ggc = FINCH_GET_DATA(conv); 286 ggc = FINCH_CONV(conv);
286 287
287 if (purple_conv_im_get_typing_state(im) == PURPLE_TYPING) { 288 if (purple_conv_im_get_typing_state(im) == PURPLE_TYPING) {
288 int scroll; 289 int scroll;
289 str = get_conversation_title(conv, account); 290 str = get_conversation_title(conv, account);
290 title = g_strdup_printf(_("%s [%s]"), str, 291 title = g_strdup_printf(_("%s [%s]"), str,
319 buddy_signed_on_off(PurpleBuddy *buddy, gpointer null) 320 buddy_signed_on_off(PurpleBuddy *buddy, gpointer null)
320 { 321 {
321 PurpleConversation *conv = find_conv_with_contact(purple_buddy_get_account(buddy), purple_buddy_get_name(buddy)); 322 PurpleConversation *conv = find_conv_with_contact(purple_buddy_get_account(buddy), purple_buddy_get_name(buddy));
322 if (conv == NULL) 323 if (conv == NULL)
323 return; 324 return;
324 generate_send_to_menu(FINCH_GET_DATA(conv)); 325 generate_send_to_menu(FINCH_CONV(conv));
325 } 326 }
326 327
327 static void 328 static void
328 account_signed_on_off(PurpleConnection *gc, gpointer null) 329 account_signed_on_off(PurpleConnection *gc, gpointer null)
329 { 330 {
331 while (list) { 332 while (list) {
332 PurpleConversation *conv = list->data; 333 PurpleConversation *conv = list->data;
333 PurpleConversation *cc = find_conv_with_contact( 334 PurpleConversation *cc = find_conv_with_contact(
334 purple_conversation_get_account(conv), purple_conversation_get_name(conv)); 335 purple_conversation_get_account(conv), purple_conversation_get_name(conv));
335 if (cc) 336 if (cc)
336 generate_send_to_menu(FINCH_GET_DATA(cc)); 337 generate_send_to_menu(FINCH_CONV(cc));
337 list = list->next; 338 list = list->next;
338 } 339 }
339 340
340 if (PURPLE_CONNECTION_IS_CONNECTED(gc)) { 341 if (PURPLE_CONNECTION_IS_CONNECTED(gc)) {
341 /* We just signed on. Let's see if there's any chat that we have open, 342 /* We just signed on. Let's see if there's any chat that we have open,
396 } 397 }
397 398
398 static void 399 static void
399 cleared_message_history_cb(PurpleConversation *conv, gpointer data) 400 cleared_message_history_cb(PurpleConversation *conv, gpointer data)
400 { 401 {
401 FinchConv *ggc = FINCH_GET_DATA(conv); 402 FinchConv *ggc = FINCH_CONV(conv);
402 if (ggc) 403 if (ggc)
403 gnt_text_view_clear(GNT_TEXT_VIEW(ggc->tv)); 404 gnt_text_view_clear(GNT_TEXT_VIEW(ggc->tv));
404 } 405 }
405 406
406 static void 407 static void
408 gg_extended_menu(FinchConv *ggc)
409 {
410 GntWidget *sub;
411 GList *list;
412
413 sub = gnt_menu_new(GNT_MENU_POPUP);
414 gnt_menuitem_set_submenu(ggc->plugins, GNT_MENU(sub));
415
416 for (list = purple_conversation_get_extended_menu(ggc->active_conv);
417 list; list = g_list_delete_link(list, list))
418 {
419 gnt_append_menu_action(GNT_MENU(sub), list->data, ggc->active_conv);
420 }
421 }
422
423 static void
424 conv_updated(PurpleConversation *conv, PurpleConvUpdateType type)
425 {
426 if (type == PURPLE_CONV_UPDATE_FEATURES) {
427 gg_extended_menu(purple_conversation_get_ui_data(conv));
428 }
429 }
430
431 static void
407 clear_scrollback_cb(GntMenuItem *item, gpointer ggconv) 432 clear_scrollback_cb(GntMenuItem *item, gpointer ggconv)
408 { 433 {
409 FinchConv *ggc = ggconv; 434 FinchConv *ggc = ggconv;
410 purple_conversation_clear_message_history(ggc->active_conv); 435 purple_conversation_clear_message_history(ggc->active_conv);
411 } 436 }
412 437
413 static void 438 static void
414 send_file_cb(GntMenuItem *item, gpointer ggconv) 439 send_file_cb(GntMenuItem *item, gpointer ggconv)
415 { 440 {
416 FinchConv *ggc = ggconv; 441 FinchConv *ggc = ggconv;
417 serv_send_file(purple_conversation_get_gc(ggc->active_conv), 442 serv_send_file(purple_conversation_get_connection(ggc->active_conv),
418 purple_conversation_get_name(ggc->active_conv), NULL); 443 purple_conversation_get_name(ggc->active_conv), NULL);
419 } 444 }
420 445
421 static void 446 static void
422 add_pounce_cb(GntMenuItem *item, gpointer ggconv) 447 add_pounce_cb(GntMenuItem *item, gpointer ggconv)
429 454
430 static void 455 static void
431 get_info_cb(GntMenuItem *item, gpointer ggconv) 456 get_info_cb(GntMenuItem *item, gpointer ggconv)
432 { 457 {
433 FinchConv *ggc = ggconv; 458 FinchConv *ggc = ggconv;
434 finch_retrieve_user_info(purple_conversation_get_gc(ggc->active_conv), 459 finch_retrieve_user_info(purple_conversation_get_connection(ggc->active_conv),
435 purple_conversation_get_name(ggc->active_conv)); 460 purple_conversation_get_name(ggc->active_conv));
436 } 461 }
437 462
438 static void 463 static void
439 toggle_timestamps_cb(GntMenuItem *item, gpointer ggconv) 464 toggle_timestamps_cb(GntMenuItem *item, gpointer ggconv)
593 PurpleConversation *conv = fc->active_conv; 618 PurpleConversation *conv = fc->active_conv;
594 purple_conv_chat_invite_user(PURPLE_CONV_CHAT(conv), NULL, NULL, TRUE); 619 purple_conv_chat_invite_user(PURPLE_CONV_CHAT(conv), NULL, NULL, TRUE);
595 } 620 }
596 621
597 static void 622 static void
623 plugin_changed_cb(PurplePlugin *p, gpointer data)
624 {
625 gg_extended_menu(data);
626 }
627
628 static void
598 gg_create_menu(FinchConv *ggc) 629 gg_create_menu(FinchConv *ggc)
599 { 630 {
600 GntWidget *menu, *sub; 631 GntWidget *menu, *sub;
601 GntMenuItem *item; 632 GntMenuItem *item;
602 633
663 item = gnt_menuitem_check_new(_("Enable Sounds")); 694 item = gnt_menuitem_check_new(_("Enable Sounds"));
664 gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), 695 gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item),
665 !(ggc->flags & FINCH_CONV_NO_SOUND)); 696 !(ggc->flags & FINCH_CONV_NO_SOUND));
666 gnt_menu_add_item(GNT_MENU(sub), item); 697 gnt_menu_add_item(GNT_MENU(sub), item);
667 gnt_menuitem_set_callback(item, toggle_sound_cb, ggc); 698 gnt_menuitem_set_callback(item, toggle_sound_cb, ggc);
699
700 item = gnt_menuitem_new(_("Plugins"));
701 gnt_menu_add_item(GNT_MENU(menu), item);
702 ggc->plugins = item;
703
704 gg_extended_menu(ggc);
668 } 705 }
669 706
670 static void 707 static void
671 create_conv_from_userlist(GntWidget *widget, FinchConv *fc) 708 create_conv_from_userlist(GntWidget *widget, FinchConv *fc)
672 { 709 {
681 return; 718 return;
682 } 719 }
683 720
684 name = gnt_tree_get_selection_data(GNT_TREE(widget)); 721 name = gnt_tree_get_selection_data(GNT_TREE(widget));
685 722
686 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); 723 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc));
687 if (prpl_info && PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, get_cb_real_name)) 724 if (prpl_info && PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl_info, get_cb_real_name))
688 realname = prpl_info->get_cb_real_name(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(fc->active_conv)), name); 725 realname = prpl_info->get_cb_real_name(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(fc->active_conv)), name);
689 else 726 else
690 realname = NULL; 727 realname = NULL;
691 purple_conversation_new(PURPLE_CONV_TYPE_IM, account, realname ? realname : name); 728 purple_conversation_new(PURPLE_CONV_TYPE_IM, account, realname ? realname : name);
747 } 784 }
748 785
749 static void 786 static void
750 finch_create_conversation(PurpleConversation *conv) 787 finch_create_conversation(PurpleConversation *conv)
751 { 788 {
752 FinchConv *ggc = FINCH_GET_DATA(conv); 789 FinchConv *ggc = FINCH_CONV(conv);
753 char *title; 790 char *title;
754 PurpleConversationType type; 791 PurpleConversationType type;
755 PurpleConversation *cc; 792 PurpleConversation *cc;
756 PurpleAccount *account; 793 PurpleAccount *account;
757 PurpleBlistNode *convnode = NULL; 794 PurpleBlistNode *convnode = NULL;
761 return; 798 return;
762 } 799 }
763 800
764 account = purple_conversation_get_account(conv); 801 account = purple_conversation_get_account(conv);
765 cc = find_conv_with_contact(account, purple_conversation_get_name(conv)); 802 cc = find_conv_with_contact(account, purple_conversation_get_name(conv));
766 if (cc && FINCH_GET_DATA(cc)) 803 if (cc && FINCH_CONV(cc))
767 ggc = FINCH_GET_DATA(cc); 804 ggc = FINCH_CONV(cc);
768 else 805 else
769 ggc = g_new0(FinchConv, 1); 806 ggc = g_new0(FinchConv, 1);
770 807
771 /* Each conversation with the same person will have the same logging setting */ 808 /* Each conversation with the same person will have the same logging setting */
772 if (ggc->list) { 809 if (ggc->list) {
774 purple_conversation_is_logging(ggc->list->data)); 811 purple_conversation_is_logging(ggc->list->data));
775 } 812 }
776 813
777 ggc->list = g_list_prepend(ggc->list, conv); 814 ggc->list = g_list_prepend(ggc->list, conv);
778 ggc->active_conv = conv; 815 ggc->active_conv = conv;
779 FINCH_SET_DATA(conv, ggc); 816 purple_conversation_set_ui_data(conv, ggc);
780 817
781 if (cc && FINCH_GET_DATA(cc) && cc != conv) { 818 if (cc && FINCH_CONV(cc) && cc != conv) {
782 finch_conversation_set_active(conv); 819 finch_conversation_set_active(conv);
783 return; 820 return;
784 } 821 }
785 822
786 type = purple_conversation_get_type(conv); 823 type = purple_conversation_get_type(conv);
874 purple_signal_connect(purple_cmds_get_handle(), "cmd-added", ggc, 911 purple_signal_connect(purple_cmds_get_handle(), "cmd-added", ggc,
875 G_CALLBACK(cmd_added_cb), ggc); 912 G_CALLBACK(cmd_added_cb), ggc);
876 purple_signal_connect(purple_cmds_get_handle(), "cmd-removed", ggc, 913 purple_signal_connect(purple_cmds_get_handle(), "cmd-removed", ggc,
877 G_CALLBACK(cmd_removed_cb), ggc); 914 G_CALLBACK(cmd_removed_cb), ggc);
878 915
916 purple_signal_connect(purple_plugins_get_handle(), "plugin-load", ggc,
917 PURPLE_CALLBACK(plugin_changed_cb), ggc);
918 purple_signal_connect(purple_plugins_get_handle(), "plugin-unload", ggc,
919 PURPLE_CALLBACK(plugin_changed_cb), ggc);
920
879 g_free(title); 921 g_free(title);
880 gnt_box_give_focus_to_child(GNT_BOX(ggc->window), ggc->entry); 922 gnt_box_give_focus_to_child(GNT_BOX(ggc->window), ggc->entry);
881 g_signal_connect(G_OBJECT(ggc->window), "gained-focus", G_CALLBACK(gained_focus_cb), ggc); 923 g_signal_connect(G_OBJECT(ggc->window), "gained-focus", G_CALLBACK(gained_focus_cb), ggc);
882 } 924 }
883 925
884 static void 926 static void
885 finch_destroy_conversation(PurpleConversation *conv) 927 finch_destroy_conversation(PurpleConversation *conv)
886 { 928 {
887 /* do stuff here */ 929 /* do stuff here */
888 FinchConv *ggc = FINCH_GET_DATA(conv); 930 FinchConv *ggc = FINCH_CONV(conv);
889 ggc->list = g_list_remove(ggc->list, conv); 931 ggc->list = g_list_remove(ggc->list, conv);
890 if (ggc->list && conv == ggc->active_conv) { 932 if (ggc->list && conv == ggc->active_conv) {
891 ggc->active_conv = ggc->list->data; 933 ggc->active_conv = ggc->list->data;
892 gg_setup_commands(ggc, TRUE); 934 gg_setup_commands(ggc, TRUE);
893 } 935 }
903 945
904 static void 946 static void
905 finch_write_common(PurpleConversation *conv, const char *who, const char *message, 947 finch_write_common(PurpleConversation *conv, const char *who, const char *message,
906 PurpleMessageFlags flags, time_t mtime) 948 PurpleMessageFlags flags, time_t mtime)
907 { 949 {
908 FinchConv *ggconv = FINCH_GET_DATA(conv); 950 FinchConv *ggconv = FINCH_CONV(conv);
909 char *strip, *newline; 951 char *strip, *newline;
910 GntTextFormatFlags fl = 0; 952 GntTextFormatFlags fl = 0;
911 int pos; 953 int pos;
912 954
913 g_return_if_fail(ggconv != NULL); 955 g_return_if_fail(ggconv != NULL);
1067 } 1109 }
1068 1110
1069 static void 1111 static void
1070 finch_chat_add_users(PurpleConversation *conv, GList *users, gboolean new_arrivals) 1112 finch_chat_add_users(PurpleConversation *conv, GList *users, gboolean new_arrivals)
1071 { 1113 {
1072 FinchConv *ggc = FINCH_GET_DATA(conv); 1114 FinchConv *ggc = FINCH_CONV(conv);
1073 GntEntry *entry = GNT_ENTRY(ggc->entry); 1115 GntEntry *entry = GNT_ENTRY(ggc->entry);
1074 1116
1075 if (!new_arrivals) 1117 if (!new_arrivals)
1076 { 1118 {
1077 /* Print the list of users in the room */ 1119 /* Print the list of users in the room */
1082 g_string_printf(string, 1124 g_string_printf(string,
1083 ngettext("List of %d user:\n", "List of %d users:\n", count), count); 1125 ngettext("List of %d user:\n", "List of %d users:\n", count), count);
1084 for (iter = users; iter; iter = iter->next) 1126 for (iter = users; iter; iter = iter->next)
1085 { 1127 {
1086 PurpleConvChatBuddy *cbuddy = iter->data; 1128 PurpleConvChatBuddy *cbuddy = iter->data;
1087 char *str; 1129 const char *str;
1088 1130
1089 if ((str = cbuddy->alias) == NULL) 1131 if ((str = purple_conv_chat_cb_get_alias(cbuddy)) == NULL)
1090 str = cbuddy->name; 1132 str = purple_conv_chat_cb_get_name(cbuddy);
1091 g_string_append_printf(string, "[ %s ]", str); 1133 g_string_append_printf(string, "[ %s ]", str);
1092 } 1134 }
1093 1135
1094 purple_conversation_write(conv, NULL, string->str, 1136 purple_conversation_write(conv, NULL, string->str,
1095 PURPLE_MESSAGE_SYSTEM, time(NULL)); 1137 PURPLE_MESSAGE_SYSTEM, time(NULL));
1098 1140
1099 for (; users; users = users->next) 1141 for (; users; users = users->next)
1100 { 1142 {
1101 PurpleConvChatBuddy *cbuddy = users->data; 1143 PurpleConvChatBuddy *cbuddy = users->data;
1102 GntTree *tree = GNT_TREE(ggc->u.chat->userlist); 1144 GntTree *tree = GNT_TREE(ggc->u.chat->userlist);
1103 gnt_entry_add_suggest(entry, cbuddy->name); 1145 gnt_entry_add_suggest(entry, purple_conv_chat_cb_get_name(cbuddy));
1104 gnt_entry_add_suggest(entry, cbuddy->alias); 1146 gnt_entry_add_suggest(entry, purple_conv_chat_cb_get_alias(cbuddy));
1105 gnt_tree_add_row_after(tree, g_strdup(cbuddy->name), 1147 gnt_tree_add_row_after(tree, g_strdup(purple_conv_chat_cb_get_name(cbuddy)),
1106 gnt_tree_create_row(tree, chat_flag_text(cbuddy->flags), cbuddy->alias), NULL, NULL); 1148 gnt_tree_create_row(tree, chat_flag_text(purple_conv_chat_cb_get_flags(cbuddy)), purple_conv_chat_cb_get_alias(cbuddy)), NULL, NULL);
1107 } 1149 }
1108 } 1150 }
1109 1151
1110 static void 1152 static void
1111 finch_chat_rename_user(PurpleConversation *conv, const char *old, const char *new_n, const char *new_a) 1153 finch_chat_rename_user(PurpleConversation *conv, const char *old, const char *new_n, const char *new_a)
1112 { 1154 {
1113 /* Update the name for string completion */ 1155 /* Update the name for string completion */
1114 FinchConv *ggc = FINCH_GET_DATA(conv); 1156 FinchConv *ggc = FINCH_CONV(conv);
1115 GntEntry *entry = GNT_ENTRY(ggc->entry); 1157 GntEntry *entry = GNT_ENTRY(ggc->entry);
1116 GntTree *tree = GNT_TREE(ggc->u.chat->userlist); 1158 GntTree *tree = GNT_TREE(ggc->u.chat->userlist);
1117 PurpleConvChatBuddy *cb = purple_conv_chat_cb_find(PURPLE_CONV_CHAT(conv), new_n); 1159 PurpleConvChatBuddy *cb = purple_conv_chat_cb_find(PURPLE_CONV_CHAT(conv), new_n);
1118 1160
1119 gnt_entry_remove_suggest(entry, old); 1161 gnt_entry_remove_suggest(entry, old);
1120 gnt_tree_remove(tree, (gpointer)old); 1162 gnt_tree_remove(tree, (gpointer)old);
1121 1163
1122 gnt_entry_add_suggest(entry, new_n); 1164 gnt_entry_add_suggest(entry, new_n);
1123 gnt_entry_add_suggest(entry, new_a); 1165 gnt_entry_add_suggest(entry, new_a);
1124 gnt_tree_add_row_after(tree, g_strdup(new_n), 1166 gnt_tree_add_row_after(tree, g_strdup(new_n),
1125 gnt_tree_create_row(tree, chat_flag_text(cb->flags), new_a), NULL, NULL); 1167 gnt_tree_create_row(tree, chat_flag_text(purple_conv_chat_cb_get_flags(cb)), new_a), NULL, NULL);
1126 } 1168 }
1127 1169
1128 static void 1170 static void
1129 finch_chat_remove_users(PurpleConversation *conv, GList *list) 1171 finch_chat_remove_users(PurpleConversation *conv, GList *list)
1130 { 1172 {
1131 /* Remove the name from string completion */ 1173 /* Remove the name from string completion */
1132 FinchConv *ggc = FINCH_GET_DATA(conv); 1174 FinchConv *ggc = FINCH_CONV(conv);
1133 GntEntry *entry = GNT_ENTRY(ggc->entry); 1175 GntEntry *entry = GNT_ENTRY(ggc->entry);
1134 for (; list; list = list->next) { 1176 for (; list; list = list->next) {
1135 GntTree *tree = GNT_TREE(ggc->u.chat->userlist); 1177 GntTree *tree = GNT_TREE(ggc->u.chat->userlist);
1136 gnt_entry_remove_suggest(entry, list->data); 1178 gnt_entry_remove_suggest(entry, list->data);
1137 gnt_tree_remove(tree, list->data); 1179 gnt_tree_remove(tree, list->data);
1140 1182
1141 static void 1183 static void
1142 finch_chat_update_user(PurpleConversation *conv, const char *user) 1184 finch_chat_update_user(PurpleConversation *conv, const char *user)
1143 { 1185 {
1144 PurpleConvChatBuddy *cb = purple_conv_chat_cb_find(PURPLE_CONV_CHAT(conv), user); 1186 PurpleConvChatBuddy *cb = purple_conv_chat_cb_find(PURPLE_CONV_CHAT(conv), user);
1145 FinchConv *ggc = FINCH_GET_DATA(conv); 1187 FinchConv *ggc = FINCH_CONV(conv);
1146 gnt_tree_change_text(GNT_TREE(ggc->u.chat->userlist), (gpointer)user, 0, chat_flag_text(cb->flags)); 1188 gnt_tree_change_text(GNT_TREE(ggc->u.chat->userlist), (gpointer)user, 0, chat_flag_text(purple_conv_chat_cb_get_flags(cb)));
1147 } 1189 }
1148 1190
1149 static void 1191 static void
1150 finch_conv_present(PurpleConversation *conv) 1192 finch_conv_present(PurpleConversation *conv)
1151 { 1193 {
1366 } 1408 }
1367 1409
1368 static PurpleCmdRet 1410 static PurpleCmdRet
1369 users_command_cb(PurpleConversation *conv, const char *cmd, char **args, char **error, gpointer data) 1411 users_command_cb(PurpleConversation *conv, const char *cmd, char **args, char **error, gpointer data)
1370 { 1412 {
1371 FinchConv *fc = FINCH_GET_DATA(conv); 1413 FinchConv *fc = FINCH_CONV(conv);
1372 FinchConvChat *ch; 1414 FinchConvChat *ch;
1373 if (!fc) 1415 if (!fc)
1374 return PURPLE_CMD_RET_FAILED; 1416 return PURPLE_CMD_RET_FAILED;
1375 1417
1376 ch = fc->u.chat; 1418 ch = fc->u.chat;
1473 PURPLE_CALLBACK(update_buddy_typing), NULL); 1515 PURPLE_CALLBACK(update_buddy_typing), NULL);
1474 purple_signal_connect(purple_conversations_get_handle(), "chat-left", finch_conv_get_handle(), 1516 purple_signal_connect(purple_conversations_get_handle(), "chat-left", finch_conv_get_handle(),
1475 PURPLE_CALLBACK(chat_left_cb), NULL); 1517 PURPLE_CALLBACK(chat_left_cb), NULL);
1476 purple_signal_connect(purple_conversations_get_handle(), "cleared-message-history", finch_conv_get_handle(), 1518 purple_signal_connect(purple_conversations_get_handle(), "cleared-message-history", finch_conv_get_handle(),
1477 PURPLE_CALLBACK(cleared_message_history_cb), NULL); 1519 PURPLE_CALLBACK(cleared_message_history_cb), NULL);
1520 purple_signal_connect(purple_conversations_get_handle(), "conversation-updated", finch_conv_get_handle(),
1521 PURPLE_CALLBACK(conv_updated), NULL);
1478 purple_signal_connect(purple_blist_get_handle(), "buddy-signed-on", finch_conv_get_handle(), 1522 purple_signal_connect(purple_blist_get_handle(), "buddy-signed-on", finch_conv_get_handle(),
1479 PURPLE_CALLBACK(buddy_signed_on_off), NULL); 1523 PURPLE_CALLBACK(buddy_signed_on_off), NULL);
1480 purple_signal_connect(purple_blist_get_handle(), "buddy-signed-off", finch_conv_get_handle(), 1524 purple_signal_connect(purple_blist_get_handle(), "buddy-signed-off", finch_conv_get_handle(),
1481 PURPLE_CALLBACK(buddy_signed_on_off), NULL); 1525 PURPLE_CALLBACK(buddy_signed_on_off), NULL);
1482 purple_signal_connect(purple_connections_get_handle(), "signed-on", finch_conv_get_handle(), 1526 purple_signal_connect(purple_connections_get_handle(), "signed-on", finch_conv_get_handle(),
1492 purple_signals_disconnect_by_handle(finch_conv_get_handle()); 1536 purple_signals_disconnect_by_handle(finch_conv_get_handle());
1493 } 1537 }
1494 1538
1495 void finch_conversation_set_active(PurpleConversation *conv) 1539 void finch_conversation_set_active(PurpleConversation *conv)
1496 { 1540 {
1497 FinchConv *ggconv = FINCH_GET_DATA(conv); 1541 FinchConv *ggconv = FINCH_CONV(conv);
1498 PurpleAccount *account; 1542 PurpleAccount *account;
1499 char *title; 1543 char *title;
1500 1544
1501 g_return_if_fail(ggconv); 1545 g_return_if_fail(ggconv);
1502 g_return_if_fail(g_list_find(ggconv->list, conv)); 1546 g_return_if_fail(g_list_find(ggconv->list, conv));
1511 g_free(title); 1555 g_free(title);
1512 } 1556 }
1513 1557
1514 void finch_conversation_set_info_widget(PurpleConversation *conv, GntWidget *widget) 1558 void finch_conversation_set_info_widget(PurpleConversation *conv, GntWidget *widget)
1515 { 1559 {
1516 FinchConv *fc = FINCH_GET_DATA(conv); 1560 FinchConv *fc = FINCH_CONV(conv);
1517 int height, width; 1561 int height, width;
1518 1562
1519 gnt_box_remove_all(GNT_BOX(fc->info)); 1563 gnt_box_remove_all(GNT_BOX(fc->info));
1520 1564
1521 if (widget) { 1565 if (widget) {