From 9fe194288e580fcbd79fcae90050ccb8b6380a63 Mon Sep 17 00:00:00 2001 From: Jonathan Tellier Date: Thu, 2 Jul 2009 12:08:43 -0400 Subject: [PATCH] Added functions to determine if a contact has video capabilities Activating the "Video Call" button only if the remote contact support video. The call window's "Send Video" is only sensitive if the contact has video capabilities. --- libempathy-gtk/empathy-contact-menu.c | 4 ++-- libempathy/empathy-contact.c | 24 ++++++++++++++++++++++++ libempathy/empathy-contact.h | 2 ++ src/empathy-call-window.c | 12 +++++++----- 4 files changed, 35 insertions(+), 7 deletions(-) diff --git a/libempathy-gtk/empathy-contact-menu.c b/libempathy-gtk/empathy-contact-menu.c index 2bad5c9f..0f98bbdc 100644 --- a/libempathy-gtk/empathy-contact-menu.c +++ b/libempathy-gtk/empathy-contact-menu.c @@ -167,7 +167,7 @@ empathy_contact_audio_call_menu_item_new (EmpathyContact *contact) image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_VOIP, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); - gtk_widget_set_sensitive (item, empathy_contact_can_voip (contact)); + gtk_widget_set_sensitive (item, empathy_contact_can_voip_audio (contact)); gtk_widget_show (image); g_signal_connect (item, "activate", @@ -199,7 +199,7 @@ empathy_contact_video_call_menu_item_new (EmpathyContact *contact) image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_VIDEO_CALL, GTK_ICON_SIZE_MENU); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); - gtk_widget_set_sensitive (item, empathy_contact_can_voip (contact)); + gtk_widget_set_sensitive (item, empathy_contact_can_voip_video (contact)); gtk_widget_show (image); g_signal_connect (item, "activate", diff --git a/libempathy/empathy-contact.c b/libempathy/empathy-contact.c index d351aecb..c82ecd46 100644 --- a/libempathy/empathy-contact.c +++ b/libempathy/empathy-contact.c @@ -801,6 +801,30 @@ empathy_contact_can_voip (EmpathyContact *contact) EMPATHY_CAPABILITIES_VIDEO); } +gboolean +empathy_contact_can_voip_audio (EmpathyContact *contact) +{ + EmpathyContactPriv *priv; + + g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE); + + priv = GET_PRIV (contact); + + return priv->capabilities & EMPATHY_CAPABILITIES_AUDIO; +} + +gboolean +empathy_contact_can_voip_video (EmpathyContact *contact) +{ + EmpathyContactPriv *priv; + + g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE); + + priv = GET_PRIV (contact); + + return priv->capabilities & EMPATHY_CAPABILITIES_VIDEO; +} + gboolean empathy_contact_can_send_files (EmpathyContact *contact) { diff --git a/libempathy/empathy-contact.h b/libempathy/empathy-contact.h index d4e38592..4e9c9875 100644 --- a/libempathy/empathy-contact.h +++ b/libempathy/empathy-contact.h @@ -99,6 +99,8 @@ void empathy_contact_set_is_user (EmpathyContact *contact, gboolean empathy_contact_is_online (EmpathyContact *contact); const gchar * empathy_contact_get_status (EmpathyContact *contact); gboolean empathy_contact_can_voip (EmpathyContact *contact); +gboolean empathy_contact_can_voip_audio (EmpathyContact *contact); +gboolean empathy_contact_can_voip_video (EmpathyContact *contact); gboolean empathy_contact_can_send_files (EmpathyContact *contact); gboolean empathy_contact_can_use_stream_tube (EmpathyContact *contact); guint empathy_contact_hash (gconstpointer key); diff --git a/src/empathy-call-window.c b/src/empathy-call-window.c index a71e9c8b..520a9282 100644 --- a/src/empathy-call-window.c +++ b/src/empathy-call-window.c @@ -809,7 +809,6 @@ static void init_contact_avatar_with_size (EmpathyContact *contact, GtkWidget *image_widget, gint size) { - GdkPixbuf *pixbuf_avatar = NULL; if (contact != NULL) @@ -1347,6 +1346,8 @@ empathy_call_window_connected (gpointer user_data) EmpathyCallWindow *self = EMPATHY_CALL_WINDOW (user_data); EmpathyCallWindowPriv *priv = GET_PRIV (self); EmpathyTpCall *call; + gboolean can_send_video = priv->video_input != NULL && priv->contact != NULL + && empathy_contact_can_voip_video (priv->contact); g_object_get (priv->handler, "tp-call", &call, NULL); @@ -1357,9 +1358,10 @@ empathy_call_window_connected (gpointer user_data) gtk_widget_set_sensitive (priv->dtmf_panel, TRUE); if (priv->video_input == NULL) - empathy_call_window_set_send_video (self, FALSE); + empathy_call_window_set_send_video (self, FALSE); - priv->sending_video = empathy_tp_call_is_sending_video (call); + priv->sending_video = can_send_video ? + empathy_tp_call_is_sending_video (call) : FALSE; gtk_action_set_sensitive (priv->show_preview, TRUE); gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (priv->show_preview), @@ -1370,8 +1372,8 @@ empathy_call_window_connected (gpointer user_data) gtk_toggle_tool_button_set_active ( GTK_TOGGLE_TOOL_BUTTON (priv->camera_button), priv->sending_video && priv->video_input != NULL); - gtk_widget_set_sensitive (priv->camera_button, priv->video_input != NULL); - gtk_action_set_sensitive (priv->send_video, priv->video_input != NULL); + gtk_widget_set_sensitive (priv->camera_button, can_send_video); + gtk_action_set_sensitive (priv->send_video, can_send_video); gtk_action_set_sensitive (priv->redial, FALSE); gtk_widget_set_sensitive (priv->redial_button, FALSE); -- 2.39.2