@@ -666,7 +666,8 @@ Window_TwoArgNoReturnFunction(wresize, int, "ii;lines,columns")
666666/* Allocation and deallocation of Window Objects */
667667
668668static PyObject *
669- PyCursesWindow_New (WINDOW * win , const char * encoding )
669+ PyCursesWindow_New (WINDOW * win , const char * encoding ,
670+ PyCursesWindowObject * orig )
670671{
671672 PyCursesWindowObject * wo ;
672673
@@ -697,6 +698,8 @@ PyCursesWindow_New(WINDOW *win, const char *encoding)
697698 PyErr_NoMemory ();
698699 return NULL ;
699700 }
701+ wo -> orig = orig ;
702+ Py_XINCREF (orig );
700703 return (PyObject * )wo ;
701704}
702705
@@ -706,6 +709,7 @@ PyCursesWindow_Dealloc(PyCursesWindowObject *wo)
706709 if (wo -> win != stdscr ) delwin (wo -> win );
707710 if (wo -> encoding != NULL )
708711 PyMem_Free (wo -> encoding );
712+ Py_XDECREF (wo -> orig );
709713 PyObject_Free (wo );
710714}
711715
@@ -1309,7 +1313,7 @@ _curses_window_derwin_impl(PyCursesWindowObject *self, int group_left_1,
13091313 return NULL ;
13101314 }
13111315
1312- return (PyObject * )PyCursesWindow_New (win , NULL );
1316+ return (PyObject * )PyCursesWindow_New (win , NULL , self );
13131317}
13141318
13151319/*[clinic input]
@@ -2336,7 +2340,7 @@ _curses_window_subwin_impl(PyCursesWindowObject *self, int group_left_1,
23362340 return NULL ;
23372341 }
23382342
2339- return (PyObject * )PyCursesWindow_New (win , self -> encoding );
2343+ return (PyObject * )PyCursesWindow_New (win , self -> encoding , self );
23402344}
23412345
23422346/*[clinic input]
@@ -3084,7 +3088,7 @@ _curses_getwin(PyObject *module, PyObject *file)
30843088 PyErr_SetString (PyCursesError , catchall_NULL );
30853089 goto error ;
30863090 }
3087- res = PyCursesWindow_New (win , NULL );
3091+ res = PyCursesWindow_New (win , NULL , NULL );
30883092
30893093error :
30903094 fclose (fp );
@@ -3257,7 +3261,7 @@ _curses_initscr_impl(PyObject *module)
32573261
32583262 if (initialised ) {
32593263 wrefresh (stdscr );
3260- return (PyObject * )PyCursesWindow_New (stdscr , NULL );
3264+ return (PyObject * )PyCursesWindow_New (stdscr , NULL , NULL );
32613265 }
32623266
32633267 win = initscr ();
@@ -3349,7 +3353,7 @@ _curses_initscr_impl(PyObject *module)
33493353 SetDictInt ("LINES" , LINES );
33503354 SetDictInt ("COLS" , COLS );
33513355
3352- winobj = (PyCursesWindowObject * )PyCursesWindow_New (win , NULL );
3356+ winobj = (PyCursesWindowObject * )PyCursesWindow_New (win , NULL , NULL );
33533357 screen_encoding = winobj -> encoding ;
33543358 return (PyObject * )winobj ;
33553359}
@@ -3728,7 +3732,7 @@ _curses_newpad_impl(PyObject *module, int nlines, int ncols)
37283732 return NULL ;
37293733 }
37303734
3731- return (PyObject * )PyCursesWindow_New (win , NULL );
3735+ return (PyObject * )PyCursesWindow_New (win , NULL , NULL );
37323736}
37333737
37343738/*[clinic input]
@@ -3767,7 +3771,7 @@ _curses_newwin_impl(PyObject *module, int nlines, int ncols,
37673771 return NULL ;
37683772 }
37693773
3770- return (PyObject * )PyCursesWindow_New (win , NULL );
3774+ return (PyObject * )PyCursesWindow_New (win , NULL , NULL );
37713775}
37723776
37733777/*[clinic input]
0 commit comments