From f438344cf243632e497772cf1f855b9c8856fd37 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 13 Apr 2022 16:40:07 +1000 Subject: PyAPI: temporary context override support Support a way to temporarily override the context from Python. - Added method `Context.temp_override` context manager. - Special support for windowing variables "window", "area" and "region", other context members such as "active_object". - Nesting context overrides is supported. - Previous windowing members are restored when the context exists unless they have been removed. - Overriding context members by passing a dictionary into operators in `bpy.ops` has been deprecated and warns when used. This allows the window in a newly loaded file to be used, see: T92464 Reviewed by: mont29 Ref D13126 --- source/blender/python/intern/bpy_rna_types_capi.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'source/blender/python/intern/bpy_rna_types_capi.c') diff --git a/source/blender/python/intern/bpy_rna_types_capi.c b/source/blender/python/intern/bpy_rna_types_capi.c index a5299bc1616..376195ab845 100644 --- a/source/blender/python/intern/bpy_rna_types_capi.c +++ b/source/blender/python/intern/bpy_rna_types_capi.c @@ -22,6 +22,7 @@ #include "bpy_library.h" #include "bpy_rna.h" #include "bpy_rna_callback.h" +#include "bpy_rna_context.h" #include "bpy_rna_data.h" #include "bpy_rna_id_collection.h" #include "bpy_rna_text.h" @@ -158,6 +159,17 @@ static struct PyGetSetDef pyrna_windowmanager_getset[] = { /** \} */ +/* -------------------------------------------------------------------- */ +/** \name Context Type + * \{ */ + +static struct PyMethodDef pyrna_context_methods[] = { + {NULL, NULL, 0, NULL}, /* #BPY_rna_context_temp_override_method_def */ + {NULL, NULL, 0, NULL}, +}; + +/** \} */ + /* -------------------------------------------------------------------- */ /** \name Space Type * \{ */ @@ -254,6 +266,10 @@ void BPY_rna_types_extend_capi(void) /* WindowManager */ pyrna_struct_type_extend_capi( &RNA_WindowManager, pyrna_windowmanager_methods, pyrna_windowmanager_getset); + + /* Context */ + ARRAY_SET_ITEMS(pyrna_context_methods, BPY_rna_context_temp_override_method_def); + pyrna_struct_type_extend_capi(&RNA_Context, pyrna_context_methods, NULL); } /** \} */ -- cgit v1.2.3