summaryrefslogtreecommitdiff
path: root/lib/libncurses/lib_refresh.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libncurses/lib_refresh.c')
-rw-r--r--lib/libncurses/lib_refresh.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/lib/libncurses/lib_refresh.c b/lib/libncurses/lib_refresh.c
index 72ab095d15b7..994802525a14 100644
--- a/lib/libncurses/lib_refresh.c
+++ b/lib/libncurses/lib_refresh.c
@@ -40,6 +40,23 @@ int m, n;
T(("wnoutrefresh(%x) called", win));
+ /*
+ * This function will break badly if we try to refresh a pad.
+ */
+ if ((win == 0)
+ || (win->_flags & _ISPAD))
+ return(ERR);
+
+ /*
+ * If 'newscr' has a different background than the window that we're
+ * trying to refresh, we'll have to copy the whole thing.
+ */
+ if (win->_bkgd != newscr->_bkgd) {
+ touchwin(win);
+ newscr->_bkgd = win->_bkgd;
+ }
+ newscr->_attrs = win->_attrs;
+
win->_flags &= ~_HASMOVED;
for (i = 0, m = begy; i <= win->_maxy; i++, m++) {
if (win->_firstchar[i] != _NOCHANGE) {