X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fbase%2Flib_getch.c;h=a3812bee76e8003cdf946bcb9aa8503fc9099e38;hp=372d4ac7b2a830e7d9d1cb04d236d168ac614c72;hb=1f21085964c1dcb515970035e43b7f25ac2cfdf6;hpb=1078c0231b8a58fbd2dd56b6e0a81b19d6b07f77 diff --git a/ncurses/base/lib_getch.c b/ncurses/base/lib_getch.c index 372d4ac7..a3812bee 100644 --- a/ncurses/base/lib_getch.c +++ b/ncurses/base/lib_getch.c @@ -41,7 +41,7 @@ #include -MODULE_ID("$Id: lib_getch.c,v 1.95 2008/06/07 15:52:51 tom Exp $") +MODULE_ID("$Id: lib_getch.c,v 1.99 2008/09/20 19:46:13 tom Exp $") #include @@ -260,15 +260,15 @@ recur_wrefresh(WINDOW *win) { #ifdef USE_PTHREADS SCREEN *sp = _nc_screen_of(win); - if (sp != SP) { + if (_nc_use_pthreads && sp != SP) { SCREEN *save_SP; /* temporarily switch to the window's screen to check/refresh */ _nc_lock_global(curses); save_SP = SP; - SP = sp; + _nc_set_screen(sp); recur_wrefresh(win); - SP = save_SP; + _nc_set_screen(save_SP); _nc_unlock_global(curses); } else #endif @@ -284,23 +284,27 @@ recur_wgetnstr(WINDOW *win, char *buf) SCREEN *sp = _nc_screen_of(win); int rc; + if (sp != 0) { #ifdef USE_PTHREADS - if (sp != SP) { - SCREEN *save_SP; - - /* temporarily switch to the window's screen to get cooked input */ - _nc_lock_global(curses); - save_SP = SP; - SP = sp; - rc = recur_wgetnstr(win, buf); - SP = save_SP; - _nc_unlock_global(curses); - } else + if (_nc_use_pthreads && sp != SP) { + SCREEN *save_SP; + + /* temporarily switch to the window's screen to get cooked input */ + _nc_lock_global(curses); + save_SP = SP; + _nc_set_screen(sp); + rc = recur_wgetnstr(win, buf); + _nc_set_screen(save_SP); + _nc_unlock_global(curses); + } else #endif - { - sp->_called_wgetch = TRUE; - rc = wgetnstr(win, buf, MAXCOLUMNS); - sp->_called_wgetch = FALSE; + { + sp->_called_wgetch = TRUE; + rc = wgetnstr(win, buf, MAXCOLUMNS); + sp->_called_wgetch = FALSE; + } + } else { + rc = ERR; } return rc; } @@ -377,7 +381,7 @@ _nc_wgetch(WINDOW *win, recur_wrefresh(win); - if (!win->_notimeout && (win->_delay >= 0 || sp->_cbreak > 1)) { + if (win->_notimeout || (win->_delay >= 0) || (sp->_cbreak > 1)) { if (head == -1) { /* fifo is empty */ int delay; int rc;