finch/gntconv.c

changeset 40304
a3d49ff045a8
parent 39902
d3887f548a28
child 40359
ca141ea93b83
equal deleted inserted replaced
40303:0a01f2c891c2 40304:a3d49ff045a8
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);

mercurial