Cleanup: Remove operator context override for drop-box operators
Drop-boxes should act on the context determined through the exact cursor location. There should be no need to override that, basically by the nature of how drop-boxes work. So Campbell and I agreed on removing this. If we wanted to support it, we'd have to restore the operator context when drawing drop-boxes, see https://developer.blender.org/T92501#1247581.
This commit is contained in:
parent
db43d19c16
commit
37b862fa6c
|
@ -853,7 +853,6 @@ static void view3d_dropboxes(void)
|
|||
drop->draw = WM_drag_draw_item_name_fn;
|
||||
drop->draw_activate = view3d_ob_drop_draw_activate;
|
||||
drop->draw_deactivate = view3d_ob_drop_draw_deactivate;
|
||||
drop->opcontext = WM_OP_EXEC_DEFAULT; /* Not really needed. */
|
||||
|
||||
drop = WM_dropbox_add(lb,
|
||||
"OBJECT_OT_transform_to_mouse",
|
||||
|
@ -865,7 +864,6 @@ static void view3d_dropboxes(void)
|
|||
drop->draw = WM_drag_draw_item_name_fn;
|
||||
drop->draw_activate = view3d_ob_drop_draw_activate;
|
||||
drop->draw_deactivate = view3d_ob_drop_draw_deactivate;
|
||||
drop->opcontext = WM_OP_INVOKE_DEFAULT;
|
||||
|
||||
WM_dropbox_add(lb,
|
||||
"OBJECT_OT_drop_named_material",
|
||||
|
|
|
@ -1079,6 +1079,10 @@ typedef struct wmDrag {
|
|||
/**
|
||||
* Dropboxes are like keymaps, part of the screen/area/region definition.
|
||||
* Allocation and free is on startup and exit.
|
||||
*
|
||||
* The operator is polled and invoked with the current context (#WM_OP_INVOKE_DEFAULT), there is no
|
||||
* way to override that (by design, since dropboxes should act on the exact mouse position). So the
|
||||
* drop-boxes are supposed to check the required area and region context in their poll.
|
||||
*/
|
||||
typedef struct wmDropBox {
|
||||
struct wmDropBox *next, *prev;
|
||||
|
@ -1120,10 +1124,6 @@ typedef struct wmDropBox {
|
|||
struct IDProperty *properties;
|
||||
/** RNA pointer to access properties. */
|
||||
struct PointerRNA *ptr;
|
||||
|
||||
/** Default invoke. */
|
||||
short opcontext;
|
||||
|
||||
} wmDropBox;
|
||||
|
||||
/**
|
||||
|
|
|
@ -122,7 +122,6 @@ wmDropBox *WM_dropbox_add(ListBase *lb,
|
|||
drop->cancel = cancel;
|
||||
drop->tooltip = tooltip;
|
||||
drop->ot = WM_operatortype_find(idname, 0);
|
||||
drop->opcontext = WM_OP_INVOKE_DEFAULT;
|
||||
|
||||
if (drop->ot == NULL) {
|
||||
MEM_freeN(drop);
|
||||
|
@ -324,7 +323,8 @@ static wmDropBox *dropbox_active(bContext *C,
|
|||
continue;
|
||||
}
|
||||
|
||||
if (WM_operator_poll_context(C, drop->ot, drop->opcontext)) {
|
||||
const int opcontext = wm_drop_operator_context_get(drop);
|
||||
if (WM_operator_poll_context(C, drop->ot, opcontext)) {
|
||||
return drop;
|
||||
}
|
||||
|
||||
|
@ -392,10 +392,11 @@ static void wm_drop_update_active(bContext *C, wmDrag *drag, const wmEvent *even
|
|||
|
||||
void wm_drop_prepare(bContext *C, wmDrag *drag, wmDropBox *drop)
|
||||
{
|
||||
const int opcontext = wm_drop_operator_context_get(drop);
|
||||
/* Optionally copy drag information to operator properties. Don't call it if the
|
||||
* operator fails anyway, it might do more than just set properties (e.g.
|
||||
* typically import an asset). */
|
||||
if (drop->copy && WM_operator_poll_context(C, drop->ot, drop->opcontext)) {
|
||||
if (drop->copy && WM_operator_poll_context(C, drop->ot, opcontext)) {
|
||||
drop->copy(drag, drop);
|
||||
}
|
||||
|
||||
|
@ -423,6 +424,16 @@ void wm_drags_check_ops(bContext *C, const wmEvent *event)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The operator of a dropbox should always be executed in the context determined by the mouse
|
||||
* coordinates. The dropbox poll should check the context area and region as needed.
|
||||
* So this always returns #WM_OP_INVOKE_DEFAULT.
|
||||
*/
|
||||
int wm_drop_operator_context_get(const wmDropBox *UNUSED(drop))
|
||||
{
|
||||
return WM_OP_INVOKE_DEFAULT;
|
||||
}
|
||||
|
||||
/* ************** IDs ***************** */
|
||||
|
||||
void WM_drag_add_local_ID(wmDrag *drag, ID *id, ID *from_parent)
|
||||
|
|
|
@ -3063,8 +3063,9 @@ static int wm_handlers_do_intern(bContext *C, wmWindow *win, wmEvent *event, Lis
|
|||
BLI_addtail(&single_lb, drag);
|
||||
event->customdata = &single_lb;
|
||||
|
||||
const int opcontext = wm_drop_operator_context_get(drop);
|
||||
int op_retval = wm_operator_call_internal(
|
||||
C, drop->ot, drop->ptr, NULL, drop->opcontext, false, event);
|
||||
C, drop->ot, drop->ptr, NULL, opcontext, false, event);
|
||||
OPERATOR_RETVAL_CHECK(op_retval);
|
||||
|
||||
if ((op_retval & OPERATOR_CANCELLED) && drop->cancel) {
|
||||
|
|
|
@ -175,6 +175,7 @@ void wm_dropbox_free(void);
|
|||
void wm_drags_exit(wmWindowManager *wm, wmWindow *win);
|
||||
void wm_drop_prepare(bContext *C, wmDrag *drag, wmDropBox *drop);
|
||||
void wm_drags_check_ops(bContext *C, const wmEvent *event);
|
||||
int wm_drop_operator_context_get(const wmDropBox *drop);
|
||||
void wm_drags_draw(bContext *C, wmWindow *win);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
Loading…
Reference in New Issue