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/windowmanager/xr/intern/wm_xr_actionmap.c')
-rw-r--r--source/blender/windowmanager/xr/intern/wm_xr_actionmap.c35
1 files changed, 21 insertions, 14 deletions
diff --git a/source/blender/windowmanager/xr/intern/wm_xr_actionmap.c b/source/blender/windowmanager/xr/intern/wm_xr_actionmap.c
index 0c356ab2b2e..267fb0481a8 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr_actionmap.c
+++ b/source/blender/windowmanager/xr/intern/wm_xr_actionmap.c
@@ -118,11 +118,17 @@ XrActionMapBinding *WM_xr_actionmap_binding_add_copy(XrActionMapItem *ami,
return amb_dst;
}
+static void wm_xr_actionmap_binding_clear(XrActionMapBinding *amb)
+{
+ BLI_freelistN(&amb->component_paths);
+}
+
bool WM_xr_actionmap_binding_remove(XrActionMapItem *ami, XrActionMapBinding *amb)
{
int idx = BLI_findindex(&ami->bindings, amb);
if (idx != -1) {
+ wm_xr_actionmap_binding_clear(amb);
BLI_freelinkN(&ami->bindings, amb);
if (idx <= ami->selbinding) {
@@ -155,12 +161,6 @@ XrActionMapBinding *WM_xr_actionmap_binding_find(XrActionMapItem *ami, const cha
* Item in an XR action map, that maps an XR event to an operator, pose, or haptic output.
* \{ */
-static void wm_xr_actionmap_item_bindings_clear(XrActionMapItem *ami)
-{
- BLI_freelistN(&ami->bindings);
- ami->selbinding = 0;
-}
-
static void wm_xr_actionmap_item_properties_set(XrActionMapItem *ami)
{
WM_operator_properties_alloc(&(ami->op_properties_ptr), &(ami->op_properties), ami->op);
@@ -180,6 +180,19 @@ static void wm_xr_actionmap_item_properties_free(XrActionMapItem *ami)
}
}
+static void wm_xr_actionmap_item_clear(XrActionMapItem *ami)
+{
+ LISTBASE_FOREACH (XrActionMapBinding *, amb, &ami->bindings) {
+ wm_xr_actionmap_binding_clear(amb);
+ }
+ BLI_freelistN(&ami->bindings);
+ ami->selbinding = 0;
+
+ wm_xr_actionmap_item_properties_free(ami);
+
+ BLI_freelistN(&ami->user_paths);
+}
+
void WM_xr_actionmap_item_properties_update_ot(XrActionMapItem *ami)
{
switch (ami->type) {
@@ -324,8 +337,7 @@ bool WM_xr_actionmap_item_remove(XrActionMap *actionmap, XrActionMapItem *ami)
int idx = BLI_findindex(&actionmap->items, ami);
if (idx != -1) {
- wm_xr_actionmap_item_bindings_clear(ami);
- wm_xr_actionmap_item_properties_free(ami);
+ wm_xr_actionmap_item_clear(ami);
BLI_freelinkN(&actionmap->items, ami);
if (idx <= actionmap->selitem) {
@@ -480,12 +492,9 @@ XrActionMap *WM_xr_actionmap_find(wmXrRuntimeData *runtime, const char *name)
void WM_xr_actionmap_clear(XrActionMap *actionmap)
{
LISTBASE_FOREACH (XrActionMapItem *, ami, &actionmap->items) {
- wm_xr_actionmap_item_bindings_clear(ami);
- wm_xr_actionmap_item_properties_free(ami);
+ wm_xr_actionmap_item_clear(ami);
}
-
BLI_freelistN(&actionmap->items);
-
actionmap->selitem = 0;
}
@@ -494,9 +503,7 @@ void WM_xr_actionmaps_clear(wmXrRuntimeData *runtime)
LISTBASE_FOREACH (XrActionMap *, am, &runtime->actionmaps) {
WM_xr_actionmap_clear(am);
}
-
BLI_freelistN(&runtime->actionmaps);
-
runtime->actactionmap = runtime->selactionmap = 0;
}