| 62 #define PREF_USERLIST PREF_CHAT "/userlist" |
62 #define PREF_USERLIST PREF_CHAT "/userlist" |
| 63 |
63 |
| 64 #include "config.h" |
64 #include "config.h" |
| 65 |
65 |
| 66 static void generate_send_to_menu(FinchConv *ggc); |
66 static void generate_send_to_menu(FinchConv *ggc); |
| 67 static void generate_e2ee_menu(FinchConv *ggc); |
|
| 68 |
67 |
| 69 static int color_message_receive; |
68 static int color_message_receive; |
| 70 static int color_message_send; |
69 static int color_message_send; |
| 71 static int color_message_highlight; |
70 static int color_message_highlight; |
| 72 static int color_message_action; |
71 static int color_message_action; |
| 251 } |
250 } |
| 252 |
251 |
| 253 static char * |
252 static char * |
| 254 get_conversation_title(PurpleConversation *conv, PurpleAccount *account) |
253 get_conversation_title(PurpleConversation *conv, PurpleAccount *account) |
| 255 { |
254 { |
| 256 PurpleE2eeState *e2ee; |
255 return g_strdup_printf(_("%s (%s -- %s)"), |
| 257 |
|
| 258 e2ee = purple_conversation_get_e2ee_state(conv); |
|
| 259 |
|
| 260 return g_strdup_printf(_("%s (%s -- %s)%s%s%s%s"), |
|
| 261 purple_conversation_get_title(conv), |
256 purple_conversation_get_title(conv), |
| 262 purple_account_get_username(account), |
257 purple_account_get_username(account), |
| 263 purple_account_get_protocol_name(account), |
258 purple_account_get_protocol_name(account)); |
| 264 e2ee ? " | " : "", |
|
| 265 e2ee ? purple_e2ee_provider_get_name(purple_e2ee_state_get_provider(e2ee)) : "", |
|
| 266 e2ee ? ": " : "", |
|
| 267 e2ee ? purple_e2ee_state_get_name(e2ee) : ""); |
|
| 268 } |
259 } |
| 269 |
260 |
| 270 static void |
261 static void |
| 271 update_buddy_typing(PurpleAccount *account, const char *who, gpointer null) |
262 update_buddy_typing(PurpleAccount *account, const char *who, gpointer null) |
| 272 { |
263 { |
| 432 |
423 |
| 433 if (type == PURPLE_CONVERSATION_UPDATE_FEATURES) { |
424 if (type == PURPLE_CONVERSATION_UPDATE_FEATURES) { |
| 434 gg_extended_menu(purple_conversation_get_ui_data(conv)); |
425 gg_extended_menu(purple_conversation_get_ui_data(conv)); |
| 435 return; |
426 return; |
| 436 } |
427 } |
| 437 if (type == PURPLE_CONVERSATION_UPDATE_E2EE) { |
|
| 438 FinchConv *ggconv = FINCH_CONV(conv); |
|
| 439 gchar *title; |
|
| 440 |
|
| 441 title = get_conversation_title(conv, |
|
| 442 purple_conversation_get_account(conv)); |
|
| 443 gnt_screen_rename_widget(ggconv->window, title); |
|
| 444 g_free(title); |
|
| 445 |
|
| 446 generate_e2ee_menu(ggconv); |
|
| 447 |
|
| 448 return; |
|
| 449 } |
|
| 450 } |
428 } |
| 451 |
429 |
| 452 static void |
430 static void |
| 453 clear_scrollback_cb(GntMenuItem *item, gpointer ggconv) |
431 clear_scrollback_cb(GntMenuItem *item, gpointer ggconv) |
| 454 { |
432 { |
| 631 g_object_set_data_full(G_OBJECT(item), "purple_buddy_name", name, g_free); |
609 g_object_set_data_full(G_OBJECT(item), "purple_buddy_name", name, g_free); |
| 632 } |
610 } |
| 633 } |
611 } |
| 634 |
612 |
| 635 static void |
613 static void |
| 636 generate_e2ee_menu(FinchConv *ggc) |
|
| 637 { |
|
| 638 GntMenu *sub; |
|
| 639 GntWidget *menu = ggc->menu; |
|
| 640 PurpleConversation *conv = ggc->active_conv; |
|
| 641 GntMenuItem *item; |
|
| 642 PurpleE2eeProvider *eprov; |
|
| 643 GList *menu_actions, *it; |
|
| 644 |
|
| 645 eprov = purple_e2ee_provider_get_main(); |
|
| 646 |
|
| 647 item = ggc->u.im->e2ee_menu; |
|
| 648 if (item == NULL) { |
|
| 649 item = gnt_menuitem_new(NULL); |
|
| 650 gnt_menu_add_item(GNT_MENU(menu), item); |
|
| 651 ggc->u.im->e2ee_menu = item; |
|
| 652 } |
|
| 653 sub = GNT_MENU(gnt_menu_new(GNT_MENU_POPUP)); |
|
| 654 gnt_menuitem_set_submenu(item, GNT_MENU(sub)); |
|
| 655 |
|
| 656 gnt_menuitem_set_visible(item, (eprov != NULL)); |
|
| 657 if (eprov == NULL) |
|
| 658 return; |
|
| 659 gnt_menuitem_set_text(item, purple_e2ee_provider_get_name(eprov)); |
|
| 660 |
|
| 661 menu_actions = purple_e2ee_provider_get_conv_menu_actions(eprov, conv); |
|
| 662 for (it = menu_actions; it; it = g_list_next(it)) { |
|
| 663 PurpleActionMenu *action = it->data; |
|
| 664 |
|
| 665 finch_append_menu_action(sub, action, conv); |
|
| 666 } |
|
| 667 g_list_free(menu_actions); |
|
| 668 } |
|
| 669 |
|
| 670 static void |
|
| 671 invite_cb(GntMenuItem *item, gpointer ggconv) |
614 invite_cb(GntMenuItem *item, gpointer ggconv) |
| 672 { |
615 { |
| 673 FinchConv *fc = ggconv; |
616 FinchConv *fc = ggconv; |
| 674 PurpleChatConversation *chat = PURPLE_CHAT_CONVERSATION(fc->active_conv); |
617 PurpleChatConversation *chat = PURPLE_CHAT_CONVERSATION(fc->active_conv); |
| 675 purple_chat_conversation_invite_user(chat, NULL, NULL, TRUE); |
618 purple_chat_conversation_invite_user(chat, NULL, NULL, TRUE); |
| 738 } else if (PURPLE_IS_CHAT_CONVERSATION(ggc->active_conv)) { |
681 } else if (PURPLE_IS_CHAT_CONVERSATION(ggc->active_conv)) { |
| 739 item = gnt_menuitem_new(_("Invite...")); |
682 item = gnt_menuitem_new(_("Invite...")); |
| 740 gnt_menu_add_item(GNT_MENU(sub), item); |
683 gnt_menu_add_item(GNT_MENU(sub), item); |
| 741 gnt_menuitem_set_callback(item, invite_cb, ggc); |
684 gnt_menuitem_set_callback(item, invite_cb, ggc); |
| 742 } |
685 } |
| 743 |
|
| 744 generate_e2ee_menu(ggc); |
|
| 745 |
686 |
| 746 item = gnt_menuitem_new(_("View Log...")); |
687 item = gnt_menuitem_new(_("View Log...")); |
| 747 gnt_menu_add_item(GNT_MENU(sub), item); |
688 gnt_menu_add_item(GNT_MENU(sub), item); |
| 748 gnt_menuitem_set_callback(item, view_log_cb, ggc); |
689 gnt_menuitem_set_callback(item, view_log_cb, ggc); |
| 749 |
690 |
| 1559 gg_setup_commands(ggconv, TRUE); |
1500 gg_setup_commands(ggconv, TRUE); |
| 1560 account = purple_conversation_get_account(conv); |
1501 account = purple_conversation_get_account(conv); |
| 1561 title = get_conversation_title(conv, account); |
1502 title = get_conversation_title(conv, account); |
| 1562 gnt_screen_rename_widget(ggconv->window, title); |
1503 gnt_screen_rename_widget(ggconv->window, title); |
| 1563 g_free(title); |
1504 g_free(title); |
| 1564 |
|
| 1565 generate_e2ee_menu(ggconv); |
|
| 1566 } |
1505 } |
| 1567 |
1506 |
| 1568 void finch_conversation_set_info_widget(PurpleConversation *conv, GntWidget *widget) |
1507 void finch_conversation_set_info_widget(PurpleConversation *conv, GntWidget *widget) |
| 1569 { |
1508 { |
| 1570 FinchConv *fc = FINCH_CONV(conv); |
1509 FinchConv *fc = FINCH_CONV(conv); |