Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_context.h5
-rw-r--r--source/blender/blenkernel/intern/context.c23
2 files changed, 24 insertions, 4 deletions
diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h
index 584568b4a5e..f441203d9d6 100644
--- a/source/blender/blenkernel/BKE_context.h
+++ b/source/blender/blenkernel/BKE_context.h
@@ -10,6 +10,8 @@
/* XXX temporary, until AssetHandle is designed properly and queries can return a pointer to it. */
#include "DNA_asset_types.h"
+#include "BLI_utildefines.h"
+
#include "DNA_listBase.h"
#include "DNA_object_enums.h"
#include "RNA_types.h"
@@ -136,6 +138,9 @@ bContextStore *CTX_store_add(ListBase *contexts, const char *name, const Pointer
bContextStore *CTX_store_add_all(ListBase *contexts, bContextStore *context);
bContextStore *CTX_store_get(bContext *C);
void CTX_store_set(bContext *C, bContextStore *store);
+const PointerRNA *CTX_store_ptr_lookup(const bContextStore *store,
+ const char *name,
+ const StructRNA *type CPP_ARG_DEFAULT(nullptr));
bContextStore *CTX_store_copy(bContextStore *store);
void CTX_store_free(bContextStore *store);
void CTX_store_free_list(ListBase *contexts);
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;
}
}