| 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"); |