| Top |  |  |  |  | 
EExtension objects can be tacked on to any GObject instance that implements the EExtensible interface. A GObject type can be made extensible in two steps:
Add the EExtensible interface when registering the GType. There are no methods to implement.
| 1 2 3 4 5 | #include <libedataserver/libedataserver.h> G_DEFINE_TYPE_WITH_CODE ( ECustomWidget, e_custom_widget, GTK_TYPE_WIDGET, G_IMPLEMENT_INTERFACE (E_TYPE_EXTENSIBLE, NULL)) | 
Load extensions for the class at some point during GObject initialization. Generally this should be done toward the end of the initialization code, so extensions get a fully initialized object to work with.
| 1 2 3 4 5 6 7 | static void e_custom_widget_constructed (ECustomWidget *widget) { Construction code goes here, same as call to parent's 'constructed'... e_extensible_load_extensions (E_EXTENSIBLE (widget)); } | 
void
e_extensible_load_extensions (EExtensible *extensible);
Creates an instance of all instantiable subtypes of EExtension which
target the class of extensible
.  The lifetimes of these newly created
EExtension objects are bound to extensible
 such that they are finalized
when extensible
 is finalized.
Since: 3.4
GList * e_extensible_list_extensions (EExtensible *extensible,GType extension_type);
Returns a list of EExtension objects bound to extensible
 whose
types are ancestors of extension_type
.  For a complete list of
extension objects bound to extensible
, pass E_TYPE_EXTENSION.
The list itself should be freed with g_list_free().  The extension
objects are owned by extensible
 and should not be unreferenced.
 a list of extension objects derived from extension_type
. 
[element-type EExtension][transfer container]
Since: 3.4