pidgin/gtkconv.c

changeset 41106
a9588f5aef2f
parent 41097
e0b11d28b39e
child 41126
fed868e592ca
equal deleted inserted replaced
41105:02c3569bc32b 41106:a9588f5aef2f
56 #include "pidginconversationwindow.h" 56 #include "pidginconversationwindow.h"
57 #include "pidgincore.h" 57 #include "pidgincore.h"
58 #include "pidgingdkpixbuf.h" 58 #include "pidgingdkpixbuf.h"
59 #include "pidgininfopane.h" 59 #include "pidgininfopane.h"
60 #include "pidgininvitedialog.h" 60 #include "pidgininvitedialog.h"
61 #include "pidginlog.h"
62 #include "pidginmenutray.h" 61 #include "pidginmenutray.h"
63 #include "pidginmessage.h" 62 #include "pidginmessage.h"
64 #include "pidginpresenceicon.h" 63 #include "pidginpresenceicon.h"
65 #include "pidginstock.h" 64 #include "pidginstock.h"
66 #include "pidginstylecontext.h" 65 #include "pidginstylecontext.h"
594 purple_request_cpar_from_conversation(conv), conv); 593 purple_request_cpar_from_conversation(conv), conv);
595 594
596 g_free(buf); 595 g_free(buf);
597 } 596 }
598 597
599 static void
600 menu_view_log_cb(GtkAction *action, gpointer data)
601 {
602 PidginConvWindow *win = data;
603 PurpleConversation *conv;
604 PurpleLogType type;
605 PidginBuddyList *gtkblist;
606 const char *name;
607 PurpleAccount *account;
608 GSList *buddies;
609 GSList *cur;
610
611 conv = pidgin_conv_window_get_active_conversation(win);
612
613 if (PURPLE_IS_IM_CONVERSATION(conv))
614 type = PURPLE_LOG_IM;
615 else if (PURPLE_IS_CHAT_CONVERSATION(conv))
616 type = PURPLE_LOG_CHAT;
617 else
618 return;
619
620 gtkblist = pidgin_blist_get_default_gtk_blist();
621
622 pidgin_set_cursor(gtkblist->window, GDK_WATCH);
623 pidgin_set_cursor(win->window, GDK_WATCH);
624
625 name = purple_conversation_get_name(conv);
626 account = purple_conversation_get_account(conv);
627
628 buddies = purple_blist_find_buddies(account, name);
629 for (cur = buddies; cur != NULL; cur = cur->next)
630 {
631 PurpleBlistNode *node = cur->data;
632 if ((node != NULL) && ((node->prev != NULL) || (node->next != NULL)))
633 {
634 pidgin_log_show_contact((PurpleContact *)node->parent);
635 g_slist_free(buddies);
636 pidgin_clear_cursor(gtkblist->window);
637 pidgin_clear_cursor(win->window);
638 return;
639 }
640 }
641 g_slist_free(buddies);
642
643 pidgin_log_show(type, name, account);
644
645 pidgin_clear_cursor(gtkblist->window);
646 pidgin_clear_cursor(win->window);
647 }
648
649 #ifdef USE_VV 598 #ifdef USE_VV
650 static void 599 static void
651 menu_initiate_media_call_cb(GtkAction *action, gpointer data) 600 menu_initiate_media_call_cb(GtkAction *action, gpointer data)
652 { 601 {
653 PidginConvWindow *win = (PidginConvWindow *)data; 602 PidginConvWindow *win = (PidginConvWindow *)data;
1642 static GtkActionEntry menu_entries[] = 1591 static GtkActionEntry menu_entries[] =
1643 /* TODO: fill out tooltips... */ 1592 /* TODO: fill out tooltips... */
1644 { 1593 {
1645 /* Conversation menu */ 1594 /* Conversation menu */
1646 { "ConversationMenu", NULL, N_("_Conversation"), NULL, NULL, NULL }, 1595 { "ConversationMenu", NULL, N_("_Conversation"), NULL, NULL, NULL },
1647 { "ViewLog", NULL, N_("View _Log"), NULL, NULL, G_CALLBACK(menu_view_log_cb) },
1648 { "SaveAs", NULL, N_("_Save As..."), NULL, NULL, G_CALLBACK(menu_save_as_cb) }, 1596 { "SaveAs", NULL, N_("_Save As..."), NULL, NULL, G_CALLBACK(menu_save_as_cb) },
1649 1597
1650 #ifdef USE_VV 1598 #ifdef USE_VV
1651 { "MediaMenu", NULL, N_("M_edia"), NULL, NULL, NULL }, 1599 { "MediaMenu", NULL, N_("M_edia"), NULL, NULL, NULL },
1652 { "AudioCall", NULL, N_("_Audio Call"), NULL, NULL, G_CALLBACK(menu_initiate_media_call_cb) }, 1600 { "AudioCall", NULL, N_("_Audio Call"), NULL, NULL, G_CALLBACK(menu_initiate_media_call_cb) },
1674 1622
1675 static const char *conversation_menu = 1623 static const char *conversation_menu =
1676 "<ui>" 1624 "<ui>"
1677 "<menubar name='Conversation'>" 1625 "<menubar name='Conversation'>"
1678 "<menu action='ConversationMenu'>" 1626 "<menu action='ConversationMenu'>"
1679 "<menuitem action='ViewLog'/>"
1680 "<menuitem action='SaveAs'/>" 1627 "<menuitem action='SaveAs'/>"
1681 "<separator/>" 1628 "<separator/>"
1682 #ifdef USE_VV 1629 #ifdef USE_VV
1683 "<menu action='MediaMenu'>" 1630 "<menu action='MediaMenu'>"
1684 "<menuitem action='AudioCall'/>" 1631 "<menuitem action='AudioCall'/>"
2047 /* Make sure the 'Conversation ⇨ More' menuitems are regenerated whenever 1994 /* Make sure the 'Conversation ⇨ More' menuitems are regenerated whenever
2048 * the 'Conversation' menu pops up because the entries can change after the 1995 * the 'Conversation' menu pops up because the entries can change after the
2049 * conversation is created. */ 1996 * conversation is created. */
2050 menuitem = gtk_ui_manager_get_widget(win->menu->ui, "/Conversation/ConversationMenu"); 1997 menuitem = gtk_ui_manager_get_widget(win->menu->ui, "/Conversation/ConversationMenu");
2051 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(menubar_activated), win); 1998 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(menubar_activated), win);
2052
2053 win->menu->view_log =
2054 gtk_ui_manager_get_action(win->menu->ui,
2055 "/Conversation/ConversationMenu/ViewLog");
2056 1999
2057 #ifdef USE_VV 2000 #ifdef USE_VV
2058 win->menu->audio_call = 2001 win->menu->audio_call =
2059 gtk_ui_manager_get_action(win->menu->ui, 2002 gtk_ui_manager_get_action(win->menu->ui,
2060 "/Conversation/ConversationMenu/MediaMenu/AudioCall"); 2003 "/Conversation/ConversationMenu/MediaMenu/AudioCall");

mercurial