The widget currently editing the edited cell
This property is read-only and only changes as a result of a call gtk_cell_area_activate_cell().
The cell in the area that is currently edited
This property is read-only and only changes as a result of a call gtk_cell_area_activate_cell().
The cell in the area that currently has focus
Activates area,
usually by activating the currently focused
cell, however some subclasses which embed widgets in the area
can also activate a widget if it currently has the focus.
the #GtkCellAreaContext in context with the current row data
the #GtkWidget that area
is rendering on
the size and location of area
relative to widget’
s allocation
the #GtkCellRendererState flags for area
for this row of data.
if %TRUE then only cell renderers that are %GTK_CELL_RENDERER_MODE_EDITABLE will be activated.
This is used by #GtkCellArea subclasses when handling events to activate cells, the base #GtkCellArea class activates cells for keyboard events for free in its own GtkCellArea->activate() implementation.
the #GtkWidget that area
is rendering onto
the #GtkCellRenderer in area
to activate
the #GdkEvent for which cell activation should occur
the #GdkRectangle in widget
relative coordinates of renderer
for the current row.
the #GtkCellRendererState for renderer
Adds renderer
to area
with the default child cell properties.
the #GtkCellRenderer to add to area
Adds an attribute mapping to the list in cell_layout
.
The column
is the column of the model to get a value from, and the
attribute
is the parameter on cell
to be set from the value. So for
example if column 2 of the model contains strings, you could have the
“text” attribute of a #GtkCellRendererText get its values from column 2.
a #GtkCellRenderer
an attribute on the renderer
the column position on the model to get the attribute from
Adds sibling
to renderer’
s focusable area, focus will be drawn
around renderer
and all of its siblings if renderer
can
focus for a given row.
Events handled by focus siblings can also activate the given
focusable renderer
.
the #GtkCellRenderer expected to have focus
the #GtkCellRenderer to add to renderer’
s focus area
Applies any connected attributes to the renderers in
area
by pulling the values from tree_model
.
the #GtkTreeModel to pull values from
the #GtkTreeIter in tree_model
to apply values for
whether iter
has children
whether iter
is expanded in the view and children are visible
Connects an attribute
to apply values from column
for the
#GtkTreeModel in use.
the #GtkCellRenderer to connect an attribute for
the attribute name
the #GtkTreeModel column to fetch attribute values from
Disconnects attribute
for the renderer
in area
so that
attribute will no longer be updated with values from the
model.
the #GtkCellRenderer to disconnect an attribute for
the attribute name
Returns the model column that an attribute has been mapped to, or -1 if the attribute is not mapped.
a #GtkCellRenderer
an attribute on the renderer
Creates a binding between source_property
on source
and target_property
on target
.
Whenever the source_property
is changed the target_property
is
updated using the same value. For instance:
g_object_bind_property (action, "active", widget, "sensitive", 0);
Will result in the "sensitive" property of the widget #GObject instance to be updated with the same value of the "active" property of the action #GObject instance.
If flags
contains %G_BINDING_BIDIRECTIONAL then the binding will be mutual:
if target_property
on target
changes then the source_property
on source
will be updated as well.
The binding will automatically be removed when either the source
or the
target
instances are finalized. To remove the binding without affecting the
source
and the target
you can just call g_object_unref() on the returned
#GBinding instance.
Removing the binding by calling g_object_unref() on it must only be done if
the binding, source
and target
are only used from a single thread and it
is clear that both source
and target
outlive the binding. Especially it
is not safe to rely on this if the binding, source
or target
can be
finalized from different threads. Keep another reference to the binding and
use g_binding_unbind() instead to be on the safe side.
A #GObject can have multiple bindings.
the property on source
to bind
the target #GObject
the property on target
to bind
flags to pass to #GBinding
Creates a binding between source_property
on source
and target_property
on target,
allowing you to set the transformation functions to be used by
the binding.
This function is the language bindings friendly version of g_object_bind_property_full(), using #GClosures instead of function pointers.
the property on source
to bind
the target #GObject
the property on target
to bind
flags to pass to #GBinding
a #GClosure wrapping the transformation function from the source
to the target,
or %NULL to use the default
a #GClosure wrapping the transformation function from the target
to the source,
or %NULL to use the default
Gets the value of a cell property for renderer
in area
.
a #GtkCellRenderer inside area
the name of the property to get
a location to return the value
Sets a cell property for renderer
in area
.
a #GtkCellRenderer inside area
the name of the cell property to set
the value to set the cell property to
Unsets all the mappings on all renderers on cell_layout
and
removes all renderers from cell_layout
.
Clears all existing attributes previously set with gtk_cell_layout_set_attributes().
a #GtkCellRenderer to clear the attribute mapping on
This is sometimes needed for cases where rows need to share alignments in one orientation but may be separately grouped in the opposing orientation.
For instance, #GtkIconView creates all icons (rows) to have the same width and the cells theirin to have the same horizontal alignments. However each row of icons may have a separate collective height. #GtkIconView uses this to request the heights of each row based on a context which was already used to request all the row widths that are to be displayed.
the #GtkCellAreaContext to copy
Creates a #GtkCellAreaContext to be used with area
for
all purposes. #GtkCellAreaContext stores geometry information
for rows for which it was operated on, it is important to use
the same context for the same row of data at all times (i.e.
one should render and handle events with the same #GtkCellAreaContext
which was used to request the size of those rows of data).
This is similar to gtk_buildable_parser_finished() but is
called once for each custom tag handled by the buildable
.
a #GtkBuilder
child object or %NULL for non-child tags
the name of the tag
user data created in custom_tag_start
This is called at the end of each custom element handled by the buildable.
#GtkBuilder used to construct this object
child object or %NULL for non-child tags
name of tag
user data that will be passed in to parser functions
This is called for each unknown element under <child>
.
a #GtkBuilder used to construct this object
child object or %NULL for non-child tags
name of tag
Delegates event handling to a #GtkCellArea.
the #GtkCellAreaContext for this row of data.
the #GtkWidget that area
is rendering to
the #GdkEvent to handle
the widget
relative coordinates for area
the #GtkCellRendererState for area
in this row.
This should be called by the area’
s owning layout widget
when focus is to be passed to area,
or moved within area
for a given direction
and row data.
Implementing #GtkCellArea classes should implement this method to receive and navigate focus in its own way particular to how it lays out cells.
the #GtkDirectionType
This function is intended for #GObject implementations to re-enforce a [floating][floating-ref] object reference. Doing this is seldom required: all #GInitiallyUnowneds are created with a floating reference which usually just needs to be sunken by calling g_object_ref_sink().
Calls callback
for every #GtkCellRenderer in area
.
the #GtkCellCallback to call
Calls callback
for every #GtkCellRenderer in area
with the
allocated rectangle inside cell_area
.
the #GtkCellAreaContext for this row of data.
the #GtkWidget that area
is rendering to
the widget
relative coordinates and size for area
the widget
relative coordinates of the background area
the #GtkCellAllocCallback to call
Increases the freeze count on object
. If the freeze count is
non-zero, the emission of "notify" signals on object
is
stopped. The signals are queued until the freeze count is decreased
to zero. Duplicate notifications are squashed so that at most one
#GObject::notify signal is emitted for each property modified while the
object is frozen.
This is necessary for accessors that modify multiple properties to prevent premature notification while the object is still being modified.
Derives the allocation of renderer
inside area
if area
were to be renderered in cell_area
.
the #GtkCellAreaContext used to hold sizes for area
.
the #GtkWidget that area
is rendering on
the #GtkCellRenderer to get the allocation for
the whole allocated area for area
in widget
for this row
Gets the #GtkCellRenderer at x
and y
coordinates inside area
and optionally
returns the full cell allocation for it inside cell_area
.
the #GtkCellAreaContext used to hold sizes for area
.
the #GtkWidget that area
is rendering on
the whole allocated area for area
in widget
for this row
the x position
the y position
Returns the cell renderers which have been added to cell_layout
.
Gets the current #GtkTreePath string for the currently applied #GtkTreeIter, this is implicitly updated when gtk_cell_area_apply_attributes() is called and can be used to interact with renderers from #GtkCellArea subclasses.
Gets a named field from the objects table of associations (see g_object_set_data()).
name of the key for that association
Gets the #GtkCellEditable widget currently used to edit the currently edited cell.
Gets the #GtkCellRenderer in area
that is currently
being edited.
Retrieves the currently focused cell for area
Gets the #GtkCellRenderer which is expected to be focusable
for which renderer
is, or may be a sibling.
This is handy for #GtkCellArea subclasses when handling events, after determining the renderer at the event location it can then chose to activate the focus cell for which the event cell may have been a sibling.
the #GtkCellRenderer
Gets the focus sibling cell renderers for renderer
.
the #GtkCellRenderer expected to have focus
Gets the name of the buildable
object.
#GtkBuilder sets the name based on the
[GtkBuilder UI definition][BUILDER-UI]
used to construct the buildable
.
Retrieves a cell area’s initial minimum and natural height.
area
will store some geometrical information in context
along the way;
when requesting sizes over an arbitrary number of rows, it’s not important
to check the minimum_height
and natural_height
of this call but rather to
consult gtk_cell_area_context_get_preferred_height() after a series of
requests.
the #GtkCellAreaContext to perform this request with
the #GtkWidget where area
will be rendering
Retrieves a cell area’s minimum and natural height if it would be given
the specified width
.
area
stores some geometrical information in context
along the way
while calling gtk_cell_area_get_preferred_width(). It’s important to
perform a series of gtk_cell_area_get_preferred_width() requests with
context
first and then call gtk_cell_area_get_preferred_height_for_width()
on each cell area individually to get the height for width of each
fully requested row.
If at some point, the width of a single row changes, it should be requested with gtk_cell_area_get_preferred_width() again and then the full width of the requested rows checked again with gtk_cell_area_context_get_preferred_width().
the #GtkCellAreaContext which has already been requested for widths.
the #GtkWidget where area
will be rendering
the width for which to check the height of this area
Retrieves a cell area’s initial minimum and natural width.
area
will store some geometrical information in context
along the way;
when requesting sizes over an arbitrary number of rows, it’s not important
to check the minimum_width
and natural_width
of this call but rather to
consult gtk_cell_area_context_get_preferred_width() after a series of
requests.
the #GtkCellAreaContext to perform this request with
the #GtkWidget where area
will be rendering
Retrieves a cell area’s minimum and natural width if it would be given
the specified height
.
area
stores some geometrical information in context
along the way
while calling gtk_cell_area_get_preferred_height(). It’s important to
perform a series of gtk_cell_area_get_preferred_height() requests with
context
first and then call gtk_cell_area_get_preferred_width_for_height()
on each cell area individually to get the height for width of each
fully requested row.
If at some point, the height of a single row changes, it should be requested with gtk_cell_area_get_preferred_height() again and then the full height of the requested rows checked again with gtk_cell_area_context_get_preferred_height().
the #GtkCellAreaContext which has already been requested for widths.
the #GtkWidget where area
will be rendering
the height for which to check the width of this area
Gets a property of an object.
The value
can be:
In general, a copy is made of the property contents and the caller is responsible for freeing the memory by calling g_value_unset().
Note that g_object_get_property() is really intended for language bindings, g_object_get() is much more convenient for C programming.
the name of the property to get
return location for the property value
This function gets back user data pointers stored via g_object_set_qdata().
A #GQuark, naming the user data pointer
Gets whether the area prefers a height-for-width layout or a width-for-height layout.
Gets n_properties
properties for an object
.
Obtained properties will be set to values
. All properties must be valid.
Warnings will be emitted and undefined behaviour may result if invalid
properties are passed in.
the names of each property to get
the values of each property to get
Checks if area
contains renderer
.
the #GtkCellRenderer to check
This is a convenience function for #GtkCellArea implementations to get the inner area where a given #GtkCellRenderer will be rendered. It removes any padding previously added by gtk_cell_area_request_renderer().
the #GtkWidget that area
is rendering onto
the widget
relative coordinates where one of area’
s cells is to be placed
Returns whether the area can do anything when activated,
after applying new attributes to area
.
Checks whether object
has a [floating][floating-ref] reference.
Returns whether sibling
is one of renderer’
s focus siblings
(see gtk_cell_area_add_focus_sibling()).
the #GtkCellRenderer expected to have focus
the #GtkCellRenderer to check against renderer’
s sibling list
Emits a "notify" signal for the property property_name
on object
.
When possible, eg. when signaling a property change from within the class that registered the property, you should use g_object_notify_by_pspec() instead.
Note that emission of the notify signal may be blocked with g_object_freeze_notify(). In this case, the signal emissions are queued and will be emitted (in reverse order) when g_object_thaw_notify() is called.
the name of a property installed on the class of object
.
Emits a "notify" signal for the property specified by pspec
on object
.
This function omits the property name lookup, hence it is faster than g_object_notify().
One way to avoid using g_object_notify() from within the class that registered the properties, and using g_object_notify_by_pspec() instead, is to store the GParamSpec used with g_object_class_install_property() inside a static array, e.g.:
enum
{
PROP_0,
PROP_FOO,
PROP_LAST
};
static GParamSpec *properties[PROP_LAST];
static void
my_object_class_init (MyObjectClass *klass)
{
properties[PROP_FOO] = g_param_spec_int ("foo", "Foo", "The foo",
0, 100,
50,
G_PARAM_READWRITE);
g_object_class_install_property (gobject_class,
PROP_FOO,
properties[PROP_FOO]);
}
and then notify a change on the "foo" property with:
g_object_notify_by_pspec (self, properties[PROP_FOO]);
the #GParamSpec of a property installed on the class of object
.
Adds the cell
to the end of cell_layout
. If expand
is %FALSE, then the
cell
is allocated no more space than it needs. Any unused space is
divided evenly between cells for which expand
is %TRUE.
Note that reusing the same cell renderer is not supported.
a #GtkCellRenderer
%TRUE if cell
is to be given extra space allocated to cell_layout
Packs the cell
into the beginning of cell_layout
. If expand
is %FALSE,
then the cell
is allocated no more space than it needs. Any unused space
is divided evenly between cells for which expand
is %TRUE.
Note that reusing the same cell renderer is not supported.
a #GtkCellRenderer
%TRUE if cell
is to be given extra space allocated to cell_layout
Increase the reference count of object,
and possibly remove the
[floating][floating-ref] reference, if object
has a floating reference.
In other words, if the object is floating, then this call "assumes ownership" of the floating reference, converting it to a normal reference by clearing the floating flag while leaving the reference count unchanged. If the object is not floating, then this call adds a new normal reference increasing the reference count by one.
Since GLib 2.56, the type of object
will be propagated to the return type
under the same conditions as for g_object_ref().
Removes renderer
from area
.
the #GtkCellRenderer to remove from area
Removes sibling
from renderer’
s focus sibling list
(see gtk_cell_area_add_focus_sibling()).
the #GtkCellRenderer expected to have focus
the #GtkCellRenderer to remove from renderer’
s focus area
Renders area’
s cells according to area’
s layout onto widget
at
the given coordinates.
the #GtkCellAreaContext for this row of data.
the #GtkWidget that area
is rendering to
the #cairo_t to render with
the widget
relative coordinates for area’
s background
the widget
relative coordinates for area
the #GtkCellRendererState for area
in this row.
whether area
should paint focus on focused cells for focused rows or not.
Re-inserts cell
at position
.
Note that cell
has already to be packed into cell_layout
for this to function properly.
a #GtkCellRenderer to reorder
new position to insert cell
at
This is a convenience function for #GtkCellArea implementations to request size for cell renderers. It’s important to use this function to request size and then use gtk_cell_area_inner_cell_area() at render and event time since this function will add padding around the cell for focus painting.
the #GtkCellRenderer to request size for
the #GtkOrientation in which to request size
the #GtkWidget that area
is rendering onto
the allocation contextual size to request for, or -1 if the base request for the orientation is to be returned.
Releases all references to other objects. This can be used to break reference cycles.
This function should only be called from object system implementations.
Sets the #GtkCellLayoutDataFunc to use for cell_layout
.
This function is used instead of the standard attributes mapping
for setting the column value, and should set the value of cell_layout’
s
cell renderer(s) as appropriate.
func
may be %NULL to remove a previously set function.
a #GtkCellRenderer
the #GtkCellLayoutDataFunc to use, or %NULL
Each object carries around a table of associations from strings to pointers. This function lets you set an association.
If the object already had an association with that name, the old association will be destroyed.
Internally, the key
is converted to a #GQuark using g_quark_from_string().
This means a copy of key
is kept permanently (even after object
has been
finalized) — so it is recommended to only use a small, bounded set of values
for key
in your program, to avoid the #GQuark storage growing unbounded.
name of the key
data to associate with that key
Explicitly sets the currently focused cell to renderer
.
This is generally called by implementations of #GtkCellAreaClass.focus() or #GtkCellAreaClass.event(), however it can also be used to implement functions such as gtk_tree_view_set_cursor_on_cell().
the #GtkCellRenderer to give focus to
Sets the name of the buildable
object.
name to set
Sets a property on an object.
the name of the property to set
the value
Remove a specified datum from the object's data associations, without invoking the association's destroy handler.
name of the key
This function gets back user data pointers stored via
g_object_set_qdata() and removes the data
from object
without invoking its destroy() function (if any was
set).
Usually, calling this function is only required to update
user data pointers with a destroy notifier, for example:
void
object_add_to_user_list (GObject *object,
const gchar *new_string)
{
// the quark, naming the object data
GQuark quark_string_list = g_quark_from_static_string ("my-string-list");
// retrieve the old string list
GList *list = g_object_steal_qdata (object, quark_string_list);
// prepend new string
list = g_list_prepend (list, g_strdup (new_string));
// this changed 'list', so we need to set it again
g_object_set_qdata_full (object, quark_string_list, list, free_string_list);
}
static void
free_string_list (gpointer data)
{
GList *node, *list = data;
for (node = list; node; node = node->next)
g_free (node->data);
g_list_free (list);
}
Using g_object_get_qdata() in the above example, instead of g_object_steal_qdata() would have left the destroy function set, and thus the partial string list would have been freed upon g_object_set_qdata_full().
A #GQuark, naming the user data pointer
Explicitly stops the editing of the currently edited cell.
If canceled
is %TRUE, the currently edited cell renderer
will emit the ::editing-canceled signal, otherwise the
the ::editing-done signal will be emitted on the current
edit widget.
See gtk_cell_area_get_edited_cell() and gtk_cell_area_get_edit_widget().
whether editing was canceled.
Reverts the effect of a previous call to
g_object_freeze_notify(). The freeze count is decreased on object
and when it reaches zero, queued "notify" signals are emitted.
Duplicate notifications for each property are squashed so that at most one #GObject::notify signal is emitted for each property, in the reverse order in which they have been queued.
It is an error to call this function when the freeze count is zero.
Decreases the reference count of object
. When its reference count
drops to 0, the object is finalized (i.e. its memory is freed).
If the pointer to the #GObject may be reused in future (for example, if it is an instance variable of another object), it is recommended to clear the pointer to %NULL rather than retain a dangling pointer to a potentially invalid #GObject instance. Use g_clear_object() for this.
Activates area,
usually by activating the currently focused
cell, however some subclasses which embed widgets in the area
can also activate a widget if it currently has the focus.
the #GtkCellAreaContext in context with the current row data
the #GtkWidget that area
is rendering on
the size and location of area
relative to widget’
s allocation
the #GtkCellRendererState flags for area
for this row of data.
if %TRUE then only cell renderers that are %GTK_CELL_RENDERER_MODE_EDITABLE will be activated.
Adds renderer
to area
with the default child cell properties.
the #GtkCellRenderer to add to area
Adds an attribute mapping to the list in cell_layout
.
The column
is the column of the model to get a value from, and the
attribute
is the parameter on cell
to be set from the value. So for
example if column 2 of the model contains strings, you could have the
“text” attribute of a #GtkCellRendererText get its values from column 2.
a #GtkCellRenderer
an attribute on the renderer
the column position on the model to get the attribute from
Applies any connected attributes to the renderers in
area
by pulling the values from tree_model
.
the #GtkTreeModel to pull values from
the #GtkTreeIter in tree_model
to apply values for
whether iter
has children
whether iter
is expanded in the view and children are visible
Unsets all the mappings on all renderers on cell_layout
and
removes all renderers from cell_layout
.
Clears all existing attributes previously set with gtk_cell_layout_set_attributes().
a #GtkCellRenderer to clear the attribute mapping on
This is sometimes needed for cases where rows need to share alignments in one orientation but may be separately grouped in the opposing orientation.
For instance, #GtkIconView creates all icons (rows) to have the same width and the cells theirin to have the same horizontal alignments. However each row of icons may have a separate collective height. #GtkIconView uses this to request the heights of each row based on a context which was already used to request all the row widths that are to be displayed.
the #GtkCellAreaContext to copy
Creates a #GtkCellAreaContext to be used with area
for
all purposes. #GtkCellAreaContext stores geometry information
for rows for which it was operated on, it is important to use
the same context for the same row of data at all times (i.e.
one should render and handle events with the same #GtkCellAreaContext
which was used to request the size of those rows of data).
This is similar to gtk_buildable_parser_finished() but is
called once for each custom tag handled by the buildable
.
a #GtkBuilder
child object or %NULL for non-child tags
the name of the tag
user data created in custom_tag_start
This is called at the end of each custom element handled by the buildable.
#GtkBuilder used to construct this object
child object or %NULL for non-child tags
name of tag
user data that will be passed in to parser functions
This is called for each unknown element under <child>
.
a #GtkBuilder used to construct this object
child object or %NULL for non-child tags
name of tag
Delegates event handling to a #GtkCellArea.
the #GtkCellAreaContext for this row of data.
the #GtkWidget that area
is rendering to
the #GdkEvent to handle
the widget
relative coordinates for area
the #GtkCellRendererState for area
in this row.
This should be called by the area’
s owning layout widget
when focus is to be passed to area,
or moved within area
for a given direction
and row data.
Implementing #GtkCellArea classes should implement this method to receive and navigate focus in its own way particular to how it lays out cells.
the #GtkDirectionType
Calls callback
for every #GtkCellRenderer in area
.
the #GtkCellCallback to call
Calls callback
for every #GtkCellRenderer in area
with the
allocated rectangle inside cell_area
.
the #GtkCellAreaContext for this row of data.
the #GtkWidget that area
is rendering to
the widget
relative coordinates and size for area
the widget
relative coordinates of the background area
the #GtkCellAllocCallback to call
Returns the cell renderers which have been added to cell_layout
.
Gets the name of the buildable
object.
#GtkBuilder sets the name based on the
[GtkBuilder UI definition][BUILDER-UI]
used to construct the buildable
.
Retrieves a cell area’s initial minimum and natural height.
area
will store some geometrical information in context
along the way;
when requesting sizes over an arbitrary number of rows, it’s not important
to check the minimum_height
and natural_height
of this call but rather to
consult gtk_cell_area_context_get_preferred_height() after a series of
requests.
the #GtkCellAreaContext to perform this request with
the #GtkWidget where area
will be rendering
Retrieves a cell area’s minimum and natural height if it would be given
the specified width
.
area
stores some geometrical information in context
along the way
while calling gtk_cell_area_get_preferred_width(). It’s important to
perform a series of gtk_cell_area_get_preferred_width() requests with
context
first and then call gtk_cell_area_get_preferred_height_for_width()
on each cell area individually to get the height for width of each
fully requested row.
If at some point, the width of a single row changes, it should be requested with gtk_cell_area_get_preferred_width() again and then the full width of the requested rows checked again with gtk_cell_area_context_get_preferred_width().
the #GtkCellAreaContext which has already been requested for widths.
the #GtkWidget where area
will be rendering
the width for which to check the height of this area
Retrieves a cell area’s initial minimum and natural width.
area
will store some geometrical information in context
along the way;
when requesting sizes over an arbitrary number of rows, it’s not important
to check the minimum_width
and natural_width
of this call but rather to
consult gtk_cell_area_context_get_preferred_width() after a series of
requests.
the #GtkCellAreaContext to perform this request with
the #GtkWidget where area
will be rendering
Retrieves a cell area’s minimum and natural width if it would be given
the specified height
.
area
stores some geometrical information in context
along the way
while calling gtk_cell_area_get_preferred_height(). It’s important to
perform a series of gtk_cell_area_get_preferred_height() requests with
context
first and then call gtk_cell_area_get_preferred_width_for_height()
on each cell area individually to get the height for width of each
fully requested row.
If at some point, the height of a single row changes, it should be requested with gtk_cell_area_get_preferred_height() again and then the full height of the requested rows checked again with gtk_cell_area_context_get_preferred_height().
the #GtkCellAreaContext which has already been requested for widths.
the #GtkWidget where area
will be rendering
the height for which to check the width of this area
Gets whether the area prefers a height-for-width layout or a width-for-height layout.
Returns whether the area can do anything when activated,
after applying new attributes to area
.
Emits a "notify" signal for the property property_name
on object
.
When possible, eg. when signaling a property change from within the class that registered the property, you should use g_object_notify_by_pspec() instead.
Note that emission of the notify signal may be blocked with g_object_freeze_notify(). In this case, the signal emissions are queued and will be emitted (in reverse order) when g_object_thaw_notify() is called.
Adds the cell
to the end of cell_layout
. If expand
is %FALSE, then the
cell
is allocated no more space than it needs. Any unused space is
divided evenly between cells for which expand
is %TRUE.
Note that reusing the same cell renderer is not supported.
a #GtkCellRenderer
%TRUE if cell
is to be given extra space allocated to cell_layout
Packs the cell
into the beginning of cell_layout
. If expand
is %FALSE,
then the cell
is allocated no more space than it needs. Any unused space
is divided evenly between cells for which expand
is %TRUE.
Note that reusing the same cell renderer is not supported.
a #GtkCellRenderer
%TRUE if cell
is to be given extra space allocated to cell_layout
Removes renderer
from area
.
the #GtkCellRenderer to remove from area
Renders area’
s cells according to area’
s layout onto widget
at
the given coordinates.
the #GtkCellAreaContext for this row of data.
the #GtkWidget that area
is rendering to
the #cairo_t to render with
the widget
relative coordinates for area’
s background
the widget
relative coordinates for area
the #GtkCellRendererState for area
in this row.
whether area
should paint focus on focused cells for focused rows or not.
Re-inserts cell
at position
.
Note that cell
has already to be packed into cell_layout
for this to function properly.
a #GtkCellRenderer to reorder
new position to insert cell
at
Sets the #GtkCellLayoutDataFunc to use for cell_layout
.
This function is used instead of the standard attributes mapping
for setting the column value, and should set the value of cell_layout’
s
cell renderer(s) as appropriate.
func
may be %NULL to remove a previously set function.
a #GtkCellRenderer
the #GtkCellLayoutDataFunc to use, or %NULL
Sets the name of the buildable
object.
name to set
This function essentially limits the life time of the closure
to
the life time of the object. That is, when the object is finalized,
the closure
is invalidated by calling g_closure_invalidate() on
it, in order to prevent invocations of the closure with a finalized
(nonexisting) object. Also, g_object_ref() and g_object_unref() are
added as marshal guards to the closure,
to ensure that an extra
reference count is held on object
during invocation of the
closure
. Usually, this function will be called on closures that
use this object
as closure data.
#GClosure to watch
Find the #GParamSpec with the given name for an
interface. Generally, the interface vtable passed in as g_iface
will be the default vtable from g_type_default_interface_ref(), or,
if you know the interface has already been loaded,
g_type_default_interface_peek().
any interface vtable for the interface, or the default vtable for the interface
name of a property to look up.
Add a property to an interface; this is only useful for interfaces that are added to GObject-derived types. Adding a property to an interface forces all objects classes with that interface to have a compatible property. The compatible property could be a newly created #GParamSpec, but normally g_object_class_override_property() will be used so that the object class only needs to provide an implementation and inherits the property description, default value, bounds, and so forth from the interface property.
This function is meant to be called from the interface's default
vtable initialization function (the class_init
member of
#GTypeInfo.) It must not be called after after class_init
has
been called for any object types implementing this interface.
If pspec
is a floating reference, it will be consumed.
any interface vtable for the interface, or the default vtable for the interface.
the #GParamSpec for the new property
Lists the properties of an interface.Generally, the interface
vtable passed in as g_iface
will be the default vtable from
g_type_default_interface_ref(), or, if you know the interface has
already been loaded, g_type_default_interface_peek().
any interface vtable for the interface, or the default vtable for the interface
Creates a new instance of a #GObject subtype and sets its properties.
Construction parameters (see %G_PARAM_CONSTRUCT, %G_PARAM_CONSTRUCT_ONLY) which are not explicitly specified are set to their default values.
the type id of the #GObject subtype to instantiate
an array of #GParameter
The #GtkCellArea is an abstract class for #GtkCellLayout widgets (also referred to as "layouting widgets") to interface with an arbitrary number of #GtkCellRenderers and interact with the user for a given #GtkTreeModel row.
The cell area handles events, focus navigation, drawing and size requests and allocations for a given row of data.
Usually users dont have to interact with the #GtkCellArea directly unless they are implementing a cell-layouting widget themselves.
Requesting area sizes
As outlined in [GtkWidget’s geometry management section][geometry-management], GTK+ uses a height-for-width geometry management system to compute the sizes of widgets and user interfaces. #GtkCellArea uses the same semantics to calculate the size of an area for an arbitrary number of #GtkTreeModel rows.
When requesting the size of a cell area one needs to calculate the size for a handful of rows, and this will be done differently by different layouting widgets. For instance a #GtkTreeViewColumn always lines up the areas from top to bottom while a #GtkIconView on the other hand might enforce that all areas received the same width and wrap the areas around, requesting height for more cell areas when allocated less width.
It’s also important for areas to maintain some cell alignments with areas rendered for adjacent rows (cells can appear “columnized” inside an area even when the size of cells are different in each row). For this reason the #GtkCellArea uses a #GtkCellAreaContext object to store the alignments and sizes along the way (as well as the overall largest minimum and natural size for all the rows which have been calculated with the said context).
The #GtkCellAreaContext is an opaque object specific to the #GtkCellArea which created it (see gtk_cell_area_create_context()). The owning cell-layouting widget can create as many contexts as it wishes to calculate sizes of rows which should receive the same size in at least one orientation (horizontally or vertically), However, it’s important that the same #GtkCellAreaContext which was used to request the sizes for a given #GtkTreeModel row be used when rendering or processing events for that row.
In order to request the width of all the rows at the root level of a #GtkTreeModel one would do the following:
Note that in this example it’s not important to observe the returned minimum and natural width of the area for each row unless the cell-layouting object is actually interested in the widths of individual rows. The overall width is however stored in the accompanying #GtkCellAreaContext object and can be consulted at any time.
This can be useful since #GtkCellLayout widgets usually have to support requesting and rendering rows in treemodels with an exceedingly large amount of rows. The #GtkCellLayout widget in that case would calculate the required width of the rows in an idle or timeout source (see g_timeout_add()) and when the widget is requested its actual width in #GtkWidgetClass.get_preferred_width() it can simply consult the width accumulated so far in the #GtkCellAreaContext object.
A simple example where rows are rendered from top to bottom and take up the full width of the layouting widget would look like:
In the above example the Foo widget has to make sure that some row sizes have been calculated (the amount of rows that Foo judged was appropriate to request space for in a single timeout iteration) before simply returning the amount of space required by the area via the #GtkCellAreaContext.
Requesting the height for width (or width for height) of an area is a similar task except in this case the #GtkCellAreaContext does not store the data (actually, it does not know how much space the layouting widget plans to allocate it for every row. It’s up to the layouting widget to render each row of data with the appropriate height and width which was requested by the #GtkCellArea).
In order to request the height for width of all the rows at the root level of a #GtkTreeModel one would do the following:
Note that in the above example we would need to cache the heights returned for each row so that we would know what sizes to render the areas for each row. However we would only want to really cache the heights if the request is intended for the layouting widgets real allocation.
In some cases the layouting widget is requested the height for an arbitrary for_width, this is a special case for layouting widgets who need to request size for tens of thousands of rows. For this case it’s only important that the layouting widget calculate one reasonably sized chunk of rows and return that height synchronously. The reasoning here is that any layouting widget is at least capable of synchronously calculating enough height to fill the screen height (or scrolled window height) in response to a single call to #GtkWidgetClass.get_preferred_height_for_width(). Returning a perfect height for width that is larger than the screen area is inconsequential since after the layouting receives an allocation from a scrolled window it simply continues to drive the scrollbar values while more and more height is required for the row heights that are calculated in the background.
Rendering Areas
Once area sizes have been aquired at least for the rows in the visible area of the layouting widget they can be rendered at #GtkWidgetClass.draw() time.
A crude example of how to render all the rows at the root level runs as follows:
Note that the cached height in this example really depends on how the layouting widget works. The layouting widget might decide to give every row its minimum or natural height or, if the model content is expected to fit inside the layouting widget without scrolling, it would make sense to calculate the allocation for each row at #GtkWidget::size-allocate time using gtk_distribute_natural_allocation().
Handling Events and Driving Keyboard Focus
Passing events to the area is as simple as handling events on any normal widget and then passing them to the gtk_cell_area_event() API as they come in. Usually #GtkCellArea is only interested in button events, however some customized derived areas can be implemented who are interested in handling other events. Handling an event can trigger the #GtkCellArea::focus-changed signal to fire; as well as #GtkCellArea::add-editable in the case that an editable cell was clicked and needs to start editing. You can call gtk_cell_area_stop_editing() at any time to cancel any cell editing that is currently in progress.
The #GtkCellArea drives keyboard focus from cell to cell in a way similar to #GtkWidget. For layouting widgets that support giving focus to cells it’s important to remember to pass %GTK_CELL_RENDERER_FOCUSED to the area functions for the row that has focus and to tell the area to paint the focus at render time.
Layouting widgets that accept focus on cells should implement the #GtkWidgetClass.focus() virtual method. The layouting widget is always responsible for knowing where #GtkTreeModel rows are rendered inside the widget, so at #GtkWidgetClass.focus() time the layouting widget should use the #GtkCellArea methods to navigate focus inside the area and then observe the GtkDirectionType to pass the focus to adjacent rows and areas.
A basic example of how the #GtkWidgetClass.focus() virtual method should be implemented:
Note that the layouting widget is responsible for matching the GtkDirectionType values to the way it lays out its cells.
Cell Properties
The #GtkCellArea introduces cell properties for #GtkCellRenderers in very much the same way that #GtkContainer introduces [child properties][child-properties] for #GtkWidgets. This provides some general interfaces for defining the relationship cell areas have with their cells. For instance in a #GtkCellAreaBox a cell might “expand” and receive extra space when the area is allocated more than its full natural request, or a cell might be configured to “align” with adjacent rows which were requested and rendered with the same #GtkCellAreaContext.
Use gtk_cell_area_class_install_cell_property() to install cell properties for a cell area class and gtk_cell_area_class_find_cell_property() or gtk_cell_area_class_list_cell_properties() to get information about existing cell properties.
To set the value of a cell property, use gtk_cell_area_cell_set_property(), gtk_cell_area_cell_set() or gtk_cell_area_cell_set_valist(). To obtain the value of a cell property, use gtk_cell_area_cell_get_property(), gtk_cell_area_cell_get() or gtk_cell_area_cell_get_valist().