[Python-checkins] r54181 - in python/branches/release25-maint: Lib/test/test_curses.py Modules/_cursesmodule.c
walter.doerwald
python-checkins at python.org
Tue Mar 6 21:46:32 CET 2007
Author: walter.doerwald
Date: Tue Mar 6 21:46:26 2007
New Revision: 54181
Modified:
python/branches/release25-maint/Lib/test/test_curses.py
python/branches/release25-maint/Modules/_cursesmodule.c
Log:
Backport checkin:
Patch for bug #1633621: if curses.resizeterm() or
curses.resize_term() is called, update _curses.LINES,
_curses.COLS, curses.LINES and curses.COLS.
Modified: python/branches/release25-maint/Lib/test/test_curses.py
==============================================================================
--- python/branches/release25-maint/Lib/test/test_curses.py (original)
+++ python/branches/release25-maint/Lib/test/test_curses.py Tue Mar 6 21:46:26 2007
@@ -241,12 +241,21 @@
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()
Modified: python/branches/release25-maint/Modules/_cursesmodule.c
==============================================================================
--- python/branches/release25-maint/Modules/_cursesmodule.c (original)
+++ python/branches/release25-maint/Modules/_cursesmodule.c Tue Mar 6 21:46:26 2007
@@ -2196,19 +2196,72 @@
}
}
+/* 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 @@
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 */
More information about the Python-checkins
mailing list