X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=ui%2Fncurses%2Fnc-widgets.c;h=15cec80f3594ae3600f2cecf891db28d4532901e;hp=8f8816ecaa7c472b33fe9c52d0e0305556b6c621;hb=454f924bbcda7904c4348ef45c3d0d293768a48c;hpb=8ede209928e7bf7c06a11eee9c51a551193ba8e9 diff --git a/ui/ncurses/nc-widgets.c b/ui/ncurses/nc-widgets.c index 8f8816e..15cec80 100644 --- a/ui/ncurses/nc-widgets.c +++ b/ui/ncurses/nc-widgets.c @@ -337,6 +337,14 @@ static bool textbox_process_key( case KEY_DC: form_driver(form, REQ_DEL_CHAR); break; + case '\t': + case KEY_BTAB: + case KEY_UP: + case KEY_DOWN: + case KEY_PPAGE: + case KEY_NPAGE: + /* Don't catch navigational keys */ + return false; default: form_driver(form, key); break; @@ -1110,6 +1118,12 @@ bool widgetset_process_key(struct nc_widgetset *set, int key) field = current_field(set->form); assert(field); + widget = field_userptr(field); + + if (widget->process_key) + if (widget->process_key(widget, set->form, key)) + return true; + tab = false; /* handle field change events */ @@ -1118,14 +1132,12 @@ bool widgetset_process_key(struct nc_widgetset *set, int key) tab = true; /* fall through */ case KEY_UP: - case KEY_LEFT: req = REQ_SPREV_FIELD; break; case '\t': tab = true; /* fall through */ case KEY_DOWN: - case KEY_RIGHT: req = REQ_SNEXT_FIELD; break; case KEY_PPAGE: @@ -1134,9 +1146,14 @@ bool widgetset_process_key(struct nc_widgetset *set, int key) case KEY_NPAGE: req = REQ_SLAST_FIELD; break; + case KEY_LEFT: + req = REQ_LEFT_FIELD; + break; + case KEY_RIGHT: + req = REQ_RIGHT_FIELD; + break; } - widget = field_userptr(field); if (req) { widget_focus_change(widget, field, false); form_driver(set->form, req); @@ -1161,10 +1178,7 @@ bool widgetset_process_key(struct nc_widgetset *set, int key) return true; } - if (!widget->process_key) - return false; - - return widget->process_key(widget, set->form, key); + return false; } static int widgetset_destructor(void *ptr)