]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
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 0b44a13748ab4005816fe4211736e41fac1b2e03..6c7c926f7c933d1f036507b21c03439aafd9b60c 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 1c2bfeadcd38345ed946efc12275ba9eb314c0c7..7a84977646a00a6fc9d94ef29e7805a8f3c675fa 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 2caa81ee1582486214526c13e4183b439b3109f6..6ea072a1c2688bb62a3d4664fd11ad8b9c8df347 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;
-}