@@ -787,7 +787,8 @@ Window_TwoArgNoReturnFunction(wresize, int, "ii;lines,columns")
787
787
788
788
static PyObject *
789
789
PyCursesWindow_New (cursesmodule_state * state ,
790
- WINDOW * win , const char * encoding )
790
+ WINDOW * win , const char * encoding ,
791
+ PyCursesWindowObject * orig )
791
792
{
792
793
if (encoding == NULL ) {
793
794
#if defined(MS_WINDOWS )
@@ -821,6 +822,8 @@ PyCursesWindow_New(cursesmodule_state *state,
821
822
PyErr_NoMemory ();
822
823
return NULL ;
823
824
}
825
+ wo -> orig = orig ;
826
+ Py_XINCREF (orig );
824
827
PyObject_GC_Track ((PyObject * )wo );
825
828
return (PyObject * )wo ;
826
829
}
@@ -838,6 +841,7 @@ PyCursesWindow_dealloc(PyObject *self)
838
841
if (wo -> encoding != NULL ) {
839
842
PyMem_Free (wo -> encoding );
840
843
}
844
+ Py_XDECREF (wo -> orig );
841
845
window_type -> tp_free (self );
842
846
Py_DECREF (window_type );
843
847
}
@@ -846,6 +850,8 @@ static int
846
850
PyCursesWindow_traverse (PyObject * self , visitproc visit , void * arg )
847
851
{
848
852
Py_VISIT (Py_TYPE (self ));
853
+ PyCursesWindowObject * wo = (PyCursesWindowObject * )self ;
854
+ Py_VISIT (wo -> orig );
849
855
return 0 ;
850
856
}
851
857
@@ -1453,7 +1459,7 @@ _curses_window_derwin_impl(PyCursesWindowObject *self, int group_left_1,
1453
1459
}
1454
1460
1455
1461
cursesmodule_state * state = get_cursesmodule_state_by_win (self );
1456
- return PyCursesWindow_New (state , win , NULL );
1462
+ return PyCursesWindow_New (state , win , NULL , self );
1457
1463
}
1458
1464
1459
1465
/*[clinic input]
@@ -2493,7 +2499,7 @@ _curses_window_subwin_impl(PyCursesWindowObject *self, int group_left_1,
2493
2499
}
2494
2500
2495
2501
cursesmodule_state * state = get_cursesmodule_state_by_win (self );
2496
- return PyCursesWindow_New (state , win , self -> encoding );
2502
+ return PyCursesWindow_New (state , win , self -> encoding , self );
2497
2503
}
2498
2504
2499
2505
/*[clinic input]
@@ -3237,7 +3243,7 @@ _curses_getwin(PyObject *module, PyObject *file)
3237
3243
goto error ;
3238
3244
}
3239
3245
cursesmodule_state * state = get_cursesmodule_state (module );
3240
- res = PyCursesWindow_New (state , win , NULL );
3246
+ res = PyCursesWindow_New (state , win , NULL , NULL );
3241
3247
3242
3248
error :
3243
3249
fclose (fp );
@@ -3410,7 +3416,7 @@ _curses_initscr_impl(PyObject *module)
3410
3416
if (curses_initscr_called ) {
3411
3417
wrefresh (stdscr );
3412
3418
cursesmodule_state * state = get_cursesmodule_state (module );
3413
- return PyCursesWindow_New (state , stdscr , NULL );
3419
+ return PyCursesWindow_New (state , stdscr , NULL , NULL );
3414
3420
}
3415
3421
3416
3422
win = initscr ();
@@ -3514,7 +3520,7 @@ _curses_initscr_impl(PyObject *module)
3514
3520
#undef SetDictInt
3515
3521
3516
3522
cursesmodule_state * state = get_cursesmodule_state (module );
3517
- PyObject * winobj = PyCursesWindow_New (state , win , NULL );
3523
+ PyObject * winobj = PyCursesWindow_New (state , win , NULL , NULL );
3518
3524
if (winobj == NULL ) {
3519
3525
return NULL ;
3520
3526
}
@@ -3898,7 +3904,7 @@ _curses_newpad_impl(PyObject *module, int nlines, int ncols)
3898
3904
}
3899
3905
3900
3906
cursesmodule_state * state = get_cursesmodule_state (module );
3901
- return PyCursesWindow_New (state , win , NULL );
3907
+ return PyCursesWindow_New (state , win , NULL , NULL );
3902
3908
}
3903
3909
3904
3910
/*[clinic input]
@@ -3939,7 +3945,7 @@ _curses_newwin_impl(PyObject *module, int nlines, int ncols,
3939
3945
}
3940
3946
3941
3947
cursesmodule_state * state = get_cursesmodule_state (module );
3942
- return PyCursesWindow_New (state , win , NULL );
3948
+ return PyCursesWindow_New (state , win , NULL , NULL );
3943
3949
}
3944
3950
3945
3951
/*[clinic input]
0 commit comments