[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21554] branches/blender2.5/blender/source /blender: calling operators from python was raising an error without returning an error value .
Campbell Barton
ideasman42 at gmail.com
Mon Jul 13 10:33:52 CEST 2009
Revision: 21554
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21554
Author: campbellbarton
Date: 2009-07-13 10:33:51 +0200 (Mon, 13 Jul 2009)
Log Message:
-----------
calling operators from python was raising an error without returning an error value.
brecht, switched the order back to fix this, added an argument for WM_operatortype_find() to fail without printing an error.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/editors/interface/interface.c
branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
branches/blender2.5/blender/source/blender/editors/space_text/space_text.c
branches/blender2.5/blender/source/blender/python/intern/bpy_operator.c
branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c
Modified: branches/blender2.5/blender/source/blender/editors/interface/interface.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface.c 2009-07-13 00:40:20 UTC (rev 21553)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface.c 2009-07-13 08:33:51 UTC (rev 21554)
@@ -2273,7 +2273,7 @@
uiBut *but;
wmOperatorType *ot;
- ot= WM_operatortype_find(opname);
+ ot= WM_operatortype_find(opname, 0);
if(!str) {
if(ot) str= ot->name;
Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c 2009-07-13 00:40:20 UTC (rev 21553)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_layout.c 2009-07-13 08:33:51 UTC (rev 21554)
@@ -515,7 +515,7 @@
void uiItemFullO(uiLayout *layout, char *name, int icon, char *idname, IDProperty *properties, int context)
{
uiBlock *block= layout->root->block;
- wmOperatorType *ot= WM_operatortype_find(idname);
+ wmOperatorType *ot= WM_operatortype_find(idname, 0);
uiBut *but;
int w;
@@ -550,7 +550,7 @@
static char *ui_menu_enumpropname(uiLayout *layout, char *opname, char *propname, int retval)
{
- wmOperatorType *ot= WM_operatortype_find(opname);
+ wmOperatorType *ot= WM_operatortype_find(opname, 0);
PointerRNA ptr;
PropertyRNA *prop;
@@ -593,7 +593,7 @@
void uiItemsEnumO(uiLayout *layout, char *opname, char *propname)
{
- wmOperatorType *ot= WM_operatortype_find(opname);
+ wmOperatorType *ot= WM_operatortype_find(opname, 0);
PointerRNA ptr;
PropertyRNA *prop;
@@ -1213,7 +1213,7 @@
void uiItemMenuEnumO(uiLayout *layout, char *name, int icon, char *opname, char *propname)
{
- wmOperatorType *ot= WM_operatortype_find(opname);
+ wmOperatorType *ot= WM_operatortype_find(opname, 0);
MenuItemLevel *lvl;
if(!ot || !ot->srna) {
Modified: branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c 2009-07-13 00:40:20 UTC (rev 21553)
+++ branches/blender2.5/blender/source/blender/editors/interface/interface_regions.c 2009-07-13 08:33:51 UTC (rev 21554)
@@ -2812,7 +2812,7 @@
handle= ui_popup_block_create(C, NULL, NULL, func, NULL, arg);
handle->popup= 1;
- handle->optype= (opname)? WM_operatortype_find(opname): NULL;
+ handle->optype= (opname)? WM_operatortype_find(opname, 0): NULL;
handle->opcontext= opcontext;
UI_add_popup_handlers(C, &window->handlers, handle);
Modified: branches/blender2.5/blender/source/blender/editors/space_text/space_text.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_text/space_text.c 2009-07-13 00:40:20 UTC (rev 21553)
+++ branches/blender2.5/blender/source/blender/editors/space_text/space_text.c 2009-07-13 08:33:51 UTC (rev 21554)
@@ -286,7 +286,8 @@
WM_keymap_add_item(keymap, "TEXT_OT_line_break", RETKEY, KM_PRESS, 0, 0);
#ifndef DISABLE_PYTHON
- WM_keymap_add_item(keymap, "TEXT_OT_line_console", RETKEY, KM_PRESS, KM_SHIFT, 0); /* python operator - space_text.py */
+ WM_keymap_add_item(keymap, "TEXT_OT_console_exec", RETKEY, KM_PRESS, KM_SHIFT, 0); /* python operator - space_text.py */
+ WM_keymap_add_item(keymap, "TEXT_OT_console_autocomplete", RETKEY, KM_PRESS, KM_ALT, 0); /* python operator - space_text.py */
#endif
WM_keymap_add_item(keymap, "TEXT_OT_line_number", KM_TEXTINPUT, KM_ANY, KM_ANY, 0);
Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_operator.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_operator.c 2009-07-13 00:40:20 UTC (rev 21553)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_operator.c 2009-07-13 08:33:51 UTC (rev 21554)
@@ -68,7 +68,7 @@
return NULL;
}
- ot= WM_operatortype_find(opname);
+ ot= WM_operatortype_find(opname, 1);
if (ot == NULL) {
PyErr_Format( PyExc_SystemError, "Operator \"%s\"could not be found", opname);
return NULL;
@@ -130,12 +130,19 @@
PyObject *ret;
wmOperatorType *ot;
- if ((ret = PyObject_GenericGetAttr((PyObject *)self, pyname))) {
- /* do nothing, this accounts for methoddef's add and remove */
- }
- else if ((ot= WM_operatortype_find(name))) {
+ /* First look for the operator, then our own methods if that fails.
+ * when methods are searched first, PyObject_GenericGetAttr will raise an error
+ * each time we want to call an operator, we could clear the error but I prefer
+ * not to since calling operators is a lot more common then adding and removing. - Campbell */
+
+ if ((ot= WM_operatortype_find(name, 1))) {
ret = PyCFunction_New( pyop_base_call_meth, pyname); /* set the name string as self, PyCFunction_New incref's self */
}
+ else if ((ret = PyObject_GenericGetAttr((PyObject *)self, pyname))) {
+ /* do nothing, this accounts for methoddef's add and remove
+ * An exception is raised when PyObject_GenericGetAttr fails
+ * but its ok because its overwritten below */
+ }
else {
PyErr_Format( PyExc_AttributeError, "Operator \"%s\" not found", name);
ret= NULL;
@@ -170,7 +177,7 @@
char *name = _PyUnicode_AsString(pyname);
wmOperatorType *ot;
- if ((ot= WM_operatortype_find(name))) {
+ if ((ot= WM_operatortype_find(name, 1))) {
BPy_StructRNA *pyrna;
PointerRNA ptr;
Modified: branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/WM_api.h 2009-07-13 00:40:20 UTC (rev 21553)
+++ branches/blender2.5/blender/source/blender/windowmanager/WM_api.h 2009-07-13 08:33:51 UTC (rev 21554)
@@ -132,7 +132,7 @@
void WM_operator_free (struct wmOperator *op);
void WM_operator_stack_clear(struct bContext *C);
-wmOperatorType *WM_operatortype_find(const char *idname);
+wmOperatorType *WM_operatortype_find(const char *idnamem, int quiet);
wmOperatorType *WM_operatortype_exists(const char *idname);
wmOperatorType *WM_operatortype_first(void);
void WM_operatortype_append (void (*opfunc)(wmOperatorType*));
Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c 2009-07-13 00:40:20 UTC (rev 21553)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c 2009-07-13 08:33:51 UTC (rev 21554)
@@ -393,7 +393,7 @@
/* invokes operator in context */
int WM_operator_name_call(bContext *C, const char *opstring, int context, PointerRNA *properties)
{
- wmOperatorType *ot= WM_operatortype_find(opstring);
+ wmOperatorType *ot= WM_operatortype_find(opstring, 0);
wmWindow *window= CTX_wm_window(C);
wmEvent *event;
@@ -723,7 +723,7 @@
printf("wm_handler_operator_call error\n");
}
else {
- wmOperatorType *ot= WM_operatortype_find(event->keymap_idname);
+ wmOperatorType *ot= WM_operatortype_find(event->keymap_idname, 0);
if(ot)
retval= wm_operator_invoke(C, ot, event, properties);
Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c 2009-07-13 00:40:20 UTC (rev 21553)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c 2009-07-13 08:33:51 UTC (rev 21554)
@@ -82,7 +82,7 @@
/* ************ operator API, exported ********** */
-wmOperatorType *WM_operatortype_find(const char *idname)
+wmOperatorType *WM_operatortype_find(const char *idname, int quiet)
{
wmOperatorType *ot;
@@ -90,7 +90,10 @@
if(strncmp(ot->idname, idname, OP_MAX_TYPENAME)==0)
return ot;
}
- printf("search for unknown operator %s\n", idname);
+
+ if(!quiet)
+ printf("search for unknown operator %s\n", idname);
+
return NULL;
}
@@ -137,7 +140,7 @@
int WM_operatortype_remove(const char *idname)
{
- wmOperatorType *ot = WM_operatortype_find(idname);
+ wmOperatorType *ot = WM_operatortype_find(idname, 0);
if (ot==NULL)
return 0;
@@ -190,7 +193,7 @@
void WM_operator_properties_create(PointerRNA *ptr, const char *opstring)
{
- wmOperatorType *ot= WM_operatortype_find(opstring);
+ wmOperatorType *ot= WM_operatortype_find(opstring, 0);
if(ot)
RNA_pointer_create(NULL, ot->srna, NULL, ptr);
More information about the Bf-blender-cvs
mailing list