[Galago-commits] r2616 - in trunk/libgalago: . libgalago tests

galago-commits at freedesktop.org galago-commits at freedesktop.org
Sun Mar 19 16:23:33 PST 2006


Author: chipx86
Date: 2006-03-19 16:23:30 -0800 (Sun, 19 Mar 2006)
New Revision: 2616

Modified:
   trunk/libgalago/ChangeLog
   trunk/libgalago/libgalago/galago-status.c
   trunk/libgalago/libgalago/galago-status.h
   trunk/libgalago/tests/presence-feed-2.c
   trunk/libgalago/tests/presence-feed.c
Log:
Move GalagoStatus to use GalagoObject's attributes support instead of its own functions.


Modified: trunk/libgalago/ChangeLog
===================================================================
--- trunk/libgalago/ChangeLog	2006-03-19 23:41:41 UTC (rev 2615)
+++ trunk/libgalago/ChangeLog	2006-03-20 00:23:30 UTC (rev 2616)
@@ -1,3 +1,12 @@
+Sun Mar 19 16:22:20 PST 2006  Christian Hammond <chipx86 at chipx86.com>
+
+	* libgalago/galago-status.c:
+	* libgalago/galago-status.h:
+	* tests/presence-feed-2.c:
+	* tests/presence-feed.c:
+	  - Move GalagoStatus to use GalagoObject's attributes support instead
+	    of its own functions.
+
 Sun Mar 19 15:40:36 PST 2006  Christian Hammond <chipx86 at chipx86.com>
 
 	* libgalago/galago-object.c:

Modified: trunk/libgalago/libgalago/galago-status.c
===================================================================
--- trunk/libgalago/libgalago/galago-status.c	2006-03-19 23:41:41 UTC (rev 2615)
+++ trunk/libgalago/libgalago/galago-status.c	2006-03-20 00:23:30 UTC (rev 2616)
@@ -42,29 +42,10 @@
 
 struct _GalagoStatusAttr
 {
-	GalagoStatusAttrType type;
-
 	char *id;
-
-	union
-	{
-		gboolean bool_val;
-		char *string_val;
-		gint32 int_val;
-		double double_val;
-
-	} value;
+	GValue *value;
 };
 
-static const char *attr_type_strings[] =
-{
-	NULL,
-	"boolean",
-	"string",
-	"int",
-	"double"
-};
-
 enum
 {
 	PROP_0,
@@ -77,8 +58,7 @@
 
 static GHashTable *status_id_map_table = NULL;
 
-static GalagoStatusAttr *status_attr_new(const char *id,
-										 GalagoStatusAttrType type);
+static GalagoStatusAttr *status_attr_new(const char *id, GValue *value);
 static void status_attr_destroy(GalagoStatusAttr *attr);
 
 /**************************************************************************
@@ -94,6 +74,13 @@
 									   const GValue *value, GParamSpec *pspec);
 static void galago_status_get_property(GObject *object, guint prop_id,
 									   GValue *value, GParamSpec *pspec);
+static void galago_status_set_attribute(GalagoObject *object,
+										const char *name, GValue *value);
+static gboolean galago_status_remove_attribute(GalagoObject *object,
+											   const char *name);
+const GValue *galago_status_get_attribute(const GalagoObject *object,
+										  const char *name);
+GList *galago_status_get_attributes(const GalagoObject *object);
 
 static GalagoObjectClass *parent_class = NULL;
 
@@ -107,10 +94,16 @@
 
 	parent_class = g_type_class_peek_parent(klass);
 
+	object_class->supports_attrs = TRUE;
+
 	object_class->destroy             = galago_status_destroy;
 	object_class->dbus_message_append = galago_status_dbus_message_append;
 	object_class->dbus_message_get    = galago_status_dbus_message_get;
 	object_class->dbus_get_signature  = galago_status_dbus_get_signature;
+	object_class->set_attribute       = galago_status_set_attribute;
+	object_class->remove_attribute    = galago_status_remove_attribute;
+	object_class->get_attribute       = galago_status_get_attribute;
+	object_class->get_attributes      = galago_status_get_attributes;
 
 	gobject_class->set_property = galago_status_set_property;
 	gobject_class->get_property = galago_status_get_property;
@@ -206,74 +199,69 @@
 									 galago_status_attr_dbus_get_signature(),
 									 &array_iter);
 
-	for (l = galago_status_get_attributes(status); l != NULL; l = l->next)
+	for (l = galago_object_get_attributes(GALAGO_OBJECT(status));
+		 l != NULL;
+		 l = l->next)
 	{
 		GalagoStatusAttr *attr = (GalagoStatusAttr *)l->data;
 		const char *attr_id = galago_status_attr_get_id(attr);
+		const GValue *value = galago_status_attr_get_gvalue(attr);
 
 		dbus_message_iter_open_container(&array_iter, DBUS_TYPE_STRUCT, NULL,
 										 &struct_iter);
 		dbus_message_iter_append_basic(&struct_iter, DBUS_TYPE_STRING,
 									   &attr_id);
 
-		switch (galago_status_attr_get_type(attr))
+		if (G_VALUE_HOLDS(value, G_TYPE_BOOLEAN))
 		{
-			case GALAGO_STATUS_ATTR_BOOL:
-			{
-				gboolean value = galago_status_attr_get_bool(attr);
-				dbus_message_iter_open_container(&struct_iter,
-												 DBUS_TYPE_VARIANT,
-												 DBUS_TYPE_BOOLEAN_AS_STRING,
-												 &value_iter);
-				dbus_message_iter_append_basic(&value_iter,
-											   DBUS_TYPE_BOOLEAN, &value);
-				dbus_message_iter_close_container(&struct_iter, &value_iter);
-				break;
-			}
-
-			case GALAGO_STATUS_ATTR_STRING:
-			{
-				const char *value = galago_status_attr_get_string(attr);
-				dbus_message_iter_open_container(&struct_iter,
-												 DBUS_TYPE_VARIANT,
-												 DBUS_TYPE_STRING_AS_STRING,
-												 &value_iter);
-				dbus_message_iter_append_basic(&value_iter,
-											   DBUS_TYPE_STRING, &value);
-				dbus_message_iter_close_container(&struct_iter, &value_iter);
-				break;
-			}
-
-			case GALAGO_STATUS_ATTR_INT:
-			{
-				int value = galago_status_attr_get_int(attr);
-				dbus_message_iter_open_container(&struct_iter,
-												 DBUS_TYPE_VARIANT,
-												 DBUS_TYPE_UINT32_AS_STRING,
-												 &value_iter);
-				dbus_message_iter_append_basic(&value_iter,
-											   DBUS_TYPE_UINT32, &value);
-				dbus_message_iter_close_container(&struct_iter, &value_iter);
-				break;
-			}
-
-			case GALAGO_STATUS_ATTR_DOUBLE:
-			{
-				double value = galago_status_attr_get_double(attr);
-				dbus_message_iter_open_container(&struct_iter,
-												 DBUS_TYPE_VARIANT,
-												 DBUS_TYPE_DOUBLE_AS_STRING,
-												 &value_iter);
-				dbus_message_iter_append_basic(&value_iter,
-											   DBUS_TYPE_DOUBLE, &value);
-				dbus_message_iter_close_container(&struct_iter, &value_iter);
-				break;
-			}
-
-			default: /* This should never be reached. */
-				g_assert_not_reached();
-				break;
+			gboolean value = galago_status_attr_get_bool(attr);
+			dbus_message_iter_open_container(&struct_iter,
+											 DBUS_TYPE_VARIANT,
+											 DBUS_TYPE_BOOLEAN_AS_STRING,
+											 &value_iter);
+			dbus_message_iter_append_basic(&value_iter,
+										   DBUS_TYPE_BOOLEAN, &value);
+			dbus_message_iter_close_container(&struct_iter, &value_iter);
+			break;
 		}
+		else if (G_VALUE_HOLDS(value, G_TYPE_STRING))
+		{
+			const char *value = galago_status_attr_get_string(attr);
+			dbus_message_iter_open_container(&struct_iter,
+											 DBUS_TYPE_VARIANT,
+											 DBUS_TYPE_STRING_AS_STRING,
+											 &value_iter);
+			dbus_message_iter_append_basic(&value_iter,
+										   DBUS_TYPE_STRING, &value);
+			dbus_message_iter_close_container(&struct_iter, &value_iter);
+			break;
+		}
+		else if (G_VALUE_HOLDS(value, G_TYPE_INT))
+		{
+			int value = galago_status_attr_get_int(attr);
+			dbus_message_iter_open_container(&struct_iter,
+											 DBUS_TYPE_VARIANT,
+											 DBUS_TYPE_UINT32_AS_STRING,
+											 &value_iter);
+			dbus_message_iter_append_basic(&value_iter,
+										   DBUS_TYPE_UINT32, &value);
+			dbus_message_iter_close_container(&struct_iter, &value_iter);
+			break;
+		}
+		else if (G_VALUE_HOLDS(value, G_TYPE_DOUBLE))
+		{
+			double value = galago_status_attr_get_double(attr);
+			dbus_message_iter_open_container(&struct_iter,
+											 DBUS_TYPE_VARIANT,
+											 DBUS_TYPE_DOUBLE_AS_STRING,
+											 &value_iter);
+			dbus_message_iter_append_basic(&value_iter,
+										   DBUS_TYPE_DOUBLE, &value);
+			dbus_message_iter_close_container(&struct_iter, &value_iter);
+			break;
+		}
+		else
+			g_assert_not_reached();
 
 		dbus_message_iter_close_container(&array_iter, &struct_iter);
 	}
@@ -322,7 +310,8 @@
 			{
 				gboolean value;
 				dbus_message_iter_get_basic(&value_iter, &value);
-				galago_status_set_attr_bool(status, attr_id, value);
+				galago_object_set_attr_bool(GALAGO_OBJECT(status),
+											attr_id, value);
 				break;
 			}
 
@@ -330,7 +319,8 @@
 			{
 				const char *value;
 				dbus_message_iter_get_basic(&value_iter, &value);
-				galago_status_set_attr_string(status, attr_id, value);
+				galago_object_set_attr_string(GALAGO_OBJECT(status),
+											  attr_id, value);
 				break;
 			}
 
@@ -338,7 +328,8 @@
 			{
 				dbus_uint32_t value;
 				dbus_message_iter_get_basic(&value_iter, &value);
-				galago_status_set_attr_int(status, attr_id, value);
+				galago_object_set_attr_int(GALAGO_OBJECT(status),
+										   attr_id, value);
 				break;
 			}
 
@@ -346,7 +337,8 @@
 			{
 				double value;
 				dbus_message_iter_get_basic(&value_iter, &value);
-				galago_status_set_attr_double(status, attr_id, value);
+				galago_object_set_attr_double(GALAGO_OBJECT(status),
+											  attr_id, value);
 				break;
 			}
 
@@ -534,36 +526,34 @@
 								   galago_status_get_name(status),
 								   galago_status_is_exclusive(status));
 
-	for (l = galago_status_get_attributes(status); l != NULL; l = l->next)
+	for (l = galago_object_get_attributes(GALAGO_OBJECT(status));
+		 l != NULL;
+		 l = l->next)
 	{
 		GalagoStatusAttr *status_attr = (GalagoStatusAttr *)l->data;
 		const char *attr_id = galago_status_attr_get_id(status_attr);
+		const GValue *value = galago_status_attr_get_gvalue(status_attr);
 
-		switch (galago_status_attr_get_type(status_attr))
+		if (G_VALUE_HOLDS(value, G_TYPE_BOOLEAN))
 		{
-			case GALAGO_STATUS_ATTR_BOOL:
-				galago_status_set_attr_bool(new_status, attr_id,
-					galago_status_attr_get_bool(status_attr));
-				break;
-
-			case GALAGO_STATUS_ATTR_STRING:
-				galago_status_set_attr_string(new_status, attr_id,
-					galago_status_attr_get_string(status_attr));
-				break;
-
-			case GALAGO_STATUS_ATTR_INT:
-				galago_status_set_attr_int(new_status, attr_id,
-					galago_status_attr_get_int(status_attr));
-				break;
-
-			case GALAGO_STATUS_ATTR_DOUBLE:
-				galago_status_set_attr_double(new_status, attr_id,
-					galago_status_attr_get_double(status_attr));
-				break;
-
-			default:
-				break;
+			galago_object_set_attr_bool(GALAGO_OBJECT(new_status),
+				attr_id, galago_status_attr_get_bool(status_attr));
 		}
+		else if (G_VALUE_HOLDS(value, G_TYPE_STRING))
+		{
+			galago_object_set_attr_string(GALAGO_OBJECT(new_status),
+				attr_id, galago_status_attr_get_string(status_attr));
+		}
+		else if (G_VALUE_HOLDS(value, G_TYPE_INT))
+		{
+			galago_object_set_attr_int(GALAGO_OBJECT(new_status),
+				attr_id, galago_status_attr_get_int(status_attr));
+		}
+		else if (G_VALUE_HOLDS(value, G_TYPE_DOUBLE))
+		{
+			galago_object_set_attr_double(GALAGO_OBJECT(new_status),
+				attr_id, galago_status_attr_get_double(status_attr));
+		}
 	}
 
 	return new_status;
@@ -642,226 +632,74 @@
 	       type == GALAGO_STATUS_HIDDEN;
 }
 
-static GalagoStatusAttr *
-common_make_attr(GalagoStatus *status, const char *attr_id,
-				 GalagoStatusAttrType type)
+static void
+galago_status_set_attribute(GalagoObject *object, const char *name,
+							GValue *value)
 {
+	GalagoStatus *status = GALAGO_STATUS(object);
 	GalagoStatusAttr *attr;
 	GalagoPresence *presence;
 
-	attr = g_hash_table_lookup(status->priv->attrs_table, attr_id);
+	attr = g_hash_table_lookup(status->priv->attrs_table, name);
 
 	if (attr == NULL)
 	{
-		attr = status_attr_new(attr_id, type);
+		attr = status_attr_new(name, value);
 
-		g_hash_table_insert(status->priv->attrs_table,
-							g_strdup(attr_id), attr);
+		g_hash_table_insert(status->priv->attrs_table, g_strdup(name), attr);
 		status->priv->attrs = g_list_append(status->priv->attrs, attr);
 	}
-	else if (attr->type != type)
+	else if (G_VALUE_HOLDS(attr->value, G_VALUE_TYPE(value)))
 	{
-		g_warning("Attempted to set existing attribute ID %s with "
-				  "invalid type %s",
-				  attr_id, attr_type_strings[type]);
-		return NULL;
+		g_value_unset(attr->value);
+		g_free(attr->value);
+		attr->value = value;
 	}
+	else
+	{
+		g_warning("Attempted to set existing attribute ID %s of type %s with "
+				  "attribute of type %s",
+				  name,
+				  G_VALUE_TYPE_NAME(attr->value),
+				  G_VALUE_TYPE_NAME(value));
 
-	presence = galago_status_get_presence(status);
-
-	if (presence != NULL)
-		g_signal_emit_by_name(presence, "status-updated", 0, status, attr_id);
-
-	return attr;
-}
-
-void
-galago_status_set_attr_bool(GalagoStatus *status, const char *attr_id,
-							gboolean value)
-{
-	GalagoStatusAttr *attr;
-
-	g_return_if_fail(status  != NULL);
-	g_return_if_fail(attr_id != NULL);
-	g_return_if_fail(GALAGO_IS_STATUS(status));
-
-	attr = common_make_attr(status, attr_id, GALAGO_STATUS_ATTR_BOOL);
-
-	if (attr == NULL)
 		return;
-
-	attr->value.bool_val = value;
-}
-
-void
-galago_status_set_attr_string(GalagoStatus *status, const char *attr_id,
-							  const char *value)
-{
-	GalagoStatusAttr *attr;
-
-	g_return_if_fail(status  != NULL);
-	g_return_if_fail(attr_id != NULL);
-	g_return_if_fail(GALAGO_IS_STATUS(status));
-
-	attr = common_make_attr(status, attr_id, GALAGO_STATUS_ATTR_STRING);
-
-	if (attr == NULL)
-		return;
-
-	if (attr->value.string_val == NULL)
-		g_free(attr->value.string_val);
-
-	attr->value.string_val = (value == NULL ? NULL : g_strdup(value));
-}
-
-
-void
-galago_status_set_attr_int(GalagoStatus *status, const char *attr_id,
-						   gint32 value)
-{
-	GalagoStatusAttr *attr;
-
-	g_return_if_fail(status  != NULL);
-	g_return_if_fail(attr_id != NULL);
-	g_return_if_fail(GALAGO_IS_STATUS(status));
-
-	attr = common_make_attr(status, attr_id, GALAGO_STATUS_ATTR_INT);
-
-	if (attr == NULL)
-		return;
-
-	attr->value.int_val = value;
-}
-
-void
-galago_status_set_attr_double(GalagoStatus *status, const char *attr_id,
-							  double value)
-{
-	GalagoStatusAttr *attr;
-
-	g_return_if_fail(status  != NULL);
-	g_return_if_fail(attr_id != NULL);
-	g_return_if_fail(GALAGO_IS_STATUS(status));
-
-	attr = common_make_attr(status, attr_id, GALAGO_STATUS_ATTR_DOUBLE);
-
-	if (attr == NULL)
-		return;
-
-	attr->value.double_val = value;
-}
-
-void
-galago_status_remove_attr(GalagoStatus *status, const char *attr_id)
-{
-	GalagoStatusAttr *attr;
-
-	g_return_if_fail(status  != NULL);
-	g_return_if_fail(attr_id != NULL);
-	g_return_if_fail(GALAGO_IS_STATUS(status));
-
-	attr = g_hash_table_lookup(status->priv->attrs_table, attr_id);
-
-	if (attr != NULL)
-	{
-		g_warning("Attempting to remove invalid attribute %s", attr_id);
-		return;
 	}
 
-	g_hash_table_remove(status->priv->attrs_table, attr_id);
-	status->priv->attrs = g_list_remove(status->priv->attrs, attr);
-}
+	presence = galago_status_get_presence(status);
 
-static GalagoStatusAttr *
-common_get_attr(const GalagoStatus *status, const char *attr_id,
-				GalagoStatusAttrType type)
-{
-	GalagoStatusAttr *attr;
-
-	attr = g_hash_table_lookup(status->priv->attrs_table, attr_id);
-
-	if (attr == NULL)
-		return NULL;
-
-	if (attr->type != type)
-	{
-		g_warning("Attempted to retrieve existing attribute ID %s with "
-				  "invalid type: %s",
-				  attr_id, attr_type_strings[type]);
-		return NULL;
-	}
-
-	return attr;
+	if (presence != NULL)
+		g_signal_emit_by_name(presence, "status-updated", 0, status, name);
 }
 
-gboolean
-galago_status_get_attr_bool(const GalagoStatus *status, const char *attr_id)
+static gboolean
+galago_status_remove_attribute(GalagoObject *object, const char *name)
 {
+	GalagoStatus *status = GALAGO_STATUS(object);
 	GalagoStatusAttr *attr;
 
-	g_return_val_if_fail(status  != NULL,          FALSE);
-	g_return_val_if_fail(attr_id != NULL,          FALSE);
-	g_return_val_if_fail(GALAGO_IS_STATUS(status), FALSE);
+	attr = g_hash_table_lookup(status->priv->attrs_table, name);
 
-	attr = common_get_attr(status, attr_id, GALAGO_STATUS_ATTR_BOOL);
-
 	if (attr == NULL)
 		return FALSE;
 
-	return attr->value.bool_val;
-}
+	g_hash_table_remove(status->priv->attrs_table, name);
+	status->priv->attrs = g_list_remove(status->priv->attrs, attr);
 
-const char *
-galago_status_get_attr_string(const GalagoStatus *status, const char *attr_id)
-{
-	GalagoStatusAttr *attr;
-
-	g_return_val_if_fail(status  != NULL,          NULL);
-	g_return_val_if_fail(attr_id != NULL,          NULL);
-	g_return_val_if_fail(GALAGO_IS_STATUS(status), NULL);
-
-	attr = common_get_attr(status, attr_id, GALAGO_STATUS_ATTR_STRING);
-
-	if (attr == NULL)
-		return NULL;
-
-	return attr->value.string_val;
+	return TRUE;
 }
 
-gint32
-galago_status_get_attr_int(const GalagoStatus *status, const char *attr_id)
+const GValue *
+galago_status_get_attribute(const GalagoObject *object, const char *name)
 {
+	GalagoStatus *status = GALAGO_STATUS(object);
 	GalagoStatusAttr *attr;
 
-	g_return_val_if_fail(status  != NULL,          -1);
-	g_return_val_if_fail(attr_id != NULL,          -1);
-	g_return_val_if_fail(GALAGO_IS_STATUS(status), -1);
+	attr = g_hash_table_lookup(status->priv->attrs_table, name);
 
-	attr = common_get_attr(status, attr_id, GALAGO_STATUS_ATTR_INT);
-
-	if (attr == NULL)
-		return -1;
-
-	return attr->value.int_val;
+	return (attr == NULL ? NULL : attr->value);
 }
 
-double
-galago_status_get_attr_double(const GalagoStatus *status, const char *attr_id)
-{
-	GalagoStatusAttr *attr;
-
-	g_return_val_if_fail(status  != NULL,          0.0);
-	g_return_val_if_fail(attr_id != NULL,          0.0);
-	g_return_val_if_fail(GALAGO_IS_STATUS(status), 0.0);
-
-	attr = common_get_attr(status, attr_id, GALAGO_STATUS_ATTR_DOUBLE);
-
-	if (attr == NULL)
-		return 0.0;
-
-	return attr->value.double_val;
-}
-
 gboolean
 galago_status_attr_exists(const GalagoStatus *status, const char *attr_id)
 {
@@ -873,28 +711,24 @@
 }
 
 GList *
-galago_status_get_attributes(const GalagoStatus *status)
+galago_status_get_attributes(const GalagoObject *object)
 {
-	g_return_val_if_fail(status != NULL,           NULL);
-	g_return_val_if_fail(GALAGO_IS_STATUS(status), NULL);
-
-	return status->priv->attrs;
+	return GALAGO_STATUS(object)->priv->attrs;
 }
 
 /**************************************************************************
  * GalagoStatusAttr API
  **************************************************************************/
 static GalagoStatusAttr *
-status_attr_new(const char *id, GalagoStatusAttrType type)
+status_attr_new(const char *id, GValue *value)
 {
 	GalagoStatusAttr *attr;
 
 	g_return_val_if_fail(id != NULL, NULL);
-	g_return_val_if_fail(type != GALAGO_STATUS_ATTR_UNSET, NULL);
 
 	attr = g_new0(GalagoStatusAttr, 1);
-	attr->id   = g_strdup(id);
-	attr->type = type;
+	attr->id    = g_strdup(id);
+	attr->value = value;
 
 	return attr;
 }
@@ -905,21 +739,17 @@
 	if (attr->id != NULL)
 		g_free(attr->id);
 
-	if (attr->type == GALAGO_STATUS_ATTR_STRING &&
-		attr->value.string_val != NULL)
-	{
-		g_free(attr->value.string_val);
-	}
-
+	g_value_unset(attr->value);
+	g_free(attr->value);
 	g_free(attr);
 }
 
-GalagoStatusAttrType
-galago_status_attr_get_type(const GalagoStatusAttr *attr)
+const GValue *
+galago_status_attr_get_gvalue(const GalagoStatusAttr *attr)
 {
-	g_return_val_if_fail(attr != NULL, GALAGO_STATUS_ATTR_UNSET);
+	g_return_val_if_fail(attr != NULL, NULL);
 
-	return attr->type;
+	return attr->value;
 }
 
 const char *
@@ -934,34 +764,34 @@
 galago_status_attr_get_bool(const GalagoStatusAttr *attr)
 {
 	g_return_val_if_fail(attr != NULL, FALSE);
-	g_return_val_if_fail(attr->type == GALAGO_STATUS_ATTR_BOOL, FALSE);
+	g_return_val_if_fail(G_VALUE_HOLDS(attr->value, G_TYPE_BOOLEAN), FALSE);
 
-	return attr->value.bool_val;
+	return g_value_get_boolean(attr->value);
 }
 
 const char *
 galago_status_attr_get_string(const GalagoStatusAttr *attr)
 {
 	g_return_val_if_fail(attr != NULL, NULL);
-	g_return_val_if_fail(attr->type == GALAGO_STATUS_ATTR_STRING, NULL);
+	g_return_val_if_fail(G_VALUE_HOLDS(attr->value, G_TYPE_STRING), NULL);
 
-	return attr->value.string_val;
+	return g_value_get_string(attr->value);
 }
 
 gint32
 galago_status_attr_get_int(const GalagoStatusAttr *attr)
 {
 	g_return_val_if_fail(attr != NULL, -1);
-	g_return_val_if_fail(attr->type == GALAGO_STATUS_ATTR_INT, -1);
+	g_return_val_if_fail(G_VALUE_HOLDS(attr->value, G_TYPE_INT), 0);
 
-	return attr->value.int_val;
+	return g_value_get_int(attr->value);
 }
 
 double
 galago_status_attr_get_double(const GalagoStatusAttr *attr)
 {
 	g_return_val_if_fail(attr != NULL, 0.0);
-	g_return_val_if_fail(attr->type == GALAGO_STATUS_ATTR_DOUBLE, 0.0);
+	g_return_val_if_fail(G_VALUE_HOLDS(attr->value, G_TYPE_DOUBLE), 0);
 
-	return attr->value.double_val;
+	return g_value_get_double(attr->value);
 }

Modified: trunk/libgalago/libgalago/galago-status.h
===================================================================
--- trunk/libgalago/libgalago/galago-status.h	2006-03-19 23:41:41 UTC (rev 2615)
+++ trunk/libgalago/libgalago/galago-status.h	2006-03-20 00:23:30 UTC (rev 2616)
@@ -249,118 +249,6 @@
  */
 gboolean galago_status_is_available(const GalagoStatus *status);
 
-/**
- * Sets a boolean status attribute.
- *
- * @param status  The status.
- * @param attr_id The attribute ID.
- * @param value   The boolean value.
- */
-void galago_status_set_attr_bool(GalagoStatus *status, const char *attr_id,
-								 gboolean value);
-
-/**
- * Sets a string status attribute.
- *
- * @param status  The status.
- * @param attr_id The attribute ID.
- * @param value   The string value.
- */
-void galago_status_set_attr_string(GalagoStatus *status, const char *attr_id,
-								   const char *value);
-
-/**
- * Sets an integer status attribute.
- *
- * @param status  The status.
- * @param attr_id The attribute ID.
- * @param value   The integer value.
- */
-void galago_status_set_attr_int(GalagoStatus *status, const char *attr_id,
-								gint32 value);
-
-/**
- * Sets a double status attribute.
- *
- * @param status  The status.
- * @param attr_id The attribute ID.
- * @param value   The double value.
- */
-void galago_status_set_attr_double(GalagoStatus *status, const char *attr_id,
-								   double value);
-
-/**
- * Removes a status attribute.
- *
- * @param status  The status.
- * @param attr_id The attribute ID.
- */
-void galago_status_remove_attr(GalagoStatus *status, const char *attr_id);
-
-/**
- * Returns a boolean status attribute.
- *
- * @param status  The status.
- * @param attr_id The attribute ID.
- *
- * @return The boolean value.
- */
-gboolean galago_status_get_attr_bool(const GalagoStatus *status,
-									 const char *attr_id);
-
-/**
- * Returns a string status attribute.
- *
- * @param status  The status.
- * @param attr_id The attribute ID.
- *
- * @return The string value.
- */
-const char *galago_status_get_attr_string(const GalagoStatus *status,
-										  const char *attr_id);
-
-/**
- * Returns an integer status attribute.
- *
- * @param status  The status.
- * @param attr_id The attribute ID.
- *
- * @return The integer value.
- */
-gint32 galago_status_get_attr_int(const GalagoStatus *status,
-								  const char *attr_id);
-
-/**
- * Returns a double status attribute.
- *
- * @param status  The status.
- * @param attr_id The attribute ID.
- *
- * @return The double value.
- */
-double galago_status_get_attr_double(const GalagoStatus *status,
-									 const char *attr_id);
-
-/**
- * Returns whether or not a status attribute exists.
- *
- * @param status  The status.
- * @param attr_id The attribute ID.
- *
- * @return TRUE if the status attribute exists, or FALSE otherwise.
- */
-gboolean galago_status_attr_exists(const GalagoStatus *status,
-								   const char *attr_id);
-
-/**
- * Returns the list of status attributes in this status.
- *
- * @param status The status.
- *
- * @return The status attributes in the status.
- */
-GList *galago_status_get_attributes(const GalagoStatus *status);
-
 /*@}*/
 
 /**************************************************************************/
@@ -369,13 +257,13 @@
 /*@{*/
 
 /**
- * Returns the type of a status attribute.
+ * Returns the GValue of a status attribute.
  *
  * @param attr The status attribute.
  *
- * @return The status attribute's type.
+ * @return The status attribute's GValue.
  */
-GalagoStatusAttrType galago_status_attr_get_type(const GalagoStatusAttr *attr);
+const GValue *galago_status_attr_get_gvalue(const GalagoStatusAttr *attr);
 
 /**
  * Returns the ID of a status attribute.

Modified: trunk/libgalago/tests/presence-feed-2.c
===================================================================
--- trunk/libgalago/tests/presence-feed-2.c	2006-03-19 23:41:41 UTC (rev 2615)
+++ trunk/libgalago/tests/presence-feed-2.c	2006-03-20 00:23:30 UTC (rev 2616)
@@ -46,7 +46,8 @@
 
 	status = galago_status_new(GALAGO_STATUS_AWAY, "available", "Available",
 							   TRUE);
-	galago_status_set_attr_string(status, "message", "Talk to me!");
+	galago_object_set_attr_string(GALAGO_OBJECT(status), "message",
+								  "Talk to me!");
 
 	galago_presence_add_status(presence, status);
 

Modified: trunk/libgalago/tests/presence-feed.c
===================================================================
--- trunk/libgalago/tests/presence-feed.c	2006-03-19 23:41:41 UTC (rev 2615)
+++ trunk/libgalago/tests/presence-feed.c	2006-03-20 00:23:30 UTC (rev 2616)
@@ -48,7 +48,8 @@
 	galago_presence_set_idle(presence, TRUE, time(NULL));
 
 	status = galago_status_new(GALAGO_STATUS_AWAY, "away", "Away", TRUE);
-	galago_status_set_attr_string(status, "message", "I'm eating dinner.");
+	galago_object_set_attr_string(GALAGO_OBJECT(status), "message",
+								  "I'm eating dinner.");
 
 	galago_presence_add_status(presence, status);
 



More information about the galago-commits mailing list