let handle_click_button_event (wr: win_ref) (but_pos: int) (b: b)
: state * output_event list =
assert (win_valid wr b);
begin match button_handlers_in_pos wr but_pos b with
| None -> (Waiting({ waiting_state = b }), [])
| Some(dr, vs) ->
let task v = {
task_win = wr;
task_expr = Apply(X(R(v)), X(R(Node_value(dr))));
} in
let r = {
running_state = b;
running_task_queue = List.map task vs;
} in
(Running(r), [])
end