Containers must implement the GNOME::container interface. This interface is used as a two way communication facility with objects implementing the GNOME::embeddable interface.
Containers must also implement the GNOME::ClientSite and the GNOME::ViewFrame interfaces. Containers which support in place activation must also implement the GNOME::UIHandler interface. We'll focus here on simple non-in-place non-linking and non-saving containers. Containers which embed components and launch components in a new window when editing is necessary.
Basically, the idea is that if you ask a container to embed a component (by clicking on "insert from" and choosing a special application, the container will add this component to its list of embedded components and will create a ClientSite for this component. Then, it should create a ViewFrame for the component to display its view. A ViewFrame should be created for each of the component view. There should be one and only one ClientSite for each embedded component.
Each interface implements some "sinks". ie: functions which are designed to notify an object of something. That way, we have a two way communication: some of the component sinks are called by the container and some of the container sinks are called by the component. Here, the GNOME::ClientSite interface of the component is a sink for the GNOME::embeddable interface of the component and the GNOME::ViewFrame interface of the container is a sink for the GNOME::View interface of the component.
The following figure should nicely ( :) sum up these relationships:
Figure 7-1. Container/component relationships