def collide_parent_tree(widget, x, y):
    """Returns whether (x, y) collide with the widget and all its parents.
    """
    if not widget.collide_point(x, y):
        return False

    parent = widget.parent
    while parent and hasattr(parent, 'to_parent'):
        x, y = parent.to_parent(x, y)  # transform to parent's parent's
        if not parent.collide_point(x, y):
            return False

        parent = parent.parent
    return True