Blender  V3.3
Macros | Variables
undo_system.c File Reference
#include <stdio.h>
#include <string.h>
#include "CLG_log.h"
#include "BLI_listbase.h"
#include "BLI_string.h"
#include "BLI_sys_types.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"
#include "DNA_listBase.h"
#include "DNA_windowmanager_types.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_lib_override.h"
#include "BKE_main.h"
#include "BKE_undo_system.h"
#include "MEM_guardedalloc.h"

Go to the source code of this file.

Macros

#define undo_stack   _wm_undo_stack_disallow /* pass in as a variable always. */
 
#define WITH_GLOBAL_UNDO_KEEP_ONE
 
#define WITH_GLOBAL_UNDO_ENSURE_UPDATED
 
#define WITH_GLOBAL_UNDO_CORRECT_ORDER
 

Functions

Internal Callback Wrappers

UndoRefID is simply a way to avoid in-lining name copy and lookups, since it's easy to forget a single case when done inline (crashing in some cases).

static void undosys_id_ref_store (void *UNUSED(user_data), UndoRefID *id_ref)
 
static void undosys_id_ref_resolve (void *user_data, UndoRefID *id_ref)
 
static bool undosys_step_encode (bContext *C, Main *bmain, UndoStack *ustack, UndoStep *us)
 
static void undosys_step_decode (bContext *C, Main *bmain, UndoStack *ustack, UndoStep *us, const eUndoStepDir dir, bool is_final)
 
static void undosys_step_free_and_unlink (UndoStack *ustack, UndoStep *us)
 
Undo Stack
static void undosys_stack_validate (UndoStack *ustack, bool expect_non_empty)
 
UndoStackBKE_undosys_stack_create (void)
 
void BKE_undosys_stack_destroy (UndoStack *ustack)
 
void BKE_undosys_stack_clear (UndoStack *ustack)
 
void BKE_undosys_stack_clear_active (UndoStack *ustack)
 
static void undosys_stack_clear_all_last (UndoStack *ustack, UndoStep *us)
 
static void undosys_stack_clear_all_first (UndoStack *ustack, UndoStep *us, UndoStep *us_exclude)
 
static bool undosys_stack_push_main (UndoStack *ustack, const char *name, struct Main *bmain)
 
void BKE_undosys_stack_init_from_main (UndoStack *ustack, struct Main *bmain)
 
void BKE_undosys_stack_init_from_context (UndoStack *ustack, bContext *C)
 
bool BKE_undosys_stack_has_undo (const UndoStack *ustack, const char *name)
 
UndoStepBKE_undosys_stack_active_with_type (UndoStack *ustack, const UndoType *ut)
 
UndoStepBKE_undosys_stack_init_or_active_with_type (UndoStack *ustack, const UndoType *ut)
 
void BKE_undosys_stack_limit_steps_and_memory (UndoStack *ustack, int steps, size_t memory_limit)
 
Undo Step
UndoStepBKE_undosys_step_push_init_with_type (UndoStack *ustack, bContext *C, const char *name, const UndoType *ut)
 
UndoStepBKE_undosys_step_push_init (UndoStack *ustack, bContext *C, const char *name)
 
eUndoPushReturn BKE_undosys_step_push_with_type (UndoStack *ustack, bContext *C, const char *name, const UndoType *ut)
 
eUndoPushReturn BKE_undosys_step_push (UndoStack *ustack, bContext *C, const char *name)
 
UndoStepBKE_undosys_step_same_type_next (UndoStep *us)
 
UndoStepBKE_undosys_step_same_type_prev (UndoStep *us)
 
UndoStepBKE_undosys_step_find_by_name_with_type (UndoStack *ustack, const char *name, const UndoType *ut)
 
UndoStepBKE_undosys_step_find_by_name (UndoStack *ustack, const char *name)
 
UndoStepBKE_undosys_step_find_by_type (UndoStack *ustack, const UndoType *ut)
 
eUndoStepDir BKE_undosys_step_calc_direction (const UndoStack *ustack, const UndoStep *us_target, const UndoStep *us_reference)
 
static UndoStepundosys_step_iter_first (UndoStep *us_reference, const eUndoStepDir undo_dir)
 
bool BKE_undosys_step_load_data_ex (UndoStack *ustack, bContext *C, UndoStep *us_target, UndoStep *us_reference, const bool use_skip)
 
bool BKE_undosys_step_load_data (UndoStack *ustack, bContext *C, UndoStep *us_target)
 
void BKE_undosys_step_load_from_index (UndoStack *ustack, bContext *C, const int index)
 
bool BKE_undosys_step_undo_with_data_ex (UndoStack *ustack, bContext *C, UndoStep *us_target, bool use_skip)
 
bool BKE_undosys_step_undo_with_data (UndoStack *ustack, bContext *C, UndoStep *us_target)
 
bool BKE_undosys_step_undo (UndoStack *ustack, bContext *C)
 
bool BKE_undosys_step_redo_with_data_ex (UndoStack *ustack, bContext *C, UndoStep *us_target, bool use_skip)
 
bool BKE_undosys_step_redo_with_data (UndoStack *ustack, bContext *C, UndoStep *us_target)
 
bool BKE_undosys_step_redo (UndoStack *ustack, bContext *C)
 
UndoTypeBKE_undosys_type_append (void(*undosys_fn)(UndoType *))
 
void BKE_undosys_type_free_all (void)
 
Undo Stack Grouping

This enables skip while group-level is set. In general it's not allowed that UndoStack.step_active have 'skip' enabled.

This rule is relaxed for grouping, however it's important each call to BKE_undosys_stack_group_begin has a matching BKE_undosys_stack_group_end.

  • Levels are used so nesting is supported, where the last call to BKE_undosys_stack_group_end will set the active undo step that should not be skipped.
  • Correct begin/end is checked by an assert since any errors here will cause undo to consider all steps part of one large group.
  • Calls to begin/end with no undo steps being pushed is supported and does nothing.
void BKE_undosys_stack_group_begin (UndoStack *ustack)
 
void BKE_undosys_stack_group_end (UndoStack *ustack)
 
ID Reference Utilities

Unfortunately we need this for a handful of places.

static void UNUSED_FUNCTION (BKE_undosys_foreach_ID_ref(UndoStack *ustack, UndoTypeForEachIDRefFn foreach_ID_ref_fn, void *user_data))
 
Debug Helpers
void BKE_undosys_print (UndoStack *ustack)
 

Variables

static CLG_LogRef LOG = {"bke.undosys"}
 

Internal Nested Undo Checks

Make sure we're not running undo operations from 'step_encode', 'step_decode' callbacks. bugs caused by this situation aren't that hard to spot but aren't always so obvious. Best we have a check which shows the problem immediately.

#define WITH_NESTED_UNDO_CHECK
 
#define UNDO_NESTED_ASSERT(state)   BLI_assert(g_undo_callback_running == state)
 
#define UNDO_NESTED_CHECK_BEGIN
 
#define UNDO_NESTED_CHECK_END
 
static bool g_undo_callback_running = false
 

Undo Types

const UndoTypeBKE_UNDOSYS_TYPE_IMAGE = NULL
 
const UndoTypeBKE_UNDOSYS_TYPE_MEMFILE = NULL
 
const UndoTypeBKE_UNDOSYS_TYPE_PAINTCURVE = NULL
 
const UndoTypeBKE_UNDOSYS_TYPE_PARTICLE = NULL
 
const UndoTypeBKE_UNDOSYS_TYPE_SCULPT = NULL
 
const UndoTypeBKE_UNDOSYS_TYPE_TEXT = NULL
 
static ListBase g_undo_types = {NULL, NULL}
 
static const UndoTypeBKE_undosys_type_from_context (bContext *C)
 

Detailed Description

Used by ED_undo.h, internal implementation.

Definition in file undo_system.c.

Macro Definition Documentation

◆ UNDO_NESTED_ASSERT

#define UNDO_NESTED_ASSERT (   state)    BLI_assert(g_undo_callback_running == state)

Definition at line 87 of file undo_system.c.

◆ UNDO_NESTED_CHECK_BEGIN

#define UNDO_NESTED_CHECK_BEGIN
Value:
{ \
UNDO_NESTED_ASSERT(false); \
g_undo_callback_running = true; \
} \
((void)0)
SyclQueue void void size_t num_bytes void

Definition at line 88 of file undo_system.c.

◆ UNDO_NESTED_CHECK_END

#define UNDO_NESTED_CHECK_END
Value:
{ \
UNDO_NESTED_ASSERT(true); \
g_undo_callback_running = false; \
} \
((void)0)

Definition at line 94 of file undo_system.c.

◆ undo_stack

#define undo_stack   _wm_undo_stack_disallow /* pass in as a variable always. */

Definition at line 32 of file undo_system.c.

◆ WITH_GLOBAL_UNDO_CORRECT_ORDER

#define WITH_GLOBAL_UNDO_CORRECT_ORDER

Make sure we don't apply edits on top of a newer memfile state, see: T56163.

Note
Keep an eye on this, could solve differently.

Definition at line 44 of file undo_system.c.

◆ WITH_GLOBAL_UNDO_ENSURE_UPDATED

#define WITH_GLOBAL_UNDO_ENSURE_UPDATED

Make sure all ID's created at the point we add an undo step that uses ID's.

Definition at line 38 of file undo_system.c.

◆ WITH_GLOBAL_UNDO_KEEP_ONE

#define WITH_GLOBAL_UNDO_KEEP_ONE

Odd requirement of Blender that we always keep a memfile undo in the stack.

Definition at line 35 of file undo_system.c.

◆ WITH_NESTED_UNDO_CHECK

#define WITH_NESTED_UNDO_CHECK

Definition at line 83 of file undo_system.c.

Function Documentation

◆ BKE_undosys_print()

void BKE_undosys_print ( UndoStack ustack)

◆ BKE_undosys_stack_active_with_type()

UndoStep* BKE_undosys_stack_active_with_type ( UndoStack ustack,
const UndoType ut 
)

◆ BKE_undosys_stack_clear()

void BKE_undosys_stack_clear ( UndoStack ustack)

◆ BKE_undosys_stack_clear_active()

void BKE_undosys_stack_clear_active ( UndoStack ustack)

◆ BKE_undosys_stack_create()

UndoStack* BKE_undosys_stack_create ( void  )

Definition at line 250 of file undo_system.c.

References MEM_callocN.

Referenced by ed_undo_push_exec(), and wm_file_read_post().

◆ BKE_undosys_stack_destroy()

void BKE_undosys_stack_destroy ( UndoStack ustack)

Definition at line 256 of file undo_system.c.

References BKE_undosys_stack_clear(), and MEM_freeN.

Referenced by ED_editors_exit(), and wm_close_and_free().

◆ BKE_undosys_stack_group_begin()

void BKE_undosys_stack_group_begin ( UndoStack ustack)

Definition at line 919 of file undo_system.c.

References BLI_assert, and UndoStack::group_level.

Referenced by ED_undo_group_begin().

◆ BKE_undosys_stack_group_end()

void BKE_undosys_stack_group_end ( UndoStack ustack)

◆ BKE_undosys_stack_has_undo()

bool BKE_undosys_stack_has_undo ( const UndoStack ustack,
const char *  name 
)

Definition at line 354 of file undo_system.c.

References BLI_listbase_is_empty(), BLI_rfindstring(), UndoStep::prev, and UndoStack::steps.

Referenced by ED_undo_is_valid().

◆ BKE_undosys_stack_init_from_context()

void BKE_undosys_stack_init_from_context ( UndoStack ustack,
bContext C 
)

◆ BKE_undosys_stack_init_from_main()

void BKE_undosys_stack_init_from_main ( UndoStack ustack,
struct Main bmain 
)

Definition at line 340 of file undo_system.c.

References IFACE_, UNDO_NESTED_ASSERT, and undosys_stack_push_main().

Referenced by wm_file_read_post().

◆ BKE_undosys_stack_init_or_active_with_type()

UndoStep* BKE_undosys_stack_init_or_active_with_type ( UndoStack ustack,
const UndoType ut 
)

◆ BKE_undosys_stack_limit_steps_and_memory()

void BKE_undosys_stack_limit_steps_and_memory ( UndoStack ustack,
int  steps,
size_t  memory_limit 
)
Parameters
stepsLimit the number of undo steps.
memory_limitLimit the amount of memory used by the undo stack.

Definition at line 383 of file undo_system.c.

References BKE_UNDOSYS_TYPE_MEMFILE, CLOG_INFO, UndoStep::data_size, ListBase::last, LOG, memory_limit, NULL, UndoStep::prev, UndoStep::skip, steps, UndoStack::steps, UndoStep::type, UNDO_NESTED_ASSERT, and undosys_stack_clear_all_first().

Referenced by ED_undo_push().

◆ BKE_undosys_step_calc_direction()

eUndoStepDir BKE_undosys_step_calc_direction ( const UndoStack ustack,
const UndoStep us_target,
const UndoStep us_reference 
)

Return direction of the undo/redo from us_reference (or ustack->step_active if NULL), and us_target.

Note
If us_reference and us_target are the same, we consider this is an undo.
Returns
-1 for undo, 1 for redo, 0 in case of error.

Definition at line 659 of file undo_system.c.

References BLI_assert, BLI_assert_msg, ELEM, UndoStep::next, NULL, UndoStep::prev, UndoStack::step_active, STEP_INVALID, STEP_REDO, and STEP_UNDO.

Referenced by BKE_undosys_step_load_data_ex(), BKE_undosys_step_redo_with_data_ex(), BKE_undosys_step_undo_with_data_ex(), and ed_undo_step_by_name().

◆ BKE_undosys_step_find_by_name()

UndoStep* BKE_undosys_step_find_by_name ( UndoStack ustack,
const char *  name 
)

Definition at line 644 of file undo_system.c.

References BLI_rfindstring(), and UndoStack::steps.

Referenced by ed_undo_step_by_name().

◆ BKE_undosys_step_find_by_name_with_type()

UndoStep* BKE_undosys_step_find_by_name_with_type ( UndoStack ustack,
const char *  name,
const UndoType ut 
)

Definition at line 630 of file undo_system.c.

References ListBase::last, NULL, UndoStack::steps, and STREQ.

◆ BKE_undosys_step_find_by_type()

UndoStep* BKE_undosys_step_find_by_type ( UndoStack ustack,
const UndoType ut 
)

Definition at line 649 of file undo_system.c.

References ListBase::last, NULL, and UndoStack::steps.

Referenced by memfile_undosys_step_encode().

◆ BKE_undosys_step_load_data()

bool BKE_undosys_step_load_data ( UndoStack ustack,
struct bContext C,
UndoStep us_target 
)

Undo/Redo until the given us_target step becomes the active (currently loaded) one.

Definition at line 806 of file undo_system.c.

References BKE_undosys_step_load_data_ex(), C, and NULL.

Referenced by BKE_undosys_step_load_from_index().

◆ BKE_undosys_step_load_data_ex()

bool BKE_undosys_step_load_data_ex ( UndoStack ustack,
struct bContext C,
UndoStep us_target,
UndoStep us_reference,
bool  use_skip 
)

Undo/Redo until the given us_target step becomes the active (currently loaded) one.

Note
Unless us_target is a 'skipped' one and use_skip is true, us_target will become the active step.
In case use_skip is true, the final target will always be beyond the given one (if the given one has to be skipped).
Parameters
us_referenceIf NULL, will be set to current active step in the undo stack. Otherwise, it is assumed to match the current state, and will be used as basis for the undo/redo process (i.e. all steps in-between us_reference and us_target will be processed).

Definition at line 718 of file undo_system.c.

References BKE_undosys_step_calc_direction(), BLI_assert, C, CLOG_ERROR, CLOG_INFO, G_MAIN, LOG, UndoStep::name, UndoType::name, UndoStep::next, NULL, UndoStep::prev, UndoStep::skip, UndoStack::step_active, STEP_INVALID, CLG_LogRef::type, UndoStep::type, UNDO_NESTED_ASSERT, undosys_stack_validate(), undosys_step_decode(), and undosys_step_iter_first().

Referenced by BKE_undosys_step_load_data(), BKE_undosys_step_redo_with_data_ex(), BKE_undosys_step_undo_with_data_ex(), and ed_undo_step_by_name().

◆ BKE_undosys_step_load_from_index()

void BKE_undosys_step_load_from_index ( UndoStack ustack,
struct bContext C,
int  index 
)

Undo/Redo until the step matching given index in the undo stack becomes the active (currently loaded) one.

Definition at line 812 of file undo_system.c.

References BKE_undosys_step_load_data(), BLI_assert, BLI_findlink(), C, UndoStep::skip, UndoStack::step_active, and UndoStack::steps.

Referenced by ed_undo_step_by_index().

◆ BKE_undosys_step_push()

eUndoPushReturn BKE_undosys_step_push ( UndoStack ustack,
bContext C,
const char *  name 
)

◆ BKE_undosys_step_push_init()

UndoStep* BKE_undosys_step_push_init ( UndoStack ustack,
bContext C,
const char *  name 
)

◆ BKE_undosys_step_push_init_with_type()

UndoStep* BKE_undosys_step_push_init_with_type ( UndoStack ustack,
struct bContext C,
const char *  name,
const UndoType ut 
)

◆ BKE_undosys_step_push_with_type()

eUndoPushReturn BKE_undosys_step_push_with_type ( UndoStack ustack,
struct bContext C,
const char *  name,
const UndoType ut 
)

◆ BKE_undosys_step_redo()

bool BKE_undosys_step_redo ( UndoStack ustack,
struct bContext C 
)

Redo one step from current active one.

Definition at line 869 of file undo_system.c.

References BKE_undosys_step_redo_with_data(), C, UndoStep::next, NULL, and UndoStack::step_active.

Referenced by ed_undo_step_direction().

◆ BKE_undosys_step_redo_with_data()

bool BKE_undosys_step_redo_with_data ( UndoStack ustack,
struct bContext C,
UndoStep us_target 
)

Redo until us_target step becomes the active (currently loaded) one.

Note
See BKE_undosys_step_redo_with_data_ex for details.

Definition at line 864 of file undo_system.c.

References BKE_undosys_step_redo_with_data_ex(), and C.

Referenced by BKE_undosys_step_redo().

◆ BKE_undosys_step_redo_with_data_ex()

bool BKE_undosys_step_redo_with_data_ex ( UndoStack ustack,
struct bContext C,
UndoStep us,
bool  use_skip 
)

Redo until us_target step becomes the active (currently loaded) one.

Warning
This function assumes that the given target step is after current active one.
Note
Unless us_target is a 'skipped' one and use_skip is true, us_target will become the active step.
In case use_skip is true, the final target will always be after the given one (if the given one has to be skipped).

Definition at line 850 of file undo_system.c.

References BKE_undosys_step_calc_direction(), BKE_undosys_step_load_data_ex(), BLI_assert, C, NULL, UndoStep::prev, and UndoStack::step_active.

Referenced by BKE_undosys_step_redo_with_data().

◆ BKE_undosys_step_same_type_next()

UndoStep* BKE_undosys_step_same_type_next ( UndoStep us)

Useful when we want to diff against previous undo data but can't be sure the types match.

Definition at line 604 of file undo_system.c.

References UndoStep::next, and UndoStep::type.

Referenced by memfile_undosys_step_free().

◆ BKE_undosys_step_same_type_prev()

UndoStep* BKE_undosys_step_same_type_prev ( UndoStep us)

Useful when we want to diff against previous undo data but can't be sure the types match.

Definition at line 617 of file undo_system.c.

References UndoStep::prev, and UndoStep::type.

◆ BKE_undosys_step_undo()

bool BKE_undosys_step_undo ( UndoStack ustack,
struct bContext C 
)

Undo one step from current active (currently loaded) one.

Definition at line 842 of file undo_system.c.

References BKE_undosys_step_undo_with_data(), C, NULL, UndoStep::prev, and UndoStack::step_active.

Referenced by ed_undo_step_direction().

◆ BKE_undosys_step_undo_with_data()

bool BKE_undosys_step_undo_with_data ( UndoStack ustack,
struct bContext C,
UndoStep us_target 
)

Undo until us_target step becomes the active (currently loaded) one.

Note
See BKE_undosys_step_undo_with_data_ex for details.

Definition at line 837 of file undo_system.c.

References BKE_undosys_step_undo_with_data_ex(), and C.

Referenced by BKE_undosys_step_undo().

◆ BKE_undosys_step_undo_with_data_ex()

bool BKE_undosys_step_undo_with_data_ex ( UndoStack ustack,
struct bContext C,
UndoStep us,
bool  use_skip 
)

Undo until us_target step becomes the active (currently loaded) one.

Warning
This function assumes that the given target step is before current active one.
Note
Unless us_target is a 'skipped' one and use_skip is true, us_target will become the active step.
In case use_skip is true, the final target will always be before the given one (if the given one has to be skipped).

Definition at line 822 of file undo_system.c.

References BKE_undosys_step_calc_direction(), BKE_undosys_step_load_data_ex(), BLI_assert, C, NULL, and UndoStack::step_active.

Referenced by BKE_undosys_step_undo_with_data().

◆ BKE_undosys_type_append()

UndoType* BKE_undosys_type_append ( void(*)(UndoType *)  undosys_fn)

Similar to WM_operatortype_append

Definition at line 877 of file undo_system.c.

References BLI_addtail(), g_undo_types, and MEM_callocN.

Referenced by ED_undosys_type_init().

◆ BKE_undosys_type_free_all()

void BKE_undosys_type_free_all ( void  )

Definition at line 890 of file undo_system.c.

References BLI_pophead(), g_undo_types, and MEM_freeN.

Referenced by ED_undosys_type_free().

◆ BKE_undosys_type_from_context()

static const UndoType* BKE_undosys_type_from_context ( bContext C)
static

◆ undosys_id_ref_resolve()

static void undosys_id_ref_resolve ( void user_data,
UndoRefID id_ref 
)
static

◆ undosys_id_ref_store()

static void undosys_id_ref_store ( void UNUSEDuser_data,
UndoRefID id_ref 
)
static

Definition at line 116 of file undo_system.c.

References BLI_assert, BLI_strncpy(), ID::name, UndoRefID::name, NULL, and UndoRefID::ptr.

Referenced by undosys_step_encode().

◆ undosys_stack_clear_all_first()

static void undosys_stack_clear_all_first ( UndoStack ustack,
UndoStep us,
UndoStep us_exclude 
)
static

◆ undosys_stack_clear_all_last()

static void undosys_stack_clear_all_last ( UndoStack ustack,
UndoStep us 
)
static

◆ undosys_stack_push_main()

static bool undosys_stack_push_main ( UndoStack ustack,
const char *  name,
struct Main bmain 
)
static

◆ undosys_stack_validate()

static void undosys_stack_validate ( UndoStack ustack,
bool  expect_non_empty 
)
static

◆ undosys_step_decode()

static void undosys_step_decode ( bContext C,
Main bmain,
UndoStack ustack,
UndoStep us,
const eUndoStepDir  dir,
bool  is_final 
)
static

◆ undosys_step_encode()

static bool undosys_step_encode ( bContext C,
Main bmain,
UndoStack ustack,
UndoStep us 
)
static

◆ undosys_step_free_and_unlink()

static void undosys_step_free_and_unlink ( UndoStack ustack,
UndoStep us 
)
static

◆ undosys_step_iter_first()

static UndoStep* undosys_step_iter_first ( UndoStep us_reference,
const eUndoStepDir  undo_dir 
)
static

When reading undo steps for undo/redo, some extra checks are needed when so the correct undo step is decoded.

Definition at line 704 of file undo_system.c.

References UndoType::flags, UndoStep::next, UndoStep::prev, UndoStep::type, and UNDOTYPE_FLAG_DECODE_ACTIVE_STEP.

Referenced by BKE_undosys_step_load_data_ex().

◆ UNUSED_FUNCTION()

static void UNUSED_FUNCTION ( BKE_undosys_foreach_ID_ref(UndoStack *ustack, UndoTypeForEachIDRefFn foreach_ID_ref_fn, void *user_data )
static

Variable Documentation

◆ BKE_UNDOSYS_TYPE_IMAGE

const UndoType* BKE_UNDOSYS_TYPE_IMAGE = NULL

◆ BKE_UNDOSYS_TYPE_MEMFILE

const UndoType* BKE_UNDOSYS_TYPE_MEMFILE = NULL

◆ BKE_UNDOSYS_TYPE_PAINTCURVE

const UndoType* BKE_UNDOSYS_TYPE_PAINTCURVE = NULL

Definition at line 55 of file undo_system.c.

Referenced by ED_paintcurve_undo_push_begin(), and ED_undosys_type_init().

◆ BKE_UNDOSYS_TYPE_PARTICLE

const UndoType* BKE_UNDOSYS_TYPE_PARTICLE = NULL

Definition at line 56 of file undo_system.c.

Referenced by ED_undosys_type_init().

◆ BKE_UNDOSYS_TYPE_SCULPT

const UndoType* BKE_UNDOSYS_TYPE_SCULPT = NULL

◆ BKE_UNDOSYS_TYPE_TEXT

const UndoType* BKE_UNDOSYS_TYPE_TEXT = NULL

◆ g_undo_callback_running

bool g_undo_callback_running = false
static

Definition at line 86 of file undo_system.c.

◆ g_undo_types

ListBase g_undo_types = {NULL, NULL}
static

◆ LOG

CLG_LogRef LOG = {"bke.undosys"}
static