seahorse r2744 - in trunk: . gkr



Author: nnielsen
Date: Mon Feb  2 02:58:44 2009
New Revision: 2744
URL: http://svn.gnome.org/viewvc/seahorse?rev=2744&view=rev

Log:
Retrieve default key name and set default keyring flag on keyrings.

Modified:
   trunk/ChangeLog
   trunk/gkr/seahorse-gkr-keyring.c
   trunk/gkr/seahorse-gkr-keyring.h
   trunk/gkr/seahorse-gkr-source.c

Modified: trunk/gkr/seahorse-gkr-keyring.c
==============================================================================
--- trunk/gkr/seahorse-gkr-keyring.c	(original)
+++ trunk/gkr/seahorse-gkr-keyring.c	Mon Feb  2 02:58:44 2009
@@ -269,11 +269,13 @@
 	PROP_SOURCE_TAG,
 	PROP_SOURCE_LOCATION,
 	PROP_KEYRING_NAME,
-	PROP_KEYRING_INFO
+	PROP_KEYRING_INFO,
+	PROP_IS_DEFAULT
 };
 
 struct _SeahorseGkrKeyringPrivate {
 	gchar *keyring_name;
+	gboolean is_default;
 	
 	gpointer req_info;
 	GnomeKeyringInfo *keyring_info;
@@ -457,6 +459,9 @@
 	case PROP_KEYRING_INFO:
 		seahorse_gkr_keyring_set_info (self, g_value_get_boxed (value));
 		break;
+	case PROP_IS_DEFAULT:
+		seahorse_gkr_keyring_set_is_default (self, g_value_get_boolean (value));
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
 		break;
@@ -482,6 +487,9 @@
 	case PROP_KEYRING_INFO:
 		g_value_set_boxed (value, seahorse_gkr_keyring_get_info (self));
 		break;
+	case PROP_IS_DEFAULT:
+		g_value_set_boolean (value, seahorse_gkr_keyring_get_is_default (self));
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
 		break;
@@ -517,6 +525,10 @@
 	g_object_class_install_property (gobject_class, PROP_KEYRING_INFO,
 	           g_param_spec_boxed ("keyring-info", "Gnome Keyring Info", "Info about keyring.", 
 	                               boxed_type_keyring_info (), G_PARAM_READWRITE));
+	
+	g_object_class_install_property (gobject_class, PROP_IS_DEFAULT,
+	           g_param_spec_boolean ("is-default", "Is default", "Is the default keyring.",
+	                                 FALSE, G_PARAM_READWRITE));
 }
 
 static void 
@@ -570,3 +582,18 @@
 	g_object_notify (obj, "keyring-info");
 	g_object_thaw_notify (obj);
 }
+
+gboolean
+seahorse_gkr_keyring_get_is_default (SeahorseGkrKeyring *self)
+{
+	g_return_val_if_fail (SEAHORSE_IS_GKR_KEYRING (self), FALSE);
+	return self->pv->is_default;
+}
+
+void
+seahorse_gkr_keyring_set_is_default (SeahorseGkrKeyring *self, gboolean is_default)
+{
+	g_return_if_fail (SEAHORSE_IS_GKR_KEYRING (self));
+	self->pv->is_default = is_default;
+	g_object_notify (G_OBJECT (self), "is-default");
+}

Modified: trunk/gkr/seahorse-gkr-keyring.h
==============================================================================
--- trunk/gkr/seahorse-gkr-keyring.h	(original)
+++ trunk/gkr/seahorse-gkr-keyring.h	Mon Feb  2 02:58:44 2009
@@ -59,4 +59,9 @@
 void                 seahorse_gkr_keyring_set_info         (SeahorseGkrKeyring *self,
                                                             GnomeKeyringInfo *info);
 
+gboolean             seahorse_gkr_keyring_get_is_default   (SeahorseGkrKeyring *self);
+
+void                 seahorse_gkr_keyring_set_is_default   (SeahorseGkrKeyring *self,
+                                                            gboolean is_default);
+
 #endif /* __SEAHORSE_GKR_KEYRING_H__ */

Modified: trunk/gkr/seahorse-gkr-source.c
==============================================================================
--- trunk/gkr/seahorse-gkr-source.c	(original)
+++ trunk/gkr/seahorse-gkr-source.c	Mon Feb  2 02:58:44 2009
@@ -262,6 +262,54 @@
 }
 
 /* -----------------------------------------------------------------------------
+ * INTERNAL
+ */
+
+static void
+update_each_default_keyring (SeahorseObject *object, gpointer user_data)
+{
+	const gchar *default_name = user_data;
+	const gchar *keyring_name; 
+	gboolean is_default;
+	
+	keyring_name = seahorse_gkr_keyring_get_name (SEAHORSE_GKR_KEYRING (object));
+	g_return_if_fail (keyring_name);
+	
+	/* Remember default keyring could be null in strange circumstances */
+	is_default = default_name && g_str_equal (keyring_name, default_name);
+	g_object_set (object, "is-default", is_default, NULL);
+}
+
+static void
+on_get_default_keyring (GnomeKeyringResult result, const gchar *default_name, gpointer user_data)
+{
+	SeahorseGkrSource *self = user_data;
+	SeahorseObjectPredicate pred;
+	
+	g_return_if_fail (SEAHORSE_IS_GKR_SOURCE (self));
+
+	if (result != GNOME_KEYRING_RESULT_OK) {
+		if (result != GNOME_KEYRING_RESULT_CANCELLED)
+			g_warning ("couldn't get default keyring name: %s", gnome_keyring_result_to_message (result));
+		return;
+	}
+	
+	seahorse_object_predicate_clear (&pred);
+	pred.source = SEAHORSE_SOURCE (self);
+	pred.type = SEAHORSE_TYPE_GKR_KEYRING;
+	seahorse_context_for_objects_full (NULL, &pred, update_each_default_keyring, (gpointer)default_name);
+}
+
+static void
+on_list_operation_done (SeahorseOperation *op, gpointer userdata)
+{
+	SeahorseGkrSource *self = userdata;
+	g_return_if_fail (SEAHORSE_IS_GKR_SOURCE (self));
+	
+	gnome_keyring_get_default_keyring (on_get_default_keyring, g_object_ref (self), g_object_unref);
+}
+
+/* -----------------------------------------------------------------------------
  * OBJECT
  */
 
@@ -295,13 +343,6 @@
 
 }
 
-static SeahorseOperation*
-seahorse_gkr_source_load (SeahorseSource *src)
-{
-	SeahorseGkrSource *self = SEAHORSE_GKR_SOURCE (src);
-	return start_list_operation (self);
-}
-
 static void
 seahorse_gkr_source_class_init (SeahorseGkrSourceClass *klass)
 {
@@ -323,6 +364,20 @@
 	seahorse_registry_register_type (NULL, SEAHORSE_TYPE_GKR_SOURCE, "source", "local", SEAHORSE_GKR_STR, NULL);
 }
 
+static SeahorseOperation*
+seahorse_gkr_source_load (SeahorseSource *src)
+{
+	SeahorseGkrSource *self = SEAHORSE_GKR_SOURCE (src);
+	SeahorseOperation *op = start_list_operation (self);
+	
+	g_return_val_if_fail (op, NULL);
+	
+	/* Hook into the results of the above operation, and look for default */
+	seahorse_operation_watch (op, on_list_operation_done, src, NULL, NULL);
+	
+	return op;
+}
+
 static void 
 seahorse_source_iface (SeahorseSourceIface *iface)
 {



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