]> Pileus Git - ~andy/gtk/blobdiff - docs/reference/gtk/tmpl/gtkcontainer.sgml
Make 3.0 parallel-installable to 2.x
[~andy/gtk] / docs / reference / gtk / tmpl / gtkcontainer.sgml
index 4fa9b0e086fb1220754875455d76510d9c43b0f9..3218186cd4bc0c3cb358c8674964fca8cce45680 100644 (file)
 GtkContainer
 
 <!-- ##### SECTION Short_Description ##### -->
-
+Base class for widgets which contain other widgets
 
 <!-- ##### SECTION Long_Description ##### -->
 <para>
+A GTK+ user interface is constructed by nesting widgets inside widgets.
+Container widgets are the inner nodes in the resulting tree of widgets:
+they contain other widgets. So, for example, you might have a #GtkWindow
+containing a #GtkFrame containing a GtkLabel. If you wanted an image instead
+of a textual label inside the frame, you might replace the #GtkLabel widget
+with a #GtkImage widget.
+</para>
+<para>
+There are two major kinds of container widgets in GTK+. Both are subclasses
+of the abstract #GtkContainer base class.
+</para>
+<para>
+The first type of container widget has a single child widget and derives
+from #GtkBin. These containers are <firstterm>decorators</firstterm>, which
+add some kind of functionality to the child. For example, a #GtkButton makes
+its child into a clickable button; a #GtkFrame draws a frame around its child
+and a #GtkWindow places its child widget inside a top-level window.
+</para>
+<para>
+The second type of container can have more than one child; its purpose is to
+manage <firstterm>layout</firstterm>. This means that these containers assign
+sizes and positions to their children. For example, a #GtkHBox arranges its
+children in a horizontal row, and a #GtkTable arranges the widgets it contains
+in a two-dimensional grid.
+</para>
+<para>
+To fulfill its task, a layout container must negotiate the size requirements
+with its parent and its children. The basic form of this negotiation is
+carried out in two phases, <firstterm>size requisition</firstterm> and
+<firstterm>size allocation</firstterm>, which are implemented by the
+size_request() and size_allocate() virtual functions in #GtkWidget.
+</para>
+<para>
+GTK+ also supports a more complicated form of size negotiation called
+<firstterm>width-for-height</firstterm> (and its dual
+<firstterm>height-for-width</firstterm>). See #GtkExtendedLayout
+to learn more about width-for-height geometry management.
+</para>
+<refsect2 id="size-requisition"><title>Size Requisition</title>
+<para>
+The size requisition of a widget is it's desired width and height.
+This is represented by a #GtkRequisition.
+</para>
+<para>
+How a widget determines its desired size depends on the widget.
+A #GtkLabel, for example, requests enough space to display all its text.
+Container widgets generally base their size request on the requisitions
+of their children.
+</para>
+<para>
+The size requisition phase of the widget layout process operates top-down.
+It starts at a top-level widget, typically a #GtkWindow. The top-level widget
+asks its child for its size requisition by calling gtk_widget_size_request().
+To determine its requisition, the child asks its own children for their
+requisitions and so on. Finally, the top-level widget will get a requisition
+back from its child.
+</para>
+</refsect2>
+<refsect2 id="size-allocation"><title>Size Allocation</title>
+<para>
+When the top-level widget has determined how much space its child would like
+to have, the second phase of the size negotiation, size allocation, begins.
+Depending on its configuration (see gtk_window_set_resizable()), the top-level
+widget may be able to expand in order to satisfy the size request or it may
+have to ignore the size request and keep its fixed size. It then tells its
+child widget how much space it gets by calling gtk_widget_size_allocate().
+The child widget divides the space among its children and tells each child
+how much space it got, and so on. Under normal circumstances, a #GtkWindow
+will always give its child the amount of space the child requested.
+</para>
+<para>
+A child's size allocation is represented by a #GtkAllocation. This struct
+contains not only a width and height, but also a position (i.e. X and Y
+coordinates), so that containers can tell their children not only how much
+space they have gotten, but also where they are positioned inside the space
+available to the container.
+</para>
+<para>
+Widgets are required to honor the size allocation they receive; a size
+request is only a request, and widgets must be able to cope with any size.
+</para>
+</refsect2>
+<refsect2 id="child-properties"><title>Child properties</title>
+<para>
+<structname>GtkContainer</structname> introduces <firstterm>child
+properties</firstterm> - these are object properties that are not specific
+to either the container or the contained widget, but rather to their relation.
+Typical examples of child properties are the position or pack-type of a widget
+which is contained in a #GtkBox.</para>
+<para>
+Use gtk_container_class_install_child_property() to install child properties
+for a container class and gtk_container_class_find_child_property() or
+gtk_container_class_list_child_properties() to get information about existing
+child properties.
+</para>
+<para>
+To set the value of a child property, use gtk_container_child_set_property(),
+gtk_container_child_set() or gtk_container_child_set_valist().
+To obtain the value of a child property, use
+gtk_container_child_get_property(), gtk_container_child_get() or
+gtk_container_child_get_valist(). To emit notification about child property
+changes, use gtk_widget_child_notify().
+</para>
+</refsect2>
 
+<refsect2 id="GtkContainer-BUILDER-UI">
+<title>GtkContainer as GtkBuildable</title>
+<para>
+The GtkContainer implementation of the GtkBuildable interface
+supports a &lt;packing&gt; element for children, which can
+contain multiple &lt;property&gt; elements that specify
+child properties for the child.
+</para>
+<example>
+<title>Child properties in UI definitions</title>
+<programlisting><![CDATA[
+<object class="GtkVBox">
+  <child>
+    <object class="GtkLabel"/>
+    <packing>
+      <property name="pack-type">start</property>
+    </packing>
+  </child>
+</object>
+]]></programlisting>
+</example>
+<para>
+Since 2.16, child properties can also be marked as translatable using
+the same "translatable", "comments" and "context" attributes that are used
+for regular properties.
 </para>
+</refsect2>
 
 <!-- ##### SECTION See_Also ##### -->
 <para>
 
 </para>
 
+<!-- ##### SECTION Stability_Level ##### -->
+
+
+<!-- ##### SECTION Image ##### -->
+
+
 <!-- ##### STRUCT GtkContainer ##### -->
 <para>
 
 </para>
 
 
-<!-- ##### MACRO GTK_IS_RESIZE_CONTAINER ##### -->
+<!-- ##### SIGNAL GtkContainer::add ##### -->
 <para>
 
 </para>
 
+@container: the object which received the signal.
 @widget: 
 
+<!-- ##### SIGNAL GtkContainer::check-resize ##### -->
+<para>
 
-<!-- ##### MACRO GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID ##### -->
+</para>
+
+@container: the object which received the signal.
+
+<!-- ##### SIGNAL GtkContainer::remove ##### -->
 <para>
 
 </para>
 
-@object: 
-@property_id: 
-@pspec: 
+@container: the object which received the signal.
+@widget: 
+
+<!-- ##### SIGNAL GtkContainer::set-focus-child ##### -->
+<para>
+
+</para>
 
+@container: the object which received the signal.
+@widget: 
 
-<!-- ##### MACRO GTK_HAVE_CONTAINER_FOCUS_ADJUSTMENTS ##### -->
+<!-- ##### ARG GtkContainer:border-width ##### -->
 <para>
 
 </para>
 
+<!-- ##### ARG GtkContainer:child ##### -->
+<para>
 
+</para>
 
-<!-- ##### MACRO gtk_container_border_width ##### -->
+<!-- ##### ARG GtkContainer:resize-mode ##### -->
 <para>
 
 </para>
 
+<!-- ##### MACRO GTK_IS_RESIZE_CONTAINER ##### -->
+<para>
+
+</para>
+
+@widget: 
+
+
+<!-- ##### MACRO GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID ##### -->
+<para>
+This macro should be used to emit a standard warning about unexpected
+properties in set_child_property() and get_child_property() implementations.
+</para>
+
+@object: the #GObject on which set_child_property() or get_child_property()
+   was called
+@property_id: the numeric id of the property
+@pspec: the #GParamSpec of the property
 
 
 <!-- ##### FUNCTION gtk_container_add ##### -->
@@ -70,6 +240,26 @@ GtkContainer
 @widget: 
 
 
+<!-- ##### FUNCTION gtk_container_add_with_properties ##### -->
+<para>
+
+</para>
+
+@container: 
+@widget: 
+@first_prop_name: 
+@Varargs: 
+
+
+<!-- ##### FUNCTION gtk_container_get_resize_mode ##### -->
+<para>
+
+</para>
+
+@container: 
+@Returns: 
+
+
 <!-- ##### FUNCTION gtk_container_set_resize_mode ##### -->
 <para>
 
@@ -97,35 +287,31 @@ GtkContainer
 @callback_data: 
 
 
-<!-- ##### FUNCTION gtk_container_foreach_full ##### -->
+<!-- ##### FUNCTION gtk_container_get_children ##### -->
 <para>
 
 </para>
 
 @container: 
-@callback: 
-@marshal: 
-@callback_data: 
-@notify: 
+@Returns: 
 
 
-<!-- ##### MACRO gtk_container_children ##### -->
+<!-- ##### FUNCTION gtk_container_set_reallocate_redraws ##### -->
 <para>
 
 </para>
 
-@Returns: 
-<!-- # Unused Parameters # -->
 @container: 
+@needs_redraws: 
 
 
-<!-- ##### FUNCTION gtk_container_set_reallocate_redraws ##### -->
+<!-- ##### FUNCTION gtk_container_get_focus_child ##### -->
 <para>
 
 </para>
 
 @container: 
-@needs_redraws: 
+@Returns: 
 
 
 <!-- ##### FUNCTION gtk_container_set_focus_child ##### -->
@@ -137,6 +323,15 @@ GtkContainer
 @child: 
 
 
+<!-- ##### FUNCTION gtk_container_get_focus_vadjustment ##### -->
+<para>
+
+</para>
+
+@container: 
+@Returns: 
+
+
 <!-- ##### FUNCTION gtk_container_set_focus_vadjustment ##### -->
 <para>
 
@@ -146,6 +341,15 @@ GtkContainer
 @adjustment: 
 
 
+<!-- ##### FUNCTION gtk_container_get_focus_hadjustment ##### -->
+<para>
+
+</para>
+
+@container: 
+@Returns: 
+
+
 <!-- ##### FUNCTION gtk_container_set_focus_hadjustment ##### -->
 <para>
 
@@ -172,6 +376,17 @@ GtkContainer
 @Returns: 
 
 
+<!-- ##### FUNCTION gtk_container_child_get ##### -->
+<para>
+
+</para>
+
+@container: 
+@child: 
+@first_prop_name: 
+@Varargs: 
+
+
 <!-- ##### FUNCTION gtk_container_child_set ##### -->
 <para>
 
@@ -181,24 +396,50 @@ GtkContainer
 @child: 
 @first_prop_name: 
 @Varargs: 
-<!-- # Unused Parameters # -->
-@first_arg_name: 
 
 
-<!-- ##### FUNCTION gtk_container_queue_resize ##### -->
+<!-- ##### FUNCTION gtk_container_child_get_property ##### -->
 <para>
 
 </para>
 
 @container: 
+@child: 
+@property_name: 
+@value: 
 
 
-<!-- ##### FUNCTION gtk_container_clear_resize_widgets ##### -->
+<!-- ##### FUNCTION gtk_container_child_set_property ##### -->
 <para>
 
 </para>
 
 @container: 
+@child: 
+@property_name: 
+@value: 
+
+
+<!-- ##### FUNCTION gtk_container_child_get_valist ##### -->
+<para>
+
+</para>
+
+@container: 
+@child: 
+@first_property_name: 
+@var_args: 
+
+
+<!-- ##### FUNCTION gtk_container_child_set_valist ##### -->
+<para>
+
+</para>
+
+@container: 
+@child: 
+@first_property_name: 
+@var_args: 
 
 
 <!-- ##### FUNCTION gtk_container_forall ##### -->
@@ -211,13 +452,12 @@ GtkContainer
 @callback_data: 
 
 
-<!-- ##### FUNCTION gtk_container_child_composite_name ##### -->
+<!-- ##### FUNCTION gtk_container_get_border_width ##### -->
 <para>
 
 </para>
 
 @container: 
-@child: 
 @Returns: 
 
 
@@ -240,66 +480,60 @@ GtkContainer
 @event: 
 
 
-<!-- ##### FUNCTION gtk_container_set_focus_chain ##### -->
+<!-- ##### FUNCTION gtk_container_get_focus_chain ##### -->
 <para>
 
 </para>
 
 @container: 
 @focusable_widgets: 
+@Returns: 
 
 
-<!-- ##### FUNCTION gtk_container_unset_focus_chain ##### -->
+<!-- ##### FUNCTION gtk_container_set_focus_chain ##### -->
 <para>
 
 </para>
 
 @container: 
+@focusable_widgets: 
 
 
-<!-- ##### SIGNAL GtkContainer::add ##### -->
+<!-- ##### FUNCTION gtk_container_unset_focus_chain ##### -->
 <para>
 
 </para>
 
-@container: the object which received the signal.
-@widget: 
-
-<!-- ##### SIGNAL GtkContainer::check-resize ##### -->
-<para>
-
-</para>
+@container: 
 
-@container: the object which received the signal.
 
-<!-- ##### SIGNAL GtkContainer::remove ##### -->
+<!-- ##### FUNCTION gtk_container_class_find_child_property ##### -->
 <para>
 
 </para>
 
-@container: the object which received the signal.
-@widget: 
+@cclass: 
+@property_name: 
+@Returns: 
 
-<!-- ##### SIGNAL GtkContainer::set-focus-child ##### -->
+
+<!-- ##### FUNCTION gtk_container_class_install_child_property ##### -->
 <para>
 
 </para>
 
-@container: the object which received the signal.
-@widget: 
-
-<!-- ##### ARG GtkContainer:border-width ##### -->
-<para>
+@cclass: 
+@property_id: 
+@pspec: 
 
-</para>
 
-<!-- ##### ARG GtkContainer:resize-mode ##### -->
+<!-- ##### FUNCTION gtk_container_class_list_child_properties ##### -->
 <para>
 
 </para>
 
-<!-- ##### ARG GtkContainer:child ##### -->
-<para>
+@cclass: 
+@n_properties: 
+@Returns: 
 
-</para>