merge multiterm into gfxmenu+multiterm
This commit is contained in:
commit
e20d3e608c
4 changed files with 64 additions and 82 deletions
|
@ -24,6 +24,7 @@
|
||||||
#include <grub/symbol.h>
|
#include <grub/symbol.h>
|
||||||
#include <grub/types.h>
|
#include <grub/types.h>
|
||||||
#include <grub/menu.h>
|
#include <grub/menu.h>
|
||||||
|
#include <grub/term.h>
|
||||||
|
|
||||||
struct grub_menu_viewer
|
struct grub_menu_viewer
|
||||||
{
|
{
|
||||||
|
@ -37,8 +38,11 @@ struct grub_menu_viewer
|
||||||
|
|
||||||
void grub_menu_register_viewer (struct grub_menu_viewer *viewer);
|
void grub_menu_register_viewer (struct grub_menu_viewer *viewer);
|
||||||
|
|
||||||
grub_err_t grub_menu_register_viewer_init (void (*callback) (int entry,
|
grub_err_t
|
||||||
grub_menu_t menu,
|
grub_menu_try_text (struct grub_term_output *term,
|
||||||
int nested));
|
int entry, grub_menu_t menu, int nested);
|
||||||
|
|
||||||
|
extern grub_err_t (*grub_gfxmenu_try_hook) (int entry, grub_menu_t menu,
|
||||||
|
int nested);
|
||||||
|
|
||||||
#endif /* GRUB_MENU_VIEWER_HEADER */
|
#endif /* GRUB_MENU_VIEWER_HEADER */
|
||||||
|
|
|
@ -636,13 +636,6 @@ GRUB_MOD_INIT(normal)
|
||||||
|
|
||||||
grub_set_history (GRUB_DEFAULT_HISTORY_SIZE);
|
grub_set_history (GRUB_DEFAULT_HISTORY_SIZE);
|
||||||
|
|
||||||
grub_menu_register_viewer_init (grub_menu_text_register_instances);
|
|
||||||
if (grub_errno)
|
|
||||||
{
|
|
||||||
grub_print_error ();
|
|
||||||
grub_errno = GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_register_variable_hook ("pager", 0, grub_env_write_pager);
|
grub_register_variable_hook ("pager", 0, grub_env_write_pager);
|
||||||
|
|
||||||
/* Register a command "normal" for the rescue mode. */
|
/* Register a command "normal" for the rescue mode. */
|
||||||
|
|
|
@ -28,18 +28,14 @@
|
||||||
#include <grub/parser.h>
|
#include <grub/parser.h>
|
||||||
#include <grub/auth.h>
|
#include <grub/auth.h>
|
||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
|
#include <grub/term.h>
|
||||||
|
|
||||||
/* Time to delay after displaying an error message about a default/fallback
|
/* Time to delay after displaying an error message about a default/fallback
|
||||||
entry failing to boot. */
|
entry failing to boot. */
|
||||||
#define DEFAULT_ENTRY_ERROR_DELAY_MS 2500
|
#define DEFAULT_ENTRY_ERROR_DELAY_MS 2500
|
||||||
|
|
||||||
struct menu_run_callback
|
grub_err_t (*grub_gfxmenu_try_hook) (int entry, grub_menu_t menu,
|
||||||
{
|
int nested) = NULL;
|
||||||
struct menu_run_callback *next;
|
|
||||||
void (*hook) (int entry, grub_menu_t menu, int nested);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct menu_run_callback *callbacks = NULL;
|
|
||||||
|
|
||||||
/* Wait until the user pushes any key so that the user
|
/* Wait until the user pushes any key so that the user
|
||||||
can see what happened. */
|
can see what happened. */
|
||||||
|
@ -242,18 +238,27 @@ grub_err_t (*grub_gfxmenu_try_hook) (int entry, grub_menu_t menu,
|
||||||
static void
|
static void
|
||||||
menu_init (int entry, grub_menu_t menu, int nested)
|
menu_init (int entry, grub_menu_t menu, int nested)
|
||||||
{
|
{
|
||||||
struct menu_run_callback *cb;
|
struct grub_term_output *term;
|
||||||
|
|
||||||
if (grub_gfxmenu_try_hook)
|
FOR_ACTIVE_TERM_OUTPUTS(term)
|
||||||
{
|
{
|
||||||
if(!grub_gfxmenu_try_hook (entry, menu, nested))
|
grub_err_t err;
|
||||||
return;
|
|
||||||
grub_print_error ();
|
|
||||||
grub_errno = GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (cb = callbacks; cb; cb = cb->next)
|
if (grub_gfxmenu_try_hook && grub_strcmp (term->name, "gfxterm") == 0)
|
||||||
cb->hook (entry, menu, nested);
|
{
|
||||||
|
err = grub_gfxmenu_try_hook (entry, menu, nested);
|
||||||
|
if(!err)
|
||||||
|
continue;
|
||||||
|
grub_print_error ();
|
||||||
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = grub_menu_try_text (term, entry, menu, nested);
|
||||||
|
if(!err)
|
||||||
|
continue;
|
||||||
|
grub_print_error ();
|
||||||
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -271,20 +276,6 @@ grub_menu_register_viewer (struct grub_menu_viewer *viewer)
|
||||||
viewers = viewer;
|
viewers = viewer;
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_err_t
|
|
||||||
grub_menu_register_viewer_init (void (*callback) (int entry, grub_menu_t menu,
|
|
||||||
int nested))
|
|
||||||
{
|
|
||||||
struct menu_run_callback *cb;
|
|
||||||
cb = grub_malloc (sizeof (*cb));
|
|
||||||
if (!cb)
|
|
||||||
return grub_errno;
|
|
||||||
cb->hook = callback;
|
|
||||||
cb->next = callbacks;
|
|
||||||
callbacks = cb;
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Get the entry number from the variable NAME. */
|
/* Get the entry number from the variable NAME. */
|
||||||
static int
|
static int
|
||||||
get_entry_number (grub_menu_t menu, const char *name)
|
get_entry_number (grub_menu_t menu, const char *name)
|
||||||
|
|
|
@ -442,52 +442,46 @@ menu_text_clear_timeout (void *dataptr)
|
||||||
grub_term_refresh (data->term);
|
grub_term_refresh (data->term);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
grub_err_t
|
||||||
grub_menu_text_register_instances (int entry, grub_menu_t menu, int nested)
|
grub_menu_try_text (struct grub_term_output *term,
|
||||||
|
int entry, grub_menu_t menu, int nested)
|
||||||
{
|
{
|
||||||
struct menu_viewer_data *data;
|
struct menu_viewer_data *data;
|
||||||
struct grub_menu_viewer *instance;
|
struct grub_menu_viewer *instance;
|
||||||
struct grub_term_output *term;
|
|
||||||
|
|
||||||
FOR_ACTIVE_TERM_OUTPUTS(term)
|
instance = grub_zalloc (sizeof (*instance));
|
||||||
{
|
if (!instance)
|
||||||
instance = grub_zalloc (sizeof (*instance));
|
return grub_errno;
|
||||||
if (!instance)
|
|
||||||
{
|
|
||||||
grub_print_error ();
|
|
||||||
grub_errno = GRUB_ERR_NONE;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
data = grub_zalloc (sizeof (*data));
|
|
||||||
if (!data)
|
|
||||||
{
|
|
||||||
grub_free (instance);
|
|
||||||
grub_print_error ();
|
|
||||||
grub_errno = GRUB_ERR_NONE;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
data->term = term;
|
data = grub_zalloc (sizeof (*data));
|
||||||
instance->data = data;
|
if (!data)
|
||||||
instance->set_chosen_entry = menu_text_set_chosen_entry;
|
{
|
||||||
instance->print_timeout = menu_text_print_timeout;
|
grub_free (instance);
|
||||||
instance->clear_timeout = menu_text_clear_timeout;
|
return grub_errno;
|
||||||
instance->fini = menu_text_fini;
|
}
|
||||||
|
|
||||||
data->menu = menu;
|
data->term = term;
|
||||||
|
instance->data = data;
|
||||||
data->offset = entry;
|
instance->set_chosen_entry = menu_text_set_chosen_entry;
|
||||||
data->first = 0;
|
instance->print_timeout = menu_text_print_timeout;
|
||||||
if (data->offset > grub_term_num_entries (data->term) - 1)
|
instance->clear_timeout = menu_text_clear_timeout;
|
||||||
{
|
instance->fini = menu_text_fini;
|
||||||
data->first = data->offset - (grub_term_num_entries (data->term) - 1);
|
|
||||||
data->offset = grub_term_num_entries (data->term) - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_term_setcursor (data->term, 0);
|
data->menu = menu;
|
||||||
grub_menu_init_page (nested, 0, data->term);
|
|
||||||
print_entries (menu, data->first, data->offset, data->term);
|
data->offset = entry;
|
||||||
grub_term_refresh (data->term);
|
data->first = 0;
|
||||||
grub_menu_register_viewer (instance);
|
if (data->offset > grub_term_num_entries (data->term) - 1)
|
||||||
}
|
{
|
||||||
|
data->first = data->offset - (grub_term_num_entries (data->term) - 1);
|
||||||
|
data->offset = grub_term_num_entries (data->term) - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_term_setcursor (data->term, 0);
|
||||||
|
grub_menu_init_page (nested, 0, data->term);
|
||||||
|
print_entries (menu, data->first, data->offset, data->term);
|
||||||
|
grub_term_refresh (data->term);
|
||||||
|
grub_menu_register_viewer (instance);
|
||||||
|
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue