Re: [gdbus-codegen] handle property set on the service-side

On Tue, 2018-02-06 at 13:35 +0000, Simon McVittie wrote:
On Mon, 05 Feb 2018 at 15:22:00 +0100, Gabriel LUCAS wrote:
I think I might have reached some limitation with this method while
to handle a property set from the service side. The generated code
a vtable for the interface with the property_get and property_set
set. When a property set is received, the GObject property is
changed without having to be handled by the developer.

My opinion is that the service should be able to refuse a property
set in
some cases.

One option is to set properties via method calls: this makes it
easier to
document which errors they can raise, makes it possible to have
properties change atomically as a batch, and makes it (I suspect)
more likely that all D-Bus clients will be able to make those changes
asynchronously and cope with failure (or cope with the property being
set to a differing value, e.g. undergoing some sort of

For example, a property GNSSEnabled can be set true to activate
the GNSS output only if the modem is powered on. Then, I'll need to
an error and prevent the property set if the modem is off.

For example, you could have a read-only GNSSEnabled property paired
an EnableGNSS() method; or maybe a read-only GNSSEnabled property
paired with an EnableFeatures() method that takes an array of strings
or integers representing features as its argument.

The underlying GDBusInterfaceVTable makes it possible to handle
properties asynchronously (and the documentation doesn't explicitly
so, but this is also failable) but I don't think gdbus-codegen
has a way to generate code that makes use of that feature.

Indeed, afaik you have to forego gdbus-codegen entirely and manually
write your vtables in order to do failable property setters.

A common cause for this is the need to do a polkit check before
allowing a property to be set.


Attachment: signature.asc
Description: This is a digitally signed message part

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