From dbc8b81ecfc127bea0eed7dbcb9dc429c89966eb Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 20 Mar 2017 12:42:19 +1100 Subject: User Preferences: Split out addon and keymap free --- source/blender/blenkernel/intern/blender.c | 35 ++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 1febeebf9ea..f661f18fbc0 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -157,17 +157,10 @@ void BKE_blender_userdef_set_data(UserDef *userdef) U = *userdef; } -/** - * When loading a new userdef from file, - * or when exiting Blender. - */ -void BKE_blender_userdef_free_data(UserDef *userdef) +static void userdef_free_keymaps(UserDef *userdef) { -#define U _invalid_access_ /* ensure no accidental global access */ -#ifdef U /* quiet warning */ -#endif - - for (wmKeyMap *km = userdef->user_keymaps.first; km; km = km->next) { + for (wmKeyMap *km = userdef->user_keymaps.first, *km_next; km; km = km_next) { + km_next = km->next; for (wmKeyMapDiffItem *kmdi = km->diff_items.first; kmdi; kmdi = kmdi->next) { if (kmdi->add_item) { keymap_item_free(kmdi->add_item); @@ -185,8 +178,14 @@ void BKE_blender_userdef_free_data(UserDef *userdef) BLI_freelistN(&km->diff_items); BLI_freelistN(&km->items); + + MEM_freeN(km); } + BLI_listbase_clear(&userdef->user_keymaps); +} +static void userdef_free_addons(UserDef *userdef) +{ for (bAddon *addon = userdef->addons.first, *addon_next; addon; addon = addon_next) { addon_next = addon->next; if (addon->prop) { @@ -195,6 +194,21 @@ void BKE_blender_userdef_free_data(UserDef *userdef) } MEM_freeN(addon); } + BLI_listbase_clear(&userdef->addons); +} + +/** + * When loading a new userdef from file, + * or when exiting Blender. + */ +void BKE_blender_userdef_free_data(UserDef *userdef) +{ +#define U _invalid_access_ /* ensure no accidental global access */ +#ifdef U /* quiet warning */ +#endif + + userdef_free_keymaps(userdef); + userdef_free_addons(userdef); for (uiFont *font = userdef->uifonts.first; font; font = font->next) { BLF_unload_id(font->blf_id); @@ -207,7 +221,6 @@ void BKE_blender_userdef_free_data(UserDef *userdef) BLI_freelistN(&userdef->uistyles); BLI_freelistN(&userdef->uifonts); BLI_freelistN(&userdef->themes); - BLI_freelistN(&userdef->user_keymaps); #undef U } -- cgit v1.2.3