added CTX_wm_operator_poll_msg_get/set so failing poll functions can set messages when poll fails, at the moment only python uses this but theres nothing python specific.
only added 1 message to a poll function, so messages still need to be set in many more places to be useful.
This commit is contained in:
parent
11ce49830a
commit
d6c8b41144
|
@ -163,6 +163,8 @@ void CTX_wm_screen_set(bContext *C, struct bScreen *screen); /* to be removed */
|
||||||
void CTX_wm_area_set(bContext *C, struct ScrArea *sa);
|
void CTX_wm_area_set(bContext *C, struct ScrArea *sa);
|
||||||
void CTX_wm_region_set(bContext *C, struct ARegion *region);
|
void CTX_wm_region_set(bContext *C, struct ARegion *region);
|
||||||
void CTX_wm_menu_set(bContext *C, struct ARegion *menu);
|
void CTX_wm_menu_set(bContext *C, struct ARegion *menu);
|
||||||
|
const char *CTX_wm_operator_poll_msg_get(struct bContext *C);
|
||||||
|
void CTX_wm_operator_poll_msg_set(struct bContext *C, const char *msg);
|
||||||
|
|
||||||
/* Data Context
|
/* Data Context
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,7 @@ struct bContext {
|
||||||
struct ARegion *region;
|
struct ARegion *region;
|
||||||
struct ARegion *menu;
|
struct ARegion *menu;
|
||||||
struct bContextStore *store;
|
struct bContextStore *store;
|
||||||
|
const char *operator_poll_msg; /* reason for poll failing */
|
||||||
} wm;
|
} wm;
|
||||||
|
|
||||||
/* data context */
|
/* data context */
|
||||||
|
@ -399,6 +400,16 @@ void CTX_wm_menu_set(bContext *C, ARegion *menu)
|
||||||
C->wm.menu= menu;
|
C->wm.menu= menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CTX_wm_operator_poll_msg_set(bContext *C, const char *msg)
|
||||||
|
{
|
||||||
|
C->wm.operator_poll_msg= msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *CTX_wm_operator_poll_msg_get(bContext *C)
|
||||||
|
{
|
||||||
|
return C->wm.operator_poll_msg;
|
||||||
|
}
|
||||||
|
|
||||||
/* data context utility functions */
|
/* data context utility functions */
|
||||||
|
|
||||||
struct bContextDataResult {
|
struct bContextDataResult {
|
||||||
|
|
|
@ -131,7 +131,11 @@ int ED_operator_view3d_active(bContext *C)
|
||||||
|
|
||||||
int ED_operator_region_view3d_active(bContext *C)
|
int ED_operator_region_view3d_active(bContext *C)
|
||||||
{
|
{
|
||||||
return CTX_wm_region_view3d(C) != NULL;
|
if(CTX_wm_region_view3d(C))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
CTX_wm_operator_poll_msg_set(C, "expected a view3d region");
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ED_operator_timeline_active(bContext *C)
|
int ED_operator_timeline_active(bContext *C)
|
||||||
|
|
|
@ -1811,7 +1811,6 @@ static int view3d_zoom_border_invoke(bContext *C, wmOperator *op, wmEvent *event
|
||||||
|
|
||||||
void VIEW3D_OT_zoom_border(wmOperatorType *ot)
|
void VIEW3D_OT_zoom_border(wmOperatorType *ot)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* identifiers */
|
/* identifiers */
|
||||||
ot->name= "Border Zoom";
|
ot->name= "Border Zoom";
|
||||||
ot->description = "Zoom in the view to the nearest object contained in the border";
|
ot->description = "Zoom in the view to the nearest object contained in the border";
|
||||||
|
|
|
@ -127,7 +127,9 @@ static PyObject *pyop_call( PyObject * self, PyObject * args)
|
||||||
Py_XINCREF(context_dict); /* so we done loose it */
|
Py_XINCREF(context_dict); /* so we done loose it */
|
||||||
|
|
||||||
if(WM_operator_poll((bContext*)C, ot) == FALSE) {
|
if(WM_operator_poll((bContext*)C, ot) == FALSE) {
|
||||||
PyErr_Format( PyExc_SystemError, "Operator bpy.ops.%.200s.poll() failed, context is incorrect", opname);
|
const char *msg= CTX_wm_operator_poll_msg_get(C);
|
||||||
|
PyErr_Format( PyExc_SystemError, "Operator bpy.ops.%.200s.poll() %s", opname, msg ? msg : "failed, context is incorrect");
|
||||||
|
CTX_wm_operator_poll_msg_set(C, NULL); /* better set to NULL else it could be used again */
|
||||||
error_val= -1;
|
error_val= -1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -466,6 +466,8 @@ static int wm_operator_exec(bContext *C, wmOperator *op, int repeat)
|
||||||
wmWindowManager *wm= CTX_wm_manager(C);
|
wmWindowManager *wm= CTX_wm_manager(C);
|
||||||
int retval= OPERATOR_CANCELLED;
|
int retval= OPERATOR_CANCELLED;
|
||||||
|
|
||||||
|
CTX_wm_operator_poll_msg_set(C, NULL);
|
||||||
|
|
||||||
if(op==NULL || op->type==NULL)
|
if(op==NULL || op->type==NULL)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
|
@ -698,6 +700,8 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex
|
||||||
|
|
||||||
int retval;
|
int retval;
|
||||||
|
|
||||||
|
CTX_wm_operator_poll_msg_set(C, NULL);
|
||||||
|
|
||||||
/* dummie test */
|
/* dummie test */
|
||||||
if(ot && C) {
|
if(ot && C) {
|
||||||
switch(context) {
|
switch(context) {
|
||||||
|
|
Loading…
Reference in New Issue