← Back to team overview

ayatana-commits team mailing list archive

[Merge] lp:~agateau/libindicate/gvalue into lp:libindicate

 

Aurélien Gâteau has proposed merging lp:~agateau/libindicate/gvalue into lp:libindicate.

    Requested reviews:
    Indicator Applet Developers (indicator-applet-developers)


Make it possible to get the GValue for a property.

This is useful to implement a generic way to retrieve all values as indicate_listener_get_property() now fails on a int or bool property.

I also removed the return which prevented the property callback from being called when there is an error (such as a missing property) as it was preventing me using the library in this way:

- ask for property1
- wait for callback
- process property1 value
- ask for property2
...
-- 
https://code.launchpad.net/~agateau/libindicate/gvalue/+merge/19336
Your team ayatana-commits is subscribed to branch lp:libindicate.
=== modified file 'libindicate/listener.c'
--- libindicate/listener.c	2010-02-10 14:44:22 +0000
+++ libindicate/listener.c	2010-02-15 14:48:18 +0000
@@ -712,6 +712,7 @@
 
 typedef enum _get_property_type get_property_type;
 enum _get_property_type {
+	PROPERTY_TYPE_VALUE,
 	PROPERTY_TYPE_STRING,
 	PROPERTY_TYPE_TIME,
 	PROPERTY_TYPE_INT,
@@ -745,10 +746,15 @@
 	if (error != NULL) {
 		g_warning("Unable to get property data: %s", error->message);
 		g_error_free(error);
-		return;
 	}
 
 	switch (get_property_data->type) {
+	case PROPERTY_TYPE_VALUE: {
+		/* Just pass the GValue along. */
+		indicate_listener_get_property_value_cb cb =(indicate_listener_get_property_value_cb)get_property_data->cb;
+		cb(get_property_data->listener, get_property_data->server, get_property_data->indicator, get_property_data->property, &OUT_value, get_property_data->data);
+		break;
+	}
 	case PROPERTY_TYPE_STRING: {
 		/* Just pass the string along. */
 		indicate_listener_get_property_cb cb = (indicate_listener_get_property_cb)get_property_data->cb;
@@ -807,6 +813,27 @@
 }
 
 /**
+	indicate_listener_get_property_value:
+	@listener: The #IndicateListener representing the connection
+	@server: The server that the indicator is on
+	@indicator: Which indicator is being queried
+	@property: Name of the property to get
+	@callback: The callback function to call with the data
+	@data: Arbitrary data to give the callback
+
+	A function to get a property from an indicator on a server
+	and bring it back locally.  This wraps all the hassle of using
+	the DBus API and makes it pretty easy to get properties.
+
+	This function gets the raw gvalue data, without any conversion.
+*/
+void
+indicate_listener_get_property_value (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, indicate_listener_get_property_value_cb callback, gpointer data)
+{
+	return get_property_helper(listener, server, indicator, property, G_CALLBACK(callback), data, PROPERTY_TYPE_VALUE);
+}
+
+/**
 	indicate_listener_get_property:
 	@listener: The #IndicateListener representing the connection
 	@server: The server that the indicator is on

=== modified file 'libindicate/listener.h'
--- libindicate/listener.h	2010-02-04 22:41:43 +0000
+++ libindicate/listener.h	2010-02-15 14:48:18 +0000
@@ -111,6 +111,7 @@
 
 GType indicate_listener_get_type (void) G_GNUC_CONST;
 
+typedef void (*indicate_listener_get_property_value_cb) (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, const GValue * propertydata, gpointer data);
 typedef void (*indicate_listener_get_property_cb) (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, const gchar * propertydata, gpointer data);
 typedef void (*indicate_listener_get_property_time_cb) (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, const GTimeVal * propertydata, gpointer data);
 typedef void (*indicate_listener_get_property_int_cb) (IndicateListener * listener, IndicateListenerServer * server, IndicateListenerIndicator * indicator, gchar * property, gint propertydata, gpointer data);
@@ -121,6 +122,12 @@
 /* Create a new listener */
 IndicateListener *    indicate_listener_new                (void);
 IndicateListener *    indicate_listener_ref_default        (void);
+void                  indicate_listener_get_property_value (IndicateListener * listener,
+                                                            IndicateListenerServer * server,
+                                                            IndicateListenerIndicator * indicator,
+                                                            gchar * property,
+                                                            indicate_listener_get_property_value_cb callback,
+                                                            gpointer data);
 void                  indicate_listener_get_property       (IndicateListener * listener,
                                                             IndicateListenerServer * server,
                                                             IndicateListenerIndicator * indicator,


Follow ups