diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-04-24 23:26:05 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-04-24 23:26:05 +0400 |
commit | 4bd3163ea6399311d33f1c6c280d0d23c3a4e370 (patch) | |
tree | 0b0154bceb58f96ead4b8ea95e67b7de204a1a7d /source/blender/blenkernel | |
parent | b31e9b764e397bec7f9801a57004ece5d5873679 (diff) |
py api: fix for context returning None for an empty list such as 'context.selected_objects', now returns []
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_context.h | 11 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/context.c | 15 |
2 files changed, 24 insertions, 2 deletions
diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h index 48e2dbf4fec..f6d41190c5a 100644 --- a/source/blender/blenkernel/BKE_context.h +++ b/source/blender/blenkernel/BKE_context.h @@ -170,11 +170,17 @@ void CTX_wm_menu_set(bContext *C, struct ARegion *menu); freed with BLI_freelistN! - the dir listbase consits of LinkData items */ +/* data type, needed so we can tell between a NULL pointer and an empty list */ +enum { + CTX_DATA_TYPE_POINTER = 0, + CTX_DATA_TYPE_COLLECTION +}; + PointerRNA CTX_data_pointer_get(const bContext *C, const char *member); PointerRNA CTX_data_pointer_get_type(const bContext *C, const char *member, StructRNA *type); ListBase CTX_data_collection_get(const bContext *C, const char *member); ListBase CTX_data_dir_get(const bContext *C); -int CTX_data_get(const bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb); +int CTX_data_get(const bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb, short *r_type); void CTX_data_id_pointer_set(bContextDataResult *result, struct ID *id); void CTX_data_pointer_set(bContextDataResult *result, struct ID *id, StructRNA *type, void *data); @@ -184,6 +190,9 @@ void CTX_data_list_add(bContextDataResult *result, struct ID *id, StructRNA *typ void CTX_data_dir_set(bContextDataResult *result, const char **member); +void CTX_data_type_set(struct bContextDataResult *result, short type); +short CTX_data_type_get(struct bContextDataResult *result); + int CTX_data_equals(const char *member, const char *str); int CTX_data_dir(const char *member); diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index e8f73a92ad5..9520df71b60 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -404,6 +404,7 @@ struct bContextDataResult { PointerRNA ptr; ListBase list; const char **dir; + short type; /* 0: normal, 1: seq */ }; static int ctx_data_get(bContext *C, const char *member, bContextDataResult *result) @@ -548,7 +549,7 @@ ListBase CTX_data_collection_get(const bContext *C, const char *member) } /* 1:found, -1:found but not set, 0:not found */ -int CTX_data_get(const bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb) +int CTX_data_get(const bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb, short *r_type) { bContextDataResult result; int ret= ctx_data_get((bContext*)C, member, &result); @@ -556,10 +557,12 @@ int CTX_data_get(const bContext *C, const char *member, PointerRNA *r_ptr, ListB if(ret==1) { *r_ptr= result.ptr; *r_lb= result.list; + *r_type= result.type; } else { memset(r_ptr, 0, sizeof(*r_ptr)); memset(r_lb, 0, sizeof(*r_lb)); + *r_type= 0; } return ret; @@ -682,6 +685,16 @@ void CTX_data_dir_set(bContextDataResult *result, const char **dir) result->dir= dir; } +void CTX_data_type_set(bContextDataResult *result, short type) +{ + result->type= type; +} + +short CTX_data_type_get(bContextDataResult *result) +{ + return result->type; +} + /* data context */ Main *CTX_data_main(const bContext *C) |