diff options
Diffstat (limited to 'lib/libcurses/lib_bkgd.c')
-rw-r--r-- | lib/libcurses/lib_bkgd.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/lib/libcurses/lib_bkgd.c b/lib/libcurses/lib_bkgd.c index aa6ff7a7ff1..3d4c0be6bd7 100644 --- a/lib/libcurses/lib_bkgd.c +++ b/lib/libcurses/lib_bkgd.c @@ -19,23 +19,34 @@ * * ***************************************************************************/ -#include "curses.priv.h" +#include <curses.priv.h> + +MODULE_ID("Id: lib_bkgd.c,v 1.7 1997/04/12 17:44:37 tom Exp $") int wbkgd(WINDOW *win, const chtype ch) { int x, y; +chtype old_bkgd = getbkgd(win); +chtype new_bkgd = ch; + + T((T_CALLED("wbkgd(%p,%s)"), win, _tracechtype(new_bkgd))); - T(("wbkgd(%p, %lx) called", win, ch)); - wbkgdset(win, ch); + if (TextOf(new_bkgd) == 0) + new_bkgd |= BLANK; + wbkgdset(win, new_bkgd); + wattrset(win, AttrOf(new_bkgd)); - for (y = 0; y <= win->_maxy; y++) - for (x = 0; x <= win->_maxx; x++) - if ((win->_line[y].text[x]&A_CHARTEXT) == ' ') - win->_line[y].text[x] |= ch; + for (y = 0; y <= win->_maxy; y++) { + for (x = 0; x <= win->_maxx; x++) { + if (win->_line[y].text[x] == old_bkgd) + win->_line[y].text[x] = new_bkgd; else - win->_line[y].text[x] |= (ch&A_ATTRIBUTES); + win->_line[y].text[x] = + TextOf(win->_line[y].text[x]) + | AttrOf(new_bkgd); + } + } touchwin(win); _nc_synchook(win); - return OK; + returnCode(OK); } - |