expo: Support opening a textline
authorSimon Glass <sjg@chromium.org>
Mon, 2 Oct 2023 01:13:33 +0000 (19:13 -0600)
committerTom Rini <trini@konsulko.com>
Wed, 11 Oct 2023 19:43:55 +0000 (15:43 -0400)
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>
boot/scene.c
boot/scene_internal.h
boot/scene_textline.c

index 0b44a13..6c7c926 100644 (file)
@@ -759,10 +759,42 @@ void scene_highlight_first(struct scene *scn)
        }
 }
 
+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)
index 1c2bfea..7a84977 100644 (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 */
index 2caa81e..6ea072a 100644 (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;
-}