Mercurial > pidgin.yaz
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 { |