priv->ticky = gtk_check_button_new_with_label (_("Remember password"));
gtk_box_pack_start (box, priv->ticky, FALSE, FALSE, 0);
- gtk_widget_show (priv->ticky);
+
+ /* only show it if we actually support it */
+ if (empathy_server_sasl_handler_can_save_response_somewhere (priv->handler))
+ gtk_widget_show (priv->ticky);
g_signal_connect (dialog, "response",
G_CALLBACK (password_dialog_response_cb), dialog);
return (priv->password != NULL);
}
+
+/**
+ * empathy_server_sasl_handler_can_save_response_somewhere:
+ * @self:
+ *
+ * Returns: %TRUE if the response can be saved somewhere, either the keyring
+ * or via Ch.I.CredentialsStorage
+ */
+gboolean
+empathy_server_sasl_handler_can_save_response_somewhere (
+ EmpathyServerSASLHandler *self)
+{
+ EmpathyServerSASLHandlerPriv *priv;
+ gboolean may_save_response, may_save_response_valid;
+ gboolean has_storage_iface;
+
+ g_return_val_if_fail (EMPATHY_IS_SERVER_SASL_HANDLER (self), FALSE);
+
+ priv = self->priv;
+
+ /* determine if we are permitted to save the password locally */
+ may_save_response = tp_asv_get_boolean (
+ tp_channel_borrow_immutable_properties (priv->channel),
+ TP_PROP_CHANNEL_INTERFACE_SASL_AUTHENTICATION_MAY_SAVE_RESPONSE,
+ &may_save_response_valid);
+
+ if (!may_save_response_valid)
+ {
+ DEBUG ("MaySaveResponse unknown, assuming TRUE");
+ may_save_response = TRUE;
+ }
+
+ has_storage_iface = tp_proxy_has_interface_by_id (priv->channel,
+ EMP_IFACE_QUARK_CHANNEL_INTERFACE_CREDENTIALS_STORAGE);
+
+ return may_save_response || has_storage_iface;
+}
gboolean empathy_server_sasl_handler_has_password (
EmpathyServerSASLHandler *handler);
+gboolean empathy_server_sasl_handler_can_save_response_somewhere (
+ EmpathyServerSASLHandler *self);
+
G_END_DECLS
#endif /* #ifndef __EMPATHY_SERVER_SASL_HANDLER_H__*/