## ShellGenericContainer

ShellGenericContainer — A container class with signals for allocation

## Synopsis

                        ShellGenericContainerAllocation;
    struct              ShellGenericContainer;
    struct              ShellGenericContainerClass;
    guint               shell_generic_container_get_n_skip_paint
                                                            (ShellGenericContainer *self);
    gboolean            shell_generic_container_get_skip_paint
                                                            (ShellGenericContainer *self,
                                                             ClutterActor *child);
    void                shell_generic_container_set_skip_paint
                                                            (ShellGenericContainer *self,
                                                             ClutterActor *child,
                                                             gboolean skip);

## Object Hierarchy

      GBoxed
       +----ShellGenericContainerAllocation

      GObject
       +----GInitiallyUnowned
             +----ClutterActor
                   +----StWidget
                         +----ShellGenericContainer

## Implemented Interfaces

ShellGenericContainer implements ClutterContainer, ClutterScriptable, ClutterAnimatable and AtkImplementorIface.

## Signals

      "allocate"                                       : Run Last
      "get-preferred-height"                           : Run Last
      "get-preferred-width"                            : Run Last

## Description

ShellGenericContainer is mainly a workaround for the current lack of GObject subclassing + vfunc overrides in gjs. We implement the container interface, but proxy the virtual functions into signals, which gjs can catch.

ShellGenericContainer is an StWidget, and automatically takes its borders and padding into account during size request and allocation.

## Details

### ShellGenericContainerAllocation

    typedef struct {
      float min_size;
      float natural_size;
    } ShellGenericContainerAllocation;

### struct ShellGenericContainer

    struct ShellGenericContainer;

### struct ShellGenericContainerClass

    struct ShellGenericContainerClass {
        StWidgetClass parent_class;
    };

### shell_generic_container_get_n_skip_paint ()

    guint               shell_generic_container_get_n_skip_paint
                                                            (ShellGenericContainer *self);

`self` : | A ShellGenericContainer
Returns : | Number of children which will not be painted.

### shell_generic_container_get_skip_paint ()

    gboolean            shell_generic_container_get_skip_paint
                                                            (ShellGenericContainer *self,
                                                             ClutterActor *child);

Gets whether or not `actor` is skipped when painting.

`self` : | A ShellGenericContainer
`child` : | Child ClutterActor
Returns : | `TRUE` or `FALSE`

### shell_generic_container_set_skip_paint ()

    void                shell_generic_container_set_skip_paint
                                                            (ShellGenericContainer *self,
                                                             ClutterActor *child,
                                                             gboolean skip);

Set whether or not we should skip painting `actor`. Workaround for lack of gjs ability to override _paint vfunc.

`self` : | A ShellGenericContainer
`child` : | Child ClutterActor
`skip` : | `TRUE` if we should skip painting

## Signal Details

### The `"allocate"` signal

    void                user_function                      (ShellGenericContainer *self,
                                                            ClutterActorBox       *box,
                                                            ClutterAllocationFlags flags,
                                                            gpointer               user_data)      : Run Last

Emitted when `self` is allocated, after chaining up to the parent allocate method.

Note that `box` is `self`'s content box (qv `st_theme_node_get_content_box()`), NOT its allocation.

`self` : | the ShellGenericContainer
`box` : | `self`'s content box
`flags` : | the allocation flags.
`user_data` : | user data set when the signal handler was connected.

### The `"get-preferred-height"` signal

    void                user_function                      (ShellGenericContainer           *self,
                                                            gfloat                           for_width,
                                                            ShellGenericContainerAllocation *alloc,
                                                            gpointer                         user_data)      : Run Last

Emitted when `clutter_actor_get_preferred_height()` is called on `self`. You should fill in the fields of `alloc` with the your minimum and natural heights. ShellGenericContainer will deal with taking its borders and padding into account for you.

`alloc`'s fields are initialized to 0, so unless you have a fixed height specified (via "height" or CSS), you must connect to this signal and fill in the values.

`self` : | the ShellGenericContainer
`for_width` : | as in `clutter_actor_get_preferred_height()`
`alloc` : | a ShellGenericContainerAllocation to be filled in
`user_data` : | user data set when the signal handler was connected.

### The `"get-preferred-width"` signal

    void                user_function                      (ShellGenericContainer           *self,
                                                            gfloat                           for_height,
                                                            ShellGenericContainerAllocation *alloc,
                                                            gpointer                         user_data)       : Run Last

Emitted when `clutter_actor_get_preferred_width()` is called on `self`. You should fill in the fields of `alloc` with the your minimum and natural widths. ShellGenericContainer will deal with taking its borders and padding into account for you.

`alloc`'s fields are initialized to 0, so unless you have a fixed width specified (via "width" or CSS), you must connect to this signal and fill in the values.

`self` : | the ShellGenericContainer
`for_height` : | as in `clutter_actor_get_preferred_width()`
`alloc` : | a ShellGenericContainerAllocation to be filled in
`user_data` : | user data set when the signal handler was connected.