]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Make menu editor work
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 25 Dec 2009 03:12:29 +0000 (04:12 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 25 Dec 2009 03:12:29 +0000 (04:12 +0100)
normal/menu.c
normal/menu_entry.c

index b64213185b854e92faf9ee9a73eec9a0799375d6..8cf0e158df01a0e838724bf007f2cc1718d0fbb1 100644 (file)
@@ -435,10 +435,12 @@ run_menu (grub_menu_t menu, int nested, int *auto_boot)
              break;
 
            case 'c':
+             menu_fini ();
              grub_cmdline_run (1);
              goto refresh;
 
            case 'e':
+             menu_fini ();
                {
                  grub_menu_entry_t e = grub_menu_get_entry (menu, current_entry);
                  if (e)
index da4eff49639ab89825e47da9c3fae1f106a41bd6..8caba43368223862053b940e0f78e5050dc431c6 100644 (file)
@@ -135,8 +135,16 @@ print_line (struct line *linep, int offset, int start, int y,
   else
     {
       int i;
+      char *p, c;
+
+      p = linep->buf + linep->len;
+      c = *p;
+      *p = 0;
+      grub_puts_terminal (linep->buf + offset + start, term_screen->term);
+      *p = c;
+
       for (i = 0;
-          i <= grub_term_entry_width (term_screen->term) - linep->len + offset;
+          i < grub_term_entry_width (term_screen->term) - linep->len + offset;
           i++)
        grub_putcode (' ', term_screen->term);
     }
@@ -1208,6 +1216,7 @@ grub_menu_entry_run (grub_menu_entry_t entry)
   int prev_c;
   grub_err_t err = GRUB_ERR_NONE;
   unsigned i;
+  grub_term_output_t term;
 
   err = grub_auth_check_authentication (NULL);
 
@@ -1222,7 +1231,27 @@ grub_menu_entry_run (grub_menu_entry_t entry)
   if (! screen)
     return;
 
+  screen->terms = NULL;
+
  refresh:
+  grub_free (screen->terms);
+  screen->nterms = 0;
+  FOR_ACTIVE_TERM_OUTPUTS(term)
+    screen->nterms++;
+  screen->terms = grub_malloc (screen->nterms * sizeof (screen->terms[0]));
+  if (!screen->terms)
+    {
+      grub_print_error ();
+      grub_errno = GRUB_ERR_NONE;
+      return;
+    }
+  i = 0;
+  FOR_ACTIVE_TERM_OUTPUTS(term)
+  {
+    screen->terms[i].term = term;
+    screen->terms[i].x = 0;
+    screen->terms[i].y = 0;
+  }
   /* Draw the screen.  */
   for (i = 0; i < screen->nterms; i++)
     grub_menu_init_page (0, 1, screen->terms[i].term);