Class
GtkContainer
Description [src]
abstract class Gtk.Container : Gtk.Widget
implements Atk.ImplementorIface, Gtk.Buildable {
/* No available fields */
}
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.
There are two major kinds of container widgets in GTK+. Both are subclasses of the abstract GtkContainer base class.
The first type of container widget has a single child widget and derives
from GtkBin
. These containers are decorators, 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.
The second type of container can have more than one child; its purpose is to
manage layout. 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 GtkGrid
arranges the widgets it contains
in a two-dimensional grid.
For implementations of GtkContainer
the virtual method GtkContainerClass
.forall()
is always required, since it’s used for drawing and other internal operations
on the children.
If the GtkContainer
implementation expect to have non internal children
it’s needed to implement both GtkContainerClass
.add() and GtkContainerClass
.remove().
If the GtkContainer implementation has internal children, they should be added
with gtk_widget_set_parent()
on init()
and removed with gtk_widget_unparent()
in the GtkWidgetClass
.destroy() implementation.
See more about implementing custom widgets at https://wiki.gnome.org/HowDoI/CustomWidgets
Height for width geometry management
GTK+ uses a height-for-width (and width-for-height) geometry management system. Height-for-width means that a widget can change how much vertical space it needs, depending on the amount of horizontal space that it is given (and similar for width-for-height).
There are some things to keep in mind when implementing container widgets
that make use of GTK+’s height for width geometry management system. First,
it’s important to note that a container must prioritize one of its
dimensions, that is to say that a widget or container can only have a
GtkSizeRequestMode
that is GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH
or
GTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT
. However, every widget and container
must be able to respond to the APIs for both dimensions, i.e. even if a
widget has a request mode that is height-for-width, it is possible that
its parent will request its sizes using the width-for-height APIs.
To ensure that everything works properly, here are some guidelines to follow when implementing height-for-width (or width-for-height) containers.
Each request mode involves 2 virtual methods. Height-for-width apis run
through gtk_widget_get_preferred_width()
and then through gtk_widget_get_preferred_height_for_width().
When handling requests in the opposite GtkSizeRequestMode
it is important that
every widget request at least enough space to display all of its content at all times.
When gtk_widget_get_preferred_height()
is called on a container that is height-for-width,
the container must return the height for its minimum width. This is easily achieved by
simply calling the reverse apis implemented for itself as follows:
static void
foo_container_get_preferred_height (GtkWidget *widget,
gint *min_height,
gint *nat_height)
{
if (i_am_in_height_for_width_mode)
{
gint min_width;
GTK_WIDGET_GET_CLASS (widget)->get_preferred_width (widget,
&min_width,
NULL);
GTK_WIDGET_GET_CLASS (widget)->get_preferred_height_for_width
(widget,
min_width,
min_height,
nat_height);
}
else
{
... many containers support both request modes, execute the
real width-for-height request here by returning the
collective heights of all widgets that are stacked
vertically (or whatever is appropriate for this container)
...
}
}
Similarly, when gtk_widget_get_preferred_width_for_height()
is called for a container or widget
that is height-for-width, it then only needs to return the base minimum width like so:
static void
foo_container_get_preferred_width_for_height (GtkWidget *widget,
gint for_height,
gint *min_width,
gint *nat_width)
{
if (i_am_in_height_for_width_mode)
{
GTK_WIDGET_GET_CLASS (widget)->get_preferred_width (widget,
min_width,
nat_width);
}
else
{
... execute the real width-for-height request here based on
the required width of the children collectively if the
container were to be allocated the said height ...
}
}
Height for width requests are generally implemented in terms of a virtual allocation
of widgets in the input orientation. Assuming an height-for-width request mode, a container
would implement the get_preferred_height_for_width()
virtual function by first calling
gtk_widget_get_preferred_width()
for each of its children.
For each potential group of children that are lined up horizontally, the values returned by
gtk_widget_get_preferred_width()
should be collected in an array of GtkRequestedSize
structures.
Any child spacing should be removed from the input for_width
and then the collective size should be
allocated using the gtk_distribute_natural_allocation()
convenience function.
The container will then move on to request the preferred height for each child by using
gtk_widget_get_preferred_height_for_width()
and using the sizes stored in the GtkRequestedSize
array.
To allocate a height-for-width container, it’s again important
to consider that a container must prioritize one dimension over the other. So if
a container is a height-for-width container it must first allocate all widgets horizontally
using a GtkRequestedSize
array and gtk_distribute_natural_allocation()
and then add any
extra space (if and where appropriate) for the widget to expand.
After adding all the expand space, the container assumes it was allocated sufficient
height to fit all of its content. At this time, the container must use the total horizontal sizes
of each widget to request the height-for-width of each of its children and store the requests in a
GtkRequestedSize
array for any widgets that stack vertically (for tabular containers this can
be generalized into the heights and widths of rows and columns).
The vertical space must then again be distributed using gtk_distribute_natural_allocation()
while this time considering the allocated height of the widget minus any vertical spacing
that the container adds. Then vertical expand space should be added where appropriate and available
and the container should go on to actually allocating the child widgets.
See [GtkWidget’s geometry management section][geometry-management] to learn more about implementing height-for-width geometry management for widgets.
Child properties
GtkContainer introduces child properties.
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
.
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.
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().
GtkContainer as GtkBuildable
The GtkContainer implementation of the GtkBuildable interface supports
a <packing>
element for children, which can contain multiple <property>
elements that specify child properties for the child.
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.
Since 3.16, containers can have a <focus-chain>
element containing multiple
<widget>
elements, one for each child that should be added to the focus
chain. The ”name” attribute gives the id of the widget.
An example of these properties in UI definitions:
<object class="GtkBox">
<child>
<object class="GtkEntry" id="entry1"/>
<packing>
<property name="pack-type">start</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="entry2"/>
</child>
<focus-chain>
<widget name="entry1"/>
<widget name="entry2"/>
</focus-chain>
</object>
Instance methods
gtk_container_add
Adds widget
to container
. Typically used for simple containers
such as GtkWindow
, GtkFrame
, or GtkButton
; for more complicated
layout containers such as GtkBox
or GtkGrid
, this function will
pick default packing parameters that may not be correct. So
consider functions such as gtk_box_pack_start()
and
gtk_grid_attach()
as an alternative to gtk_container_add()
in
those cases. A widget may be added to only one container at a time;
you can’t place the same widget inside two different containers.
gtk_container_add_with_properties
Adds widget
to container
, setting child properties at the same time.
See gtk_container_add()
and gtk_container_child_set()
for more details.
gtk_container_child_get_valist
Gets the values of one or more child properties for child
and container
.
gtk_container_child_notify
Emits a GtkWidget::child-notify
signal for the
[child property][child-properties]
child_property
on the child.
since: 3.2
gtk_container_child_notify_by_pspec
Emits a GtkWidget::child-notify
signal for the
[child property][child-properties] specified by
pspec
on the child.
since: 3.18
gtk_container_forall
Invokes callback
on each direct child of container
, including
children that are considered “internal” (implementation details
of the container). “Internal” children generally weren’t added
by the user of the container, but were added by the container
implementation itself.
gtk_container_foreach
Invokes callback
on each non-internal child of container
.
See gtk_container_forall()
for details on what constitutes
an “internal” child. For all practical purposes, this function
should iterate over precisely those child widgets that were
added to the container by the application with explicit add()
calls.
gtk_container_get_border_width
Retrieves the border width of the container. See gtk_container_set_border_width().
gtk_container_get_children
Returns the container’s non-internal children. See
gtk_container_forall()
for details on what constitutes an “internal” child.
gtk_container_get_focus_chain
Retrieves the focus chain of the container, if one has been
set explicitly. If no focus chain has been explicitly
set, GTK+ computes the focus chain based on the positions
of the children. In that case, GTK+ stores NULL
in
focusable_widgets
and returns FALSE
.
deprecated: 3.24
gtk_container_get_focus_child
Returns the current focus child widget inside container
. This is not the
currently focused widget. That can be obtained by calling gtk_window_get_focus().
since: 2.14
gtk_container_get_focus_hadjustment
Retrieves the horizontal focus adjustment for the container. See gtk_container_set_focus_hadjustment ().
gtk_container_get_focus_vadjustment
Retrieves the vertical focus adjustment for the container. See gtk_container_set_focus_vadjustment().
gtk_container_get_path_for_child
Returns a newly created widget path representing all the widget hierarchy
from the toplevel down to and including child
.
gtk_container_get_resize_mode
Returns the resize mode for the container. See gtk_container_set_resize_mode ().
deprecated: 3.12
gtk_container_propagate_draw
When a container receives a call to the draw function, it must send
synthetic GtkWidget::draw
calls to all children that don’t have their
own GdkWindows
. This function provides a convenient way of doing this.
A container, when it receives a call to its GtkWidget::draw
function,
calls gtk_container_propagate_draw()
once for each child, passing in
the cr
the container received.
gtk_container_remove
Removes widget
from container
. widget
must be inside container
.
Note that container
will own a reference to widget
, and that this
may be the last reference held; so removing a widget from its
container can destroy that widget. If you want to use widget
again, you need to add a reference to it before removing it from
a container, using g_object_ref(). If you don’t want to use widget
again it’s usually more efficient to simply destroy it directly
using gtk_widget_destroy()
since this will remove it from the
container and help break any circular reference count cycles.
gtk_container_set_focus_chain
Sets a focus chain, overriding the one computed automatically by GTK+.
deprecated: 3.24
gtk_container_set_focus_hadjustment
Hooks up an adjustment to focus handling in a container, so when a child
of the container is focused, the adjustment is scrolled to show that
widget. This function sets the horizontal alignment.
See gtk_scrolled_window_get_hadjustment()
for a typical way of obtaining
the adjustment and gtk_container_set_focus_vadjustment()
for setting
the vertical adjustment.
gtk_container_set_focus_vadjustment
Hooks up an adjustment to focus handling in a container, so when a
child of the container is focused, the adjustment is scrolled to
show that widget. This function sets the vertical alignment. See
gtk_scrolled_window_get_vadjustment()
for a typical way of obtaining
the adjustment and gtk_container_set_focus_hadjustment()
for setting
the horizontal adjustment.
gtk_container_set_reallocate_redraws
Sets the reallocate_redraws
flag of the container to the given value.
deprecated: 3.14
gtk_container_unset_focus_chain
Removes a focus chain explicitly set with gtk_container_set_focus_chain().
deprecated: 3.24
Methods inherited from GtkBuildable (10)
gtk_buildable_add_child
Adds a child to buildable
. type
is an optional string
describing how the child should be added.
since: 2.12
gtk_buildable_construct_child
Constructs a child of buildable
with the name name
.
since: 2.12
gtk_buildable_custom_finished
This is similar to gtk_buildable_parser_finished()
but is
called once for each custom tag handled by the buildable
.
since: 2.12
gtk_buildable_custom_tag_end
This is called at the end of each custom element handled by the buildable.
since: 2.12
gtk_buildable_custom_tag_start
This is called for each unknown element under <child>
.
since: 2.12
gtk_buildable_get_internal_child
Get the internal child called childname
of the buildable
object.
since: 2.12
gtk_buildable_get_name
Gets the name of the buildable
object.
since: 2.12
gtk_buildable_parser_finished
Called when the builder finishes the parsing of a
[GtkBuilder UI definition][BUILDER-UI].
Note that this will be called once for each time
gtk_builder_add_from_file()
or gtk_builder_add_from_string()
is called on a builder.
since: 2.12
gtk_buildable_set_buildable_property
Sets the property name name
to value
on the buildable
object.
since: 2.12
gtk_buildable_set_name
Sets the name of the buildable
object.
since: 2.12
Properties
Properties inherited from GtkWidget (39)
Gtk.Widget:app-paintable
Gtk.Widget:can-default
Gtk.Widget:can-focus
Gtk.Widget:composite-child
Gtk.Widget:double-buffered
Whether the widget is double buffered.
deprecated: 3.14 since: 2.18
Gtk.Widget:events
Gtk.Widget:expand
Whether to expand in both directions. Setting this sets both GtkWidget:hexpand
and GtkWidget:vexpand
.
since: 3.0
Gtk.Widget:focus-on-click
Whether the widget should grab focus when it is clicked with the mouse.
since: 3.20
Gtk.Widget:halign
How to distribute horizontal space if widget gets extra space, see GtkAlign
.
since: 3.0
Gtk.Widget:has-default
Gtk.Widget:has-focus
Gtk.Widget:has-tooltip
Enables or disables the emission of GtkWidget::query-tooltip
on widget
.
A value of TRUE
indicates that widget
can have a tooltip, in this case
the widget will be queried using GtkWidget::query-tooltip
to determine
whether it will provide a tooltip or not.
since: 2.12
Gtk.Widget:height-request
Gtk.Widget:hexpand
Whether to expand horizontally. See gtk_widget_set_hexpand().
since: 3.0
Gtk.Widget:hexpand-set
Whether to use the GtkWidget:hexpand
property. See gtk_widget_get_hexpand_set().
since: 3.0
Gtk.Widget:is-focus
Gtk.Widget:margin
Sets all four sides’ margin at once. If read, returns max margin on any side.
since: 3.0
Gtk.Widget:margin-bottom
Margin on bottom side of widget.
since: 3.0
Gtk.Widget:margin-end
Margin on end of widget, horizontally. This property supports left-to-right and right-to-left text directions.
since: 3.12
Gtk.Widget:margin-left
Margin on left side of widget.
deprecated: 3.12 since: 3.0
Gtk.Widget:margin-right
Margin on right side of widget.
deprecated: 3.12 since: 3.0
Gtk.Widget:margin-start
Margin on start of widget, horizontally. This property supports left-to-right and right-to-left text directions.
since: 3.12
Gtk.Widget:margin-top
Margin on top side of widget.
since: 3.0
Gtk.Widget:name
Gtk.Widget:no-show-all
Gtk.Widget:opacity
The requested opacity of the widget. See gtk_widget_set_opacity()
for
more details about window opacity.
since: 3.8
Gtk.Widget:parent
Gtk.Widget:receives-default
Gtk.Widget:scale-factor
The scale factor of the widget. See gtk_widget_get_scale_factor()
for
more details about widget scaling.
since: 3.10
Gtk.Widget:sensitive
Gtk.Widget:style
The style of the widget, which contains information about how it will look (colors, etc).
deprecated: Unknown
Gtk.Widget:tooltip-markup
Sets the text of tooltip to be the given string, which is marked up with the [Pango text markup language][PangoMarkupFormat]. Also see gtk_tooltip_set_markup().
since: 2.12
Gtk.Widget:tooltip-text
Sets the text of tooltip to be the given string.
since: 2.12
Gtk.Widget:valign
How to distribute vertical space if widget gets extra space, see GtkAlign
.
since: 3.0
Gtk.Widget:vexpand
Whether to expand vertically. See gtk_widget_set_vexpand().
since: 3.0
Gtk.Widget:vexpand-set
Whether to use the GtkWidget:vexpand
property. See gtk_widget_get_vexpand_set().
since: 3.0
Gtk.Widget:visible
Gtk.Widget:width-request
Gtk.Widget:window
The widget’s window if it is realized, NULL
otherwise.
since: 2.14
Signals
Signals inherited from GtkWidget (69)
GtkWidget::accel-closures-changed
GtkWidget::button-press-event
The ::button-press-event signal will be emitted when a button (typically from a mouse) is pressed.
GtkWidget::button-release-event
The ::button-release-event signal will be emitted when a button (typically from a mouse) is released.
GtkWidget::can-activate-accel
Determines whether an accelerator that activates the signal
identified by signal_id
can currently be activated.
This signal is present to allow applications and derived
widgets to override the default GtkWidget
handling
for determining whether an accelerator can be activated.
GtkWidget::child-notify
The ::child-notify signal is emitted for each [child property][child-properties] that has changed on an object. The signal’s detail holds the property name.
GtkWidget::composited-changed
The ::composited-changed signal is emitted when the composited
status of widgets
screen changes.
See gdk_screen_is_composited().
deprecated: 3.22
GtkWidget::configure-event
The ::configure-event signal will be emitted when the size, position or
stacking of the widget
‘s window has changed.
GtkWidget::damage-event
Emitted when a redirected window belonging to widget
gets drawn into.
The region/area members of the event shows what area of the redirected
drawable was drawn into.
since: 2.14
GtkWidget::delete-event
The ::delete-event signal is emitted if a user requests that
a toplevel window is closed. The default handler for this signal
destroys the window. Connecting gtk_widget_hide_on_delete()
to
this signal will cause the window to be hidden instead, so that
it can later be shown again without reconstructing it.
GtkWidget::destroy
Signals that all holders of a reference to the widget should release the reference that they hold. May result in finalization of the widget if all references are released.
GtkWidget::destroy-event
The ::destroy-event signal is emitted when a GdkWindow
is destroyed.
You rarely get this signal, because most widgets disconnect themselves
from their window before they destroy it, so no widget owns the
window at destroy time.
GtkWidget::direction-changed
The ::direction-changed signal is emitted when the text direction of a widget changes.
GtkWidget::drag-begin
The ::drag-begin signal is emitted on the drag source when a drag is started. A typical reason to connect to this signal is to set up a custom drag icon with e.g. gtk_drag_source_set_icon_pixbuf().
GtkWidget::drag-data-delete
The ::drag-data-delete signal is emitted on the drag source when a drag
with the action GDK_ACTION_MOVE
is successfully completed. The signal
handler is responsible for deleting the data that has been dropped. What
“delete” means depends on the context of the drag operation.
GtkWidget::drag-data-get
The ::drag-data-get signal is emitted on the drag source when the drop
site requests the data which is dragged. It is the responsibility of
the signal handler to fill data
with the data in the format which
is indicated by info
. See gtk_selection_data_set()
and gtk_selection_data_set_text().
GtkWidget::drag-data-received
The ::drag-data-received signal is emitted on the drop site when the
dragged data has been received. If the data was received in order to
determine whether the drop will be accepted, the handler is expected
to call gdk_drag_status()
and not finish the drag.
If the data was received in response to a GtkWidget::drag-drop
signal
(and this is the last target to be received), the handler for this
signal is expected to process the received data and then call
gtk_drag_finish(), setting the success
parameter depending on
whether the data was processed successfully.
GtkWidget::drag-drop
The ::drag-drop signal is emitted on the drop site when the user drops
the data onto the widget. The signal handler must determine whether
the cursor position is in a drop zone or not. If it is not in a drop
zone, it returns FALSE
and no further processing is necessary.
Otherwise, the handler returns TRUE
. In this case, the handler must
ensure that gtk_drag_finish()
is called to let the source know that
the drop is done. The call to gtk_drag_finish()
can be done either
directly or in a GtkWidget::drag-data-received
handler which gets
triggered by calling gtk_drag_get_data()
to receive the data for one
or more of the supported targets.
GtkWidget::drag-end
The ::drag-end signal is emitted on the drag source when a drag is
finished. A typical reason to connect to this signal is to undo
things done in GtkWidget::drag-begin
.
GtkWidget::drag-failed
The ::drag-failed signal is emitted on the drag source when a drag has
failed. The signal handler may hook custom code to handle a failed DnD
operation based on the type of error, it returns TRUE
is the failure has
been already handled (not showing the default “drag operation failed”
animation), otherwise it returns FALSE
.
since: 2.12
GtkWidget::drag-leave
The ::drag-leave signal is emitted on the drop site when the cursor
leaves the widget. A typical reason to connect to this signal is to
undo things done in GtkWidget::drag-motion
, e.g. undo highlighting
with gtk_drag_unhighlight().
GtkWidget::drag-motion
The ::drag-motion signal is emitted on the drop site when the user
moves the cursor over the widget during a drag. The signal handler
must determine whether the cursor position is in a drop zone or not.
If it is not in a drop zone, it returns FALSE
and no further processing
is necessary. Otherwise, the handler returns TRUE
. In this case, the
handler is responsible for providing the necessary information for
displaying feedback to the user, by calling gdk_drag_status().
GtkWidget::draw
This signal is emitted when a widget is supposed to render itself.
The widget
‘s top left corner must be painted at the origin of
the passed in context and be sized to the values returned by
gtk_widget_get_allocated_width()
and gtk_widget_get_allocated_height().
since: 3.0
GtkWidget::enter-notify-event
The ::enter-notify-event will be emitted when the pointer enters
the widget
‘s window.
GtkWidget::event
The GTK+ main loop will emit three signals for each GDK event delivered
to a widget: one generic ::event signal, another, more specific,
signal that matches the type of event delivered (e.g.
GtkWidget::key-press-event
) and finally a generic
GtkWidget::event-after
signal.
GtkWidget::event-after
After the emission of the GtkWidget::event
signal and (optionally)
the second more specific signal, ::event-after will be emitted
regardless of the previous two signals handlers return values.
GtkWidget::focus
GtkWidget::focus-in-event
The ::focus-in-event signal will be emitted when the keyboard focus
enters the widget
‘s window.
GtkWidget::focus-out-event
The ::focus-out-event signal will be emitted when the keyboard focus
leaves the widget
‘s window.
GtkWidget::grab-broken-event
Emitted when a pointer or keyboard grab on a window belonging
to widget
gets broken.
since: 2.8
GtkWidget::grab-focus
GtkWidget::grab-notify
The ::grab-notify signal is emitted when a widget becomes shadowed by a GTK+ grab (not a pointer or keyboard grab) on another widget, or when it becomes unshadowed due to a grab being removed.
GtkWidget::hide
The ::hide signal is emitted when widget
is hidden, for example with gtk_widget_hide().
GtkWidget::hierarchy-changed
The ::hierarchy-changed signal is emitted when the
anchored state of a widget changes. A widget is
“anchored” when its toplevel
ancestor is a GtkWindow
. This signal is emitted when
a widget changes from un-anchored to anchored or vice-versa.
GtkWidget::key-press-event
The ::key-press-event signal is emitted when a key is pressed. The signal emission will reoccur at the key-repeat rate when the key is kept pressed.
GtkWidget::key-release-event
The ::key-release-event signal is emitted when a key is released.
GtkWidget::keynav-failed
Gets emitted if keyboard navigation fails.
See gtk_widget_keynav_failed()
for details.
since: 2.12
GtkWidget::leave-notify-event
The ::leave-notify-event will be emitted when the pointer leaves
the widget
‘s window.
GtkWidget::map
The ::map signal is emitted when widget
is going to be mapped, that is
when the widget is visible (which is controlled with
gtk_widget_set_visible()) and all its parents up to the toplevel widget
are also visible. Once the map has occurred, GtkWidget::map-event
will
be emitted.
GtkWidget::map-event
The ::map-event signal will be emitted when the widget
‘s window is
mapped. A window is mapped when it becomes visible on the screen.
GtkWidget::mnemonic-activate
The default handler for this signal activates widget
if group_cycling
is FALSE
, or just makes widget
grab focus if group_cycling
is TRUE
.
GtkWidget::motion-notify-event
The ::motion-notify-event signal is emitted when the pointer moves
over the widget’s GdkWindow
.
GtkWidget::move-focus
GtkWidget::parent-set
The ::parent-set signal is emitted when a new parent has been set on a widget.
GtkWidget::popup-menu
This signal gets emitted whenever a widget should pop up a context
menu. This usually happens through the standard key binding mechanism;
by pressing a certain key while a widget is focused, the user can cause
the widget to pop up a menu. For example, the GtkEntry
widget creates
a menu with clipboard commands. See the
[Popup Menu Migration Checklist][checklist-popup-menu]
for an example of how to use this signal.
GtkWidget::property-notify-event
The ::property-notify-event signal will be emitted when a property on
the widget
‘s window has been changed or deleted.
GtkWidget::proximity-in-event
To receive this signal the GdkWindow
associated to the widget needs
to enable the #GDK_PROXIMITY_IN_MASK mask.
GtkWidget::proximity-out-event
To receive this signal the GdkWindow
associated to the widget needs
to enable the #GDK_PROXIMITY_OUT_MASK mask.
GtkWidget::query-tooltip
Emitted when GtkWidget:has-tooltip
is TRUE
and the hover timeout
has expired with the cursor hovering “above” widget
; or emitted when widget
got
focus in keyboard mode.
since: 2.12
GtkWidget::realize
The ::realize signal is emitted when widget
is associated with a
GdkWindow
, which means that gtk_widget_realize()
has been called or the
widget has been mapped (that is, it is going to be drawn).
GtkWidget::screen-changed
The ::screen-changed signal gets emitted when the screen of a widget has changed.
GtkWidget::scroll-event
The ::scroll-event signal is emitted when a button in the 4 to 7 range is pressed. Wheel mice are usually configured to generate button press events for buttons 4 and 5 when the wheel is turned.
GtkWidget::selection-clear-event
The ::selection-clear-event signal will be emitted when the
the widget
‘s window has lost ownership of a selection.
GtkWidget::selection-get
GtkWidget::selection-notify-event
GtkWidget::selection-received
GtkWidget::selection-request-event
The ::selection-request-event signal will be emitted when
another client requests ownership of the selection owned by
the widget
‘s window.
GtkWidget::show
The ::show signal is emitted when widget
is shown, for example with gtk_widget_show().
GtkWidget::show-help
GtkWidget::size-allocate
GtkWidget::state-changed
The ::state-changed signal is emitted when the widget state changes. See gtk_widget_get_state().
deprecated: 3.0
GtkWidget::state-flags-changed
The ::state-flags-changed signal is emitted when the widget state changes, see gtk_widget_get_state_flags().
since: 3.0
GtkWidget::style-set
The ::style-set signal is emitted when a new style has been set
on a widget. Note that style-modifying functions like
gtk_widget_modify_base()
also cause this signal to be emitted.
deprecated: 3.0
GtkWidget::style-updated
The ::style-updated signal is a convenience signal that is emitted when the
GtkStyleContext::changed
signal is emitted on the widget
‘s associated
GtkStyleContext
as returned by gtk_widget_get_style_context().
since: 3.0
GtkWidget::touch-event
GtkWidget::unmap
The ::unmap signal is emitted when widget
is going to be unmapped, which
means that either it or any of its parents up to the toplevel widget have
been set as hidden.
GtkWidget::unmap-event
The ::unmap-event signal will be emitted when the widget
‘s window is
unmapped. A window is unmapped when it becomes invisible on the screen.
GtkWidget::unrealize
The ::unrealize signal is emitted when the GdkWindow
associated with
widget
is destroyed, which means that gtk_widget_unrealize()
has been
called or the widget has been unmapped (that is, it is going to be hidden).
GtkWidget::visibility-notify-event
The ::visibility-notify-event will be emitted when the widget
‘s
window is obscured or unobscured.
deprecated: 3.12
GtkWidget::window-state-event
The ::window-state-event will be emitted when the state of the
toplevel window associated to the widget
changes.
Signals inherited from GObject (1)
GObject::notify
The notify signal is emitted on an object when one of its properties has its value set through g_object_set_property(), g_object_set(), et al.
Class structure
struct GtkContainerClass {
GtkWidgetClass parent_class;
void (* add) (
GtkContainer* container,
GtkWidget* widget
);
void (* remove) (
GtkContainer* container,
GtkWidget* widget
);
void (* check_resize) (
GtkContainer* container
);
void (* forall) (
GtkContainer* container,
gboolean include_internals,
GtkCallback callback,
gpointer callback_data
);
void (* set_focus_child) (
GtkContainer* container,
GtkWidget* child
);
GType (* child_type) (
GtkContainer* container
);
gchar* (* composite_name) (
GtkContainer* container,
GtkWidget* child
);
void (* set_child_property) (
GtkContainer* container,
GtkWidget* child,
guint property_id,
const GValue* value,
GParamSpec* pspec
);
void (* get_child_property) (
GtkContainer* container,
GtkWidget* child,
guint property_id,
GValue* value,
GParamSpec* pspec
);
GtkWidgetPath* (* get_path_for_child) (
GtkContainer* container,
GtkWidget* child
);
void (* _gtk_reserved1) (
void
);
void (* _gtk_reserved2) (
void
);
void (* _gtk_reserved3) (
void
);
void (* _gtk_reserved4) (
void
);
void (* _gtk_reserved5) (
void
);
void (* _gtk_reserved6) (
void
);
void (* _gtk_reserved7) (
void
);
void (* _gtk_reserved8) (
void
);
}
Base class for containers.
Class members
parent_class: GtkWidgetClass
The parent class.
add: void (* add) ( GtkContainer* container, GtkWidget* widget )
Signal emitted when a widget is added to container.
remove: void (* remove) ( GtkContainer* container, GtkWidget* widget )
Signal emitted when a widget is removed from container.
check_resize: void (* check_resize) ( GtkContainer* container )
Signal emitted when a size recalculation is needed.
forall: void (* forall) ( GtkContainer* container, gboolean include_internals, GtkCallback callback, gpointer callback_data )
Invokes callback on each child of container. The callback handler may remove the child.
set_focus_child: void (* set_focus_child) ( GtkContainer* container, GtkWidget* child )
Sets the focused child of container.
child_type: GType (* child_type) ( GtkContainer* container )
Returns the type of the children supported by the container.
composite_name: gchar* (* composite_name) ( GtkContainer* container, GtkWidget* child )
Gets a widget’s composite name. Deprecated: 3.10.
set_child_property: void (* set_child_property) ( GtkContainer* container, GtkWidget* child, guint property_id, const GValue* value, GParamSpec* pspec )
Set a property on a child of container.
get_child_property: void (* get_child_property) ( GtkContainer* container, GtkWidget* child, guint property_id, GValue* value, GParamSpec* pspec )
Get a property from a child of container.
get_path_for_child: GtkWidgetPath* (* get_path_for_child) ( GtkContainer* container, GtkWidget* child )
Get path representing entire widget hierarchy from the toplevel down to and including
child
._gtk_reserved1: void (* _gtk_reserved1) ( void )
No description available.
_gtk_reserved2: void (* _gtk_reserved2) ( void )
No description available.
_gtk_reserved3: void (* _gtk_reserved3) ( void )
No description available.
_gtk_reserved4: void (* _gtk_reserved4) ( void )
No description available.
_gtk_reserved5: void (* _gtk_reserved5) ( void )
No description available.
_gtk_reserved6: void (* _gtk_reserved6) ( void )
No description available.
_gtk_reserved7: void (* _gtk_reserved7) ( void )
No description available.
_gtk_reserved8: void (* _gtk_reserved8) ( void )
No description available.
Virtual methods
Gtk.ContainerClass.add
Adds widget
to container
. Typically used for simple containers
such as GtkWindow
, GtkFrame
, or GtkButton
; for more complicated
layout containers such as GtkBox
or GtkGrid
, this function will
pick default packing parameters that may not be correct. So
consider functions such as gtk_box_pack_start()
and
gtk_grid_attach()
as an alternative to gtk_container_add()
in
those cases. A widget may be added to only one container at a time;
you can’t place the same widget inside two different containers.
Gtk.ContainerClass.forall
Invokes callback
on each direct child of container
, including
children that are considered “internal” (implementation details
of the container). “Internal” children generally weren’t added
by the user of the container, but were added by the container
implementation itself.
Gtk.ContainerClass.get_path_for_child
Returns a newly created widget path representing all the widget hierarchy
from the toplevel down to and including child
.
Gtk.ContainerClass.remove
Removes widget
from container
. widget
must be inside container
.
Note that container
will own a reference to widget
, and that this
may be the last reference held; so removing a widget from its
container can destroy that widget. If you want to use widget
again, you need to add a reference to it before removing it from
a container, using g_object_ref(). If you don’t want to use widget
again it’s usually more efficient to simply destroy it directly
using gtk_widget_destroy()
since this will remove it from the
container and help break any circular reference count cycles.
Gtk.ContainerClass.set_focus_child
Sets, or unsets if child
is NULL
, the focused child of container
.
Class methods
gtk_container_class_handle_border_width
Modifies a subclass of GtkContainerClass
to automatically add and
remove the border-width setting on GtkContainer. This allows the
subclass to ignore the border width in its size request and
allocate methods. The intent is for a subclass to invoke this
in its class_init function.
gtk_container_class_install_child_properties
Installs child properties on a container class.
since: 3.18