[layout] Allow taking a back pointer to the Container

The LayoutManager implementation might opt to take a back pointer
to the Container that is using the layout instance; this allows
direct access to the container itself from within the implementation.
This commit is contained in:
Emmanuele Bassi 2009-09-16 14:58:30 +01:00
parent f58bdbad15
commit 9117ee2056
3 changed files with 41 additions and 0 deletions

View File

@ -299,6 +299,34 @@ clutter_layout_manager_layout_changed (ClutterLayoutManager *manager)
g_signal_emit (manager, manager_signals[LAYOUT_CHANGED], 0); g_signal_emit (manager, manager_signals[LAYOUT_CHANGED], 0);
} }
/**
* clutter_layout_manager_set_container:
* @manager: a #ClutterLayoutManager
* @container: (allow-none): a #ClutterContainer using @manager
*
* If the #ClutterLayoutManager sub-class allows it, allow
* adding a weak reference of the @container using @manager
* from within the layout manager
*
* The layout manager should not increase the reference
* count of the @container
*
* Since: 1.2
*/
void
clutter_layout_manager_set_container (ClutterLayoutManager *manager,
ClutterContainer *container)
{
ClutterLayoutManagerClass *klass;
g_return_if_fail (CLUTTER_IS_LAYOUT_MANAGER (manager));
g_return_if_fail (container == NULL || CLUTTER_IS_CONTAINER (container));
klass = CLUTTER_LAYOUT_MANAGER_GET_CLASS (manager);
if (klass->set_container)
klass->set_container (manager, container);
}
static inline ClutterLayoutMeta * static inline ClutterLayoutMeta *
create_child_meta (ClutterLayoutManager *manager, create_child_meta (ClutterLayoutManager *manager,
ClutterContainer *container, ClutterContainer *container,

View File

@ -57,6 +57,9 @@ struct _ClutterLayoutManager
{ {
/*< private >*/ /*< private >*/
GInitiallyUnowned parent_instance; GInitiallyUnowned parent_instance;
/* padding for future expansion */
gpointer dummy;
}; };
/** /**
@ -70,6 +73,10 @@ struct _ClutterLayoutManager
* @allocate: virtual function; override to allocate the children of the * @allocate: virtual function; override to allocate the children of the
* layout manager. See also the allocate() virtual function in * layout manager. See also the allocate() virtual function in
* #ClutterActor * #ClutterActor
* @set_container: virtual function; override to set a back pointer
* on the #ClutterContainer using the layout manager. The implementation
* should not take a reference on the container, but just take a weak
* reference, to avoid potential leaks due to reference cycles
* @create_child_meta: virtual function; override to create a * @create_child_meta: virtual function; override to create a
* #ClutterChildMeta instance associated to a #ClutterContainer and a * #ClutterChildMeta instance associated to a #ClutterContainer and a
* child #ClutterActor, used to maintain layout manager specific properties * child #ClutterActor, used to maintain layout manager specific properties
@ -102,6 +109,9 @@ struct _ClutterLayoutManagerClass
const ClutterActorBox *allocation, const ClutterActorBox *allocation,
ClutterAllocationFlags flags); ClutterAllocationFlags flags);
void (* set_container) (ClutterLayoutManager *manager,
ClutterContainer *container);
ClutterLayoutMeta *(* create_child_meta) (ClutterLayoutManager *manager, ClutterLayoutMeta *(* create_child_meta) (ClutterLayoutManager *manager,
ClutterContainer *container, ClutterContainer *container,
ClutterActor *actor); ClutterActor *actor);
@ -137,6 +147,8 @@ void clutter_layout_manager_allocate (ClutterLayoutMan
const ClutterActorBox *allocation, const ClutterActorBox *allocation,
ClutterAllocationFlags flags); ClutterAllocationFlags flags);
void clutter_layout_manager_set_container (ClutterLayoutManager *manager,
ClutterContainer *container);
void clutter_layout_manager_layout_changed (ClutterLayoutManager *manager); void clutter_layout_manager_layout_changed (ClutterLayoutManager *manager);
ClutterLayoutMeta *clutter_layout_manager_get_child_meta (ClutterLayoutManager *manager, ClutterLayoutMeta *clutter_layout_manager_get_child_meta (ClutterLayoutManager *manager,

View File

@ -1735,6 +1735,7 @@ clutter_layout_manager_get_preferred_width
clutter_layout_manager_get_preferred_height clutter_layout_manager_get_preferred_height
clutter_layout_manager_allocate clutter_layout_manager_allocate
clutter_layout_manager_layout_changed clutter_layout_manager_layout_changed
clutter_layout_manager_set_container
<SUBSECTION> <SUBSECTION>
clutter_layout_manager_add_child_meta clutter_layout_manager_add_child_meta