[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16515] trunk/blender/source/blender/ python/api2_2x: running scripts in background mode would crash in some cases.
Campbell Barton
ideasman42 at gmail.com
Sun Sep 14 07:10:45 CEST 2008
Revision: 16515
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16515
Author: campbellbarton
Date: 2008-09-14 07:10:45 +0200 (Sun, 14 Sep 2008)
Log Message:
-----------
running scripts in background mode would crash in some cases. (tested all scripts, none segfault now)
Modified Paths:
--------------
trunk/blender/source/blender/python/api2_2x/BGL.h
trunk/blender/source/blender/python/api2_2x/Draw.c
trunk/blender/source/blender/python/api2_2x/Window.c
trunk/blender/source/blender/python/api2_2x/bpy_data.c
Modified: trunk/blender/source/blender/python/api2_2x/BGL.h
===================================================================
--- trunk/blender/source/blender/python/api2_2x/BGL.h 2008-09-14 04:35:27 UTC (rev 16514)
+++ trunk/blender/source/blender/python/api2_2x/BGL.h 2008-09-14 05:10:45 UTC (rev 16515)
@@ -323,8 +323,13 @@
#define ret_def_GLstring const unsigned char *ret_str;
#define ret_set_GLstring ret_str=
-#define ret_ret_GLstring return PyString_FromString(ret_str);
+#define ret_ret_GLstring \
+ if (ret_str) {\
+ return PyString_FromString(ret_str);\
+ } else {\
+ PyErr_SetString(PyExc_AttributeError, "could not get opengl string");\
+ return NULL;\
+ }
-
#endif /* EXPP_BGL_H */
Modified: trunk/blender/source/blender/python/api2_2x/Draw.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Draw.c 2008-09-14 04:35:27 UTC (rev 16514)
+++ trunk/blender/source/blender/python/api2_2x/Draw.c 2008-09-14 05:10:45 UTC (rev 16515)
@@ -928,6 +928,11 @@
Script *script;
int startspace = 0;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Register() in background mode." );
+ }
+
if( !PyArg_ParseTuple
( args, "O|OO", &newdrawc, &neweventc, &newbuttonc ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1008,6 +1013,10 @@
{
int after = 0;
+ if (G.background) {
+ Py_RETURN_NONE;
+ }
+
if( !PyArg_ParseTuple( args, "|i", &after ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected int argument (or nothing)" );
@@ -1022,6 +1031,10 @@
static PyObject *Method_Draw( PyObject * self )
{
+ if (G.background) {
+ Py_RETURN_NONE;
+ }
+
/*@ If forced drawing is disable queue a redraw event instead */
if( EXPP_disable_force_draw ) {
scrarea_queue_winredraw( curarea );
@@ -1089,6 +1102,11 @@
PyObject *result = NULL;
ListBase listb= {NULL, NULL};
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.UIBlock() in background mode." );
+ }
+
if ( !PyArg_ParseTuple( args, "O", &val ) || !PyCallable_Check( val ) )
return EXPP_ReturnPyObjError( PyExc_AttributeError,
"expected 1 python function and 2 ints" );
@@ -1201,6 +1219,11 @@
int x, y, w, h;
PyObject *callback=NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Button() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "siiiii|sO", &name, &event,
&x, &y, &w, &h, &tip, &callback ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1225,6 +1248,11 @@
Button *but;
PyObject *callback=NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Menu() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "siiiiii|sO", &name, &event,
&x, &y, &w, &h, &def, &tip, &callback ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1255,6 +1283,11 @@
Button *but;
PyObject *callback=NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Toggle() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "siiiiii|sO", &name, &event,
&x, &y, &w, &h, &def, &tip, &callback ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1322,6 +1355,11 @@
PyObject *mino, *maxo, *inio;
PyObject *callback=NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Sider() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "siiiiiOOO|isO", &name, &event,
&x, &y, &w, &h, &inio, &mino, &maxo, &realtime,
&tip, &callback ) )
@@ -1395,6 +1433,11 @@
float ini, min, max;
uiBut *ubut;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Scrollbar() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "iiiiiOOO|isO", &event, &x, &y, &w, &h,
&inio, &mino, &maxo, &realtime, &tip ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1454,6 +1497,11 @@
short x, y, w, h;
PyObject *callback=NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.ColorPicker() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "ihhhhO!|sO", &event,
&x, &y, &w, &h, &PyTuple_Type, &inio, &tip, &callback ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1504,6 +1552,11 @@
short x, y, w, h;
PyObject *callback=NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Normal() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "ihhhhO!|sO", &event,
&x, &y, &w, &h, &PyTuple_Type, &inio, &tip, &callback ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1546,6 +1599,11 @@
PyObject *callback=NULL;
uiBut *ubut= NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Number() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "siiiiiOOO|sO", &name, &event,
&x, &y, &w, &h, &inio, &mino, &maxo, &tip, &callback ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1617,6 +1675,11 @@
Button *but;
PyObject *callback=NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.String() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "siiiiisi|sO", &info_arg, &event,
&x, &y, &w, &h, &newstr, &len, &tip, &callback ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1693,6 +1756,11 @@
char *font_str = NULL;
struct BMF_Font *font;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Text() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "s|s", &text, &font_str ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected one or two string arguments" );
@@ -1724,6 +1792,11 @@
char *text;
int x, y, w, h;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Label() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "siiii", &text, &x, &y, &w, &h ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected a string and four ints" );
@@ -1740,7 +1813,12 @@
char *text;
int maxrow = -1;
PyObject *ret;
-
+
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.PupMenu() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "s|i", &text, &maxrow ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected a string and optionally an int as arguments" );
@@ -1827,6 +1905,11 @@
ListBase storage = {NULL, NULL};
TBitem *tb;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.PupMenuTree() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "O!", &PyList_Type, ¤t_menu ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"Expected a list" );
@@ -1857,6 +1940,11 @@
short var = 0;
PyObject *ret = NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.PupIntInput() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "s|hii", &text, &var, &min, &max ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected 1 string and 3 int arguments" );
@@ -1879,6 +1967,11 @@
float min = 0, max = 1, var = 0, a1 = 10, a2 = 2;
PyObject *ret = NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.PupFloatInput() in background mode." );
+ }
+
if( !PyArg_ParseTuple
( args, "s|fffff", &text, &var, &min, &max, &a1, &a2 ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
@@ -1903,6 +1996,11 @@
char max = 20;
PyObject *ret = NULL;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.PupStrInput() in background mode." );
+ }
+
if( !PyArg_ParseTuple( args, "ss|b", &textMsg, &text, &max ) )
return EXPP_ReturnPyObjError( PyExc_TypeError,
"expected 2 strings and 1 int" );
@@ -1937,6 +2035,11 @@
int len, i;
char *title;
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.PupBlock() in background mode." );
+ }
+
if (!PyArg_ParseTuple( args, "sO", &title, &pyList ) || !PySequence_Check( pyList ))
return EXPP_ReturnPyObjError( PyExc_TypeError, "expected a string and a sequence" );
@@ -2070,6 +2173,11 @@
int clipX = 0, clipY = 0, clipW = -1, clipH = -1;
/*GLfloat scissorBox[4];*/
+ if (G.background) {
+ return EXPP_ReturnPyObjError( PyExc_RuntimeError,
+ "Can't run Draw.Image() in background mode." );
+ }
+
/* parse the arguments passed-in from Python */
if( !PyArg_ParseTuple( args, "O!ff|ffiiii", &Image_Type, &pyObjImage,
&originX, &originY, &zoomX, &zoomY,
Modified: trunk/blender/source/blender/python/api2_2x/Window.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Window.c 2008-09-14 04:35:27 UTC (rev 16514)
+++ trunk/blender/source/blender/python/api2_2x/Window.c 2008-09-14 05:10:45 UTC (rev 16515)
@@ -1249,9 +1249,10 @@
static PyObject *M_Window_GetMouseCoords( PyObject * self )
{
- short mval[2];
+ short mval[2] = {0, 0};
- getmouse( mval );
+ if (!G.background)
+ getmouse( mval );
return Py_BuildValue( "hh", mval[0], mval[1] );
}
@@ -1283,16 +1284,12 @@
static PyObject *M_Window_GetMouseButtons( PyObject * self )
{
- short mbut = get_mbut( );
-
- return Py_BuildValue( "h", mbut );
+ return PyInt_FromLong(G.background ? 0 : (int)get_mbut() );
}
static PyObject *M_Window_GetKeyQualifiers( PyObject * self )
{
- short qual = get_qual( );
-
- return Py_BuildValue( "h", qual );
+ return PyInt_FromLong( (int)get_qual() );
}
static PyObject *M_Window_SetKeyQualifiers( PyObject * self, PyObject * args )
Modified: trunk/blender/source/blender/python/api2_2x/bpy_data.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/bpy_data.c 2008-09-14 04:35:27 UTC (rev 16514)
+++ trunk/blender/source/blender/python/api2_2x/bpy_data.c 2008-09-14 05:10:45 UTC (rev 16515)
@@ -263,9 +263,12 @@
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list