| 2945 "<StockItem>", GTK_STOCK_SAVE_AS }, |
2953 "<StockItem>", GTK_STOCK_SAVE_AS }, |
| 2946 { N_("/Conversation/Clea_r Scrollback"), "<CTL>L", menu_clear_cb, 0, "<StockItem>", GTK_STOCK_CLEAR }, |
2954 { N_("/Conversation/Clea_r Scrollback"), "<CTL>L", menu_clear_cb, 0, "<StockItem>", GTK_STOCK_CLEAR }, |
| 2947 |
2955 |
| 2948 { "/Conversation/sep1", NULL, NULL, 0, "<Separator>", NULL }, |
2956 { "/Conversation/sep1", NULL, NULL, 0, "<Separator>", NULL }, |
| 2949 |
2957 |
| |
2958 #ifdef USE_FARSIGHT |
| |
2959 { N_("/Conversation/_Voice Call..."), NULL, menu_initiate_voice_call_cb, 0, |
| |
2960 "<StockItem>", PIDGIN_STOCK_TOOLBAR_CALL}, |
| |
2961 #endif |
| |
2962 |
| 2950 { N_("/Conversation/Se_nd File..."), NULL, menu_send_file_cb, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_SEND_FILE }, |
2963 { N_("/Conversation/Se_nd File..."), NULL, menu_send_file_cb, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_SEND_FILE }, |
| 2951 { N_("/Conversation/Add Buddy _Pounce..."), NULL, menu_add_pounce_cb, |
2964 { N_("/Conversation/Add Buddy _Pounce..."), NULL, menu_add_pounce_cb, |
| 2952 0, "<Item>", NULL }, |
2965 0, "<Item>", NULL }, |
| 2953 { N_("/Conversation/_Get Info"), "<CTL>O", menu_get_info_cb, 0, |
2966 { N_("/Conversation/_Get Info"), "<CTL>O", menu_get_info_cb, 0, |
| 2954 "<StockItem>", PIDGIN_STOCK_TOOLBAR_USER_INFO }, |
2967 "<StockItem>", PIDGIN_STOCK_TOOLBAR_USER_INFO }, |
| 6317 conv->features |= PURPLE_CONNECTION_NO_IMAGES; |
6336 conv->features |= PURPLE_CONNECTION_NO_IMAGES; |
| 6318 |
6337 |
| 6319 if(conv->features & PURPLE_CONNECTION_NO_IMAGES) |
6338 if(conv->features & PURPLE_CONNECTION_NO_IMAGES) |
| 6320 buttons &= ~GTK_IMHTML_IMAGE; |
6339 buttons &= ~GTK_IMHTML_IMAGE; |
| 6321 |
6340 |
| |
6341 #ifdef USE_FARSIGHT |
| |
6342 /* check if account support voice calls, and if the current buddy |
| |
6343 supports it */ |
| |
6344 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { |
| |
6345 if (serv_can_do_media(gc, purple_conversation_get_name(conv), |
| |
6346 PURPLE_MEDIA_RECV_AUDIO & PURPLE_MEDIA_SEND_AUDIO)) { |
| |
6347 buttons |= GTK_IMHTML_CALL; |
| |
6348 gtk_widget_set_sensitive(win->menu.call, TRUE); |
| |
6349 } else { |
| |
6350 buttons &= ~GTK_IMHTML_CALL; |
| |
6351 gtk_widget_set_sensitive(win->menu.call, FALSE); |
| |
6352 } |
| |
6353 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { |
| |
6354 /* for now, don't care about chats... */ |
| |
6355 buttons &= ~GTK_IMHTML_CALL; |
| |
6356 gtk_widget_set_sensitive(win->menu.call, FALSE); |
| |
6357 } else { |
| |
6358 buttons &= ~GTK_IMHTML_CALL; |
| |
6359 gtk_widget_set_sensitive(win->menu.call, FALSE); |
| |
6360 } |
| |
6361 #endif |
| |
6362 |
| 6322 gtk_imhtml_set_format_functions(GTK_IMHTML(gtkconv->entry), buttons); |
6363 gtk_imhtml_set_format_functions(GTK_IMHTML(gtkconv->entry), buttons); |
| 6323 if (account != NULL) |
6364 if (account != NULL) |
| 6324 gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(gtkconv->toolbar), purple_account_get_protocol_id(account)); |
6365 gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(gtkconv->toolbar), purple_account_get_protocol_id(account)); |
| 6325 |
6366 |
| 6326 /* Deal with menu items */ |
6367 /* Deal with menu items */ |
| 6840 gtk_container_add(GTK_CONTAINER(gtkconv->u.im->icon_container), event); |
6881 gtk_container_add(GTK_CONTAINER(gtkconv->u.im->icon_container), event); |
| 6841 #if GTK_CHECK_VERSION(2,4,0) |
6882 #if GTK_CHECK_VERSION(2,4,0) |
| 6842 gtk_event_box_set_visible_window(GTK_EVENT_BOX(event), FALSE); |
6883 gtk_event_box_set_visible_window(GTK_EVENT_BOX(event), FALSE); |
| 6843 #endif |
6884 #endif |
| 6844 gtk_widget_add_events(event, |
6885 gtk_widget_add_events(event, |
| 6845 GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK); |
6886 GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK); |
| 6846 g_signal_connect(G_OBJECT(event), "button-press-event", |
6887 g_signal_connect(G_OBJECT(event), "button-press-event", |
| 6847 G_CALLBACK(icon_menu), gtkconv); |
6888 G_CALLBACK(icon_menu), gtkconv); |
| 6848 |
6889 |
| 6849 pidgin_tooltip_setup_for_widget(event, gtkconv, pidgin_conv_create_tooltip, NULL); |
6890 pidgin_tooltip_setup_for_widget(event, gtkconv, pidgin_conv_create_tooltip, NULL); |
| 6850 gtk_widget_show(event); |
6891 gtk_widget_show(event); |
| 7573 } |
7614 } |
| 7574 |
7615 |
| 7575 return TRUE; |
7616 return TRUE; |
| 7576 } |
7617 } |
| 7577 |
7618 |
| |
7619 |
| |
7620 #ifdef USE_FARSIGHT |
| |
7621 |
| 7578 static void |
7622 static void |
| 7579 pidgin_gtkmedia_message_cb(PidginMedia *media, const char *msg, PurpleConversation *conv) |
7623 pidgin_gtkmedia_message_cb(PidginMedia *media, const char *msg, PurpleConversation *conv) |
| 7580 { |
7624 { |
| 7581 purple_conv_im_write(PURPLE_CONV_IM(conv), NULL, msg, PURPLE_MESSAGE_SYSTEM, time(NULL)); |
7625 purple_conv_im_write(PURPLE_CONV_IM(conv), NULL, msg, PURPLE_MESSAGE_SYSTEM, time(NULL)); |
| 7582 } |
7626 } |
| 7583 |
7627 |
| 7584 static void |
7628 static void |
| 7585 pidgin_conv_new_media_cb(PurpleMediaManager *manager, PurpleMedia *media, gpointer nul) |
7629 menu_initiate_voice_call_cb(gpointer data, guint action, GtkWidget *widget) |
| 7586 { |
7630 { |
| |
7631 PidginWindow *win = (PidginWindow *)data; |
| |
7632 GtkWidget *gtkmedia = NULL; |
| |
7633 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); |
| |
7634 PidginConversation *gtkconv = PIDGIN_CONVERSATION(conv); |
| |
7635 |
| |
7636 PurpleConnection *gc = purple_conversation_get_gc(conv); |
| |
7637 PurplePluginProtocolInfo *prpl = gc->prpl; |
| |
7638 PurpleMediaManager *manager = purple_media_manager_get(); |
| |
7639 |
| |
7640 PurpleMedia *media = |
| |
7641 serv_initiate_media(gc, |
| |
7642 purple_conversation_get_name(conv), |
| |
7643 PURPLE_MEDIA_RECV_AUDIO & PURPLE_MEDIA_SEND_AUDIO); |
| 7587 GstElement *sendbin, *src, *sendlevel; |
7644 GstElement *sendbin, *src, *sendlevel; |
| 7588 GstElement *recvbin, *sink, *recvlevel; |
7645 GstElement *recvbin, *sink, *recvlevel; |
| 7589 GstPad *pad, *ghost; |
7646 GstPad *pad, *ghost; |
| 7590 |
7647 |
| |
7648 purple_media_audio_init_src(&sendbin, &sendlevel); |
| |
7649 purple_media_audio_init_recv(&recvbin, &recvlevel); |
| |
7650 |
| |
7651 purple_media_set_audio_src(media, sendbin); |
| |
7652 purple_media_set_audio_sink(media, recvbin); |
| |
7653 |
| |
7654 gtkmedia = pidgin_media_new(media, PIDGIN_MEDIA_WAITING, sendlevel, recvlevel); |
| |
7655 |
| |
7656 gtk_box_pack_start(GTK_BOX(gtkconv->topvbox), gtkmedia, FALSE, FALSE, 0); |
| |
7657 gtk_widget_show(gtkmedia); |
| |
7658 g_signal_connect(G_OBJECT(gtkmedia), "message", |
| |
7659 G_CALLBACK(pidgin_gtkmedia_message_cb), conv); |
| |
7660 /* need to setup handler for accept, reject and if we hangup here... */ |
| |
7661 } |
| |
7662 |
| |
7663 static void |
| |
7664 pidgin_conv_new_media_cb(PurpleMediaManager *manager, PurpleMedia *media, gpointer nul) |
| |
7665 { |
| |
7666 GstElement *sendbin, *src, *sendlevel; |
| |
7667 GstElement *recvbin, *sink, *recvlevel; |
| |
7668 GstPad *pad, *ghost; |
| |
7669 |
| 7591 GtkWidget *gtkmedia; |
7670 GtkWidget *gtkmedia; |
| 7592 PurpleConversation *conv; |
7671 PurpleConversation *conv; |
| 7593 PidginConversation *gtkconv; |
7672 PidginConversation *gtkconv; |
| 7594 |
7673 |
| 7595 sendbin = gst_bin_new("sendbin"); |
7674 purple_media_audio_init_src(&sendbin, &sendlevel); |
| 7596 src = gst_element_factory_make("alsasrc", "asrc"); |
7675 purple_media_audio_init_recv(&recvbin, &recvlevel); |
| 7597 sendlevel = gst_element_factory_make("level", "sendlevel"); |
|
| 7598 gst_bin_add_many(GST_BIN(sendbin), src, sendlevel, NULL); |
|
| 7599 gst_element_link(src, sendlevel); //, gst_caps_new_simple("audio/x-raw-int", "rate", G_TYPE_INT, 8000, NULL)); |
|
| 7600 pad = gst_element_get_pad(sendlevel, "src"); |
|
| 7601 ghost = gst_ghost_pad_new("ghostsrc", pad); |
|
| 7602 gst_element_add_pad(sendbin, ghost); |
|
| 7603 g_object_set(G_OBJECT(sendlevel), "message", TRUE, NULL); |
|
| 7604 |
|
| 7605 recvbin = gst_bin_new("pidginrecvbin"); |
|
| 7606 sink = gst_element_factory_make("alsasink", "asink"); |
|
| 7607 g_object_set(G_OBJECT(sink), "sync", FALSE, NULL); |
|
| 7608 recvlevel = gst_element_factory_make("level", "recvlevel"); |
|
| 7609 gst_bin_add_many(GST_BIN(recvbin), sink, recvlevel, NULL); |
|
| 7610 gst_element_link(recvlevel, sink); |
|
| 7611 pad = gst_element_get_pad(recvlevel, "sink"); |
|
| 7612 ghost = gst_ghost_pad_new("ghostsink", pad); |
|
| 7613 gst_element_add_pad(recvbin, ghost); |
|
| 7614 g_object_set(G_OBJECT(recvlevel), "message", TRUE, NULL); |
|
| 7615 |
7676 |
| 7616 purple_media_set_audio_src(media, sendbin); |
7677 purple_media_set_audio_src(media, sendbin); |
| 7617 purple_media_set_audio_sink(media, recvbin); |
7678 purple_media_set_audio_sink(media, recvbin); |
| 7618 |
7679 |
| 7619 gtkmedia = pidgin_media_new(media, sendlevel, recvlevel); |
7680 gtkmedia = pidgin_media_new(media, PIDGIN_MEDIA_REQUESTED, sendlevel, recvlevel); |
| 7620 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, |
7681 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, |
| 7621 purple_connection_get_account(purple_media_get_connection(media)), |
7682 purple_connection_get_account(purple_media_get_connection(media)), |
| 7622 purple_media_get_screenname(media)); |
7683 purple_media_get_screenname(media)); |
| 7623 gtkconv = PIDGIN_CONVERSATION(conv); |
7684 gtkconv = PIDGIN_CONVERSATION(conv); |
| 7624 gtk_box_pack_start(GTK_BOX(gtkconv->topvbox), gtkmedia, FALSE, FALSE, 0); |
7685 gtk_box_pack_start(GTK_BOX(gtkconv->topvbox), gtkmedia, FALSE, FALSE, 0); |
| 7625 gtk_widget_show(gtkmedia); |
7686 gtk_widget_show(gtkmedia); |
| 7626 g_signal_connect_swapped(G_OBJECT(media), "got-hangup", G_CALLBACK(gtk_widget_destroy), gtkmedia); |
|
| 7627 g_signal_connect(G_OBJECT(gtkmedia), "message", G_CALLBACK(pidgin_gtkmedia_message_cb), conv); |
7687 g_signal_connect(G_OBJECT(gtkmedia), "message", G_CALLBACK(pidgin_gtkmedia_message_cb), conv); |
| 7628 } |
7688 } |
| |
7689 |
| |
7690 #endif |
| 7629 |
7691 |
| 7630 void * |
7692 void * |
| 7631 pidgin_conversations_get_handle(void) |
7693 pidgin_conversations_get_handle(void) |
| 7632 { |
7694 { |
| 7633 static int handle; |
7695 static int handle; |