GtkBuilder syntax for property bindings



Hello,

My name is Denis Washington, and I was selected as a Google Summer of Code student this year (yay!). My project is to add support for GObject property binding (a.k.a. GBinding [1]) to Glade; see [2] for my complete proposal.

A core component of this work is a new bit of GtkBuilder file syntax to encode property bindings. I have deliberately not proposed a concrete syntax in my original proposal as I believe that this is a point that really needs consensus with the GTK+ community. This is why I would now like to discuss this with you. I hope we can agree on something worthwhile before the official coding period starts (May 23).

My initial proposal is to allow <property> tags to contain a new <bind> element describing a binding to a source property instead of a concrete value. For instance, the following would make the value of property "prop" dependent on the "prop2" property value of object "source":

<property name="prop">
<bind source="source" property="property2" />
</property>

If "prop" should have an initial value before the value of source::prop is changed the first time, that value could be nested inside of <bind>, with the same semantics as putting it into <property> directly:

<property name="prop">
<bind source="source" property="property2">initial-value</bind>
</property>

The advantage of this syntax is that it fits naturally into the existing syntax, is right at the target site - which is where a property binding actually does anything, anyway - and could be extended for other types of bindings in the future, e.g. GSettings bindings (with <bind type="settings" ...> or something similar). It is also easy to implement the way that GTK+'s GtkBuilder parser is written.

The main issue with this approach is what to do with two-way bindings. One approach would be to make this a property of <bind>, but then, <bind> wouldn't appear in every property it influences anymore. Alternatively, the parser could be required to recognize direct cyclic binding declarations (A binds to B, B binds to A) and collapse them into a single two-way binding, which retains the <bind>-only-affects-the-property-it-appears-in property; the parser would be complicated by this, though.

I would love to hear your feedback on this matter!

Regards,
Denis Washington

[1]
[2] http://www.google-melange.com/gsoc/project/google/gsoc2011/denisw/12001



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