[empathy: 1/2] Added functions to determine if a contact has video capabilities



commit 9fe194288e580fcbd79fcae90050ccb8b6380a63
Author: Jonathan Tellier <jonathan tellier gmail com>
Date:   Thu Jul 2 12:08:43 2009 -0400

    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 2bad5c9..0f98bbd 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 d351aec..c82ecd4 100644
--- a/libempathy/empathy-contact.c
+++ b/libempathy/empathy-contact.c
@@ -802,6 +802,30 @@ empathy_contact_can_voip (EmpathyContact *contact)
 }
 
 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)
 {
   EmpathyContactPriv *priv;
diff --git a/libempathy/empathy-contact.h b/libempathy/empathy-contact.h
index d4e3859..4e9c987 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 a71e9c8..520a928 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);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]