diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-11-22 19:26:00 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-11-22 19:26:00 +0300 |
commit | 73c4ba18d50bc03465927e22b5d0085bf7d523a2 (patch) | |
tree | 17d1877bd52ae5e3598e16cb52f42f3be17a9125 /source/blender/blenkernel/intern/blender.c | |
parent | 15a0ad602746bd8dd7dde3822d54979e72ca9de2 (diff) | |
parent | 326efb431971e668a41d9a331ccc3d11f9fd3e5f (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'source/blender/blenkernel/intern/blender.c')
-rw-r--r-- | source/blender/blenkernel/intern/blender.c | 79 |
1 files changed, 51 insertions, 28 deletions
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 1f75c85291d..05c1a675f47 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -154,11 +154,21 @@ static void keymap_item_free(wmKeyMapItem *kmi) MEM_freeN(kmi->ptr); } -void BKE_blender_userdef_set_data(UserDef *userdef) +void BKE_blender_userdef_data_swap(UserDef *userdef_a, UserDef *userdef_b) { - /* only here free userdef themes... */ - BKE_blender_userdef_free_data(&U); - U = *userdef; + SWAP(UserDef, *userdef_a, *userdef_b); +} + +void BKE_blender_userdef_data_set(UserDef *userdef) +{ + BKE_blender_userdef_data_swap(&U, userdef); + BKE_blender_userdef_data_free(userdef, true); +} + +void BKE_blender_userdef_data_set_and_free(UserDef *userdef) +{ + BKE_blender_userdef_data_set(userdef); + MEM_freeN(userdef); } static void userdef_free_keymaps(UserDef *userdef) @@ -205,7 +215,7 @@ static void userdef_free_addons(UserDef *userdef) * When loading a new userdef from file, * or when exiting Blender. */ -void BKE_blender_userdef_free_data(UserDef *userdef) +void BKE_blender_userdef_data_free(UserDef *userdef, bool clear_fonts) { #define U _invalid_access_ /* ensure no accidental global access */ #ifdef U /* quiet warning */ @@ -214,12 +224,13 @@ void BKE_blender_userdef_free_data(UserDef *userdef) userdef_free_keymaps(userdef); userdef_free_addons(userdef); - for (uiFont *font = userdef->uifonts.first; font; font = font->next) { - BLF_unload_id(font->blf_id); + if (clear_fonts) { + for (uiFont *font = userdef->uifonts.first; font; font = font->next) { + BLF_unload_id(font->blf_id); + } + BLF_default_set(-1); } - BLF_default_set(-1); - BLI_freelistN(&userdef->autoexec_paths); BLI_freelistN(&userdef->uistyles); @@ -233,38 +244,50 @@ void BKE_blender_userdef_free_data(UserDef *userdef) * Write U from userdef. * This function defines which settings a template will override for the user preferences. */ -void BKE_blender_userdef_set_app_template(UserDef *userdef) +void BKE_blender_userdef_app_template_data_swap(UserDef *userdef_a, UserDef *userdef_b) { /* TODO: * - keymaps * - various minor settings (add as needed). */ -#define LIST_OVERRIDE(id) { \ - BLI_freelistN(&U.id); \ - BLI_movelisttolist(&U.id, &userdef->id); \ -} ((void)0) +#define DATA_SWAP(id) \ + SWAP(userdef_a->id, userdef_b->id); -#define MEMCPY_OVERRIDE(id) \ - memcpy(U.id, userdef->id, sizeof(U.id)); +#define LIST_SWAP(id) { \ + SWAP(ListBase, userdef_a->id, userdef_b->id); \ +} ((void)0) /* for some types we need custom free functions */ - userdef_free_addons(&U); - userdef_free_keymaps(&U); + LIST_SWAP(addons); + LIST_SWAP(user_keymaps); + + LIST_SWAP(uistyles); + LIST_SWAP(uifonts); + LIST_SWAP(themes); + LIST_SWAP(addons); + LIST_SWAP(user_keymaps); + + DATA_SWAP(light); - LIST_OVERRIDE(uistyles); - LIST_OVERRIDE(uifonts); - LIST_OVERRIDE(themes); - LIST_OVERRIDE(addons); - LIST_OVERRIDE(user_keymaps); + DATA_SWAP(font_path_ui); + DATA_SWAP(font_path_ui_mono); - MEMCPY_OVERRIDE(light); +#undef SWAP_TYPELESS +#undef LIST_SWAP +#undef DATA_SWAP +} - MEMCPY_OVERRIDE(font_path_ui); - MEMCPY_OVERRIDE(font_path_ui_mono); +void BKE_blender_userdef_app_template_data_set(UserDef *userdef) +{ + BKE_blender_userdef_app_template_data_swap(&U, userdef); + BKE_blender_userdef_data_free(userdef, true); +} -#undef LIST_OVERRIDE -#undef MEMCPY_OVERRIDE +void BKE_blender_userdef_app_template_data_set_and_free(UserDef *userdef) +{ + BKE_blender_userdef_app_template_data_set(userdef); + MEM_freeN(userdef); } /* ***************** testing for break ************* */ |