# HG changeset patch # User Mike Ruprecht # Date 1212215378 0 # Node ID 28ab410651723d0c6b4e16ea11a689a6d0377f3c # Parent d048100a43abf19e55ce14ac63b2b977ec2e75ba Create a proper media menu with options for audio, video, and audio/video. diff -r d048100a43ab -r 28ab41065172 libpurple/protocols/jabber/jabber.c --- a/libpurple/protocols/jabber/jabber.c Sat May 31 04:01:18 2008 +0000 +++ b/libpurple/protocols/jabber/jabber.c Sat May 31 06:29:38 2008 +0000 @@ -2640,7 +2640,10 @@ gboolean jabber_can_do_media(PurpleConnection *gc, const char *who, PurpleMediaStreamType type) { - return TRUE; + if (type == PURPLE_MEDIA_AUDIO) + return TRUE; + else + return FALSE; } diff -r d048100a43ab -r 28ab41065172 pidgin/gtkconv.c --- a/pidgin/gtkconv.c Sat May 31 04:01:18 2008 +0000 +++ b/pidgin/gtkconv.c Sat May 31 06:29:38 2008 +0000 @@ -1200,7 +1200,11 @@ /* Forward declare this here, because I want to keep VV-related stuff together for now */ static void -menu_initiate_voice_call_cb(gpointer data, guint action, GtkWidget *widget); +menu_initiate_audio_call_cb(gpointer data, guint action, GtkWidget *widget); +static void +menu_initiate_video_call_cb(gpointer data, guint action, GtkWidget *widget); +static void +menu_initiate_audio_video_call_cb(gpointer data, guint action, GtkWidget *widget); #endif @@ -3064,8 +3068,14 @@ { "/Conversation/sep1", NULL, NULL, 0, "", NULL }, #ifdef USE_VV - { N_("/Conversation/_Voice Call..."), NULL, menu_initiate_voice_call_cb, 0, - "", PIDGIN_STOCK_TOOLBAR_CALL}, + { N_("/Conversation/M_edia"), NULL, NULL, 0, "", NULL }, + + { N_("/Conversation/Media/_Audio Call"), NULL, menu_initiate_audio_call_cb, 0, + "", PIDGIN_STOCK_TOOLBAR_AUDIO_CALL }, + { N_("/Conversation/Media/_Video Call"), NULL, menu_initiate_video_call_cb, 0, + "", PIDGIN_STOCK_TOOLBAR_VIDEO_CALL }, + { N_("/Conversation/Media/Audio\\/Video _Call"), NULL, menu_initiate_audio_video_call_cb, 0, + "", PIDGIN_STOCK_TOOLBAR_AUDIO_VIDEO_CALL }, #endif { N_("/Conversation/Se_nd File..."), NULL, menu_send_file_cb, 0, "", PIDGIN_STOCK_TOOLBAR_SEND_FILE }, @@ -3378,9 +3388,15 @@ N_("/Conversation/View Log")); #ifdef USE_VV - win->menu.call = + win->menu.audio_call = + gtk_item_factory_get_widget(win->menu.item_factory, + N_("/Conversation/Media/Audio Call")); + win->menu.video_call = gtk_item_factory_get_widget(win->menu.item_factory, - N_("/Conversation/Voice Call...")); + N_("/Conversation/Media/Video Call")); + win->menu.audio_video_call = + gtk_item_factory_get_widget(win->menu.item_factory, + N_("/Conversation/Media/Audio\\/Video Call")); #endif /* --- */ @@ -6346,21 +6362,33 @@ /* check if account support voice calls, and if the current buddy supports it */ if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { - if (serv_can_do_media(gc, purple_conversation_get_name(conv), - PURPLE_MEDIA_RECV_AUDIO & PURPLE_MEDIA_SEND_AUDIO)) { + gboolean audio = serv_can_do_media(gc, purple_conversation_get_name(conv), + PURPLE_MEDIA_AUDIO); + gboolean video = serv_can_do_media(gc, purple_conversation_get_name(conv), + PURPLE_MEDIA_VIDEO); + gboolean av = serv_can_do_media(gc, purple_conversation_get_name(conv), + PURPLE_MEDIA_AUDIO | PURPLE_MEDIA_VIDEO); + if (audio) { buttons |= GTK_IMHTML_CALL; - gtk_widget_set_sensitive(win->menu.call, TRUE); + gtk_widget_set_sensitive(win->menu.audio_call, TRUE); } else { buttons &= ~GTK_IMHTML_CALL; - gtk_widget_set_sensitive(win->menu.call, FALSE); + gtk_widget_set_sensitive(win->menu.audio_call, FALSE); } + + gtk_widget_set_sensitive(win->menu.video_call, video ? TRUE : FALSE); + gtk_widget_set_sensitive(win->menu.audio_video_call, av ? TRUE : FALSE); } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { /* for now, don't care about chats... */ buttons &= ~GTK_IMHTML_CALL; - gtk_widget_set_sensitive(win->menu.call, FALSE); + gtk_widget_set_sensitive(win->menu.audio_call, FALSE); + gtk_widget_set_sensitive(win->menu.video_call, FALSE); + gtk_widget_set_sensitive(win->menu.audio_video_call, FALSE); } else { buttons &= ~GTK_IMHTML_CALL; - gtk_widget_set_sensitive(win->menu.call, FALSE); + gtk_widget_set_sensitive(win->menu.audio_call, FALSE); + gtk_widget_set_sensitive(win->menu.video_call, FALSE); + gtk_widget_set_sensitive(win->menu.audio_video_call, FALSE); } #endif @@ -7641,7 +7669,7 @@ } static void -menu_initiate_voice_call_cb(gpointer data, guint action, GtkWidget *widget) +menu_initiate_audio_call_cb(gpointer data, guint action, GtkWidget *widget) { PidginWindow *win = (PidginWindow *)data; PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); @@ -7649,14 +7677,44 @@ PurpleMedia *media = serv_initiate_media(gc, - purple_conversation_get_name(conv), - PURPLE_MEDIA_RECV_AUDIO & PURPLE_MEDIA_SEND_AUDIO); + purple_conversation_get_name(conv), + PURPLE_MEDIA_AUDIO); if (media) purple_media_wait(media); } static void +menu_initiate_video_call_cb(gpointer data, guint action, GtkWidget *widget) +{ + PidginWindow *win = (PidginWindow *)data; + PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); + PurpleConnection *gc = purple_conversation_get_gc(conv); + + PurpleMedia *media = + serv_initiate_media(gc, + purple_conversation_get_name(conv), + PURPLE_MEDIA_VIDEO); + + purple_media_wait(media); +} + +static void +menu_initiate_audio_video_call_cb(gpointer data, guint action, GtkWidget *widget) +{ + PidginWindow *win = (PidginWindow *)data; + PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); + PurpleConnection *gc = purple_conversation_get_gc(conv); + + PurpleMedia *media = + serv_initiate_media(gc, + purple_conversation_get_name(conv), + PURPLE_MEDIA_AUDIO & PURPLE_MEDIA_VIDEO); + + purple_media_wait(media); +} + +static void pidgin_conv_new_media_cb(PurpleMediaManager *manager, PurpleMedia *media, gpointer nul) { GstElement *sendbin, *sendlevel; diff -r d048100a43ab -r 28ab41065172 pidgin/gtkconvwin.h --- a/pidgin/gtkconvwin.h Sat May 31 04:01:18 2008 +0000 +++ b/pidgin/gtkconvwin.h Sat May 31 06:29:38 2008 +0000 @@ -49,8 +49,11 @@ GtkWidget *menubar; GtkWidget *view_log; - - GtkWidget *call; +#ifdef USE_VV + GtkWidget *audio_call; + GtkWidget *video_call; + GtkWidget *audio_video_call; +#endif GtkWidget *send_file; GtkWidget *add_pounce; GtkWidget *get_info; diff -r d048100a43ab -r 28ab41065172 pidgin/gtkimhtmltoolbar.c --- a/pidgin/gtkimhtmltoolbar.c Sat May 31 04:01:18 2008 +0000 +++ b/pidgin/gtkimhtmltoolbar.c Sat May 31 06:29:38 2008 +0000 @@ -1236,7 +1236,7 @@ {PIDGIN_STOCK_TOOLBAR_SMILEY, insert_smiley_cb, &toolbar->smiley, _("Insert Smiley")}, #ifdef USE_VV {"", NULL, NULL, NULL}, - {PIDGIN_STOCK_TOOLBAR_CALL, init_voice_call_cb, &toolbar->call, _("Call")}, + {PIDGIN_STOCK_TOOLBAR_AUDIO_CALL, init_voice_call_cb, &toolbar->call, _("Call")}, #endif {NULL, NULL, NULL, NULL} }; @@ -1460,7 +1460,7 @@ gtk_button_set_relief(GTK_BUTTON(call_button), GTK_RELIEF_NONE); bbox = gtk_hbox_new(FALSE, 3); gtk_container_add(GTK_CONTAINER(call_button), bbox); - image = gtk_image_new_from_stock(PIDGIN_STOCK_TOOLBAR_CALL, + image = gtk_image_new_from_stock(PIDGIN_STOCK_TOOLBAR_AUDIO_CALL, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL)); gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0); label = gtk_label_new_with_mnemonic(_("Call")); diff -r d048100a43ab -r 28ab41065172 pidgin/pidginstock.c --- a/pidgin/pidginstock.c Sat May 31 04:01:18 2008 +0000 +++ b/pidgin/pidginstock.c Sat May 31 06:29:38 2008 +0000 @@ -170,7 +170,9 @@ { PIDGIN_STOCK_TOOLBAR_SEND_FILE, "toolbar", "send-file.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, #ifdef USE_VV - { PIDGIN_STOCK_TOOLBAR_CALL, "toolbar", "call.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_AUDIO_CALL, "toolbar", "audio-call.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_VIDEO_CALL, "toolbar", "video-call.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, + { PIDGIN_STOCK_TOOLBAR_AUDIO_VIDEO_CALL, "toolbar", "audio-video-call.png", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, NULL }, #endif { PIDGIN_STOCK_TRAY_AVAILABLE, "tray", "tray-online.png", FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, NULL }, diff -r d048100a43ab -r 28ab41065172 pidgin/pidginstock.h --- a/pidgin/pidginstock.h Sat May 31 04:01:18 2008 +0000 +++ b/pidgin/pidginstock.h Sat May 31 06:29:38 2008 +0000 @@ -130,7 +130,9 @@ #define PIDGIN_STOCK_TOOLBAR_SELECT_AVATAR "pidgin-select-avatar" #define PIDGIN_STOCK_TOOLBAR_SEND_FILE "pidgin-send-file" #ifdef USE_VV -#define PIDGIN_STOCK_TOOLBAR_CALL "pidgin-call" +#define PIDGIN_STOCK_TOOLBAR_AUDIO_CALL "pidgin-audio-call" +#define PIDGIN_STOCK_TOOLBAR_VIDEO_CALL "pidgin-video-call" +#define PIDGIN_STOCK_TOOLBAR_AUDIO_VIDEO_CALL "pidgin-audio-video-call" #endif /* Tray icons */