pidgin/gtkconv.c

branch
vv
changeset 22069
841d24b3a2bc
parent 22064
8b35fd51087d
parent 19885
593613a22e57
child 22072
4ad1e1e6d94e
equal deleted inserted replaced
22068:5157ec7a2b6f 22069:841d24b3a2bc
44 #include "cmds.h" 44 #include "cmds.h"
45 #include "debug.h" 45 #include "debug.h"
46 #include "idle.h" 46 #include "idle.h"
47 #include "imgstore.h" 47 #include "imgstore.h"
48 #include "log.h" 48 #include "log.h"
49 #include "mediamanager.h"
49 #include "notify.h" 50 #include "notify.h"
50 #include "prpl.h" 51 #include "prpl.h"
51 #include "request.h" 52 #include "request.h"
52 #include "util.h" 53 #include "util.h"
53 #include "version.h" 54 #include "version.h"
58 #include "gtkconvwin.h" 59 #include "gtkconvwin.h"
59 #include "gtkdialogs.h" 60 #include "gtkdialogs.h"
60 #include "gtkimhtml.h" 61 #include "gtkimhtml.h"
61 #include "gtkimhtmltoolbar.h" 62 #include "gtkimhtmltoolbar.h"
62 #include "gtklog.h" 63 #include "gtklog.h"
64 #include "gtkmedia.h"
63 #include "gtkmenutray.h" 65 #include "gtkmenutray.h"
64 #include "gtkpounce.h" 66 #include "gtkpounce.h"
65 #include "gtkprefs.h" 67 #include "gtkprefs.h"
66 #include "gtkprivacy.h" 68 #include "gtkprivacy.h"
67 #include "gtkthemes.h" 69 #include "gtkthemes.h"
4596 PurpleConversation *conv = gtkconv->active_conv; 4598 PurpleConversation *conv = gtkconv->active_conv;
4597 gboolean chat = (conv->type == PURPLE_CONV_TYPE_CHAT); 4599 gboolean chat = (conv->type == PURPLE_CONV_TYPE_CHAT);
4598 GtkPolicyType imhtml_sw_hscroll; 4600 GtkPolicyType imhtml_sw_hscroll;
4599 4601
4600 /* Setup the top part of the pane */ 4602 /* Setup the top part of the pane */
4601 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); 4603 gtkconv->topvbox = vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
4604 gtk_paned_pack1(GTK_PANED(paned), vbox, TRUE, TRUE);
4602 gtk_widget_show(vbox); 4605 gtk_widget_show(vbox);
4603 4606
4604 /* Setup the info pane */ 4607 /* Setup the info pane */
4605 event_box = gtk_event_box_new(); 4608 event_box = gtk_event_box_new();
4606 #if GTK_CHECK_VERSION(2,4,0) 4609 #if GTK_CHECK_VERSION(2,4,0)
7547 } 7550 }
7548 7551
7549 return TRUE; 7552 return TRUE;
7550 } 7553 }
7551 7554
7555 static void
7556 pidgin_gtkmedia_message_cb(PidginMedia *media, const char *msg, PurpleConversation *conv)
7557 {
7558 purple_conv_im_write(PURPLE_CONV_IM(conv), NULL, msg, PURPLE_MESSAGE_SYSTEM, time(NULL));
7559 }
7560
7561 static void
7562 pidgin_conv_new_media_cb(PurpleMediaManager *manager, PurpleMedia *media, gpointer nul)
7563 {
7564 GstElement *sendbin, *src, *sendlevel;
7565 GstElement *recvbin, *sink, *recvlevel;
7566 GstPad *pad, *ghost;
7567
7568 GtkWidget *gtkmedia;
7569 PurpleConversation *conv;
7570 PidginConversation *gtkconv;
7571
7572 sendbin = gst_bin_new("sendbin");
7573 src = gst_element_factory_make("alsasrc", "asrc");
7574 sendlevel = gst_element_factory_make("level", "sendlevel");
7575 gst_bin_add_many(GST_BIN(sendbin), src, sendlevel, NULL);
7576 gst_element_link(src, sendlevel); //, gst_caps_new_simple("audio/x-raw-int", "rate", G_TYPE_INT, 8000, NULL));
7577 pad = gst_element_get_pad(sendlevel, "src");
7578 ghost = gst_ghost_pad_new("ghostsrc", pad);
7579 gst_element_add_pad(sendbin, ghost);
7580 g_object_set(G_OBJECT(sendlevel), "message", TRUE, NULL);
7581
7582 recvbin = gst_bin_new("pidginrecvbin");
7583 sink = gst_element_factory_make("alsasink", "asink");
7584 g_object_set(G_OBJECT(sink), "sync", FALSE, NULL);
7585 recvlevel = gst_element_factory_make("level", "recvlevel");
7586 gst_bin_add_many(GST_BIN(recvbin), sink, recvlevel, NULL);
7587 gst_element_link(recvlevel, sink);
7588 pad = gst_element_get_pad(recvlevel, "sink");
7589 ghost = gst_ghost_pad_new("ghostsink", pad);
7590 gst_element_add_pad(recvbin, ghost);
7591 g_object_set(G_OBJECT(recvlevel), "message", TRUE, NULL);
7592
7593 purple_media_set_audio_src(media, sendbin);
7594 purple_media_set_audio_sink(media, recvbin);
7595
7596 gtkmedia = pidgin_media_new(media, sendlevel, recvlevel);
7597 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM,
7598 purple_connection_get_account(purple_media_get_connection(media)),
7599 purple_media_get_screenname(media));
7600 gtkconv = PIDGIN_CONVERSATION(conv);
7601 gtk_box_pack_start(GTK_BOX(gtkconv->topvbox), gtkmedia, FALSE, FALSE, 0);
7602 gtk_widget_show(gtkmedia);
7603 g_signal_connect_swapped(G_OBJECT(media), "got-hangup", G_CALLBACK(gtk_widget_destroy), gtkmedia);
7604 g_signal_connect(G_OBJECT(gtkmedia), "message", G_CALLBACK(pidgin_gtkmedia_message_cb), conv);
7605 }
7606
7552 void * 7607 void *
7553 pidgin_conversations_get_handle(void) 7608 pidgin_conversations_get_handle(void)
7554 { 7609 {
7555 static int handle; 7610 static int handle;
7556 7611
7643 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/show_protocol_icons", 7698 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/show_protocol_icons",
7644 show_protocol_icons_pref_cb, NULL); 7699 show_protocol_icons_pref_cb, NULL);
7645 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/hide_new", 7700 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/hide_new",
7646 hide_new_pref_cb, NULL); 7701 hide_new_pref_cb, NULL);
7647 7702
7703 g_signal_connect(G_OBJECT(purple_media_manager_get()), "init-media",
7704 G_CALLBACK(pidgin_conv_new_media_cb), NULL);
7648 7705
7649 7706
7650 /********************************************************************** 7707 /**********************************************************************
7651 * Register signals 7708 * Register signals
7652 **********************************************************************/ 7709 **********************************************************************/

mercurial