expo: Support opening a textline

This object needs special handling when it is opened, to set up the CLI
and the vidconsole context. Add special support for this.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2023-10-01 19:13:33 -06:00 committed by Tom Rini
parent 4db7519032
commit 93c901bc7d
3 changed files with 55 additions and 6 deletions

View file

@ -759,10 +759,42 @@ void scene_highlight_first(struct scene *scn)
}
}
int scene_set_open(struct scene *scn, uint id, bool open)
static int scene_obj_open(struct scene *scn, struct scene_obj *obj)
{
int ret;
switch (obj->type) {
case SCENEOBJT_NONE:
case SCENEOBJT_IMAGE:
case SCENEOBJT_MENU:
case SCENEOBJT_TEXT:
break;
case SCENEOBJT_TEXTLINE:
ret = scene_textline_open(scn,
(struct scene_obj_textline *)obj);
if (ret)
return log_msg_ret("op", ret);
break;
}
return 0;
}
int scene_set_open(struct scene *scn, uint id, bool open)
{
struct scene_obj *obj;
int ret;
obj = scene_obj_find(scn, id, SCENEOBJT_NONE);
if (!obj)
return log_msg_ret("find", -ENOENT);
if (open) {
ret = scene_obj_open(scn, obj);
if (ret)
return log_msg_ret("op", ret);
}
ret = scene_obj_flag_clrset(scn, id, SCENEOF_OPEN,
open ? SCENEOF_OPEN : 0);
if (ret)

View file

@ -278,4 +278,26 @@ void scene_menu_calc_bbox(struct scene_obj_menu *menu,
int scene_obj_calc_bbox(struct scene_obj *obj, struct vidconsole_bbox *bbox,
struct vidconsole_bbox *label_bbox);
/**
* scene_textline_open() - Open a textline object
*
* Set up the text editor ready for use
*
* @scn: Scene containing the textline
* @tline: textline object
* Return: 0 if OK, -ve on error
*/
int scene_textline_open(struct scene *scn, struct scene_obj_textline *tline);
/**
* scene_textline_close() - Close a textline object
*
* Close out the text editor after use
*
* @scn: Scene containing the textline
* @tline: textline object
* Return: 0 if OK, -ve on error
*/
int scene_textline_close(struct scene *scn, struct scene_obj_textline *tline);
#endif /* __SCENE_INTERNAL_H */

View file

@ -227,8 +227,3 @@ int scene_textline_open(struct scene *scn, struct scene_obj_textline *tline)
return 0;
}
int scene_textline_close(struct scene *scn, struct scene_obj_textline *tline)
{
return 0;
}