Mercurial > pidgin.yaz
diff pidgin/gtkconv.c @ 25721:aaf11cffe2b2
Prevent multiple voice and video sessions within the same conversation.
Properly update the menu when starting or stopping a media session.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Thu, 14 Aug 2008 23:14:56 +0000 |
parents | eb8c8a926589 |
children | 1d9a2296d5d2 |
line wrap: on
line diff
--- a/pidgin/gtkconv.c Sat Aug 09 03:51:42 2008 +0000 +++ b/pidgin/gtkconv.c Thu Aug 14 23:14:56 2008 +0000 @@ -6381,7 +6381,8 @@ /* check if account support voice calls, and if the current buddy supports it */ if (account != NULL && purple_conversation_get_type(conv) - == PURPLE_CONV_TYPE_IM) { + == PURPLE_CONV_TYPE_IM + && gtkconv->gtkmedia == NULL) { gboolean audio = purple_prpl_can_do_media(account, purple_conversation_get_name(conv), PURPLE_MEDIA_AUDIO); @@ -7732,6 +7733,13 @@ } static void +pidgin_conv_gtkmedia_destroyed(GtkWidget *widget, PidginConversation *gtkconv) +{ + gtk_widget_destroyed(widget, &(gtkconv->gtkmedia)); + gray_stuff_out(gtkconv); +} + +static void pidgin_conv_new_media_cb(PurpleMediaManager *manager, PurpleMedia *media, gpointer nul) { GtkWidget *gtkmedia; @@ -7751,10 +7759,13 @@ g_signal_connect(G_OBJECT(gtkmedia), "message", G_CALLBACK(pidgin_gtkmedia_message_cb), conv); gtkconv->gtkmedia = gtkmedia; - g_signal_connect(G_OBJECT(gtkmedia), "destroy", G_CALLBACK(gtk_widget_destroyed), &(gtkconv->gtkmedia)); + g_signal_connect(G_OBJECT(gtkmedia), "destroy", G_CALLBACK( + pidgin_conv_gtkmedia_destroyed), gtkconv); gtk_paned_pack2(GTK_PANED(gtkconv->middle_hpaned), pidgin_media_get_display_widget(gtkmedia), FALSE, TRUE); + + gray_stuff_out(gtkconv); } #endif