diff -urN cui11/cui.c cui12/cui.c --- cui11/cui.c Thu Jan 30 04:50:00 2014 +++ cui12/cui.c Thu Jan 30 05:00:00 2014 @@ -134,6 +134,17 @@ char *s; int attr; + if(evt == CUI_EVT_KEY){ + if(val == CUI_KEY_ENTER){ + cui_handler_call(obj, obj->handler_list, CUI_EVT_DRAW, CUI_DRAW_ACTIVE); + cui_handler_call(obj, obj->handler_list, CUI_EVT_BUTTON, 0); + cui_draw(obj); + return TRUE; + } + return FALSE; + } + + /* CUI_EVT_DRAW */ s = cui_button_str_get(obj); attr = (val == CUI_DRAW_FOCUS) ? CUI_ESC_ULINE : CUI_ESC_NORMAL; @@ -153,7 +164,7 @@ obj->w += 2; obj->flags |= CUI_FLG_CAN_FOCUS; cui_unbind(obj, CUI_EVT_DRAW, cui_label_hdr); - cui_bind(obj, CUI_EVT_DRAW, cui_button_hdr, NULL); + cui_bind(obj, CUI_EVT_DRAW | CUI_EVT_KEY, cui_button_hdr, NULL); } char * diff -urN cui11/cui.h cui12/cui.h --- cui11/cui.h Thu Jan 30 04:40:00 2014 +++ cui12/cui.h Thu Jan 30 05:00:00 2014 @@ -64,6 +64,7 @@ void cui_bind(cui obj, int evt, cui_handler hdr, void *prm); void cui_unbind(cui obj, int evt, cui_handler hdr); +int cui_handler_call(cui obj, cui_handler_list list, int evt, int val); int cui_gx(cui obj); int cui_gy(cui obj); diff -urN cui11/cui_test.c cui12/cui_test.c --- cui11/cui_test.c Thu Jan 30 04:00:00 2014 +++ cui12/cui_test.c Thu Jan 30 05:00:00 2014 @@ -5,15 +5,10 @@ int hdr(cui obj, int evt, int val, void *prm) { - cui_esc_loc(2, 2); - printf("hdr: %s, %02x ", cui_button_str_get(obj), val); - fflush(stdout); - - if(val == 'q'){ - cui_quit(); - return TRUE; - } - return FALSE; + char **result_ptr = (char **)prm; + *result_ptr = cui_button_str_get(obj); + cui_quit(); + return TRUE; } int @@ -22,13 +17,16 @@ cui panel = cui_panel_new(NULL, 8, 4, 23, 7); cui btn1 = cui_button_new(panel, 5, 4, "OK"); cui btn2 = cui_button_new(panel, 12, 4, "Cancel"); + char *btn_result; cui_label_new(panel, 3, 2, "Are you sure ?"); - cui_bind(btn1, CUI_EVT_KEY, hdr, NULL); - cui_bind(btn2, CUI_EVT_KEY, hdr, NULL); + cui_bind(btn1, CUI_EVT_BUTTON, hdr, &btn_result); + cui_bind(btn2, CUI_EVT_BUTTON, hdr, &btn_result); cui_main(panel); + + printf("result %s\n", btn_result); return 0; }