ayatana-commits team mailing list archive
-
ayatana-commits team
-
Mailing list archive
-
Message #00917
[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