[Bf-blender-cvs] [7dba8798294] master: Fix XR action map index initialization
Peter Kim
noreply at git.blender.org
Fri Aug 27 10:17:02 CEST 2021
Commit: 7dba879829469de6179302147d19cf17fb9fa94b
Author: Peter Kim
Date: Fri Aug 27 17:16:35 2021 +0900
Branches: master
https://developer.blender.org/rB7dba879829469de6179302147d19cf17fb9fa94b
Fix XR action map index initialization
This reverts 151eed752b01. Originally thought it was necessary to
initialize selected/active indices to -1 to prevent out-of-bounds
list access, but this is not needed since null checks are already
performed after obtaining list members via BLI_findlink().
In addition, leaving indices zero-initialized facilitates use of the
Python API, for example when displaying action map information in a
UI list.
===================================================================
M source/blender/windowmanager/xr/intern/wm_xr.c
M source/blender/windowmanager/xr/intern/wm_xr_actionmap.c
===================================================================
diff --git a/source/blender/windowmanager/xr/intern/wm_xr.c b/source/blender/windowmanager/xr/intern/wm_xr.c
index 4877addbb77..297205d1e79 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr.c
+++ b/source/blender/windowmanager/xr/intern/wm_xr.c
@@ -148,7 +148,6 @@ bool wm_xr_events_handle(wmWindowManager *wm)
wmXrRuntimeData *wm_xr_runtime_data_create(void)
{
wmXrRuntimeData *runtime = MEM_callocN(sizeof(*runtime), __func__);
- runtime->actactionmap = runtime->selactionmap = -1;
return runtime;
}
diff --git a/source/blender/windowmanager/xr/intern/wm_xr_actionmap.c b/source/blender/windowmanager/xr/intern/wm_xr_actionmap.c
index 673fdfcd602..8903305adb4 100644
--- a/source/blender/windowmanager/xr/intern/wm_xr_actionmap.c
+++ b/source/blender/windowmanager/xr/intern/wm_xr_actionmap.c
@@ -143,14 +143,9 @@ bool WM_xr_actionmap_binding_remove(XrActionMapItem *ami, XrActionMapBinding *am
if (idx != -1) {
BLI_freelinkN(&ami->bindings, amb);
- if (BLI_listbase_is_empty(&ami->bindings)) {
- ami->selbinding = -1;
- }
- else {
- if (idx <= ami->selbinding) {
- if (--ami->selbinding < 0) {
- ami->selbinding = 0;
- }
+ if (idx <= ami->selbinding) {
+ if (--ami->selbinding < 0) {
+ ami->selbinding = 0;
}
}
@@ -181,7 +176,7 @@ XrActionMapBinding *WM_xr_actionmap_binding_find(XrActionMapItem *ami, const cha
static void wm_xr_actionmap_item_bindings_clear(XrActionMapItem *ami)
{
BLI_freelistN(&ami->bindings);
- ami->selbinding = -1;
+ ami->selbinding = 0;
}
static void wm_xr_actionmap_item_properties_set(XrActionMapItem *ami)
@@ -262,7 +257,6 @@ XrActionMapItem *WM_xr_actionmap_item_new(XrActionMap *actionmap,
if (ami_prev) {
WM_xr_actionmap_item_ensure_unique(actionmap, ami);
}
- ami->selbinding = -1;
BLI_addtail(&actionmap->items, ami);
@@ -355,14 +349,9 @@ bool WM_xr_actionmap_item_remove(XrActionMap *actionmap, XrActionMapItem *ami)
wm_xr_actionmap_item_properties_free(ami);
BLI_freelinkN(&actionmap->items, ami);
- if (BLI_listbase_is_empty(&actionmap->items)) {
- actionmap->selitem = -1;
- }
- else {
- if (idx <= actionmap->selitem) {
- if (--actionmap->selitem < 0) {
- actionmap->selitem = 0;
- }
+ if (idx <= actionmap->selitem) {
+ if (--actionmap->selitem < 0) {
+ actionmap->selitem = 0;
}
}
@@ -403,7 +392,6 @@ XrActionMap *WM_xr_actionmap_new(wmXrRuntimeData *runtime, const char *name, boo
if (am_prev) {
WM_xr_actionmap_ensure_unique(runtime, am);
}
- am->selitem = -1;
BLI_addtail(&runtime->actionmaps, am);
@@ -487,19 +475,14 @@ bool WM_xr_actionmap_remove(wmXrRuntimeData *runtime, XrActionMap *actionmap)
WM_xr_actionmap_clear(actionmap);
BLI_freelinkN(&runtime->actionmaps, actionmap);
- if (BLI_listbase_is_empty(&runtime->actionmaps)) {
- runtime->actactionmap = runtime->selactionmap = -1;
- }
- else {
- if (idx <= runtime->actactionmap) {
- if (--runtime->actactionmap < 0) {
- runtime->actactionmap = 0;
- }
+ if (idx <= runtime->actactionmap) {
+ if (--runtime->actactionmap < 0) {
+ runtime->actactionmap = 0;
}
- if (idx <= runtime->selactionmap) {
- if (--runtime->selactionmap < 0) {
- runtime->selactionmap = 0;
- }
+ }
+ if (idx <= runtime->selactionmap) {
+ if (--runtime->selactionmap < 0) {
+ runtime->selactionmap = 0;
}
}
@@ -528,7 +511,7 @@ void WM_xr_actionmap_clear(XrActionMap *actionmap)
BLI_freelistN(&actionmap->items);
- actionmap->selitem = -1;
+ actionmap->selitem = 0;
}
void WM_xr_actionmaps_clear(wmXrRuntimeData *runtime)
@@ -539,7 +522,7 @@ void WM_xr_actionmaps_clear(wmXrRuntimeData *runtime)
BLI_freelistN(&runtime->actionmaps);
- runtime->actactionmap = runtime->selactionmap = -1;
+ runtime->actactionmap = runtime->selactionmap = 0;
}
ListBase *WM_xr_actionmaps_get(wmXrRuntimeData *runtime)
@@ -554,7 +537,6 @@ short WM_xr_actionmap_active_index_get(const wmXrRuntimeData *runtime)
void WM_xr_actionmap_active_index_set(wmXrRuntimeData *runtime, short idx)
{
- BLI_assert(idx < BLI_listbase_count(&runtime->actionmaps));
runtime->actactionmap = idx;
}
@@ -565,7 +547,6 @@ short WM_xr_actionmap_selected_index_get(const wmXrRuntimeData *runtime)
void WM_xr_actionmap_selected_index_set(wmXrRuntimeData *runtime, short idx)
{
- BLI_assert(idx < BLI_listbase_count(&runtime->actionmaps));
runtime->selactionmap = idx;
}
More information about the Bf-blender-cvs
mailing list