diff options
author | Walter Dörwald <walter@livinglogic.de> | 2007-03-06 20:38:57 (GMT) |
---|---|---|
committer | Walter Dörwald <walter@livinglogic.de> | 2007-03-06 20:38:57 (GMT) |
commit | d391f0855c7996ebe82a2980b068dcad1076817a (patch) | |
tree | 706df88b20b7f74938dbaf467f5aa6f26a7b7d3d | |
parent | 40c626159d8da4b241980deb1f356b62a101bd51 (diff) | |
download | cpython-d391f0855c7996ebe82a2980b068dcad1076817a.zip cpython-d391f0855c7996ebe82a2980b068dcad1076817a.tar.gz cpython-d391f0855c7996ebe82a2980b068dcad1076817a.tar.bz2 |
Patch for bug #1633621: if curses.resizeterm() or
curses.resize_term() is called, update _curses.LINES,
_curses.COLS, curses.LINES and curses.COLS.
-rw-r--r-- | Lib/test/test_curses.py | 9 | ||||
-rw-r--r-- | Modules/_cursesmodule.c | 64 |
2 files changed, 71 insertions, 2 deletions
diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py index 4022149..ff7b39d 100644 --- a/Lib/test/test_curses.py +++ b/Lib/test/test_curses.py @@ -241,12 +241,21 @@ def test_userptr_without_set(stdscr): except curses.panel.error: pass +def test_resize_term(stdscr): + if hasattr(curses, 'resizeterm'): + lines, cols = curses.LINES, curses.COLS + curses.resizeterm(lines - 1, cols + 1) + + if curses.LINES != lines - 1 or curses.COLS != cols + 1: + raise RuntimeError, "Expected resizeterm to update LINES and COLS" + def main(stdscr): curses.savetty() try: module_funcs(stdscr) window_funcs(stdscr) test_userptr_without_set(stdscr) + test_resize_term(stdscr) finally: curses.resetty() diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index aeb1ef5..d883680 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -2196,19 +2196,72 @@ PyCurses_QiFlush(PyObject *self, PyObject *args) } } +/* Internal helper used for updating curses.LINES, curses.COLS, _curses.LINES + * and _curses.COLS */ +static int +update_lines_cols(void) +{ + PyObject *o; + PyObject *m = PyImport_ImportModule("curses"); + + if (!m) + return 0; + + o = PyInt_FromLong(LINES); + if (!o) { + Py_DECREF(m); + return 0; + } + if (PyObject_SetAttrString(m, "LINES", o)) { + Py_DECREF(m); + Py_DECREF(o); + return 0; + } + if (PyDict_SetItemString(ModDict, "LINES", o)) { + Py_DECREF(m); + Py_DECREF(o); + return 0; + } + Py_DECREF(o); + o = PyInt_FromLong(COLS); + if (!o) { + Py_DECREF(m); + return 0; + } + if (PyObject_SetAttrString(m, "COLS", o)) { + Py_DECREF(m); + Py_DECREF(o); + return 0; + } + if (PyDict_SetItemString(ModDict, "COLS", o)) { + Py_DECREF(m); + Py_DECREF(o); + return 0; + } + Py_DECREF(o); + Py_DECREF(m); + return 1; +} + #ifdef HAVE_CURSES_RESIZETERM static PyObject * PyCurses_ResizeTerm(PyObject *self, PyObject *args) { int lines; int columns; + PyObject *result; PyCursesInitialised if (!PyArg_ParseTuple(args,"ii:resizeterm", &lines, &columns)) return NULL; - return PyCursesCheckERR(resizeterm(lines, columns), "resizeterm"); + result = PyCursesCheckERR(resizeterm(lines, columns), "resizeterm"); + if (!result) + return NULL; + if (!update_lines_cols()) + return NULL; + return result; } #endif @@ -2220,12 +2273,19 @@ PyCurses_Resize_Term(PyObject *self, PyObject *args) int lines; int columns; + PyObject *result; + PyCursesInitialised if (!PyArg_ParseTuple(args,"ii:resize_term", &lines, &columns)) return NULL; - return PyCursesCheckERR(resize_term(lines, columns), "resize_term"); + result = PyCursesCheckERR(resize_term(lines, columns), "resize_term"); + if (!result) + return NULL; + if (!update_lines_cols()) + return NULL; + return result; } #endif /* HAVE_CURSES_RESIZE_TERM */ |