Fix a crash when inserting a key with tweak mode enabled, but where `AnimData::actstrip` was NULL. The root cause of this is that two pointers in the `AnimData` struct (`act_track` and `actstrip`) are expected to be set when NLA tweak mode is enabled, BUT these are not exposed to RNA and thus invisible to the library overrides system. As such, they are NULL when loading from disk, while the `ADT_NLA_EDIT_ON` flag still indicates they are to be used. Rather than adding a NULL pointer check (and having to add that in many more places), I used this two-pronged approach: - Extend the 'NLA tweakmode' override apply code, to set the `act_track` and `actstrip` pointers when they are incorrectly NULL. This is done by lookup of the track and strip by name. - Add versioning code to exit out of tweak mode whenever the `ADT_NLA_EDIT_ON` flag is set, but those two pointers are still NULL. The last step was necessary with the example file attached to the bug report, as that was saved with a buggy blender version. New saves work just fine. Pull Request: https://projects.blender.org/blender/blender/pulls/119632
71 lines
2.2 KiB
C
71 lines
2.2 KiB
C
/* SPDX-FileCopyrightText: 2023 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
#pragma once
|
|
|
|
#include "BLI_utildefines.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** \file
|
|
* \ingroup bke
|
|
*/
|
|
|
|
/**
|
|
* The lines below use regex from scripts to extract their values,
|
|
* Keep this in mind when modifying this file and keep this comment above the defines.
|
|
*
|
|
* \note Use #STRINGIFY() rather than defining with quotes.
|
|
*/
|
|
|
|
/** Blender major and minor version. */
|
|
#define BLENDER_VERSION 401
|
|
/** Blender patch version for bug-fix releases. */
|
|
#define BLENDER_VERSION_PATCH 0
|
|
/** Blender release cycle stage: alpha/beta/rc/release. */
|
|
#define BLENDER_VERSION_CYCLE rc
|
|
|
|
/* Blender file format version. */
|
|
#define BLENDER_FILE_VERSION BLENDER_VERSION
|
|
#define BLENDER_FILE_SUBVERSION 23
|
|
|
|
/* Minimum Blender version that supports reading file written with the current
|
|
* version. Older Blender versions will test this and cancel loading the file, showing a warning to
|
|
* the user.
|
|
*
|
|
* See
|
|
* https://developer.blender.org/docs/handbook/guidelines/compatibility_handling_for_blend_files/
|
|
* for details. */
|
|
#define BLENDER_FILE_MIN_VERSION 306
|
|
#define BLENDER_FILE_MIN_SUBVERSION 13
|
|
|
|
/** User readable version string. */
|
|
const char *BKE_blender_version_string(void);
|
|
|
|
/** As above but does not show patch version. */
|
|
const char *BKE_blender_version_string_compact(void);
|
|
|
|
/** Returns true when version cycle is alpha, otherwise (beta, rc) returns false. */
|
|
bool BKE_blender_version_is_alpha(void);
|
|
|
|
/**
|
|
* Fill in given string buffer with user-readable formatted file version and subversion (if
|
|
* provided).
|
|
*
|
|
* \param str_buff: a char buffer where the formatted string is written,
|
|
* minimal recommended size is 8, or 16 if subversion is provided.
|
|
*
|
|
* \param file_subversion: the file subversion, if given value < 0, it is ignored, and only the
|
|
* `file_version` is used.
|
|
*/
|
|
void BKE_blender_version_blendfile_string_from_values(char *str_buff,
|
|
const size_t str_buff_maxncpy,
|
|
const short file_version,
|
|
const short file_subversion);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|