Thread: [Clg-devel] inheriting from containers
Brought to you by:
espen
From: Walter C. P. <wa...@pe...> - 2008-03-06 16:24:17
|
I've noticed that although I'm allowed to do things like: (defclass my-box (v-box) () (:metaclass glib:gobject-class)) (container-add (make-instance 'my-box) some-widget) I'm not allowed to do: (container-add (make-instance 'my-box) some-widget :expand nil) In fact INIT-CHILD-SLOTS is not able to find the right child container to instantiate. Did I totally fail to understand how to inherit from a CLG class? When I define a new container do I also have to define its children type? (How?) -- walter pelissero http://www.pelissero.de |
From: Espen S J. <es...@cs...> - 2008-03-06 17:33:34
|
"Walter C. Pelissero" <wa...@pe...> writes: > I've noticed that although I'm allowed to do things like: > > (defclass my-box (v-box) > () > (:metaclass glib:gobject-class)) > > (container-add (make-instance 'my-box) some-widget) > > I'm not allowed to do: > > (container-add (make-instance 'my-box) some-widget :expand nil) > > In fact INIT-CHILD-SLOTS is not able to find the right child container > to instantiate. > > Did I totally fail to understand how to inherit from a CLG class? > When I define a new container do I also have to define its children > type? (How?) Let me try to explain how this works, or at least how I understand it... Gtk container classes have something called child properties, which are properties that a child object would take on when added to a container. Instances of child classes (named so due to lack of better ideas) in clg are proxy objects used to access these properties. So when you subclass a container you would also have to subclass the child class, even if you're not adding any child properties (which isn't possible to do currently). For the example above, the child class definition would be: (defclass my-box-child (v-box-child) () (:metaclass container-child-class) (:container my-box)) This is a bit awkward, the reason being that I created this mechanism before I made subclassing possible, so I'll probably use this opportunity to fix it (hopefully without breaking too much existing code). -- Espen |
From: Walter C. P. <wa...@pe...> - 2008-03-06 18:04:21
|
Espen S Johnsen writes: > Let me try to explain how this works, or at least how I understand it... Thanks, that did the trick. -- walter pelissero http://www.pelissero.de |
From: Espen S J. <es...@cs...> - 2008-03-07 20:41:28
|
Espen S Johnsen <es...@cs...> writes: > This is a bit awkward, the reason being that I created this mechanism > before I made subclassing possible, so I'll probably use this > opportunity to fix it (hopefully without breaking too much existing > code). To not break existing code I've decided to leave the child property mechanism as it is, but I've removed the need for dummy container child classes. INIT-CHILD-SLOTS will now search the class hierarchy for a child class if it can't find one for the current container. I've also fixed a bug in the introspection part so that slot definitions from superclasses are not also added to the definitions of subclasses. This may break code that uses accessors previously defined in the now removed redundant slot definitions. -- Espen |