[gtk+/treeview-refactor] Added gtk_cell_area_foreach_alloc() to further simplify GtkCellArea subclasses
- From: Tristan Van Berkom <tvb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/treeview-refactor] Added gtk_cell_area_foreach_alloc() to further simplify GtkCellArea subclasses
- Date: Mon, 6 Dec 2010 05:10:24 +0000 (UTC)
commit 2588165bfb50dcdf81e08b3e0126044ade1e98bb
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date: Mon Dec 6 14:11:28 2010 +0900
Added gtk_cell_area_foreach_alloc() to further simplify GtkCellArea subclasses
gtk_cell_area_foreach_alloc() itterates over an allocated list of cells
and calls a callback with the cell's allocation until the callback returns
TRUE.
- Removed vfunc get_cell_allocation() and implemented
gtk_cell_area_get_cell_allocation() using foreach_alloc()
- Added gtk_cell_area_get_cell_at_position() using foreach_alloc()
- Removed GtkCellAreaBox ->event() implementation and implemented
mouse "click" cell activation in GtkCellArea class directly using
gtk_cell_area_get_cell_at_position().
docs/reference/gtk/gtk3-sections.txt | 5 +-
gtk/gtkcellarea.c | 220 ++++++++++++++++++++++++++++++----
gtk/gtkcellarea.h | 48 ++++++--
gtk/gtkcellareabox.c | 178 +++++-----------------------
4 files changed, 271 insertions(+), 180 deletions(-)
---
diff --git a/docs/reference/gtk/gtk3-sections.txt b/docs/reference/gtk/gtk3-sections.txt
index 15a692d..555a043 100644
--- a/docs/reference/gtk/gtk3-sections.txt
+++ b/docs/reference/gtk/gtk3-sections.txt
@@ -4387,16 +4387,19 @@ gtk_cell_layout_get_type
GtkCellArea
GtkCellAreaClass
GtkCellCallback
+GtkCellAllocCallback
GTK_CELL_AREA_WARN_INVALID_CELL_PROPERTY_ID
gtk_cell_area_add
gtk_cell_area_remove
gtk_cell_area_has_renderer
gtk_cell_area_foreach
-gtk_cell_area_get_cell_allocation
+gtk_cell_area_foreach_alloc
gtk_cell_area_event
gtk_cell_area_render
gtk_cell_area_set_style_detail
gtk_cell_area_get_style_detail
+gtk_cell_area_get_cell_allocation
+gtk_cell_area_get_cell_at_position
gtk_cell_area_create_context
gtk_cell_area_get_request_mode
gtk_cell_area_get_preferred_width
diff --git a/gtk/gtkcellarea.c b/gtk/gtkcellarea.c
index a601962..166546b 100644
--- a/gtk/gtkcellarea.c
+++ b/gtk/gtkcellarea.c
@@ -424,6 +424,20 @@ typedef struct {
gboolean has_renderer;
} HasRendererCheck;
+/* Used in foreach loop to get a cell's allocation */
+typedef struct {
+ GtkCellRenderer *renderer;
+ GdkRectangle allocation;
+} RendererAllocationData;
+
+/* Used in foreach loop to get a cell by position */
+typedef struct {
+ gint x;
+ gint y;
+ GtkCellRenderer *renderer;
+ GdkRectangle cell_area;
+} CellByPositionData;
+
/* Attribute/Cell metadata */
typedef struct {
const gchar *attribute;
@@ -919,6 +933,7 @@ gtk_cell_area_real_event (GtkCellArea *area,
GtkCellRendererState flags)
{
GtkCellAreaPrivate *priv = area->priv;
+ gboolean retval = FALSE;
if (event->type == GDK_KEY_PRESS && (flags & GTK_CELL_RENDERER_FOCUSED) != 0)
{
@@ -928,11 +943,63 @@ gtk_cell_area_real_event (GtkCellArea *area,
if (priv->edited_cell && (key_event->keyval == GDK_KEY_Escape))
{
gtk_cell_area_stop_editing (area, TRUE);
- return TRUE;
+ retval = TRUE;
}
}
+ else if (event->type == GDK_BUTTON_PRESS)
+ {
+ GdkEventButton *button_event = (GdkEventButton *)event;
- return FALSE;
+ if (button_event->button == 1)
+ {
+ GtkCellRenderer *renderer;
+ GtkCellRenderer *focus_renderer;
+ GdkRectangle alloc_area, inner_area;
+ gint event_x, event_y;
+
+ /* We may need some semantics to tell us the offset of the event
+ * window we are handling events for (i.e. GtkTreeView has a bin_window) */
+ event_x = button_event->x;
+ event_y = button_event->y;
+
+ renderer =
+ gtk_cell_area_get_cell_at_position (area, context, widget,
+ cell_area, event_x, event_y,
+ &alloc_area);
+
+ if (renderer)
+ {
+ focus_renderer = gtk_cell_area_get_focus_from_sibling (area, renderer);
+ if (!focus_renderer)
+ focus_renderer = renderer;
+
+ /* If we're already editing, cancel it and set focus */
+ if (gtk_cell_area_get_edited_cell (area))
+ {
+ /* XXX Was it really canceled in this case ? */
+ gtk_cell_area_stop_editing (area, TRUE);
+ gtk_cell_area_set_focus_cell (area, focus_renderer);
+ retval = TRUE;
+ }
+ else
+ {
+ /* If we are activating via a focus sibling,
+ * we need to fetch the right cell area for the real event renderer */
+ if (focus_renderer != renderer)
+ gtk_cell_area_get_cell_allocation (area, context, widget, focus_renderer,
+ cell_area, &alloc_area);
+
+ gtk_cell_area_inner_cell_area (area, widget, &alloc_area, &inner_area);
+
+ gtk_cell_area_set_focus_cell (area, focus_renderer);
+ retval = gtk_cell_area_activate_cell (area, widget, focus_renderer,
+ event, &inner_area, flags);
+ }
+ }
+ }
+ }
+
+ return retval;
}
static void
@@ -1401,43 +1468,41 @@ gtk_cell_area_foreach (GtkCellArea *area,
}
/**
- * gtk_cell_area_get_cell_allocation:
+ * gtk_cell_area_foreach_alloc:
* @area: a #GtkCellArea
- * @context: the #GtkCellAreaContext used to hold sizes for @area.
- * @widget: the #GtkWidget that @area is rendering on
- * @renderer: the #GtkCellRenderer to get the allocation for
- * @cell_area: the whole allocated area for @area in @widget
- * for this row
- * @allocation: (out): where to store the allocation for @renderer
+ * @context: the #GtkCellAreaContext for this row of data.
+ * @widget: the #GtkWidget that @area is rendering to
+ * @cell_area: the @widget relative coordinates and size for @area
+ * @callback: the #GtkCellAllocCallback to call
+ * @callback_data: user provided data pointer
*
- * Derives the allocation of @renderer inside @area if @area
- * were to be renderered in @cell_area.
+ * Calls @callback for every #GtkCellRenderer in @area with the
+ * allocated rectangle inside @cell_area.
*
* Since: 3.0
*/
void
-gtk_cell_area_get_cell_allocation (GtkCellArea *area,
- GtkCellAreaContext *context,
- GtkWidget *widget,
- GtkCellRenderer *renderer,
- const GdkRectangle *cell_area,
- GdkRectangle *allocation)
+gtk_cell_area_foreach_alloc (GtkCellArea *area,
+ GtkCellAreaContext *context,
+ GtkWidget *widget,
+ const GdkRectangle *cell_area,
+ GtkCellAllocCallback callback,
+ gpointer callback_data)
{
GtkCellAreaClass *class;
g_return_if_fail (GTK_IS_CELL_AREA (area));
g_return_if_fail (GTK_IS_CELL_AREA_CONTEXT (context));
g_return_if_fail (GTK_IS_WIDGET (widget));
- g_return_if_fail (GTK_IS_CELL_RENDERER (renderer));
g_return_if_fail (cell_area != NULL);
- g_return_if_fail (allocation != NULL);
+ g_return_if_fail (callback != NULL);
class = GTK_CELL_AREA_GET_CLASS (area);
- if (class->get_cell_allocation)
- class->get_cell_allocation (area, context, widget, renderer, cell_area, allocation);
+ if (class->foreach_alloc)
+ class->foreach_alloc (area, context, widget, cell_area, callback, callback_data);
else
- g_warning ("GtkCellAreaClass::get_cell_allocation not implemented for `%s'",
+ g_warning ("GtkCellAreaClass::foreach_alloc not implemented for `%s'",
g_type_name (G_TYPE_FROM_INSTANCE (area)));
}
@@ -1576,6 +1641,117 @@ gtk_cell_area_get_style_detail (GtkCellArea *area)
return priv->style_detail;
}
+static gboolean
+get_cell_allocation (GtkCellRenderer *renderer,
+ const GdkRectangle *cell_area,
+ RendererAllocationData *data)
+{
+ if (data->renderer == renderer)
+ data->allocation = *cell_area;
+
+ return (data->renderer == renderer);
+}
+
+/**
+ * gtk_cell_area_get_cell_allocation:
+ * @area: a #GtkCellArea
+ * @context: the #GtkCellAreaContext used to hold sizes for @area.
+ * @widget: the #GtkWidget that @area is rendering on
+ * @renderer: the #GtkCellRenderer to get the allocation for
+ * @cell_area: the whole allocated area for @area in @widget
+ * for this row
+ * @allocation: (out): where to store the allocation for @renderer
+ *
+ * Derives the allocation of @renderer inside @area if @area
+ * were to be renderered in @cell_area.
+ *
+ * Since: 3.0
+ */
+void
+gtk_cell_area_get_cell_allocation (GtkCellArea *area,
+ GtkCellAreaContext *context,
+ GtkWidget *widget,
+ GtkCellRenderer *renderer,
+ const GdkRectangle *cell_area,
+ GdkRectangle *allocation)
+{
+ RendererAllocationData data = { renderer, { 0, } };
+
+ g_return_if_fail (GTK_IS_CELL_AREA (area));
+ g_return_if_fail (GTK_IS_CELL_AREA_CONTEXT (context));
+ g_return_if_fail (GTK_IS_WIDGET (widget));
+ g_return_if_fail (GTK_IS_CELL_RENDERER (renderer));
+ g_return_if_fail (cell_area != NULL);
+ g_return_if_fail (allocation != NULL);
+
+ gtk_cell_area_foreach_alloc (area, context, widget, cell_area,
+ (GtkCellAllocCallback)get_cell_allocation, &data);
+
+ *allocation = data.allocation;
+}
+
+static gboolean
+get_cell_by_position (GtkCellRenderer *renderer,
+ const GdkRectangle *cell_area,
+ CellByPositionData *data)
+{
+ if (data->x >= cell_area->x && data->x < cell_area->x + cell_area->width &&
+ data->y >= cell_area->y && data->y < cell_area->y + cell_area->height)
+ {
+ data->renderer = renderer;
+ data->cell_area = *cell_area;
+ }
+
+ return (data->renderer != NULL);
+}
+
+/**
+ * gtk_cell_area_get_cell_at_position:
+ * @area: a #GtkCellArea
+ * @context: the #GtkCellAreaContext used to hold sizes for @area.
+ * @widget: the #GtkWidget that @area is rendering on
+ * @cell_area: the whole allocated area for @area in @widget
+ * for this row
+ * @x: the x position
+ * @y: the y position
+ * @alloc_area: (out) (allow-none): where to store the inner allocated area of the
+ * returned cell renderer, or %NULL.
+ *
+ * Gets the #GtkCellRenderer at @x and @y coordinates inside @area and optionally
+ * returns the full cell allocation for it inside @cell_area.
+ *
+ * Returns: the #GtkCellRenderer at @x and @y.
+ *
+ * Since: 3.0
+ */
+GtkCellRenderer *
+gtk_cell_area_get_cell_at_position (GtkCellArea *area,
+ GtkCellAreaContext *context,
+ GtkWidget *widget,
+ const GdkRectangle *cell_area,
+ gint x,
+ gint y,
+ GdkRectangle *alloc_area)
+{
+ CellByPositionData data = { x, y, NULL, { 0, } };
+
+ g_return_val_if_fail (GTK_IS_CELL_AREA (area), NULL);
+ g_return_val_if_fail (GTK_IS_CELL_AREA_CONTEXT (context), NULL);
+ g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+ g_return_val_if_fail (cell_area != NULL, NULL);
+ g_return_val_if_fail (x >= cell_area->x && x <= cell_area->x + cell_area->width, NULL);
+ g_return_val_if_fail (y >= cell_area->y && y <= cell_area->y + cell_area->height, NULL);
+
+ gtk_cell_area_foreach_alloc (area, context, widget, cell_area,
+ (GtkCellAllocCallback)get_cell_by_position, &data);
+
+ if (alloc_area)
+ *alloc_area = data.cell_area;
+
+ return data.renderer;
+}
+
+
/*************************************************************
* API: Geometry *
*************************************************************/
diff --git a/gtk/gtkcellarea.h b/gtk/gtkcellarea.h
index aa0560c..83c1741 100644
--- a/gtk/gtkcellarea.h
+++ b/gtk/gtkcellarea.h
@@ -72,6 +72,22 @@ typedef struct _GtkCellAreaContext GtkCellAreaContext;
typedef gboolean (*GtkCellCallback) (GtkCellRenderer *renderer,
gpointer data);
+/**
+ * GtkCellAllocCallback:
+ * @renderer: the cell renderer to operate on
+ * @area: the area allocated to @renderer inside the rectangle provided to gtk_cell_area_foreach_alloc().
+ * @data: user-supplied data
+ *
+ * The type of the callback functions used for iterating over
+ * the cell renderers and their allocated areas inside a #GtkCellArea,
+ * see gtk_cell_area_foreach_alloc().
+ *
+ * Return value: %TRUE to stop iterating over cells.
+ */
+typedef gboolean (*GtkCellAllocCallback) (GtkCellRenderer *renderer,
+ const GdkRectangle *cell_area,
+ gpointer data);
+
struct _GtkCellArea
{
@@ -88,8 +104,8 @@ struct _GtkCellArea
* @remove: removes a #GtkCellRenderer from the area.
* @foreach: Calls the #GtkCellCallback function on every #GtkCellRenderer in the area
* with the provided user data until the callback returns %TRUE.
- * @get_cell_allocation: Gets the position (relative to the passed @cell_area rectangle)
- * and size of a #GtkCellRenderer.
+ * @foreach_alloc: Calls the #GtkCellAllocCallback function on every #GtkCellRenderer in the area
+ * with the allocated area for the cell and the provided user data until the callback returns %TRUE.
* @event: Handle an event in the area, this is generally used to activate a cell
* at the event location for button events but can also be used to generically pass
* events to #GtkWidgets drawn onto the area.
@@ -154,12 +170,12 @@ struct _GtkCellAreaClass
void (* foreach) (GtkCellArea *area,
GtkCellCallback callback,
gpointer callback_data);
- void (* get_cell_allocation) (GtkCellArea *area,
+ void (* foreach_alloc) (GtkCellArea *area,
GtkCellAreaContext *context,
GtkWidget *widget,
- GtkCellRenderer *renderer,
const GdkRectangle *cell_area,
- GdkRectangle *allocation);
+ GtkCellAllocCallback callback,
+ gpointer callback_data);
gint (* event) (GtkCellArea *area,
GtkCellAreaContext *context,
GtkWidget *widget,
@@ -253,12 +269,12 @@ gboolean gtk_cell_area_has_renderer (GtkCellArea
void gtk_cell_area_foreach (GtkCellArea *area,
GtkCellCallback callback,
gpointer callback_data);
-void gtk_cell_area_get_cell_allocation (GtkCellArea *area,
+void gtk_cell_area_foreach_alloc (GtkCellArea *area,
GtkCellAreaContext *context,
GtkWidget *widget,
- GtkCellRenderer *renderer,
const GdkRectangle *cell_area,
- GdkRectangle *allocation);
+ GtkCellAllocCallback callback,
+ gpointer callback_data);
gint gtk_cell_area_event (GtkCellArea *area,
GtkCellAreaContext *context,
GtkWidget *widget,
@@ -277,6 +293,22 @@ void gtk_cell_area_set_style_detail (GtkCellArea
const gchar *detail);
G_CONST_RETURN gchar *gtk_cell_area_get_style_detail (GtkCellArea *area);
+
+void gtk_cell_area_get_cell_allocation (GtkCellArea *area,
+ GtkCellAreaContext *context,
+ GtkWidget *widget,
+ GtkCellRenderer *renderer,
+ const GdkRectangle *cell_area,
+ GdkRectangle *allocation);
+GtkCellRenderer *gtk_cell_area_get_cell_at_position (GtkCellArea *area,
+ GtkCellAreaContext *context,
+ GtkWidget *widget,
+ const GdkRectangle *cell_area,
+ gint x,
+ gint y,
+ GdkRectangle *alloc_area);
+
+
/* Geometry */
GtkCellAreaContext *gtk_cell_area_create_context (GtkCellArea *area);
GtkSizeRequestMode gtk_cell_area_get_request_mode (GtkCellArea *area);
diff --git a/gtk/gtkcellareabox.c b/gtk/gtkcellareabox.c
index f60cc9a..62db9b5 100644
--- a/gtk/gtkcellareabox.c
+++ b/gtk/gtkcellareabox.c
@@ -74,18 +74,12 @@ static void gtk_cell_area_box_remove (GtkCellArea
static void gtk_cell_area_box_foreach (GtkCellArea *area,
GtkCellCallback callback,
gpointer callback_data);
-static void gtk_cell_area_box_get_cell_allocation (GtkCellArea *area,
- GtkCellAreaContext *context,
- GtkWidget *widget,
- GtkCellRenderer *renderer,
- const GdkRectangle *cell_area,
- GdkRectangle *allocation);
-static gint gtk_cell_area_box_event (GtkCellArea *area,
+static void gtk_cell_area_box_foreach_alloc (GtkCellArea *area,
GtkCellAreaContext *context,
GtkWidget *widget,
- GdkEvent *event,
const GdkRectangle *cell_area,
- GtkCellRendererState flags);
+ GtkCellAllocCallback callback,
+ gpointer callback_data);
static void gtk_cell_area_box_render (GtkCellArea *area,
GtkCellAreaContext *context,
GtkWidget *widget,
@@ -267,8 +261,7 @@ gtk_cell_area_box_class_init (GtkCellAreaBoxClass *class)
area_class->add = gtk_cell_area_box_add;
area_class->remove = gtk_cell_area_box_remove;
area_class->foreach = gtk_cell_area_box_foreach;
- area_class->get_cell_allocation = gtk_cell_area_box_get_cell_allocation;
- area_class->event = gtk_cell_area_box_event;
+ area_class->foreach_alloc = gtk_cell_area_box_foreach_alloc;
area_class->render = gtk_cell_area_box_render;
area_class->set_cell_property = gtk_cell_area_box_set_cell_property;
area_class->get_cell_property = gtk_cell_area_box_get_cell_property;
@@ -1040,19 +1033,20 @@ gtk_cell_area_box_foreach (GtkCellArea *area,
}
static void
-gtk_cell_area_box_get_cell_allocation (GtkCellArea *area,
- GtkCellAreaContext *context,
- GtkWidget *widget,
- GtkCellRenderer *renderer,
- const GdkRectangle *cell_area,
- GdkRectangle *allocation)
+gtk_cell_area_box_foreach_alloc (GtkCellArea *area,
+ GtkCellAreaContext *context,
+ GtkWidget *widget,
+ const GdkRectangle *cell_area,
+ GtkCellAllocCallback callback,
+ gpointer callback_data)
{
GtkCellAreaBox *box = GTK_CELL_AREA_BOX (area);
GtkCellAreaBoxPrivate *priv = box->priv;
GtkCellAreaBoxContext *box_context = GTK_CELL_AREA_BOX_CONTEXT (context);
GSList *allocated_cells, *l;
+ GdkRectangle allocation;
- *allocation = *cell_area;
+ allocation = *cell_area;
/* Get a list of cells with allocation sizes decided regardless
* of alignments and pack order etc. */
@@ -1063,143 +1057,23 @@ gtk_cell_area_box_get_cell_allocation (GtkCellArea *area,
{
AllocatedCell *cell = l->data;
- if (cell->renderer == renderer)
+ if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
{
- if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
- {
- allocation->x = cell_area->x + cell->position;
- allocation->width = cell->size;
- }
- else
- {
- allocation->y = cell_area->y + cell->position;
- allocation->height = cell->size;
- }
-
- break;
+ allocation.x = cell_area->x + cell->position;
+ allocation.width = cell->size;
}
- }
-
- g_slist_foreach (allocated_cells, (GFunc)allocated_cell_free, NULL);
- g_slist_free (allocated_cells);
-}
-
-enum {
- FOCUS_NONE,
- FOCUS_PREV,
- FOCUS_NEXT
-};
-
-static gint
-gtk_cell_area_box_event (GtkCellArea *area,
- GtkCellAreaContext *context,
- GtkWidget *widget,
- GdkEvent *event,
- const GdkRectangle *cell_area,
- GtkCellRendererState flags)
-{
- gint retval;
-
- /* First let the parent class handle activation of cells via keystrokes */
- retval =
- GTK_CELL_AREA_CLASS (gtk_cell_area_box_parent_class)->event (area, context, widget,
- event, cell_area, flags);
-
- if (retval)
- return retval;
-
- /* Also detect mouse events, for mouse events we need to allocate the renderers
- * and find which renderer needs to be activated.
- */
- if (event->type == GDK_BUTTON_PRESS)
- {
- GdkEventButton *button_event = (GdkEventButton *)event;
-
- if (button_event->button == 1)
+ else
{
- GtkCellAreaBox *box = GTK_CELL_AREA_BOX (area);
- GtkCellAreaBoxPrivate *priv = box->priv;
- GtkCellAreaBoxContext *box_context = GTK_CELL_AREA_BOX_CONTEXT (context);
- GSList *allocated_cells, *l;
- GdkRectangle cell_background, inner_area;
- gint event_x, event_y;
-
- /* We may need some semantics to tell us the offset of the event
- * window we are handling events for (i.e. GtkTreeView has a bin_window) */
- event_x = button_event->x;
- event_y = button_event->y;
-
- cell_background = *cell_area;
-
- /* Get a list of cells with allocation sizes decided regardless
- * of alignments and pack order etc. */
- allocated_cells = get_allocated_cells (box, box_context, widget,
- cell_area->width, cell_area->height);
-
- for (l = allocated_cells; l; l = l->next)
- {
- AllocatedCell *cell = l->data;
-
- if (priv->orientation == GTK_ORIENTATION_HORIZONTAL)
- {
- cell_background.x = cell_area->x + cell->position;
- cell_background.width = cell->size;
- }
- else
- {
- cell_background.y = cell_area->y + cell->position;
- cell_background.height = cell->size;
- }
-
- /* Remove margins from the background area to produce the cell area
- */
- gtk_cell_area_inner_cell_area (area, widget, &cell_background, &inner_area);
-
- if (event_x >= inner_area.x && event_x <= inner_area.x + inner_area.width &&
- event_y >= inner_area.y && event_y <= inner_area.y + inner_area.height)
- {
- GtkCellRenderer *event_renderer = NULL;
- GtkCellRenderer *focus_renderer;
-
- focus_renderer = gtk_cell_area_get_focus_from_sibling (area, cell->renderer);
- if (focus_renderer)
- event_renderer = focus_renderer;
- else
- event_renderer = cell->renderer;
-
- event_renderer = cell->renderer;
-
- if (event_renderer)
- {
- if (gtk_cell_area_get_edited_cell (area))
- {
- /* XXX Was it really canceled in this case ? */
- gtk_cell_area_stop_editing (area, TRUE);
- gtk_cell_area_set_focus_cell (area, event_renderer);
- retval = TRUE;
- }
- else
- {
- /* If we are activating via a focus sibling, we need to fix the
- * cell area */
- if (event_renderer != cell->renderer)
- gtk_cell_area_inner_cell_area (area, widget, cell_area, &cell_background);
-
- gtk_cell_area_set_focus_cell (area, event_renderer);
-
- retval = gtk_cell_area_activate_cell (area, widget, event_renderer,
- event, &cell_background, flags);
- }
- break;
- }
- }
- }
- g_slist_foreach (allocated_cells, (GFunc)allocated_cell_free, NULL);
- g_slist_free (allocated_cells);
+ allocation.y = cell_area->y + cell->position;
+ allocation.height = cell->size;
}
+
+ if (callback (cell->renderer, &allocation, callback_data))
+ break;
}
- return retval;
+ g_slist_foreach (allocated_cells, (GFunc)allocated_cell_free, NULL);
+ g_slist_free (allocated_cells);
}
static void
@@ -1959,6 +1833,12 @@ gtk_cell_area_box_get_preferred_width_for_height (GtkCellArea *area,
*natural_width = nat_width;
}
+enum {
+ FOCUS_NONE,
+ FOCUS_PREV,
+ FOCUS_NEXT
+};
+
static gboolean
gtk_cell_area_box_focus (GtkCellArea *area,
GtkDirectionType direction)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]