From acd98599ffe4197e32586d6beb807638395d3e31 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 18 Oct 2019 18:38:24 +1100 Subject: [PATCH] Fix T65397: Assigning shortcut to editor properties gives errors --- release/scripts/startup/bl_operators/wm.py | 4 - source/blender/makesrna/RNA_access.h | 3 +- source/blender/makesrna/intern/rna_action.c | 6 ++ source/blender/makesrna/intern/rna_scene.c | 6 ++ source/blender/makesrna/intern/rna_space.c | 12 +++ .../windowmanager/intern/wm_operators.c | 73 ++++++++++++------- 6 files changed, 74 insertions(+), 30 deletions(-) diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py index 0324fa9034a..726afda571d 100644 --- a/release/scripts/startup/bl_operators/wm.py +++ b/release/scripts/startup/bl_operators/wm.py @@ -80,10 +80,6 @@ rna_module_prop = StringProperty( def context_path_validate(context, data_path): - # Silently ignore invalid data paths created by T65397. - if "(null)" in data_path: - return Ellipsis - try: value = eval("context.%s" % data_path) if data_path else Ellipsis except AttributeError as ex: diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index cefc5aded7c..24e604179f2 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -266,6 +266,7 @@ extern StructRNA RNA_FreestyleLineStyle; extern StructRNA RNA_FreestyleModuleSettings; extern StructRNA RNA_FreestyleSettings; extern StructRNA RNA_Function; +extern StructRNA RNA_GPUFXSettings; extern StructRNA RNA_GPencilFrame; extern StructRNA RNA_GPencilInterpolateSettings; extern StructRNA RNA_GPencilLayer; @@ -392,7 +393,6 @@ extern StructRNA RNA_Mesh; extern StructRNA RNA_MeshCacheModifier; extern StructRNA RNA_MeshColor; extern StructRNA RNA_MeshColorLayer; -extern StructRNA RNA_MeshLoopColor; extern StructRNA RNA_MeshDeformModifier; extern StructRNA RNA_MeshEdge; extern StructRNA RNA_MeshFloatProperty; @@ -400,6 +400,7 @@ extern StructRNA RNA_MeshFloatPropertyLayer; extern StructRNA RNA_MeshIntProperty; extern StructRNA RNA_MeshIntPropertyLayer; extern StructRNA RNA_MeshLoop; +extern StructRNA RNA_MeshLoopColor; extern StructRNA RNA_MeshLoopColorLayer; extern StructRNA RNA_MeshLoopTriangle; extern StructRNA RNA_MeshPolygon; diff --git a/source/blender/makesrna/intern/rna_action.c b/source/blender/makesrna/intern/rna_action.c index 24f8d5c4e3d..6eaf303ce2d 100644 --- a/source/blender/makesrna/intern/rna_action.c +++ b/source/blender/makesrna/intern/rna_action.c @@ -306,6 +306,11 @@ bool rna_Action_actedit_assign_poll(PointerRNA *ptr, PointerRNA value) return 0; } +static char *rna_DopeSheet_path(PointerRNA *UNUSED(ptr)) +{ + return BLI_strdup("dopesheet"); +} + #else static void rna_def_dopesheet(BlenderRNA *brna) @@ -315,6 +320,7 @@ static void rna_def_dopesheet(BlenderRNA *brna) srna = RNA_def_struct(brna, "DopeSheet", NULL); RNA_def_struct_sdna(srna, "bDopeSheet"); + RNA_def_struct_path_func(srna, "rna_DopeSheet_path"); RNA_def_struct_ui_text( srna, "Dope Sheet", "Settings for filtering the channels shown in animation editors"); diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index ef97b184491..9e2d2cd9c4b 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -2492,6 +2492,11 @@ static char *rna_UnitSettings_path(PointerRNA *UNUSED(ptr)) return BLI_strdup("unit_settings"); } +static char *rna_GPUFXSettings_path(PointerRNA *UNUSED(ptr)) +{ + return BLI_strdup("fx_settings"); +} + #else /* Grease Pencil Interpolation tool settings */ @@ -4848,6 +4853,7 @@ static void rna_def_gpu_fx(BlenderRNA *brna) rna_def_gpu_ssao_fx(brna); srna = RNA_def_struct(brna, "GPUFXSettings", NULL); + RNA_def_struct_path_func(srna, "rna_GPUFXSettings_path"); RNA_def_struct_ui_text(srna, "GPU FX Settings", "Settings for GPU based compositing"); prop = RNA_def_property(srna, "ssao", PROP_POINTER, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 01532d8568b..91ef7ad6fae 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -1274,6 +1274,11 @@ static char *rna_View3DOverlay_path(PointerRNA *UNUSED(ptr)) /* Space Image Editor */ +static char *rna_SpaceUVEditor_path(PointerRNA *UNUSED(ptr)) +{ + return BLI_strdup("uv_editor"); +} + static PointerRNA rna_SpaceImageEditor_uvedit_get(PointerRNA *ptr) { return rna_pointer_inherit_refine(ptr, &RNA_SpaceUVEditor, ptr->data); @@ -2182,6 +2187,11 @@ static void rna_SpaceClipEditor_view_type_update(Main *UNUSED(bmain), /* File browser. */ +static char *rna_FileSelectParams_path(PointerRNA *UNUSED(ptr)) +{ + return BLI_strdup("params"); +} + int rna_FileSelectParams_filename_editable(struct PointerRNA *ptr, const char **r_info) { FileSelectParams *params = ptr->data; @@ -2696,6 +2706,7 @@ static void rna_def_space_image_uv(BlenderRNA *brna) srna = RNA_def_struct(brna, "SpaceUVEditor", NULL); RNA_def_struct_sdna(srna, "SpaceImage"); RNA_def_struct_nested(brna, srna, "SpaceImageEditor"); + RNA_def_struct_path_func(srna, "rna_SpaceUVEditor_path"); RNA_def_struct_ui_text(srna, "Space UV Editor", "UV editor data for the image editor space"); /* selection */ @@ -5325,6 +5336,7 @@ static void rna_def_fileselect_params(BlenderRNA *brna) }; srna = RNA_def_struct(brna, "FileSelectParams", NULL); + RNA_def_struct_path_func(srna, "rna_FileSelectParams_path"); RNA_def_struct_ui_text(srna, "File Select Parameters", "File Select Parameters"); prop = RNA_def_property(srna, "title", PROP_STRING, PROP_NONE); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 292e27c3cbf..96b7f3a7273 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -429,26 +429,16 @@ static const char *wm_context_member_from_ptr(bContext *C, const PointerRNA *ptr } \ (void)0 -# define CTX_TEST_PTR_DATA_TYPE(C, member, rna_type, rna_ptr, dataptr_cmp) \ +# define TEST_PTR_DATA_TYPE(member, rna_type, rna_ptr, dataptr_cmp) \ { \ const char *ctx_member = member; \ - if (RNA_struct_is_a((ptr)->type, &(rna_type)) && (ptr)->data == (dataptr_cmp)) { \ + if (RNA_struct_is_a((rna_ptr)->type, &(rna_type)) && (rna_ptr)->data == (dataptr_cmp)) { \ member_id = ctx_member; \ break; \ } \ } \ (void)0 -# define CTX_TEST_SPACE_TYPE(space_data_type, member_full, dataptr_cmp) \ - { \ - const char *ctx_member_full = member_full; \ - if (space_data->spacetype == space_data_type && ptr->data == dataptr_cmp) { \ - member_id = ctx_member_full; \ - break; \ - } \ - } \ - (void)0 - switch (GS(ptr->owner_id->name)) { case ID_SCE: { CTX_TEST_PTR_ID(C, "scene", ptr->owner_id); @@ -484,19 +474,52 @@ static const char *wm_context_member_from_ptr(bContext *C, const PointerRNA *ptr SpaceLink *space_data = CTX_wm_space_data(C); - CTX_TEST_PTR_DATA_TYPE(C, "space_data", RNA_Space, ptr, space_data); - CTX_TEST_PTR_DATA_TYPE(C, "space_data", RNA_View3DOverlay, ptr, space_data); - CTX_TEST_PTR_DATA_TYPE(C, "space_data", RNA_View3DShading, ptr, space_data); - CTX_TEST_PTR_DATA_TYPE(C, "area", RNA_Area, ptr, CTX_wm_area(C)); - CTX_TEST_PTR_DATA_TYPE(C, "region", RNA_Region, ptr, CTX_wm_region(C)); + TEST_PTR_DATA_TYPE("space_data", RNA_Space, ptr, space_data); + TEST_PTR_DATA_TYPE("area", RNA_Area, ptr, CTX_wm_area(C)); + TEST_PTR_DATA_TYPE("region", RNA_Region, ptr, CTX_wm_region(C)); + + switch (space_data->spacetype) { + case SPACE_VIEW3D: { + const View3D *v3d = (View3D *)space_data; + const View3DShading *shading = &v3d->shading; + const GPUFXSettings *fx_settings = &v3d->fx_settings; + + TEST_PTR_DATA_TYPE("space_data", RNA_View3DOverlay, ptr, v3d); + TEST_PTR_DATA_TYPE("space_data", RNA_View3DShading, ptr, shading); + TEST_PTR_DATA_TYPE("space_data", RNA_GPUFXSettings, ptr, fx_settings); + break; + } + case SPACE_GRAPH: { + const SpaceGraph *sipo = (SpaceGraph *)space_data; + const bDopeSheet *ads = sipo->ads; + TEST_PTR_DATA_TYPE("space_data", RNA_DopeSheet, ptr, ads); + break; + } + case SPACE_FILE: { + const SpaceFile *sfile = (SpaceFile *)space_data; + const FileSelectParams *params = sfile->params; + TEST_PTR_DATA_TYPE("space_data", RNA_FileSelectParams, ptr, params); + break; + } + case SPACE_IMAGE: { + const SpaceImage *sima = (SpaceImage *)space_data; + TEST_PTR_DATA_TYPE("space_data", RNA_SpaceUVEditor, ptr, sima); + break; + } + case SPACE_NLA: { + const SpaceNla *snla = (SpaceNla *)space_data; + const bDopeSheet *ads = snla->ads; + TEST_PTR_DATA_TYPE("space_data", RNA_DopeSheet, ptr, ads); + break; + } + case SPACE_ACTION: { + const SpaceAction *sact = (SpaceAction *)space_data; + const bDopeSheet *ads = &sact->ads; + TEST_PTR_DATA_TYPE("space_data", RNA_DopeSheet, ptr, ads); + break; + } + } - CTX_TEST_SPACE_TYPE(SPACE_IMAGE, "space_data.uv_editor", space_data); - CTX_TEST_SPACE_TYPE( - SPACE_VIEW3D, "space_data.fx_settings", &(CTX_wm_view3d(C)->fx_settings)); - CTX_TEST_SPACE_TYPE(SPACE_NLA, "space_data.dopesheet", CTX_wm_space_nla(C)->ads); - CTX_TEST_SPACE_TYPE(SPACE_GRAPH, "space_data.dopesheet", CTX_wm_space_graph(C)->ads); - CTX_TEST_SPACE_TYPE(SPACE_ACTION, "space_data.dopesheet", &(CTX_wm_space_action(C)->ads)); - CTX_TEST_SPACE_TYPE(SPACE_FILE, "space_data.params", CTX_wm_space_file(C)->params); break; } default: @@ -504,7 +527,7 @@ static const char *wm_context_member_from_ptr(bContext *C, const PointerRNA *ptr } # undef CTX_TEST_PTR_ID # undef CTX_TEST_PTR_ID_CAST -# undef CTX_TEST_SPACE_TYPE +# undef TEST_PTR_DATA_TYPE } return member_id;