Skip to content

Commit 07095dd

Browse files
committed
gh-155875: Return existing new_prescr screen
1 parent be346ad commit 07095dd

3 files changed

Lines changed: 15 additions & 4 deletions

File tree

Lib/test/test_curses.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3166,6 +3166,13 @@ def test_use_prescr_screen(self):
31663166
# The current screen is unchanged.
31673167
screen.stdscr.refresh()
31683168

3169+
@unittest.skipUnless(hasattr(curses, 'new_prescr'),
3170+
'requires curses.new_prescr()')
3171+
def test_new_prescr_returns_existing_screen(self):
3172+
pre1 = curses.new_prescr()
3173+
pre2 = curses.new_prescr()
3174+
self.assertIs(pre1, pre2)
3175+
31693176
@unittest.skipUnless(hasattr(curses, 'new_prescr'),
31703177
'requires curses.new_prescr()')
31713178
def test_newterm_after_new_prescr_keeps_screen_alive(self):

Misc/NEWS.d/next/Library/2026-08-16-22-00-25.gh-issue-155875.6TI-oX.rst

Lines changed: 0 additions & 2 deletions
This file was deleted.

Modules/_cursesmodule.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6909,18 +6909,24 @@ static PyObject *
69096909
_curses_new_prescr_impl(PyObject *module)
69106910
/*[clinic end generated code: output=e7de5031da7511e2 input=1a3a89d630b641c3]*/
69116911
{
6912+
cursesmodule_state *state = get_cursesmodule_state(module);
6913+
if (state->prescreen != NULL) {
6914+
return Py_NewRef(state->prescreen);
6915+
}
6916+
69126917
SCREEN *screen = new_prescr();
69136918
if (screen == NULL) {
69146919
curses_set_null_error(module, "new_prescr", NULL);
69156920
return NULL;
69166921
}
6917-
cursesmodule_state *state = get_cursesmodule_state(module);
6922+
69186923
PyObject *screenobj = PyCursesScreen_New(state, screen, NULL, NULL, NULL);
69196924
if (screenobj == NULL) {
69206925
delscreen(screen);
69216926
return NULL;
69226927
}
6923-
Py_XSETREF(state->prescreen, Py_NewRef(screenobj));
6928+
6929+
state->prescreen = Py_NewRef(screenobj);
69246930
return screenobj;
69256931
}
69266932
#endif /* HAVE_CURSES_NEW_PRESCR */

0 commit comments

Comments
 (0)