let handle_input_text_event (wr: win_ref) (box_pos: int) (str: string) (b: b)
: state * output_event list =
assert (win_valid wr b);
begin match textbox_handlers_in_pos wr box_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 n' =
begin match node_assoc_valid dr b with
| Textbox_node(oeid, _, hs) -> Textbox_node(oeid, str, hs)
| _ -> assert false
end
in
let b' = node_update dr n' b in
let r = {
running_state = b';
running_task_queue = List.map task vs;
} in
(Running(r), [])
end