Mercurial > pidgin.yaz
diff pidgin/gtkconv.c @ 25662:28ab41065172
Create a proper media menu with options for audio, video, and
audio/video.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Sat, 31 May 2008 06:29:38 +0000 |
parents | 10f5a529d2a6 |
children | de644f7e3958 |
line wrap: on
line diff
--- 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, "<Separator>", NULL }, #ifdef USE_VV - { N_("/Conversation/_Voice Call..."), NULL, menu_initiate_voice_call_cb, 0, - "<StockItem>", PIDGIN_STOCK_TOOLBAR_CALL}, + { N_("/Conversation/M_edia"), NULL, NULL, 0, "<Branch>", NULL }, + + { N_("/Conversation/Media/_Audio Call"), NULL, menu_initiate_audio_call_cb, 0, + "<StockItem>", PIDGIN_STOCK_TOOLBAR_AUDIO_CALL }, + { N_("/Conversation/Media/_Video Call"), NULL, menu_initiate_video_call_cb, 0, + "<StockItem>", PIDGIN_STOCK_TOOLBAR_VIDEO_CALL }, + { N_("/Conversation/Media/Audio\\/Video _Call"), NULL, menu_initiate_audio_video_call_cb, 0, + "<StockItem>", PIDGIN_STOCK_TOOLBAR_AUDIO_VIDEO_CALL }, #endif { N_("/Conversation/Se_nd File..."), NULL, menu_send_file_cb, 0, "<StockItem>", 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;