]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - ncurses/base/lib_set_term.c
ncurses 6.3 - patch 20221210
[ncurses.git] / ncurses / base / lib_set_term.c
index 9d61f5aea58d9605e6e4ad69bf2fa585a7ebf146..78de859208b6b1d0c8639d1efa279dbfc342b70e 100644 (file)
 **
 */
 
+#define NEW_PAIR_INTERNAL 1
+
 #include <curses.priv.h>
 #include <tic.h>
+#include <new_pair.h>
 
 #if USE_GPM_SUPPORT
 #ifdef HAVE_LIBDL
@@ -54,7 +57,7 @@
 #undef CUR
 #define CUR SP_TERMTYPE
 
-MODULE_ID("$Id: lib_set_term.c,v 1.181 2022/07/21 23:35:21 tom Exp $")
+MODULE_ID("$Id: lib_set_term.c,v 1.184 2022/12/10 21:34:12 tom Exp $")
 
 #ifdef USE_TERM_DRIVER
 #define MaxColors      InfoOf(sp).maxcolors
@@ -146,6 +149,7 @@ delscreen(SCREEN *sp)
 
     _nc_lock_global(curses);
     if (delink_screen(sp)) {
+       WINDOWLIST *wl;
        bool is_current = (sp == CURRENT_SCREEN);
 
 #ifdef USE_SP_RIPOFF
@@ -162,9 +166,13 @@ delscreen(SCREEN *sp)
        }
 #endif
 
-       (void) _nc_freewin(CurScreen(sp));
-       (void) _nc_freewin(NewScreen(sp));
-       (void) _nc_freewin(StdScreen(sp));
+       /* delete all of the windows in this screen */
+      rescan:
+       for (each_window(sp, wl)) {
+           if (_nc_freewin(&(wl->win)) == OK) {
+               goto rescan;
+           }
+       }
 
        if (sp->_slk != 0) {
 
@@ -189,6 +197,7 @@ delscreen(SCREEN *sp)
 
        FreeIfNeeded(sp->_current_attr);
 
+       _nc_free_ordered_pairs(sp);
        FreeIfNeeded(sp->_color_table);
        FreeIfNeeded(sp->_color_pairs);
 
@@ -742,6 +751,7 @@ NCURSES_SP_NAME(_nc_setupscreen) (
     }
 
     T(("creating stdscr"));
+    (void) bottom_stolen;
     assert((sp->_lines_avail + sp->_topstolen + bottom_stolen) == slines);
     if ((StdScreen(sp) = NCURSES_SP_NAME(newwin) (NCURSES_SP_ARGx
                                                  sp->_lines_avail,