## EExtensible EExtensible — An interface for extending objects |

## Functions

void | e_extensible_load_extensions ()
GList * | e_extensible_list_extensions ()

## Types and Values

struct | EExtensibleInterface

## Includes

    #include <libebackend/libebackend.h>

## Description

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:

1. Add the EExtensible interface when registering the GType. There are no methods to implement.

    1
    2
    3
    4
    5
    #include <libebackend/libebackend.h>

    G_DEFINE_TYPE_WITH_CODE (
            ECustomWidget, e_custom_widget, GTK_TYPE_WIDGET,
            G_IMPLEMENT_INTERFACE (E_TYPE_EXTENSIBLE, NULL))

1. 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));
    }

## Functions

### e_extensible_load_extensions ()

    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.

#### Parameters

extensible | an EExtensible |

Since 3.4

### e_extensible_list_extensions ()

    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.

#### Parameters

extensible | an EExtensible |
extension_type | the type of extensions to list |

#### Returns

a list of extension objects derived from `extension_type`

Since 3.4

## Types and Values

### struct EExtensibleInterface

    struct EExtensibleInterface {
    	GTypeInterface parent_interface;
    };