diff options
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/context.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c index 63efbb99368..1f1a49ca030 100644 --- a/source/blender/blenkernel/intern/context.c +++ b/source/blender/blenkernel/intern/context.c @@ -190,6 +190,22 @@ void CTX_store_set(bContext *C, bContextStore *store) C->wm.store = store; } +const PointerRNA *CTX_store_ptr_lookup(const bContextStore *store, + const char *name, + const StructRNA *type) +{ + bContextStoreEntry *entry = BLI_rfindstring( + &store->entries, name, offsetof(bContextStoreEntry, name)); + if (!entry) { + return NULL; + } + + if (type && !RNA_struct_is_a(entry->ptr.type, type)) { + return NULL; + } + return &entry->ptr; +} + bContextStore *CTX_store_copy(bContextStore *store) { bContextStore *ctx = MEM_dupallocN(store); @@ -324,11 +340,10 @@ static eContextResult ctx_data_get(bContext *C, const char *member, bContextData if (done != 1 && recursion < 1 && C->wm.store) { C->data.recursion = 1; - bContextStoreEntry *entry = BLI_rfindstring( - &C->wm.store->entries, member, offsetof(bContextStoreEntry, name)); + const PointerRNA *ptr = CTX_store_ptr_lookup(C->wm.store, member, NULL); - if (entry) { - result->ptr = entry->ptr; + if (ptr) { + result->ptr = *ptr; done = 1; } } |