flowbox: Export gtk_flow_box_get_child_at_pos as public API

https://bugzilla.gnome.org/show_bug.cgi?id=776187
This commit is contained in:
Debarshi Ray 2016-12-17 00:30:39 +01:00
parent faf2295440
commit 7ea199c831
3 changed files with 45 additions and 25 deletions

View File

@ -6589,6 +6589,7 @@ GtkFlowBox
gtk_flow_box_new
gtk_flow_box_insert
gtk_flow_box_get_child_at_index
gtk_flow_box_get_child_at_pos
gtk_flow_box_set_hadjustment
gtk_flow_box_set_vadjustment

View File

@ -856,31 +856,6 @@ get_visible_children (GtkFlowBox *box)
return i;
}
static GtkFlowBoxChild *
gtk_flow_box_get_child_at_pos (GtkFlowBox *box,
gint x,
gint y)
{
GtkWidget *child;
GSequenceIter *iter;
GtkAllocation allocation;
for (iter = g_sequence_get_begin_iter (BOX_PRIV (box)->children);
!g_sequence_iter_is_end (iter);
iter = g_sequence_iter_next (iter))
{
child = g_sequence_get (iter);
if (!child_is_visible (child))
continue;
gtk_widget_get_allocation (child, &allocation);
if (x >= allocation.x && x < (allocation.x + allocation.width) &&
y >= allocation.y && y < (allocation.y + allocation.height))
return GTK_FLOW_BOX_CHILD (child);
}
return NULL;
}
static void
gtk_flow_box_update_active (GtkFlowBox *box,
GtkFlowBoxChild *child)
@ -4278,6 +4253,45 @@ gtk_flow_box_get_child_at_index (GtkFlowBox *box,
return NULL;
}
/**
* gtk_flow_box_get_child_at_pos:
* @box: a #GtkFlowBox
* @x: the x coordinate of the child
* @y: the y coordinate of the child
*
* Gets the child in the (@x, @y) position.
*
* Returns: (transfer none) (nullable): the child widget, which will
* always be a #GtkFlowBoxChild or %NULL in case no child widget
* exists for the given x and y coordinates.
*
* Since: 3.22.6
*/
GtkFlowBoxChild *
gtk_flow_box_get_child_at_pos (GtkFlowBox *box,
gint x,
gint y)
{
GtkWidget *child;
GSequenceIter *iter;
GtkAllocation allocation;
for (iter = g_sequence_get_begin_iter (BOX_PRIV (box)->children);
!g_sequence_iter_is_end (iter);
iter = g_sequence_iter_next (iter))
{
child = g_sequence_get (iter);
if (!child_is_visible (child))
continue;
gtk_widget_get_allocation (child, &allocation);
if (x >= allocation.x && x < (allocation.x + allocation.width) &&
y >= allocation.y && y < (allocation.y + allocation.height))
return GTK_FLOW_BOX_CHILD (child);
}
return NULL;
}
/**
* gtk_flow_box_set_hadjustment:
* @box: a #GtkFlowBox

View File

@ -181,6 +181,11 @@ GDK_AVAILABLE_IN_3_12
GtkFlowBoxChild *gtk_flow_box_get_child_at_index (GtkFlowBox *box,
gint idx);
GDK_AVAILABLE_IN_3_22
GtkFlowBoxChild *gtk_flow_box_get_child_at_pos (GtkFlowBox *box,
gint x,
gint y);
typedef void (* GtkFlowBoxForeachFunc) (GtkFlowBox *box,
GtkFlowBoxChild *child,
gpointer user_data);