diff options
-rw-r--r-- | source/blender/editors/interface/interface.c | 2 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_layout.c | 8 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_regions.c | 2 | ||||
-rw-r--r-- | source/blender/editors/space_text/space_text.c | 3 | ||||
-rw-r--r-- | source/blender/python/intern/bpy_operator.c | 19 | ||||
-rw-r--r-- | source/blender/windowmanager/WM_api.h | 2 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_event_system.c | 4 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_operators.c | 11 |
8 files changed, 31 insertions, 20 deletions
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index 63e16c7933a..9ded2ec9eb8 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -2273,7 +2273,7 @@ uiBut *ui_def_but_operator(uiBlock *block, int type, char *opname, int opcontext uiBut *but; wmOperatorType *ot; - ot= WM_operatortype_find(opname); + ot= WM_operatortype_find(opname, 0); if(!str) { if(ot) str= ot->name; diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index 77af58bacc1..7fa0bf6426f 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -515,7 +515,7 @@ static void ui_item_disabled(uiLayout *layout, char *name) 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 @@ void uiItemFullO(uiLayout *layout, char *name, int icon, char *idname, IDPropert 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 uiItemEnumO(uiLayout *layout, char *name, int icon, char *opname, char *pro 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 @@ static void menu_item_enum_opname_menu(bContext *C, uiLayout *layout, void *arg) 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) { diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index c574cf1072f..edde575f695 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -2812,7 +2812,7 @@ void uiPupBlockO(bContext *C, uiBlockCreateFunc func, void *arg, char *opname, i 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); diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c index 5d3da461f71..68848c39c25 100644 --- a/source/blender/editors/space_text/space_text.c +++ b/source/blender/editors/space_text/space_text.c @@ -286,7 +286,8 @@ static void text_keymap(struct wmWindowManager *wm) 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); diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c index b183120dd2d..b57ef54304b 100644 --- a/source/blender/python/intern/bpy_operator.c +++ b/source/blender/python/intern/bpy_operator.c @@ -68,7 +68,7 @@ static PyObject *pyop_base_call( PyObject * self, PyObject * args, PyObject * k 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 @@ static PyObject *pyop_base_getattro( BPy_OperatorBase * self, PyObject *pyname ) 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 @@ static PyObject *pyop_base_rna(PyObject *self, PyObject *pyname) 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; diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 7fe98488ec0..c72da8fe593 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -132,7 +132,7 @@ int WM_operator_redo_popup (struct bContext *C, struct wmOperator *op); 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*)); diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 491b70deedc..3ef6e545dda 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -393,7 +393,7 @@ static int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, P /* 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 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand 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); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 330196a7a73..d7cac82ef90 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -82,7 +82,7 @@ static ListBase global_ops= {NULL, NULL}; /* ************ 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 @@ wmOperatorType *WM_operatortype_find(const char *idname) 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 @@ void WM_operatortype_append_ptr(void (*opfunc)(wmOperatorType*, void*), void *us 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 @@ char *WM_operator_pystring(wmOperator *op) 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); |