diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2009-12-16 20:04:49 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2009-12-17 18:38:50 +0800 |
commit | 5a7cfe477ccf6c5280c0281046d277b4f14740af (patch) | |
tree | d88d51e2bef4ff21eb8fd2d0725d2a6565c7ba11 /libempathy-gtk | |
parent | c4ffa18abd28523741b079ab2913fcdff7f39865 (diff) | |
download | gsoc2013-empathy-5a7cfe477ccf6c5280c0281046d277b4f14740af.tar gsoc2013-empathy-5a7cfe477ccf6c5280c0281046d277b4f14740af.tar.gz gsoc2013-empathy-5a7cfe477ccf6c5280c0281046d277b4f14740af.tar.bz2 gsoc2013-empathy-5a7cfe477ccf6c5280c0281046d277b4f14740af.tar.lz gsoc2013-empathy-5a7cfe477ccf6c5280c0281046d277b4f14740af.tar.xz gsoc2013-empathy-5a7cfe477ccf6c5280c0281046d277b4f14740af.tar.zst gsoc2013-empathy-5a7cfe477ccf6c5280c0281046d277b4f14740af.zip |
new-message-dialog: filter out CM which doesn't support 1-1 chat
Diffstat (limited to 'libempathy-gtk')
-rw-r--r-- | libempathy-gtk/empathy-new-message-dialog.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/libempathy-gtk/empathy-new-message-dialog.c b/libempathy-gtk/empathy-new-message-dialog.c index ca20b4005..3b60b63d5 100644 --- a/libempathy-gtk/empathy-new-message-dialog.c +++ b/libempathy-gtk/empathy-new-message-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-dispatcher.h> @@ -63,6 +65,38 @@ empathy_new_message_dialog_got_response (EmpathyContactSelectorDialog *dialog, empathy_dispatcher_chat_with_contact_id (connection, contact_id, NULL, NULL); } +static gboolean +empathy_new_message_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 1-1 text chat */ + 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_TEXT, + TP_HANDLE_TYPE_CONTACT, NULL); + + g_object_unref (dispatcher); + + if (classes == NULL) + return FALSE; + + g_list_free (classes); + return TRUE; +} + static GObject * empathy_new_message_dialog_constructor (GType type, guint n_props, @@ -123,6 +157,7 @@ empathy_new_message_dialog_class_init ( object_class->constructor = empathy_new_message_dialog_constructor; dialog_class->got_response = empathy_new_message_dialog_got_response; + dialog_class->account_filter = empathy_new_message_account_filter; } /** |