def METHOD_NAME(
    controller,
    x,
    y,
    item_class: type[Presentation],
    subject_class: type[Element] | None,
):
    view: GtkView = controller.get_widget()
    model = view.model
    try:
        parent = next(item_at_point(view, (x, y)), None)
    except KeyError:
        parent = None
    if parent and subject_class:
        view.selection.dropzone_item = (
            parent
            if can_group(parent.subject, subject_class)
            or can_connect(parent, item_class)  # type: ignore[arg-type]
            else None
        )
        model.request_update(parent)
    else:
        if view.selection.dropzone_item:
            model.request_update(view.selection.dropzone_item)
        view.selection.dropzone_item = None