]> granicus.if.org Git - python/commitdiff
Backport checkin:
authorWalter Dörwald <walter@livinglogic.de>
Tue, 6 Mar 2007 20:46:26 +0000 (20:46 +0000)
committerWalter Dörwald <walter@livinglogic.de>
Tue, 6 Mar 2007 20:46:26 +0000 (20:46 +0000)
Patch for bug #1633621: if curses.resizeterm() or
curses.resize_term() is called, update _curses.LINES,
_curses.COLS, curses.LINES and curses.COLS.

Lib/test/test_curses.py
Modules/_cursesmodule.c

index 4022149310f9a3048768022c1ad196134dfbca69..ff7b39d11fd04b351301631ce1aa3299604888e5 100644 (file)
@@ -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()
 
index aeb1ef5f22e552cb03fe49a296c60d1c6fe839e0..d88368053c213c9d59376ada35695debe38af928 100644 (file)
@@ -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 */