/** * Write U from userdef. * This function defines which settings a template will override for the user preferences. */ void BKE_blender_userdef_app_template_data_swap(UserDef *userdef_a, UserDef *userdef_b) { /* TODO: * - various minor settings (add as needed). */ #define DATA_SWAP(id) \ { \ UserDef userdef_tmp; \ memcpy(&(userdef_tmp.id), &(userdef_a->id), sizeof(userdef_tmp.id)); \ memcpy(&(userdef_a->id), &(userdef_b->id), sizeof(userdef_tmp.id)); \ memcpy(&(userdef_b->id), &(userdef_tmp.id), sizeof(userdef_tmp.id)); \ } \ ((void)0) #define LIST_SWAP(id) \ { \ SWAP(ListBase, userdef_a->id, userdef_b->id); \ } \ ((void)0) #define FLAG_SWAP(id, ty, flags) \ { \ CHECK_TYPE(&(userdef_a->id), ty *); \ const ty f = flags; \ const ty a = userdef_a->id; \ const ty b = userdef_b->id; \ userdef_a->id = (userdef_a->id & ~f) | (b & f); \ userdef_b->id = (userdef_b->id & ~f) | (a & f); \ } \ ((void)0) LIST_SWAP(uistyles); LIST_SWAP(uifonts); LIST_SWAP(themes); LIST_SWAP(addons); LIST_SWAP(user_keymaps); DATA_SWAP(font_path_ui); DATA_SWAP(font_path_ui_mono); DATA_SWAP(keyconfigstr); DATA_SWAP(gizmo_flag); DATA_SWAP(app_flag); /* We could add others. */ FLAG_SWAP(uiflag, int, USER_SAVE_PROMPT); #undef SWAP_TYPELESS #undef DATA_SWAP #undef LIST_SWAP #undef FLAG_SWAP }
/** * Write U from userdef. * This function defines which settings a template will override for the user preferences. */ void BKE_blender_userdef_app_template_data_swap(UserDef *userdef_a, UserDef *userdef_b) { /* TODO: * - keymaps * - various minor settings (add as needed). */ #define DATA_SWAP(id) \ SWAP(userdef_a->id, userdef_b->id); #define LIST_SWAP(id) { \ SWAP(ListBase, userdef_a->id, userdef_b->id); \ } ((void)0) /* for some types we need custom free functions */ 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); DATA_SWAP(font_path_ui); DATA_SWAP(font_path_ui_mono); #undef SWAP_TYPELESS #undef LIST_SWAP #undef DATA_SWAP }