Commit c73e0709 authored by Timm Bäder's avatar Timm Bäder 👎

flowbox: Implement get_child_at_pos properly

With transforms in the mix, checking if the coordinate is inside the
widget "allocation" makes even less sense. Just use gtk_widget_pick()
and walk up until we find a GtkFlowBoxChild.
parent 8bafd03c
...@@ -3918,7 +3918,7 @@ gtk_flow_box_get_child_at_index (GtkFlowBox *box, ...@@ -3918,7 +3918,7 @@ gtk_flow_box_get_child_at_index (GtkFlowBox *box,
* @y: the y coordinate of the child * @y: the y coordinate of the child
* *
* Gets the child in the (@x, @y) position. Both @x and @y are * Gets the child in the (@x, @y) position. Both @x and @y are
* assumed to be relative to the allocation of @box. * assumed to be relative to the origin of @box.
* *
* Returns: (transfer none) (nullable): the child widget, which will * Returns: (transfer none) (nullable): the child widget, which will
* always be a #GtkFlowBoxChild or %NULL in case no child widget * always be a #GtkFlowBoxChild or %NULL in case no child widget
...@@ -3929,24 +3929,12 @@ gtk_flow_box_get_child_at_pos (GtkFlowBox *box, ...@@ -3929,24 +3929,12 @@ gtk_flow_box_get_child_at_pos (GtkFlowBox *box,
gint x, gint x,
gint y) gint y)
{ {
GtkWidget *child; GtkWidget *child = gtk_widget_pick (GTK_WIDGET (box), x, y);
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 (!child)
if (gdk_rectangle_contains_point (&allocation, x, y)) return NULL;
return GTK_FLOW_BOX_CHILD (child);
}
return NULL; return (GtkFlowBoxChild *)gtk_widget_get_ancestor (child, GTK_TYPE_FLOW_BOX_CHILD);
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment