diff --git a/src/uifc/uifc32.c b/src/uifc/uifc32.c index 258eb7a8f5316d6ca190dd8ea51ca734d8071986..e83551e827b3c608915b11ac7a2eb426de89e4e1 100644 --- a/src/uifc/uifc32.c +++ b/src/uifc/uifc32.c @@ -494,6 +494,7 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar int height,y; int i,j,opts=0,s=0; /* s=search index into options */ int is_redraw=0; + int is_lastwin=0; int s_top=SCRN_TOP; int s_left=SCRN_LEFT; int s_right=SCRN_RIGHT; @@ -610,15 +611,19 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar top=0; /* Dynamic Menus */ - if(mode&WIN_DYN + if((mode&WIN_DYN || mode&WIN_SAV) && cur != NULL && bar != NULL && last_menu_cur==cur && last_menu_bar==bar && save_menu_cur==*cur && save_menu_bar==*bar - && save_menu_opts==opts) - is_redraw=1; + && save_menu_opts==opts) { + if(mode&WIN_DYN) + is_redraw=1; + if(mode&WIN_SAV) + is_lastwin=1; + } if(mode&WIN_DYN && mode&WIN_REDRAW) is_redraw=1; if(mode&WIN_DYN && mode&WIN_NODRAW) @@ -630,6 +635,8 @@ int ulist(int mode, int left, int top, int width, int *cur, int *bar } if(mode&WIN_SAV) { + if(is_lastwin && sav[api->savnum].buf==NULL) + api->savnum--; if(sav[api->savnum].buf==NULL) { if((sav[api->savnum].buf=(char *)malloc((width+3)*(height+2)*2))==NULL) { cprintf("UIFC line %d: error allocating %u bytes."