diff options
Diffstat (limited to 'src/empathy-call-observer.c')
-rw-r--r-- | src/empathy-call-observer.c | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/src/empathy-call-observer.c b/src/empathy-call-observer.c index c6ba53c95..8ce57a3e1 100644 --- a/src/empathy-call-observer.c +++ b/src/empathy-call-observer.c @@ -24,6 +24,8 @@ #include <telepathy-glib/telepathy-glib.h> +#include <telepathy-yell/telepathy-yell.h> + #include <libnotify/notification.h> #include <libempathy/empathy-channel-factory.h> @@ -183,7 +185,8 @@ find_main_channel (GList *channels) channel_type = tp_channel_get_channel_type_id (channel); - if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_STREAMED_MEDIA) + if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_STREAMED_MEDIA || + channel_type == TPY_IFACE_QUARK_CHANNEL_TYPE_CALL) return channel; } @@ -193,8 +196,21 @@ find_main_channel (GList *channels) static gboolean has_ongoing_calls (EmpathyCallObserver *self) { - if (self->priv->channels != NULL) - return TRUE; + GList *l; + + for (l = self->priv->channels; l != NULL; l = l->next) + { + TpChannel *channel = TP_CHANNEL (l->data); + GQuark type = tp_channel_get_channel_type_id (channel); + + /* Check that Call channels are not ended */ + if (type == TPY_IFACE_QUARK_CHANNEL_TYPE_CALL && + tpy_call_channel_get_state (TPY_CALL_CHANNEL (channel), NULL, NULL) + == TPY_CALL_STATE_ENDED) + continue; + + return TRUE; + } return FALSE; } @@ -358,7 +374,7 @@ empathy_call_observer_init (EmpathyCallObserver *self) TP_CLIENT_CHANNEL_FACTORY (factory)); g_object_unref (factory); - /* Observe StreamedMedia channels */ + /* Observe Call and StreamedMedia channels */ tp_base_client_take_observer_filter (self->priv->observer, tp_asv_new ( TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, @@ -366,6 +382,13 @@ empathy_call_observer_init (EmpathyCallObserver *self) TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, TP_HANDLE_TYPE_CONTACT, NULL)); + tp_base_client_take_observer_filter (self->priv->observer, + tp_asv_new ( + TP_PROP_CHANNEL_CHANNEL_TYPE, G_TYPE_STRING, + TPY_IFACE_CHANNEL_TYPE_CALL, + TP_PROP_CHANNEL_TARGET_HANDLE_TYPE, G_TYPE_UINT, + TP_HANDLE_TYPE_CONTACT, + NULL)); tp_base_client_set_observer_delay_approvers (self->priv->observer, TRUE); |