X-Git-Url: https://git.0d.be/?p=empathy.git;a=blobdiff_plain;f=libempathy%2Fempathy-tp-call.c;h=6c90f49d890a967fba8feac6b387f5627df86c92;hp=8e1ba52b907caa61771036575e0910756508cedf;hb=cd379377afcbe79913c930faded411a1072b9fb9;hpb=f1653cc6f2d2962190dd39594d3f2b3c0616e15f diff --git a/libempathy/empathy-tp-call.c b/libempathy/empathy-tp-call.c index 8e1ba52b..6c90f49d 100644 --- a/libempathy/empathy-tp-call.c +++ b/libempathy/empathy-tp-call.c @@ -25,26 +25,23 @@ #include #include +#include #include -#include -#include -#include #include "empathy-tp-call.h" +#include "empathy-contact-factory.h" +#include "empathy-tp-group.h" +#include "empathy-utils.h" #define DEBUG_FLAG EMPATHY_DEBUG_TP #include "empathy-debug.h" -#define GET_PRIV(object) (G_TYPE_INSTANCE_GET_PRIVATE \ - ((object), EMPATHY_TYPE_TP_CALL, EmpathyTpCallPriv)) - #define STREAM_ENGINE_BUS_NAME "org.freedesktop.Telepathy.StreamEngine" #define STREAM_ENGINE_OBJECT_PATH "/org/freedesktop/Telepathy/StreamEngine" -typedef struct _EmpathyTpCallPriv EmpathyTpCallPriv; - -struct _EmpathyTpCallPriv +#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTpCall) +typedef struct { TpChannel *channel; TpProxy *stream_engine; @@ -57,7 +54,7 @@ struct _EmpathyTpCallPriv EmpathyTpCallStream *audio; EmpathyTpCallStream *video; -}; +} EmpathyTpCallPriv; enum { @@ -276,16 +273,15 @@ tp_call_member_added_cb (EmpathyTpGroup *group, { EmpathyTpCallPriv *priv = GET_PRIV (call); + g_object_ref (call); if (!priv->contact && !empathy_contact_is_user (contact)) { priv->contact = g_object_ref (contact); priv->is_incoming = TRUE; priv->status = EMPATHY_TP_CALL_STATUS_PENDING; g_object_notify (G_OBJECT (call), "is-incoming"); - g_object_notify (G_OBJECT (call), "contact"); - g_object_notify (G_OBJECT (call), "status"); - tp_call_request_streams_for_capabilities (call, - EMPATHY_CAPABILITIES_AUDIO); + g_object_notify (G_OBJECT (call), "contact"); + g_object_notify (G_OBJECT (call), "status"); } if (priv->status == EMPATHY_TP_CALL_STATUS_PENDING && @@ -295,6 +291,7 @@ tp_call_member_added_cb (EmpathyTpGroup *group, priv->status = EMPATHY_TP_CALL_STATUS_ACCEPTED; g_object_notify (G_OBJECT (call), "status"); } + g_object_unref (call); } static void @@ -307,6 +304,7 @@ tp_call_remote_pending_cb (EmpathyTpGroup *group, { EmpathyTpCallPriv *priv = GET_PRIV (call); + g_object_ref (call); if (!priv->contact && !empathy_contact_is_user (contact)) { priv->contact = g_object_ref (contact); @@ -318,6 +316,7 @@ tp_call_remote_pending_cb (EmpathyTpGroup *group, tp_call_request_streams_for_capabilities (call, EMPATHY_CAPABILITIES_AUDIO); } + g_object_unref (call); } static void @@ -629,8 +628,10 @@ empathy_tp_call_class_init (EmpathyTpCallClass *klass) static void empathy_tp_call_init (EmpathyTpCall *call) { - EmpathyTpCallPriv *priv = GET_PRIV (call); + EmpathyTpCallPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (call, + EMPATHY_TYPE_TP_CALL, EmpathyTpCallPriv); + call->priv = priv; priv->status = EMPATHY_TP_CALL_STATUS_READYING; priv->contact = NULL; priv->stream_engine_running = FALSE; @@ -838,3 +839,14 @@ empathy_tp_call_stop_tone (EmpathyTpCall *call) "stoping tone", NULL, G_OBJECT (call)); } +gboolean +empathy_tp_call_has_dtmf (EmpathyTpCall *call) +{ + EmpathyTpCallPriv *priv = GET_PRIV (call); + + g_return_val_if_fail (EMPATHY_IS_TP_CALL (call), FALSE); + + return tp_proxy_has_interface_by_id (priv->channel, + TP_IFACE_QUARK_CHANNEL_INTERFACE_DTMF); +} +