diff options
author | Ted Gould <ted@gould.cx> | 2009-12-07 13:09:12 -0600 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2009-12-07 13:09:12 -0600 |
commit | 483992f7d3656a103b1a152a6526507479e8f5b0 (patch) | |
tree | 182195b32060a42c69493c41f666ec4c4c9a4146 /libindicator/indicator-service.c | |
parent | 360ae7addef07b1fc137984e1ada7d1a2a6ba960 (diff) | |
parent | 134704130d3d871c8ff5bda62e2e9501a447375a (diff) | |
download | libayatana-indicator-483992f7d3656a103b1a152a6526507479e8f5b0.tar.gz libayatana-indicator-483992f7d3656a103b1a152a6526507479e8f5b0.tar.bz2 libayatana-indicator-483992f7d3656a103b1a152a6526507479e8f5b0.zip |
Add in support for sevice API versions.
Diffstat (limited to 'libindicator/indicator-service.c')
-rw-r--r-- | libindicator/indicator-service.c | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/libindicator/indicator-service.c b/libindicator/indicator-service.c index 5fb939d..89842bb 100644 --- a/libindicator/indicator-service.c +++ b/libindicator/indicator-service.c @@ -21,6 +21,7 @@ struct _IndicatorServicePrivate { DBusGProxy * dbus_proxy; guint timeout; GList * watchers; + guint this_service_version; }; /* Signals Stuff */ @@ -37,10 +38,12 @@ static guint signals[LAST_SIGNAL] = { 0 }; enum { PROP_0, PROP_NAME, + PROP_VERSION }; /* The strings so that they can be slowly looked up. */ #define PROP_NAME_S "name" +#define PROP_VERSION_S "version" /* GObject Stuff */ #define INDICATOR_SERVICE_GET_PRIVATE(o) \ @@ -79,6 +82,12 @@ indicator_service_class_init (IndicatorServiceClass *klass) "This is the name that should be used on DBus for this service.", NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property(object_class, PROP_VERSION, + g_param_spec_uint(PROP_VERSION_S, + "The version of the service that we're implementing.", + "A number to represent the version of the other APIs the service provides. This should match across the manager and the service", + 0, G_MAXUINT, 0, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /* Signals */ @@ -114,6 +123,7 @@ indicator_service_init (IndicatorService *self) priv->dbus_proxy = NULL; priv->timeout = 0; priv->watchers = NULL; + priv->this_service_version = 0; /* Start talkin' dbus */ GError * error = NULL; @@ -214,6 +224,10 @@ set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec } break; /* *********************** */ + case PROP_VERSION: + priv->this_service_version = g_value_get_uint(value); + break; + /* *********************** */ default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -241,6 +255,10 @@ get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspe } break; /* *********************** */ + case PROP_VERSION: + g_value_set_uint(value, priv->this_service_version); + break; + /* *********************** */ default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -306,7 +324,7 @@ _indicator_service_server_watch (IndicatorService * service, DBusGMethodInvocati priv->timeout = 0; } - dbus_g_method_return(method, INDICATOR_SERVICE_VERSION); + dbus_g_method_return(method, INDICATOR_SERVICE_VERSION, priv->this_service_version); return TRUE; } @@ -374,3 +392,28 @@ indicator_service_new (gchar * name) return INDICATOR_SERVICE(obj); } + +/** + indicator_service_new_version: + @name: The name for the service on dbus + @version: The version of the other interfaces provide + by the service. + + This function creates the service on DBus and tries to + get a well-known name specified in @name. If the name + can't be estabilished then the #IndicatorService::shutdown + signal will be sent. + + Return value: A brand new #IndicatorService object or #NULL + if there is an error. +*/ +IndicatorService * +indicator_service_new_version (gchar * name, guint version) +{ + GObject * obj = g_object_new(INDICATOR_SERVICE_TYPE, + PROP_NAME_S, name, + PROP_VERSION_S, version, + NULL); + + return INDICATOR_SERVICE(obj); +} |