diff options
author | Campbell Barton <ideasman42@gmail.com> | 2021-04-20 04:57:28 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2021-04-20 05:07:01 +0300 |
commit | ebe04bd3cafaa1f88bd51eee5b3e7bef38ae69bc (patch) | |
tree | 7af16c8b05e7732b939ed40816ce9388364576af /source/blender/python/intern/bpy_interface.c | |
parent | 985ccba77c6e907ae55ac47d8ac56d1e84b46286 (diff) |
PyAPI: support Operator.poll functions 'disabled' hint
Python scripts can now define the reason it's poll function fails using:
`Operator.poll_message_set(message, ...)`
This supports both regular text as well as delaying message creation
using a callback which should be used in situations where constructing
detailed messages is too much overhead for a poll function.
Ref D11001
Diffstat (limited to 'source/blender/python/intern/bpy_interface.c')
-rw-r--r-- | source/blender/python/intern/bpy_interface.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 5f31e0bb74d..4144063cf5c 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -167,6 +167,14 @@ void bpy_context_clear(bContext *UNUSED(C), const PyGILState_STATE *gilstate) } } +static void bpy_context_end(bContext *C) +{ + if (UNLIKELY(C == NULL)) { + return; + } + CTX_wm_operator_poll_msg_clear(C); +} + /** * Use for `CTX_*_set(..)` functions need to set values which are later read back as expected. * In this case we don't want the Python context to override the values as it causes problems @@ -524,6 +532,9 @@ void BPY_python_end(void) /* finalizing, no need to grab the state, except when we are a module */ gilstate = PyGILState_Ensure(); + /* Clear Python values in the context so freeing the context after Python exits doesn't crash. */ + bpy_context_end(BPY_context_get()); + /* Decrement user counts of all callback functions. */ BPY_rna_props_clear_all(); |