diff options
Diffstat (limited to 'libempathy-gtk/empathy-new-message-dialog.c')
-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; } /** |