comparison 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
comparison
equal deleted inserted replaced
25661:d048100a43ab 25662:28ab41065172
1198 1198
1199 #ifdef USE_VV 1199 #ifdef USE_VV
1200 /* Forward declare this here, because I want to keep VV-related stuff together 1200 /* Forward declare this here, because I want to keep VV-related stuff together
1201 for now */ 1201 for now */
1202 static void 1202 static void
1203 menu_initiate_voice_call_cb(gpointer data, guint action, GtkWidget *widget); 1203 menu_initiate_audio_call_cb(gpointer data, guint action, GtkWidget *widget);
1204 static void
1205 menu_initiate_video_call_cb(gpointer data, guint action, GtkWidget *widget);
1206 static void
1207 menu_initiate_audio_video_call_cb(gpointer data, guint action, GtkWidget *widget);
1204 1208
1205 #endif 1209 #endif
1206 1210
1207 static void 1211 static void
1208 menu_send_file_cb(gpointer data, guint action, GtkWidget *widget) 1212 menu_send_file_cb(gpointer data, guint action, GtkWidget *widget)
3062 { N_("/Conversation/Clea_r Scrollback"), "<CTL>L", menu_clear_cb, 0, "<StockItem>", GTK_STOCK_CLEAR }, 3066 { N_("/Conversation/Clea_r Scrollback"), "<CTL>L", menu_clear_cb, 0, "<StockItem>", GTK_STOCK_CLEAR },
3063 3067
3064 { "/Conversation/sep1", NULL, NULL, 0, "<Separator>", NULL }, 3068 { "/Conversation/sep1", NULL, NULL, 0, "<Separator>", NULL },
3065 3069
3066 #ifdef USE_VV 3070 #ifdef USE_VV
3067 { N_("/Conversation/_Voice Call..."), NULL, menu_initiate_voice_call_cb, 0, 3071 { N_("/Conversation/M_edia"), NULL, NULL, 0, "<Branch>", NULL },
3068 "<StockItem>", PIDGIN_STOCK_TOOLBAR_CALL}, 3072
3073 { N_("/Conversation/Media/_Audio Call"), NULL, menu_initiate_audio_call_cb, 0,
3074 "<StockItem>", PIDGIN_STOCK_TOOLBAR_AUDIO_CALL },
3075 { N_("/Conversation/Media/_Video Call"), NULL, menu_initiate_video_call_cb, 0,
3076 "<StockItem>", PIDGIN_STOCK_TOOLBAR_VIDEO_CALL },
3077 { N_("/Conversation/Media/Audio\\/Video _Call"), NULL, menu_initiate_audio_video_call_cb, 0,
3078 "<StockItem>", PIDGIN_STOCK_TOOLBAR_AUDIO_VIDEO_CALL },
3069 #endif 3079 #endif
3070 3080
3071 { N_("/Conversation/Se_nd File..."), NULL, menu_send_file_cb, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_SEND_FILE }, 3081 { N_("/Conversation/Se_nd File..."), NULL, menu_send_file_cb, 0, "<StockItem>", PIDGIN_STOCK_TOOLBAR_SEND_FILE },
3072 { N_("/Conversation/Add Buddy _Pounce..."), NULL, menu_add_pounce_cb, 3082 { N_("/Conversation/Add Buddy _Pounce..."), NULL, menu_add_pounce_cb,
3073 0, "<Item>", NULL }, 3083 0, "<Item>", NULL },
3376 win->menu.view_log = 3386 win->menu.view_log =
3377 gtk_item_factory_get_widget(win->menu.item_factory, 3387 gtk_item_factory_get_widget(win->menu.item_factory,
3378 N_("/Conversation/View Log")); 3388 N_("/Conversation/View Log"));
3379 3389
3380 #ifdef USE_VV 3390 #ifdef USE_VV
3381 win->menu.call = 3391 win->menu.audio_call =
3382 gtk_item_factory_get_widget(win->menu.item_factory, 3392 gtk_item_factory_get_widget(win->menu.item_factory,
3383 N_("/Conversation/Voice Call...")); 3393 N_("/Conversation/Media/Audio Call"));
3394 win->menu.video_call =
3395 gtk_item_factory_get_widget(win->menu.item_factory,
3396 N_("/Conversation/Media/Video Call"));
3397 win->menu.audio_video_call =
3398 gtk_item_factory_get_widget(win->menu.item_factory,
3399 N_("/Conversation/Media/Audio\\/Video Call"));
3384 #endif 3400 #endif
3385 3401
3386 /* --- */ 3402 /* --- */
3387 3403
3388 win->menu.send_file = 3404 win->menu.send_file =
6344 6360
6345 #ifdef USE_VV 6361 #ifdef USE_VV
6346 /* check if account support voice calls, and if the current buddy 6362 /* check if account support voice calls, and if the current buddy
6347 supports it */ 6363 supports it */
6348 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { 6364 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) {
6349 if (serv_can_do_media(gc, purple_conversation_get_name(conv), 6365 gboolean audio = serv_can_do_media(gc, purple_conversation_get_name(conv),
6350 PURPLE_MEDIA_RECV_AUDIO & PURPLE_MEDIA_SEND_AUDIO)) { 6366 PURPLE_MEDIA_AUDIO);
6367 gboolean video = serv_can_do_media(gc, purple_conversation_get_name(conv),
6368 PURPLE_MEDIA_VIDEO);
6369 gboolean av = serv_can_do_media(gc, purple_conversation_get_name(conv),
6370 PURPLE_MEDIA_AUDIO | PURPLE_MEDIA_VIDEO);
6371 if (audio) {
6351 buttons |= GTK_IMHTML_CALL; 6372 buttons |= GTK_IMHTML_CALL;
6352 gtk_widget_set_sensitive(win->menu.call, TRUE); 6373 gtk_widget_set_sensitive(win->menu.audio_call, TRUE);
6353 } else { 6374 } else {
6354 buttons &= ~GTK_IMHTML_CALL; 6375 buttons &= ~GTK_IMHTML_CALL;
6355 gtk_widget_set_sensitive(win->menu.call, FALSE); 6376 gtk_widget_set_sensitive(win->menu.audio_call, FALSE);
6356 } 6377 }
6378
6379 gtk_widget_set_sensitive(win->menu.video_call, video ? TRUE : FALSE);
6380 gtk_widget_set_sensitive(win->menu.audio_video_call, av ? TRUE : FALSE);
6357 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { 6381 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) {
6358 /* for now, don't care about chats... */ 6382 /* for now, don't care about chats... */
6359 buttons &= ~GTK_IMHTML_CALL; 6383 buttons &= ~GTK_IMHTML_CALL;
6360 gtk_widget_set_sensitive(win->menu.call, FALSE); 6384 gtk_widget_set_sensitive(win->menu.audio_call, FALSE);
6385 gtk_widget_set_sensitive(win->menu.video_call, FALSE);
6386 gtk_widget_set_sensitive(win->menu.audio_video_call, FALSE);
6361 } else { 6387 } else {
6362 buttons &= ~GTK_IMHTML_CALL; 6388 buttons &= ~GTK_IMHTML_CALL;
6363 gtk_widget_set_sensitive(win->menu.call, FALSE); 6389 gtk_widget_set_sensitive(win->menu.audio_call, FALSE);
6390 gtk_widget_set_sensitive(win->menu.video_call, FALSE);
6391 gtk_widget_set_sensitive(win->menu.audio_video_call, FALSE);
6364 } 6392 }
6365 #endif 6393 #endif
6366 6394
6367 gtk_imhtml_set_format_functions(GTK_IMHTML(gtkconv->entry), buttons); 6395 gtk_imhtml_set_format_functions(GTK_IMHTML(gtkconv->entry), buttons);
6368 if (account != NULL) 6396 if (account != NULL)
7639 { 7667 {
7640 purple_conv_im_write(PURPLE_CONV_IM(conv), NULL, msg, PURPLE_MESSAGE_SYSTEM, time(NULL)); 7668 purple_conv_im_write(PURPLE_CONV_IM(conv), NULL, msg, PURPLE_MESSAGE_SYSTEM, time(NULL));
7641 } 7669 }
7642 7670
7643 static void 7671 static void
7644 menu_initiate_voice_call_cb(gpointer data, guint action, GtkWidget *widget) 7672 menu_initiate_audio_call_cb(gpointer data, guint action, GtkWidget *widget)
7645 { 7673 {
7646 PidginWindow *win = (PidginWindow *)data; 7674 PidginWindow *win = (PidginWindow *)data;
7647 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win); 7675 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win);
7648 PurpleConnection *gc = purple_conversation_get_gc(conv); 7676 PurpleConnection *gc = purple_conversation_get_gc(conv);
7649 7677
7650 PurpleMedia *media = 7678 PurpleMedia *media =
7651 serv_initiate_media(gc, 7679 serv_initiate_media(gc,
7652 purple_conversation_get_name(conv), 7680 purple_conversation_get_name(conv),
7653 PURPLE_MEDIA_RECV_AUDIO & PURPLE_MEDIA_SEND_AUDIO); 7681 PURPLE_MEDIA_AUDIO);
7654 7682
7655 if (media) 7683 if (media)
7656 purple_media_wait(media); 7684 purple_media_wait(media);
7685 }
7686
7687 static void
7688 menu_initiate_video_call_cb(gpointer data, guint action, GtkWidget *widget)
7689 {
7690 PidginWindow *win = (PidginWindow *)data;
7691 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win);
7692 PurpleConnection *gc = purple_conversation_get_gc(conv);
7693
7694 PurpleMedia *media =
7695 serv_initiate_media(gc,
7696 purple_conversation_get_name(conv),
7697 PURPLE_MEDIA_VIDEO);
7698
7699 purple_media_wait(media);
7700 }
7701
7702 static void
7703 menu_initiate_audio_video_call_cb(gpointer data, guint action, GtkWidget *widget)
7704 {
7705 PidginWindow *win = (PidginWindow *)data;
7706 PurpleConversation *conv = pidgin_conv_window_get_active_conversation(win);
7707 PurpleConnection *gc = purple_conversation_get_gc(conv);
7708
7709 PurpleMedia *media =
7710 serv_initiate_media(gc,
7711 purple_conversation_get_name(conv),
7712 PURPLE_MEDIA_AUDIO & PURPLE_MEDIA_VIDEO);
7713
7714 purple_media_wait(media);
7657 } 7715 }
7658 7716
7659 static void 7717 static void
7660 pidgin_conv_new_media_cb(PurpleMediaManager *manager, PurpleMedia *media, gpointer nul) 7718 pidgin_conv_new_media_cb(PurpleMediaManager *manager, PurpleMedia *media, gpointer nul)
7661 { 7719 {