aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--boot/bootflow_menu.c4
-rw-r--r--boot/expo.c15
-rw-r--r--boot/scene.c7
-rw-r--r--boot/scene_menu.c9
-rw-r--r--test/boot/expo.c4
5 files changed, 21 insertions, 18 deletions
diff --git a/boot/bootflow_menu.c b/boot/bootflow_menu.c
index 7f06dac0af..de0f445356 100644
--- a/boot/bootflow_menu.c
+++ b/boot/bootflow_menu.c
@@ -124,6 +124,10 @@ int bootflow_menu_new(struct expo **expp)
priv->num_bootflows++;
}
+ ret = scene_arrange(scn);
+ if (ret)
+ return log_msg_ret("arr", ret);
+
*expp = exp;
return 0;
diff --git a/boot/expo.c b/boot/expo.c
index cd1b1a3de5..bfdda9570c 100644
--- a/boot/expo.c
+++ b/boot/expo.c
@@ -116,8 +116,16 @@ struct scene *expo_lookup_scene_id(struct expo *exp, uint scene_id)
int expo_set_scene_id(struct expo *exp, uint scene_id)
{
- if (!expo_lookup_scene_id(exp, scene_id))
+ struct scene *scn;
+ int ret;
+
+ scn = expo_lookup_scene_id(exp, scene_id);
+ if (!scn)
return log_msg_ret("id", -ENOENT);
+ ret = scene_arrange(scn);
+ if (ret)
+ return log_msg_ret("arr", ret);
+
exp->scene_id = scene_id;
return 0;
@@ -165,6 +173,11 @@ int expo_send_key(struct expo *exp, int key)
ret = scene_send_key(scn, key, &exp->action);
if (ret)
return log_msg_ret("key", ret);
+
+ /* arrange it to get any changes */
+ ret = scene_arrange(scn);
+ if (ret)
+ return log_msg_ret("arr", ret);
}
return scn ? 0 : -ECHILD;
diff --git a/boot/scene.c b/boot/scene.c
index 7e9ba047f2..1383be2032 100644
--- a/boot/scene.c
+++ b/boot/scene.c
@@ -211,8 +211,6 @@ int scene_obj_set_pos(struct scene *scn, uint id, int x, int y)
return log_msg_ret("find", -ENOENT);
obj->x = x;
obj->y = y;
- if (obj->type == SCENEOBJT_MENU)
- scene_menu_arrange(scn, (struct scene_obj_menu *)obj);
return 0;
}
@@ -391,11 +389,6 @@ int scene_send_key(struct scene *scn, int key, struct expo_action *event)
ret = scene_menu_send_key(scn, menu, key, event);
if (ret)
return log_msg_ret("key", ret);
-
- /* only allow one menu */
- ret = scene_menu_arrange(scn, menu);
- if (ret)
- return log_msg_ret("arr", ret);
break;
}
}
diff --git a/boot/scene_menu.c b/boot/scene_menu.c
index 18998e862a..9ee911f2fa 100644
--- a/boot/scene_menu.c
+++ b/boot/scene_menu.c
@@ -158,10 +158,6 @@ int scene_menu(struct scene *scn, const char *name, uint id,
*menup = menu;
INIT_LIST_HEAD(&menu->item_head);
- ret = scene_menu_arrange(scn, menu);
- if (ret)
- return log_msg_ret("pos", ret);
-
return menu->obj.id;
}
@@ -258,7 +254,6 @@ int scene_menuitem(struct scene *scn, uint menu_id, const char *name, uint id,
{
struct scene_obj_menu *menu;
struct scene_menitem *item;
- int ret;
menu = scene_obj_find(scn, menu_id, SCENEOBJT_MENU);
if (!menu)
@@ -285,10 +280,6 @@ int scene_menuitem(struct scene *scn, uint menu_id, const char *name, uint id,
item->flags = flags;
list_add_tail(&item->sibling, &menu->item_head);
- ret = scene_menu_arrange(scn, menu);
- if (ret)
- return log_msg_ret("pos", ret);
-
if (itemp)
*itemp = item;
diff --git a/test/boot/expo.c b/test/boot/expo.c
index 3c0bc78bb7..56a22ba9b0 100644
--- a/test/boot/expo.c
+++ b/test/boot/expo.c
@@ -348,7 +348,9 @@ static int expo_object_menu(struct unit_test_state *uts)
ut_asserteq(desc_id, item->desc_id);
ut_asserteq(preview_id, item->preview_id);
- /* adding an item should cause the first item to become current */
+ ut_assertok(scene_arrange(scn));
+
+ /* arranging the scene should cause the first item to become current */
ut_asserteq(id, menu->cur_item_id);
/* the title should be at the top */