diff -urN cui19/cui.c cui20/cui.c --- cui19/cui.c Thu Jan 30 22:30:00 2014 +++ cui20/cui.c Thu Jan 30 22:40:00 2014 @@ -140,6 +140,7 @@ if(obj == cui_focus) return old; if(!(obj->flags & CUI_FLG_CAN_FOCUS)) return old; + if(!cui_is_visible(obj)) return old; switch(key){ case CUI_KEY_UP: case CUI_KEY_DOWN: @@ -151,24 +152,24 @@ } v = cui_focus_move_val(obj, key); - if(!old){ - jg = TRUE; - }else if(cui_focus){ + if(cui_focus){ switch(key){ case CUI_KEY_UP: jg = cui_gy(obj) <= cui_gy(cui_focus); break; case CUI_KEY_DOWN: - jg = cui_gy(obj) >= cui_gy(cui_focus); + jg = cui_gy(obj) + obj->h >= cui_gy(cui_focus) + cui_focus->h; break; case CUI_KEY_LEFT: jg = cui_gx(obj) <= cui_gx(cui_focus); break; case CUI_KEY_RIGHT: - jg = cui_gx(obj) >= cui_gx(cui_focus); + jg = cui_gx(obj) + obj->w >= cui_gx(cui_focus) + cui_focus->w; break; } - jg = jg && v < *val; + if(old) jg = jg && v < *val; + }else if(!old){ + jg = TRUE; }else{ switch(key){ case CUI_KEY_UP: