]> git.0d.be Git - empathy.git/commitdiff
Only show the "Remember password" tickybox if we can do that
authorDanielle Madeley <danielle.madeley@collabora.co.uk>
Thu, 3 Mar 2011 02:35:45 +0000 (13:35 +1100)
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>
Thu, 3 Mar 2011 09:23:15 +0000 (10:23 +0100)
libempathy-gtk/empathy-password-dialog.c
libempathy/empathy-server-sasl-handler.c
libempathy/empathy-server-sasl-handler.h

index 6a01cd2f8ae7c0246bad607cf3f877eb5c67098b..a06b71d9f98f64ca78a988c3478f0f50f4aa3155 100644 (file)
@@ -311,7 +311,10 @@ empathy_password_dialog_constructed (GObject *object)
   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);
index b0909e220f473552eaefba45bf33e054d9cc73e0..d6c81a862d3ebffc775ae47011df755a56764db7 100644 (file)
@@ -498,3 +498,40 @@ empathy_server_sasl_handler_has_password (EmpathyServerSASLHandler *handler)
 
   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;
+}
index 1eedc5b27b38afcdfe6af1d5974ff8442815dc4f..d89a4064f27365655aad903a1fb7f88b831ffff6 100644 (file)
@@ -77,6 +77,9 @@ TpAccount * empathy_server_sasl_handler_get_account (
 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__*/