]> git.ozlabs.org Git - petitboot/blobdiff - ui/ncurses/nc-menu.c
discover/grub2: Allow empty statements
[petitboot] / ui / ncurses / nc-menu.c
index 87b58e2d28f3ccaefa7a62755ae96991f9fb1768..e28168edd4cf6d253e10e4c2f04fa3939fd25192 100644 (file)
@@ -16,6 +16,8 @@
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+#include "config.h"
+
 #define _GNU_SOURCE
 
 #include <assert.h>
@@ -191,67 +193,58 @@ static void pmenu_move_cursor(struct pmenu *menu, int req)
  * pmenu_process_key - Process a user keystroke.
  */
 
-static void pmenu_process_key(struct nc_scr *scr)
+static void pmenu_process_key(struct nc_scr *scr, int key)
 {
        struct pmenu *menu = pmenu_from_scr(scr);
        struct pmenu_item *item = pmenu_find_selected(menu);
 
        nc_scr_status_free(&menu->scr);
 
-       while (1) {
-               int c = getch();
-
-               if (c == ERR)
-                       return;
-
-               DBGS("%d (%o)\n", c, c);
-
-               if (menu->hot_key)
-                       c = menu->hot_key(menu, item, c);
-
-               switch (c) {
-               case 27: /* ESC */
-                       if (menu->on_exit)
-                               menu->on_exit(menu);
-                       nc_flush_keys();
-                       return;
-
-               case KEY_PPAGE:
-                       pmenu_move_cursor(menu, REQ_SCR_UPAGE);
-                       break;
-               case KEY_NPAGE:
-                       pmenu_move_cursor(menu, REQ_SCR_DPAGE);
-                       break;
-               case KEY_HOME:
-                       pmenu_move_cursor(menu, REQ_FIRST_ITEM);
-                       break;
-               case KEY_END:
-                       pmenu_move_cursor(menu, REQ_LAST_ITEM);
-                       break;
-               case KEY_UP:
-                       pmenu_move_cursor(menu, REQ_UP_ITEM);
-                       break;
-               case KEY_DOWN:
-                       pmenu_move_cursor(menu, REQ_DOWN_ITEM);
-                       break;
-               case 'e':
-                       if (item->on_edit)
-                               item->on_edit(item);
-                       break;
-               case 'o':
-                       DBGS("on_open: %p\n", menu->on_open);
-                       if (menu->on_open)
-                               menu->on_open(menu);
-                       break;
-               case '\n':
-               case '\r':
-                       if (item->on_execute)
-                               item->on_execute(item);
-                       break;
-               default:
-                       menu_driver(menu->ncm, c);
-                       break;
-               }
+       if (menu->hot_key)
+               key = menu->hot_key(menu, item, key);
+
+       switch (key) {
+       case 27: /* ESC */
+               if (menu->on_exit)
+                       menu->on_exit(menu);
+               nc_flush_keys();
+               return;
+
+       case KEY_PPAGE:
+               pmenu_move_cursor(menu, REQ_SCR_UPAGE);
+               break;
+       case KEY_NPAGE:
+               pmenu_move_cursor(menu, REQ_SCR_DPAGE);
+               break;
+       case KEY_HOME:
+               pmenu_move_cursor(menu, REQ_FIRST_ITEM);
+               break;
+       case KEY_END:
+               pmenu_move_cursor(menu, REQ_LAST_ITEM);
+               break;
+       case KEY_UP:
+               pmenu_move_cursor(menu, REQ_UP_ITEM);
+               break;
+       case KEY_DOWN:
+               pmenu_move_cursor(menu, REQ_DOWN_ITEM);
+               break;
+       case 'e':
+               if (item->on_edit)
+                       item->on_edit(item);
+               break;
+       case 'o':
+               DBGS("on_open: %p\n", menu->on_open);
+               if (menu->on_open)
+                       menu->on_open(menu);
+               break;
+       case '\n':
+       case '\r':
+               if (item->on_execute)
+                       item->on_execute(item);
+               break;
+       default:
+               menu_driver(menu->ncm, key);
+               break;
        }
 }