diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2009-12-16 20:00:11 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2009-12-17 18:38:50 +0800 |
commit | c4ffa18abd28523741b079ab2913fcdff7f39865 (patch) | |
tree | 4277a9192a3f8365e9a82536b784a534e6ab8df3 /libempathy-gtk/empathy-new-call-dialog.c | |
parent | 0af3c68b4c8c9392174d780712f5d4a12d0e13e6 (diff) | |
download | gsoc2013-empathy-c4ffa18abd28523741b079ab2913fcdff7f39865.tar gsoc2013-empathy-c4ffa18abd28523741b079ab2913fcdff7f39865.tar.gz gsoc2013-empathy-c4ffa18abd28523741b079ab2913fcdff7f39865.tar.bz2 gsoc2013-empathy-c4ffa18abd28523741b079ab2913fcdff7f39865.tar.lz gsoc2013-empathy-c4ffa18abd28523741b079ab2913fcdff7f39865.tar.xz gsoc2013-empathy-c4ffa18abd28523741b079ab2913fcdff7f39865.tar.zst gsoc2013-empathy-c4ffa18abd28523741b079ab2913fcdff7f39865.zip |
new-call-dialog: filter out CM which doesn't support calls
Diffstat (limited to 'libempathy-gtk/empathy-new-call-dialog.c')
-rw-r--r-- | libempathy-gtk/empathy-new-call-dialog.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/libempathy-gtk/empathy-new-call-dialog.c b/libempathy-gtk/empathy-new-call-dialog.c index 2118c6710..67bfb589d 100644 --- a/libempathy-gtk/empathy-new-call-dialog.c +++ b/libempathy-gtk/empathy-new-call-dialog.c @@ -26,6 +26,8 @@ #include <gtk/gtk.h> #include <glib/gi18n-lib.h> +#include <telepathy-glib/interfaces.h> + #include <libempathy/empathy-tp-contact-factory.h> #include <libempathy/empathy-contact-manager.h> #include <libempathy/empathy-call-factory.h> @@ -107,6 +109,38 @@ empathy_new_call_dialog_got_response (EmpathyContactSelectorDialog *dialog, g_object_unref (factory); } +static gboolean +empathy_new_call_dialog_account_filter (EmpathyContactSelectorDialog *dialog, + TpAccount *account) +{ + TpConnection *connection; + EmpathyDispatcher *dispatcher; + GList *classes; + + if (tp_account_get_connection_status (account, NULL) != + TP_CONNECTION_STATUS_CONNECTED) + return FALSE; + + /* check if CM supports calls */ + connection = tp_account_get_connection (account); + if (connection == NULL) + return FALSE; + + dispatcher = empathy_dispatcher_dup_singleton (); + + classes = empathy_dispatcher_find_requestable_channel_classes + (dispatcher, connection, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA, + TP_HANDLE_TYPE_CONTACT, NULL); + + g_object_unref (dispatcher); + + if (classes == NULL) + return FALSE; + + g_list_free (classes); + return TRUE; +} + static GObject * empathy_new_call_dialog_constructor (GType type, guint n_props, @@ -178,6 +212,7 @@ empathy_new_call_dialog_class_init ( object_class->constructor = empathy_new_call_dialog_constructor; dialog_class->got_response = empathy_new_call_dialog_got_response; + dialog_class->account_filter = empathy_new_call_dialog_account_filter; } /** |