| 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" |
| 4606 PurpleConversation *conv = gtkconv->active_conv; |
4608 PurpleConversation *conv = gtkconv->active_conv; |
| 4607 gboolean chat = (conv->type == PURPLE_CONV_TYPE_CHAT); |
4609 gboolean chat = (conv->type == PURPLE_CONV_TYPE_CHAT); |
| 4608 GtkPolicyType imhtml_sw_hscroll; |
4610 GtkPolicyType imhtml_sw_hscroll; |
| 4609 |
4611 |
| 4610 /* Setup the top part of the pane */ |
4612 /* Setup the top part of the pane */ |
| 4611 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
4613 gtkconv->topvbox = vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
| 4612 gtk_widget_show(vbox); |
4614 gtk_widget_show(vbox); |
| 4613 |
4615 |
| 4614 /* Setup the info pane */ |
4616 /* Setup the info pane */ |
| 4615 event_box = gtk_event_box_new(); |
4617 event_box = gtk_event_box_new(); |
| 4616 #if GTK_CHECK_VERSION(2,4,0) |
4618 #if GTK_CHECK_VERSION(2,4,0) |
| 7577 } |
7579 } |
| 7578 |
7580 |
| 7579 return TRUE; |
7581 return TRUE; |
| 7580 } |
7582 } |
| 7581 |
7583 |
| |
7584 static void |
| |
7585 pidgin_gtkmedia_message_cb(PidginMedia *media, const char *msg, PurpleConversation *conv) |
| |
7586 { |
| |
7587 purple_conv_im_write(PURPLE_CONV_IM(conv), NULL, msg, PURPLE_MESSAGE_SYSTEM, time(NULL)); |
| |
7588 } |
| |
7589 |
| |
7590 static void |
| |
7591 pidgin_conv_new_media_cb(PurpleMediaManager *manager, PurpleMedia *media, gpointer nul) |
| |
7592 { |
| |
7593 GstElement *sendbin, *src, *sendlevel; |
| |
7594 GstElement *recvbin, *sink, *recvlevel; |
| |
7595 GstPad *pad, *ghost; |
| |
7596 |
| |
7597 GtkWidget *gtkmedia; |
| |
7598 PurpleConversation *conv; |
| |
7599 PidginConversation *gtkconv; |
| |
7600 |
| |
7601 sendbin = gst_bin_new("sendbin"); |
| |
7602 src = gst_element_factory_make("alsasrc", "asrc"); |
| |
7603 sendlevel = gst_element_factory_make("level", "sendlevel"); |
| |
7604 gst_bin_add_many(GST_BIN(sendbin), src, sendlevel, NULL); |
| |
7605 gst_element_link(src, sendlevel); //, gst_caps_new_simple("audio/x-raw-int", "rate", G_TYPE_INT, 8000, NULL)); |
| |
7606 pad = gst_element_get_pad(sendlevel, "src"); |
| |
7607 ghost = gst_ghost_pad_new("ghostsrc", pad); |
| |
7608 gst_element_add_pad(sendbin, ghost); |
| |
7609 g_object_set(G_OBJECT(sendlevel), "message", TRUE, NULL); |
| |
7610 |
| |
7611 recvbin = gst_bin_new("pidginrecvbin"); |
| |
7612 sink = gst_element_factory_make("alsasink", "asink"); |
| |
7613 g_object_set(G_OBJECT(sink), "sync", FALSE, NULL); |
| |
7614 recvlevel = gst_element_factory_make("level", "recvlevel"); |
| |
7615 gst_bin_add_many(GST_BIN(recvbin), sink, recvlevel, NULL); |
| |
7616 gst_element_link(recvlevel, sink); |
| |
7617 pad = gst_element_get_pad(recvlevel, "sink"); |
| |
7618 ghost = gst_ghost_pad_new("ghostsink", pad); |
| |
7619 gst_element_add_pad(recvbin, ghost); |
| |
7620 g_object_set(G_OBJECT(recvlevel), "message", TRUE, NULL); |
| |
7621 |
| |
7622 purple_media_set_audio_src(media, sendbin); |
| |
7623 purple_media_set_audio_sink(media, recvbin); |
| |
7624 |
| |
7625 gtkmedia = pidgin_media_new(media, sendlevel, recvlevel); |
| |
7626 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, |
| |
7627 purple_connection_get_account(purple_media_get_connection(media)), |
| |
7628 purple_media_get_screenname(media)); |
| |
7629 gtkconv = PIDGIN_CONVERSATION(conv); |
| |
7630 gtk_box_pack_start(GTK_BOX(gtkconv->topvbox), gtkmedia, FALSE, FALSE, 0); |
| |
7631 gtk_widget_show(gtkmedia); |
| |
7632 g_signal_connect_swapped(G_OBJECT(media), "got-hangup", G_CALLBACK(gtk_widget_destroy), gtkmedia); |
| |
7633 g_signal_connect(G_OBJECT(gtkmedia), "message", G_CALLBACK(pidgin_gtkmedia_message_cb), conv); |
| |
7634 } |
| |
7635 |
| 7582 void * |
7636 void * |
| 7583 pidgin_conversations_get_handle(void) |
7637 pidgin_conversations_get_handle(void) |
| 7584 { |
7638 { |
| 7585 static int handle; |
7639 static int handle; |
| 7586 |
7640 |
| 7673 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/show_protocol_icons", |
7727 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/show_protocol_icons", |
| 7674 show_protocol_icons_pref_cb, NULL); |
7728 show_protocol_icons_pref_cb, NULL); |
| 7675 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/hide_new", |
7729 purple_prefs_connect_callback(handle, PIDGIN_PREFS_ROOT "/conversations/im/hide_new", |
| 7676 hide_new_pref_cb, NULL); |
7730 hide_new_pref_cb, NULL); |
| 7677 |
7731 |
| |
7732 g_signal_connect(G_OBJECT(purple_media_manager_get()), "init-media", |
| |
7733 G_CALLBACK(pidgin_conv_new_media_cb), NULL); |
| 7678 |
7734 |
| 7679 |
7735 |
| 7680 /********************************************************************** |
7736 /********************************************************************** |
| 7681 * Register signals |
7737 * Register signals |
| 7682 **********************************************************************/ |
7738 **********************************************************************/ |