expo: Drop the render from expo_poll()

Within tests it is useful to be able to control rendering of the expo.
Drop the automatic call to expo_render() within expo_poll() and adjust
its callers to handle this instead.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2025-05-02 08:46:52 -06:00
parent 5bca479897
commit 8d7ae52d77
4 changed files with 13 additions and 7 deletions

View File

@@ -219,6 +219,10 @@ int cedit_run(struct expo *exp)
do {
struct expo_action act;
ret = expo_render(exp);
if (ret)
return log_msg_ret("cer", ret);
ret = expo_poll(exp, &act);
if (!ret)
cedit_do_action(exp, scn, vid_priv, &act);

View File

@@ -320,10 +320,6 @@ int expo_poll(struct expo *exp, struct expo_action *act)
{
int ichar, key, ret;
ret = expo_render(exp);
if (ret)
return log_msg_ret("ere", ret);
ichar = cli_ch_process(&exp->cch, 0);
if (!ichar) {
int i;

View File

@@ -116,6 +116,9 @@ __maybe_unused static int bootflow_handle_menu(struct bootstd_priv *std,
return log_msg_ret("bhs", ret);
do {
ret = expo_render(exp);
if (ret)
return log_msg_ret("bhr", ret);
ret = bootflow_menu_poll(exp, &bflow);
} while (ret == -EAGAIN);

View File

@@ -1006,10 +1006,13 @@ int expo_build(ofnode root, struct expo **expp);
int cb_expo_build(struct expo **expp);
/**
* expo_poll() - render an expo and see if the user takes an action
* expo_poll() - see if the user takes an action
*
* Thsi calls expo_render() and then checks for a keypress. If there is one, it
* is processed and the resulting action returned, if any
* This checks for a keypress. If there is one, it is processed and the
* resulting action returned, if any.
*
* Note that expo_render() should normally be called immediately before this
* function so that the user can see the latest state.
*
* @exp: Expo to poll
* @act: Returns action on success