[empathy] Only show the "Remember password" tickybox if we can do that



commit 855095a0e0c5c50f0713caf11afad2329428827b
Author: Danielle Madeley <danielle madeley collabora co uk>
Date:   Thu Mar 3 13:35:45 2011 +1100

    Only show the "Remember password" tickybox if we can do that

 libempathy-gtk/empathy-password-dialog.c |    5 +++-
 libempathy/empathy-server-sasl-handler.c |   37 ++++++++++++++++++++++++++++++
 libempathy/empathy-server-sasl-handler.h |    3 ++
 3 files changed, 44 insertions(+), 1 deletions(-)
---
diff --git a/libempathy-gtk/empathy-password-dialog.c b/libempathy-gtk/empathy-password-dialog.c
index 6a01cd2..a06b71d 100644
--- a/libempathy-gtk/empathy-password-dialog.c
+++ b/libempathy-gtk/empathy-password-dialog.c
@@ -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);
diff --git a/libempathy/empathy-server-sasl-handler.c b/libempathy/empathy-server-sasl-handler.c
index b0909e2..d6c81a8 100644
--- a/libempathy/empathy-server-sasl-handler.c
+++ b/libempathy/empathy-server-sasl-handler.c
@@ -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;
+}
diff --git a/libempathy/empathy-server-sasl-handler.h b/libempathy/empathy-server-sasl-handler.h
index 1eedc5b..d89a406 100644
--- a/libempathy/empathy-server-sasl-handler.h
+++ b/libempathy/empathy-server-sasl-handler.h
@@ -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__*/



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]