Class
GtkWidget
Description [src]
abstract class Gtk.Widget : GObject.InitiallyUnowned
implements Gtk.Accessible, Gtk.Buildable, Gtk.ConstraintTarget {
/* No available fields */
}
The base class for all widgets.
It manages the widget lifecycle, layout, states and style.
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). The most common example is a label that reflows to fill up the available width, wraps to fewer lines, and therefore needs less height.
Height-for-width geometry management is implemented in GTK by way of two virtual methods:
There are some important things to keep in mind when implementing height-for-width and when using it in widget implementations.
If you implement a direct GtkWidget
subclass that supports
height-for-width or width-for-height geometry management for itself
or its child widgets, the Gtk.WidgetClass.get_request_mode
virtual
function must be implemented as well and return the widget’s preferred
request mode. The default implementation of this virtual function
returns GTK_SIZE_REQUEST_CONSTANT_SIZE
, which means that the widget will
only ever get -1 passed as the for_size value to its
Gtk.WidgetClass.measure
implementation.
The geometry management system will query a widget hierarchy in
only one orientation at a time. When widgets are initially queried
for their minimum sizes it is generally done in two initial passes
in the GtkSizeRequestMode
chosen by the toplevel.
For example, when queried in the normal GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH
mode:
First, the default minimum and natural width for each widget
in the interface will be computed using gtk_widget_measure()
with an
orientation of GTK_ORIENTATION_HORIZONTAL
and a for_size of -1.
Because the preferred widths for each widget depend on the preferred
widths of their children, this information propagates up the hierarchy,
and finally a minimum and natural width is determined for the entire
toplevel. Next, the toplevel will use the minimum width to query for the
minimum height contextual to that width using gtk_widget_measure()
with an
orientation of GTK_ORIENTATION_VERTICAL
and a for_size of the just computed
width. This will also be a highly recursive operation. The minimum height
for the minimum width is normally used to set the minimum size constraint
on the toplevel.
After the toplevel window has initially requested its size in both
dimensions it can go on to allocate itself a reasonable size (or a size
previously specified with gtk_window_set_default_size()
). During the
recursive allocation process it’s important to note that request cycles
will be recursively executed while widgets allocate their children.
Each widget, once allocated a size, will go on to first share the
space in one orientation among its children and then request each child’s
height for its target allocated width or its width for allocated height,
depending. In this way a widget will typically be requested its size
a number of times before actually being allocated a size. The size a
widget is finally allocated can of course differ from the size it has
requested. For this reason, GtkWidget
caches a small number of results
to avoid re-querying for the same sizes in one allocation cycle.
If a widget does move content around to intelligently use up the
allocated size then it must support the request in both
GtkSizeRequestMode
s even if the widget in question only
trades sizes in a single orientation.
For instance, a GtkLabel
that does height-for-width word wrapping
will not expect to have Gtk.WidgetClass.measure
with an orientation of
GTK_ORIENTATION_VERTICAL
called because that call is specific to a
width-for-height request. In this case the label must return the height
required for its own minimum possible width. By following this rule any
widget that handles height-for-width or width-for-height requests will
always be allocated at least enough space to fit its own content.
Here are some examples of how a GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH
widget
generally deals with width-for-height requests:
static void
foo_widget_measure (GtkWidget *widget,
GtkOrientation orientation,
int for_size,
int *minimum_size,
int *natural_size,
int *minimum_baseline,
int *natural_baseline)
{
if (orientation == GTK_ORIENTATION_HORIZONTAL)
{
// Calculate minimum and natural width
}
else // VERTICAL
{
if (i_am_in_height_for_width_mode)
{
int min_width, dummy;
// First, get the minimum width of our widget
GTK_WIDGET_GET_CLASS (widget)->measure (widget, GTK_ORIENTATION_HORIZONTAL, -1,
&min_width, &dummy, &dummy, &dummy);
// Now use the minimum width to retrieve the minimum and natural height to display
// that width.
GTK_WIDGET_GET_CLASS (widget)->measure (widget, GTK_ORIENTATION_VERTICAL, min_width,
minimum_size, natural_size, &dummy, &dummy);
}
else
{
// ... some widgets do both.
}
}
}
Often a widget needs to get its own request during size request or allocation. For example, when computing height it may need to also compute width. Or when deciding how to use an allocation, the widget may need to know its natural size. In these cases, the widget should be careful to call its virtual methods directly, like in the code example above.
It will not work to use the wrapper function gtk_widget_measure()
inside your own Gtk.WidgetClass.size_allocate
implementation.
These return a request adjusted by GtkSizeGroup
, the widget’s
align and expand flags, as well as its CSS style.
If a widget used the wrappers inside its virtual method implementations, then the adjustments (such as widget margins) would be applied twice. GTK therefore does not allow this and will warn if you try to do it.
Of course if you are getting the size request for another widget, such
as a child widget, you must use gtk_widget_measure()
; otherwise, you
would not properly consider widget margins, GtkSizeGroup
, and
so forth.
GTK also supports baseline vertical alignment of widgets. This means that widgets are positioned such that the typographical baseline of widgets in the same row are aligned. This happens if a widget supports baselines, has a vertical alignment using baselines, and is inside a widget that supports baselines and has a natural “row” that it aligns to the baseline, or a baseline assigned to it by the grandparent.
Baseline alignment support for a widget is also done by the
Gtk.WidgetClass.measure
virtual function. It allows you to report
both a minimum and natural size.
If a widget ends up baseline aligned it will be allocated all the space in
the parent as if it was GTK_ALIGN_FILL
, but the selected baseline can be
found via gtk_widget_get_baseline()
. If the baseline has a
value other than -1 you need to align the widget such that the baseline
appears at the position.
GtkWidget as GtkBuildable
The GtkWidget
implementation of the GtkBuildable
interface
supports various custom elements to specify additional aspects of widgets
that are not directly expressed as properties.
If the widget uses a GtkLayoutManager
, GtkWidget
supports
a custom <layout>
element, used to define layout properties:
<object class="GtkGrid" id="my_grid">
<child>
<object class="GtkLabel" id="label1">
<property name="label">Description</property>
<layout>
<property name="column">0</property>
<property name="row">0</property>
<property name="row-span">1</property>
<property name="column-span">1</property>
</layout>
</object>
</child>
<child>
<object class="GtkEntry" id="description_entry">
<layout>
<property name="column">1</property>
<property name="row">0</property>
<property name="row-span">1</property>
<property name="column-span">1</property>
</layout>
</object>
</child>
</object>
GtkWidget
allows style information such as style classes to
be associated with widgets, using the custom <style>
element:
<object class="GtkButton" id="button1">
<style>
<class name="my-special-button-class"/>
<class name="dark-button"/>
</style>
</object>
GtkWidget
allows defining accessibility information, such as properties,
relations, and states, using the custom <accessibility>
element:
<object class="GtkButton" id="button1">
<accessibility>
<property name="label">Download</property>
<relation name="labelled-by">label1</relation>
</accessibility>
</object>
Building composite widgets from template XML
GtkWidget
exposes some facilities to automate the procedure
of creating composite widgets using “templates”.
To create composite widgets with GtkBuilder
XML, one must associate
the interface description with the widget class at class initialization
time using gtk_widget_class_set_template()
.
The interface description semantics expected in composite template descriptions
is slightly different from regular GtkBuilder
XML.
Unlike regular interface descriptions, gtk_widget_class_set_template()
will expect a <template>
tag as a direct child of the toplevel
<interface>
tag. The <template>
tag must specify the “class” attribute
which must be the type name of the widget. Optionally, the “parent”
attribute may be specified to specify the direct parent type of the widget
type; this is ignored by GtkBuilder
but can be used by UI design tools to
introspect what kind of properties and internal children exist for a given
type when the actual type does not exist.
The XML which is contained inside the <template>
tag behaves as if it were
added to the <object>
tag defining the widget itself. You may set properties
on a widget by inserting <property>
tags into the <template>
tag, and also
add <child>
tags to add children and extend a widget in the normal way you
would with <object>
tags.
Additionally, <object>
tags can also be added before and after the initial
<template>
tag in the normal way, allowing one to define auxiliary objects
which might be referenced by other widgets declared as children of the
<template>
tag.
Since, unlike the <object>
tag, the <template>
tag does not contain an
“id” attribute, if you need to refer to the instance of the object itself that
the template will create, simply refer to the template class name in an
applicable element content.
Here is an example of a template definition, which includes an example of
this in the <signal>
tag:
<interface>
<template class="FooWidget" parent="GtkBox">
<property name="orientation">horizontal</property>
<property name="spacing">4</property>
<child>
<object class="GtkButton" id="hello_button">
<property name="label">Hello World</property>
<signal name="clicked" handler="hello_button_clicked" object="FooWidget" swapped="yes"/>
</object>
</child>
<child>
<object class="GtkButton" id="goodbye_button">
<property name="label">Goodbye World</property>
</object>
</child>
</template>
</interface>
Typically, you’ll place the template fragment into a file that is
bundled with your project, using GResource
. In order to load the
template, you need to call gtk_widget_class_set_template_from_resource()
from the class initialization of your GtkWidget
type:
static void
foo_widget_class_init (FooWidgetClass *klass)
{
// ...
gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass),
"/com/example/ui/foowidget.ui");
}
You will also need to call gtk_widget_init_template()
from the
instance initialization function:
static void
foo_widget_init (FooWidget *self)
{
gtk_widget_init_template (GTK_WIDGET (self));
// Initialize the rest of the widget...
}
as well as calling gtk_widget_dispose_template()
from the dispose function:
static void
foo_widget_dispose (GObject *gobject)
{
FooWidget *self = FOO_WIDGET (gobject);
// Dispose objects for which you have a reference...
// Clear the template children for this widget type
gtk_widget_dispose_template (GTK_WIDGET (self), FOO_TYPE_WIDGET);
G_OBJECT_CLASS (foo_widget_parent_class)->dispose (gobject);
}
You can access widgets defined in the template using the
gtk_widget_get_template_child()
function, but you will typically declare
a pointer in the instance private data structure of your type using the same
name as the widget in the template definition, and call
gtk_widget_class_bind_template_child_full()
(or one of its wrapper macros
gtk_widget_class_bind_template_child()
and gtk_widget_class_bind_template_child_private()
)
with that name, e.g.
typedef struct {
GtkWidget *hello_button;
GtkWidget *goodbye_button;
} FooWidgetPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (FooWidget, foo_widget, GTK_TYPE_BOX)
static void
foo_widget_dispose (GObject *gobject)
{
gtk_widget_dispose_template (GTK_WIDGET (gobject), FOO_TYPE_WIDGET);
G_OBJECT_CLASS (foo_widget_parent_class)->dispose (gobject);
}
static void
foo_widget_class_init (FooWidgetClass *klass)
{
// ...
G_OBJECT_CLASS (klass)->dispose = foo_widget_dispose;
gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass),
"/com/example/ui/foowidget.ui");
gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass),
FooWidget, hello_button);
gtk_widget_class_bind_template_child_private (GTK_WIDGET_CLASS (klass),
FooWidget, goodbye_button);
}
static void
foo_widget_init (FooWidget *widget)
{
gtk_widget_init_template (GTK_WIDGET (widget));
}
You can also use gtk_widget_class_bind_template_callback_full()
(or
is wrapper macro gtk_widget_class_bind_template_callback()
) to connect
a signal callback defined in the template with a function visible in the
scope of the class, e.g.
// the signal handler has the instance and user data swapped
// because of the swapped="yes" attribute in the template XML
static void
hello_button_clicked (FooWidget *self,
GtkButton *button)
{
g_print ("Hello, world!\n");
}
static void
foo_widget_class_init (FooWidgetClass *klass)
{
// ...
gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass),
"/com/example/ui/foowidget.ui");
gtk_widget_class_bind_template_callback (GTK_WIDGET_CLASS (klass), hello_button_clicked);
}
Descendants
- GtkActionBar
- GtkAppChooserButton
- GtkAppChooserWidget
- GtkAspectFrame
- GtkBox
- GtkButton
- GtkCalendar
- GtkCellView
- GtkCenterBox
- GtkCheckButton
- GtkColorButton
- GtkColorChooserWidget
- GtkColorDialogButton
- GtkColumnView
- GtkComboBox
- GtkDragIcon
- GtkDrawingArea
- GtkDropDown
- GtkEditableLabel
- GtkEntry
- GtkExpander
- GtkFileChooserWidget
- GtkFixed
- GtkFlowBox
- GtkFlowBoxChild
- GtkFontButton
- GtkFontChooserWidget
- GtkFontDialogButton
- GtkFrame
- GtkGLArea
- GtkGraphicsOffload
- GtkGrid
- GtkHeaderBar
- GtkIconView
- GtkImage
- GtkInfoBar
- GtkInscription
- GtkLabel
- GtkLevelBar
- GtkListBase
- GtkListBox
- GtkListBoxRow
- GtkMediaControls
- GtkMenuButton
- GtkNotebook
- GtkOverlay
- GtkPaned
- GtkPasswordEntry
- GtkPicture
- GtkPopover
- GtkPopoverMenuBar
- GtkProgressBar
- GtkRange
- GtkRevealer
- GtkScaleButton
- GtkScrollbar
- GtkScrolledWindow
- GtkSearchBar
- GtkSearchEntry
- GtkSeparator
- GtkShortcutLabel
- GtkShortcutsShortcut
- GtkSpinButton
- GtkSpinner
- GtkStack
- GtkStackSidebar
- GtkStackSwitcher
- GtkStatusbar
- GtkSwitch
- GtkText
- GtkTextView
- GtkTreeExpander
- GtkTreeView
- GtkVideo
- GtkViewport
- GtkWindow
- GtkWindowControls
- GtkWindowHandle
Instance methods
gtk_widget_action_set_enabled
Enables or disables an action installed with
gtk_widget_class_install_action()
.
gtk_widget_add_tick_callback
Queues an animation frame update and adds a callback to be called before each frame.
gtk_widget_allocate
Assigns size, position, (optionally) a baseline and transform to a child widget.
gtk_widget_child_focus
Called by widgets as the user moves around the window using keyboard shortcuts.
gtk_widget_compute_expand
Computes whether a parent widget should give this widget extra space when possible.
gtk_widget_compute_point
Translates the given point
in widget
‘s coordinates to coordinates
in target
’s coordinate system.
gtk_widget_compute_transform
Computes a matrix suitable to describe a transformation from
widget
‘s coordinate system into target
‘s coordinate system.
gtk_widget_get_allocated_baseline
Returns the baseline that has currently been allocated to the widget.
deprecated: 4.12
gtk_widget_get_allocated_height
Returns the height that has currently been allocated to the widget.
deprecated: 4.12
gtk_widget_get_allocated_width
Returns the width that has currently been allocated to the widget.
deprecated: 4.12
gtk_widget_get_baseline
Returns the baseline that has currently been allocated to the widget.
since: 4.12
gtk_widget_get_can_focus
Determines whether the input focus can enter the widget or any of its children.
gtk_widget_get_focus_on_click
Returns whether the widget should grab focus when it is clicked with the mouse.
gtk_widget_get_preferred_size
Retrieves the minimum and natural size of a widget, taking into account the widget’s preference for height-for-width management.
gtk_widget_get_receives_default
Determines whether the widget is always treated as the default widget within its toplevel when it has the focus, even if another widget is the default.
gtk_widget_get_request_mode
Gets whether the widget prefers a height-for-width layout or a width-for-height layout.
gtk_widget_get_scale_factor
Retrieves the internal scale factor that maps from window coordinates to the actual device pixels.
gtk_widget_get_template_child
Fetches an object build from the template XML for widget_type
in
the widget.
gtk_widget_has_default
Determines whether the widget is the current default widget within its toplevel.
gtk_widget_has_visible_focus
Determines if the widget should show a visible indication that it has the global input focus.
gtk_widget_list_mnemonic_labels
Returns the widgets for which this widget is the target of a mnemonic.
gtk_widget_queue_allocate
Flags the widget for a rerun of the Gtk.WidgetClass.size_allocate
function.
gtk_widget_remove_tick_callback
Removes a tick callback previously registered with
gtk_widget_add_tick_callback()
.
gtk_widget_set_cursor_from_name
Sets the cursor to be shown when the pointer hovers over the widget.
gtk_widget_set_focus_on_click
Sets whether the widget should grab focus when it is clicked with the mouse.
gtk_widget_set_font_options
Sets the cairo_font_options_t
used for text rendering
in the widget.
deprecated: 4.16
gtk_widget_set_layout_manager
Sets the layout manager to use for measuring and allocating children of the widget.
gtk_widget_set_overflow
Sets how the widget treats content that is drawn outside the it’s content area.
gtk_widget_set_receives_default
Sets whether the widget will be treated as the default widget within its toplevel when it has the focus, even if another widget is the default.
gtk_widget_should_layout
Returns whether the widget should contribute to the measuring and allocation of its parent.
gtk_widget_size_allocate
Allocates widget with a transformation that translates
the origin to the position in allocation
.
gtk_widget_translate_coordinates
Translates coordinates relative to src_widget
’s allocation
to coordinates relative to dest_widget
’s allocations.
deprecated: 4.12
Methods inherited from GtkAccessible (19)
gtk_accessible_announce
Requests the user’s screen reader to announce the given message.
since: 4.14
gtk_accessible_get_accessible_parent
Retrieves the accessible parent for an accessible object.
since: 4.10
gtk_accessible_get_accessible_role
Retrieves the accessible role of an accessible object.
gtk_accessible_get_at_context
Retrieves the implementation for the given accessible object.
since: 4.10
gtk_accessible_get_bounds
Queries the coordinates and dimensions of this accessible.
since: 4.10
gtk_accessible_get_first_accessible_child
Retrieves the first accessible child of an accessible object.
since: 4.10
gtk_accessible_get_next_accessible_sibling
Retrieves the next accessible sibling of an accessible object.
since: 4.10
gtk_accessible_get_platform_state
Queries a platform state, such as focus.
since: 4.10
gtk_accessible_reset_property
Resets the accessible property to its default value.
gtk_accessible_reset_relation
Resets the accessible relation to its default value.
gtk_accessible_reset_state
Resets the accessible state to its default value.
gtk_accessible_set_accessible_parent
Sets the parent and sibling of an accessible object.
since: 4.10
gtk_accessible_update_next_accessible_sibling
Updates the next accessible sibling.
since: 4.10
gtk_accessible_update_property
Updates a list of accessible properties.
gtk_accessible_update_property_value
Updates an array of accessible properties.
gtk_accessible_update_relation
Updates a list of accessible relations.
gtk_accessible_update_relation_value
Updates an array of accessible relations.
gtk_accessible_update_state
Updates a list of accessible states.
gtk_accessible_update_state_value
Updates an array of accessible states.
Methods inherited from GtkBuildable (1)
Properties
Gtk.Widget:has-tooltip
Enables or disables the emission of the GtkWidget::query-tooltip
signal on widget
.
Gtk.Widget:layout-manager
The GtkLayoutManager
instance to use to compute
the preferred size of the widget, and allocate its children.
Gtk.Widget:tooltip-markup
Sets the text of tooltip to be the given string, which is marked up with Pango markup.
Properties inherited from GtkAccessible (1)
Signals
Gtk.Widget::destroy
Signals that all holders of a reference to the widget should release the reference that they hold.
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 GtkWidgetClass {
GInitiallyUnownedClass parent_class;
void (* show) (
GtkWidget* widget
);
void (* hide) (
GtkWidget* widget
);
void (* map) (
GtkWidget* widget
);
void (* unmap) (
GtkWidget* widget
);
void (* realize) (
GtkWidget* widget
);
void (* unrealize) (
GtkWidget* widget
);
void (* root) (
GtkWidget* widget
);
void (* unroot) (
GtkWidget* widget
);
void (* size_allocate) (
GtkWidget* widget,
int width,
int height,
int baseline
);
void (* state_flags_changed) (
GtkWidget* widget,
GtkStateFlags previous_state_flags
);
void (* direction_changed) (
GtkWidget* widget,
GtkTextDirection previous_direction
);
GtkSizeRequestMode (* get_request_mode) (
GtkWidget* widget
);
void (* measure) (
GtkWidget* widget,
GtkOrientation orientation,
int for_size,
int* minimum,
int* natural,
int* minimum_baseline,
int* natural_baseline
);
gboolean (* mnemonic_activate) (
GtkWidget* widget,
gboolean group_cycling
);
gboolean (* grab_focus) (
GtkWidget* widget
);
gboolean (* focus) (
GtkWidget* widget,
GtkDirectionType direction
);
void (* set_focus_child) (
GtkWidget* widget,
GtkWidget* child
);
void (* move_focus) (
GtkWidget* widget,
GtkDirectionType direction
);
gboolean (* keynav_failed) (
GtkWidget* widget,
GtkDirectionType direction
);
gboolean (* query_tooltip) (
GtkWidget* widget,
int x,
int y,
gboolean keyboard_tooltip,
GtkTooltip* tooltip
);
void (* compute_expand) (
GtkWidget* widget,
gboolean* hexpand_p,
gboolean* vexpand_p
);
void (* css_changed) (
GtkWidget* widget,
GtkCssStyleChange* change
);
void (* system_setting_changed) (
GtkWidget* widget,
GtkSystemSetting settings
);
void (* snapshot) (
GtkWidget* widget,
GtkSnapshot* snapshot
);
gboolean (* contains) (
GtkWidget* widget,
double x,
double y
);
}
No description available.
Class members
parent_class: GInitiallyUnownedClass
The object class structure needs to be the first element in the widget class structure in order for the class mechanism to work correctly. This allows a GtkWidgetClass pointer to be cast to a GObjectClass pointer.
show: void (* show) ( GtkWidget* widget )
Signal emitted when widget is shown.
hide: void (* hide) ( GtkWidget* widget )
Signal emitted when widget is hidden.
map: void (* map) ( GtkWidget* widget )
Signal 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.
unmap: void (* unmap) ( GtkWidget* widget )
Signal 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.
realize: void (* realize) ( GtkWidget* widget )
Signal emitted when widget is associated with a
GdkSurface
, which means thatgtk_widget_realize()
has been called or the widget has been mapped (that is, it is going to be drawn).unrealize: void (* unrealize) ( GtkWidget* widget )
Signal emitted when the GdkSurface 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).root: void (* root) ( GtkWidget* widget )
Called when the widget gets added to a
GtkRoot
widget. Must chain up.unroot: void (* unroot) ( GtkWidget* widget )
Called when the widget is about to be removed from its
GtkRoot
widget. Must chain up.size_allocate: void (* size_allocate) ( GtkWidget* widget, int width, int height, int baseline )
Called to set the allocation, if the widget does not have a layout manager.
state_flags_changed: void (* state_flags_changed) ( GtkWidget* widget, GtkStateFlags previous_state_flags )
Signal emitted when the widget state changes, see gtk_widget_get_state_flags().
direction_changed: void (* direction_changed) ( GtkWidget* widget, GtkTextDirection previous_direction )
Signal emitted when the text direction of a widget changes.
get_request_mode: GtkSizeRequestMode (* get_request_mode) ( GtkWidget* widget )
Called to get the request mode, if the widget does not have a layout manager. This allows a widget to tell its parent container whether it prefers to be allocated in
GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH
orGTK_SIZE_REQUEST_WIDTH_FOR_HEIGHT
mode.GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH
means the widget prefers to haveGtkWidgetClass.measure()
called first to get the default width (passing a for_size of -1), then again to get the height for said default width.GTK_SIZE_REQUEST_CONSTANT_SIZE
disables any height-for-width or width-for-height geometry management for said widget and is the default return. It’s important to note that any widget which trades height-for-width or width-for-height must respond properly to a for_size value >= -1 passed toGtkWidgetClass.measure
, for both possible orientations.measure: void (* measure) ( GtkWidget* widget, GtkOrientation orientation, int for_size, int* minimum, int* natural, int* minimum_baseline, int* natural_baseline )
Called to obtain the minimum and natural size of the widget, if the widget does not have a layout manager. Depending on the orientation parameter, the passed for_size can be interpreted as width or height. A widget will never be allocated less than its minimum size.
mnemonic_activate: gboolean (* mnemonic_activate) ( GtkWidget* widget, gboolean group_cycling )
Activates the
widget
ifgroup_cycling
isFALSE
, and just grabs the focus ifgroup_cycling
isTRUE
.grab_focus: gboolean (* grab_focus) ( GtkWidget* widget )
Causes
widget
to have the keyboard focus for theGtkWindow
it’s inside.focus: gboolean (* focus) ( GtkWidget* widget, GtkDirectionType direction )
Vfunc for gtk_widget_child_focus().
set_focus_child: void (* set_focus_child) ( GtkWidget* widget, GtkWidget* child )
Sets the focused child of a widget. Must chain up.
move_focus: void (* move_focus) ( GtkWidget* widget, GtkDirectionType direction )
Signal emitted when a change of focus is requested.
keynav_failed: gboolean (* keynav_failed) ( GtkWidget* widget, GtkDirectionType direction )
Signal emitted if keyboard navigation fails.
query_tooltip: gboolean (* query_tooltip) ( GtkWidget* widget, int x, int y, gboolean keyboard_tooltip, GtkTooltip* tooltip )
Signal emitted when “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.compute_expand: void (* compute_expand) ( GtkWidget* widget, gboolean* hexpand_p, gboolean* vexpand_p )
Computes whether a container should give this widget extra space when possible.
css_changed: void (* css_changed) ( GtkWidget* widget, GtkCssStyleChange* change )
Vfunc called when the CSS used by widget was changed. Widgets should then discard their caches that depend on CSS and queue resizes or redraws accordingly. The default implementation will take care of this for all the default CSS properties, so implementations must chain up.
system_setting_changed: void (* system_setting_changed) ( GtkWidget* widget, GtkSystemSetting settings )
Emitted when a system setting was changed. Must chain up.
snapshot: void (* snapshot) ( GtkWidget* widget, GtkSnapshot* snapshot )
Vfunc called when a new snapshot of the widget has to be taken.
contains: gboolean (* contains) ( GtkWidget* widget, double x, double y )
Vfunc for gtk_widget_contains().
Virtual methods
Gtk.WidgetClass.compute_expand
Computes whether a container should give this widget extra space when possible.
Gtk.WidgetClass.css_changed
Vfunc called when the CSS used by widget was changed. Widgets should then discard their caches that depend on CSS and queue resizes or redraws accordingly. The default implementation will take care of this for all the default CSS properties, so implementations must chain up.
Gtk.WidgetClass.get_request_mode
Gets whether the widget prefers a height-for-width layout or a width-for-height layout.
Gtk.WidgetClass.grab_focus
Causes widget
to have the keyboard focus for the window
that it belongs to.
Gtk.WidgetClass.query_tooltip
Signal emitted when “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.
Gtk.WidgetClass.size_allocate
Called to set the allocation, if the widget does not have a layout manager.
Gtk.WidgetClass.state_flags_changed
Signal emitted when the widget state changes, see gtk_widget_get_state_flags().
Gtk.WidgetClass.unroot
Called when the widget is about to be removed from its
GtkRoot
widget. Must chain up.
Class methods
gtk_widget_class_add_binding
Creates a new shortcut for widget_class
that calls the given callback
with arguments according to format_string
.
gtk_widget_class_add_binding_action
Creates a new shortcut for widget_class
that activates the given
action_name
with arguments read according to format_string
.
gtk_widget_class_add_binding_signal
Creates a new shortcut for widget_class
that emits the given action
signal
with arguments read according to format_string
.
gtk_widget_class_bind_template_callback_full
Associates a name to be used in GtkBuilder XML with a symbol.
gtk_widget_class_bind_template_child_full
Assigns an object declared in the class template XML to be set to
a location on a freshly built instance’s private data, or
alternatively accessible via gtk_widget_get_template_child()
.
gtk_widget_class_get_layout_manager_type
Retrieves the type of the GtkLayoutManager
used by widgets of class widget_class
.
gtk_widget_class_install_property_action
Installs an action called action_name
on widget_class
and
binds its state to the value of the property_name
property.
gtk_widget_class_query_action
Returns details about an action that has been
installed for widget_class
.
gtk_widget_class_set_layout_manager_type
Sets the type to be used for creating layout managers for
widgets of widget_class
.
gtk_widget_class_set_template
This should be called at class initialization time to specify
the GtkBuilder
XML to be used to extend a widget.
gtk_widget_class_set_template_from_resource
A convenience function that calls gtk_widget_class_set_template()
with the contents of a resource.
gtk_widget_class_set_template_scope
Overrides the default scope to be used when parsing the class template.