Fix T65397: Assigning shortcut to editor properties gives errors

This commit is contained in:
Campbell Barton 2019-10-18 18:38:24 +11:00
parent 382e7ce9ec
commit acd98599ff
6 changed files with 74 additions and 30 deletions

@ -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:

@ -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;

@ -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");

@ -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);

@ -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);

@ -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;