+static gboolean
+individual_supports_action (FolksIndividual *individual,
+ EmpathyActionType action)
+{
+ EmpathyContact *contact;
+
+ contact = empathy_contact_dup_best_for_action (individual, action);
+ if (contact == NULL)
+ return FALSE;
+
+ g_object_unref (contact);
+ return TRUE;
+}
+
+static gboolean
+filter_individual (EmpathyContactChooser *chooser,
+ FolksIndividual *individual,
+ gboolean is_online,
+ gboolean searching,
+ gpointer user_data)
+{
+ return individual_supports_action (individual, EMPATHY_ACTION_CHAT) ||
+ individual_supports_action (individual, EMPATHY_ACTION_SMS);
+}
+
+static void
+selection_changed_cb (GtkWidget *chooser,
+ FolksIndividual *selected,
+ EmpathyNewMessageDialog *self)
+{
+ gboolean can_chat, can_sms;
+
+ if (selected == NULL)
+ {
+ can_chat = can_sms = FALSE;
+ }
+ else
+ {
+ can_chat = individual_supports_action (selected, EMPATHY_ACTION_CHAT);
+ can_sms = individual_supports_action (selected, EMPATHY_ACTION_SMS);
+ }
+
+ gtk_widget_set_sensitive (self->priv->button_chat, can_chat);
+#if 0
+ gtk_widget_set_sensitive (self->priv->button_sms, can_sms);
+#endif
+}
+
+static void
+selection_activate_cb (GtkWidget *chooser,
+ EmpathyNewMessageDialog *self)
+{
+ gtk_dialog_response (GTK_DIALOG (self), EMP_NEW_MESSAGE_TEXT);
+}
+