ret = system(menu->actions[item_selected].action_handler);
if (ret < 0)
return ret;
+
+ if (menu->actions[item_selected].exit_after_action)
+ exit(0);
}
return 1; /* Repaint unconditionally. Just in case. */
typedef struct {
int screen_switch_to;
const char *action_handler;
+ int exit_after_action;
} rui_menu_action;
typedef struct rui_menu_t {
ret = fscanf(fp, "%" STR(ACTION_BUFFER_SIZE) "s", buf);
fclose(fp);
+ unlink(SYSTEM_RECOVERY_ACTION_FILE);
+
if (ret != 1)
return NULL;
config_setting_lookup_string(node, "label", &menu->items[i]);
menu->actions[i].screen_switch_to = get_screen_id(node, "screen_switch_to");
+ config_setting_lookup_int(node, "exit_after_action", &menu->actions[i].exit_after_action);
rui_lookup_setting_value(node, rui_action_handlers, (&menu->actions[i]), action_handler);
}
m4_define(`confirm_action',`({
label = "Yes";
action_handler = "$1";
+ exit_after_action = $2;
},{
label = "No";
screen_switch_to = "BACK";
style = "common";
item_selected = 1;
item_default = 1;
- actions = confirm_action(`reboot');
- exit_after_action = 1;
+ actions = confirm_action(`reboot', 0);
};
safe = {
pos_x = 0; // use M4 macros
style = "common";
item_selected = 1;
item_default = 1;
- actions = confirm_action(`safeboot');
- exit_after_action = 1;
+ actions = confirm_action(`safeboot', 1);
};
factory = {
pos_x = 0; // use M4 macros
label = "Yes";
screen_switch_to = "factory-run";
action_handler = "factory-reset";
+ exit_after_action = 1;
},{
label = "No";
screen_switch_to = "BACK";
});
- exit_after_action = 1;
};
};