Asset Browser: Avoid appending asset data-block when drop operator will fail
For assets, the copy callback of the drop-box would append the asset data-block. Check if the operator's poll succeeds before calling the copy callback. Otherwise the data-block is "secretly" appended, which the user doesn't expect and won't notice without checking the file data in the Outliner. For masks I had to extend the poll function, it didn't check context sufficiently.
This commit is contained in:
@@ -312,6 +312,13 @@ void NODE_OT_add_reroute(wmOperatorType *ot)
|
||||
|
||||
/* ****************** Add File Node Operator ******************* */
|
||||
|
||||
static bool node_add_file_poll(bContext *C)
|
||||
{
|
||||
const SpaceNode *snode = CTX_wm_space_node(C);
|
||||
return ED_operator_node_editable(C) &&
|
||||
ELEM(snode->nodetree->type, NTREE_SHADER, NTREE_TEXTURE, NTREE_COMPOSIT);
|
||||
}
|
||||
|
||||
static int node_add_file_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
Main *bmain = CTX_data_main(C);
|
||||
@@ -396,7 +403,7 @@ void NODE_OT_add_file(wmOperatorType *ot)
|
||||
/* callbacks */
|
||||
ot->exec = node_add_file_exec;
|
||||
ot->invoke = node_add_file_invoke;
|
||||
ot->poll = ED_operator_node_editable;
|
||||
ot->poll = node_add_file_poll;
|
||||
|
||||
/* flags */
|
||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||
|
||||
@@ -2806,8 +2806,10 @@ static int wm_handlers_do_intern(bContext *C, wmEvent *event, ListBase *handlers
|
||||
LISTBASE_FOREACH (wmDrag *, drag, lb) {
|
||||
const char *tooltip = NULL;
|
||||
if (drop->poll(C, drag, event, &tooltip)) {
|
||||
/* Optionally copy drag information to operator properties. */
|
||||
if (drop->copy) {
|
||||
/* 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)) {
|
||||
drop->copy(drag, drop);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user