Add support for loading preference struct
Previously it would always load into 'U' global. Needed for loading & merging template preferences.
This commit is contained in:
parent
db04980678
commit
b2d3956e7b
@ -48,7 +48,8 @@ void BKE_blender_version_string(
|
||||
char *version_str, size_t maxncpy,
|
||||
short version, short subversion, bool v_prefix, bool include_subversion);
|
||||
|
||||
void BKE_blender_userdef_free(struct UserDef *userdef);
|
||||
void BKE_blender_userdef_set_data(struct UserDef *userdef);
|
||||
void BKE_blender_userdef_free_data(struct UserDef *userdef);
|
||||
void BKE_blender_userdef_refresh(void);
|
||||
|
||||
/* set this callback when a UI is running */
|
||||
|
@ -33,6 +33,7 @@ struct ID;
|
||||
struct Main;
|
||||
struct MemFile;
|
||||
struct ReportList;
|
||||
struct UserDef;
|
||||
|
||||
enum {
|
||||
BKE_BLENDFILE_READ_FAIL = 0, /* no load */
|
||||
@ -50,8 +51,8 @@ bool BKE_blendfile_read_from_memfile(
|
||||
struct bContext *C, struct MemFile *memfile,
|
||||
struct ReportList *reports, int skip_flag);
|
||||
|
||||
int BKE_blendfile_read_userdef(const char *filepath, struct ReportList *reports);
|
||||
int BKE_blendfile_write_userdef(const char *filepath, struct ReportList *reports);
|
||||
struct UserDef *BKE_blendfile_userdef_read(const char *filepath, struct ReportList *reports);
|
||||
int BKE_blendfile_userdef_write(const char *filepath, struct ReportList *reports);
|
||||
|
||||
|
||||
/* partial blend file writing */
|
||||
|
@ -150,11 +150,18 @@ static void keymap_item_free(wmKeyMapItem *kmi)
|
||||
MEM_freeN(kmi->ptr);
|
||||
}
|
||||
|
||||
void BKE_blender_userdef_set_data(UserDef *userdef)
|
||||
{
|
||||
/* only here free userdef themes... */
|
||||
BKE_blender_userdef_free_data(&U);
|
||||
U = *userdef;
|
||||
}
|
||||
|
||||
/**
|
||||
* When loading a new userdef from file,
|
||||
* or when exiting Blender.
|
||||
*/
|
||||
void BKE_blender_userdef_free(UserDef *userdef)
|
||||
void BKE_blender_userdef_free_data(UserDef *userdef)
|
||||
{
|
||||
#define U _invalid_access_ /* ensure no accidental global access */
|
||||
#ifdef U /* quiet warning */
|
||||
|
@ -227,7 +227,7 @@ static void setup_app_data(
|
||||
if (bfd->user) {
|
||||
|
||||
/* only here free userdef themes... */
|
||||
BKE_blender_userdef_free(&U);
|
||||
BKE_blender_userdef_free_data(&U);
|
||||
|
||||
U = *bfd->user;
|
||||
|
||||
@ -425,31 +425,25 @@ bool BKE_blendfile_read_from_memfile(
|
||||
}
|
||||
|
||||
/* only read the userdef from a .blend */
|
||||
int BKE_blendfile_read_userdef(const char *filepath, ReportList *reports)
|
||||
UserDef *BKE_blendfile_userdef_read(const char *filepath, ReportList *reports)
|
||||
{
|
||||
BlendFileData *bfd;
|
||||
int retval = BKE_BLENDFILE_READ_FAIL;
|
||||
UserDef *userdef = NULL;
|
||||
|
||||
bfd = BLO_read_from_file(filepath, reports, BLO_READ_SKIP_NONE);
|
||||
if (bfd) {
|
||||
if (bfd->user) {
|
||||
retval = BKE_BLENDFILE_READ_OK_USERPREFS;
|
||||
|
||||
/* only here free userdef themes... */
|
||||
BKE_blender_userdef_free(&U);
|
||||
|
||||
U = *bfd->user;
|
||||
MEM_freeN(bfd->user);
|
||||
userdef = bfd->user;
|
||||
}
|
||||
BKE_main_free(bfd->main);
|
||||
MEM_freeN(bfd);
|
||||
}
|
||||
|
||||
return retval;
|
||||
return userdef;
|
||||
}
|
||||
|
||||
/* only write the userdef in a .blend */
|
||||
int BKE_blendfile_write_userdef(const char *filepath, ReportList *reports)
|
||||
int BKE_blendfile_userdef_write(const char *filepath, ReportList *reports)
|
||||
{
|
||||
Main *mainb = MEM_callocN(sizeof(Main), "empty main");
|
||||
int retval = 0;
|
||||
|
@ -697,8 +697,11 @@ int wm_homefile_read(
|
||||
|
||||
/* load preferences before startup.blend */
|
||||
if (!from_memory && BLI_exists(filepath_userdef)) {
|
||||
int done = BKE_blendfile_read_userdef(filepath_userdef, NULL);
|
||||
if (done != BKE_BLENDFILE_READ_FAIL) {
|
||||
UserDef *userdef = BKE_blendfile_userdef_read(filepath_userdef, NULL);
|
||||
if (userdef != NULL) {
|
||||
BKE_blender_userdef_set_data(userdef);
|
||||
MEM_freeN(userdef);
|
||||
|
||||
read_userdef_from_memory = false;
|
||||
skip_flags |= BLO_READ_SKIP_USERDEF;
|
||||
printf("Read prefs: %s\n", filepath_userdef);
|
||||
@ -1365,7 +1368,7 @@ static int wm_userpref_write_exec(bContext *C, wmOperator *op)
|
||||
BLI_make_file_string("/", filepath, BKE_appdir_folder_id_create(BLENDER_USER_CONFIG, NULL), BLENDER_USERPREF_FILE);
|
||||
printf("trying to save userpref at %s ", filepath);
|
||||
|
||||
if (BKE_blendfile_write_userdef(filepath, op->reports) == 0) {
|
||||
if (BKE_blendfile_userdef_write(filepath, op->reports) == 0) {
|
||||
printf("fail\n");
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
@ -572,7 +572,7 @@ void WM_exit_ext(bContext *C, const bool do_python)
|
||||
ED_file_exit(); /* for fsmenu */
|
||||
|
||||
UI_exit();
|
||||
BKE_blender_userdef_free(&U);
|
||||
BKE_blender_userdef_free_data(&U);
|
||||
|
||||
RNA_exit(); /* should be after BPY_python_end so struct python slots are cleared */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user