[Bf-blender-cvs] [73c4ba18d50] blender2.8: Merge branch 'master' into blender2.8

Campbell Barton noreply at git.blender.org
Wed Nov 22 17:14:39 CET 2017


Commit: 73c4ba18d50bc03465927e22b5d0085bf7d523a2
Author: Campbell Barton
Date:   Thu Nov 23 03:26:00 2017 +1100
Branches: blender2.8
https://developer.blender.org/rB73c4ba18d50bc03465927e22b5d0085bf7d523a2

Merge branch 'master' into blender2.8

===================================================================



===================================================================

diff --cc source/blender/blenkernel/BKE_blendfile.h
index 0a8eac7961a,9ff164f60be..a9a7e2045f0
--- a/source/blender/blenkernel/BKE_blendfile.h
+++ b/source/blender/blenkernel/BKE_blendfile.h
@@@ -59,11 -59,8 +59,12 @@@ struct UserDef *BKE_blendfile_userdef_r
          struct ReportList *reports);
  
  bool BKE_blendfile_userdef_write(const char *filepath, struct ReportList *reports);
+ bool BKE_blendfile_userdef_write_app_template(const char *filepath, struct ReportList *reports);
  
 +struct WorkspaceConfigFileData *BKE_blendfile_workspace_config_read(const char *filepath, struct ReportList *reports);
 +bool BKE_blendfile_workspace_config_write(struct Main *bmain, const char *filepath, struct ReportList *reports);
 +void BKE_blendfile_workspace_config_data_free(struct WorkspaceConfigFileData *workspace_config);
 +
  /* partial blend file writing */
  void BKE_blendfile_write_partial_tag_ID(struct ID *id, bool set);
  void BKE_blendfile_write_partial_begin(struct Main *bmain_src);
diff --cc source/blender/blenkernel/intern/blendfile.c
index 6df008e7ac9,cc992a4a520..f6dfb7f922c
--- a/source/blender/blenkernel/intern/blendfile.c
+++ b/source/blender/blenkernel/intern/blendfile.c
@@@ -241,11 -226,9 +241,10 @@@ static void setup_app_data
  	CTX_data_main_set(C, G.main);
  
  	if (bfd->user) {
 +
  		/* only here free userdef themes... */
- 		BKE_blender_userdef_free_data(&U);
- 
- 		U = *bfd->user;
+ 		BKE_blender_userdef_data_set_and_free(bfd->user);
+ 		bfd->user = NULL;
  
  		/* Security issue: any blend file could include a USER block.
  		 *
@@@ -539,48 -511,29 +536,71 @@@ bool BKE_blendfile_userdef_write(const 
  	return ok;
  }
  
+ /**
+  * Only write the userdef in a .blend, merging with the existing blend file.
+  * \return success
+  *
+  * \note In the future we should re-evaluate user preferences,
+  * possibly splitting out system/hardware specific prefs.
+  */
+ bool BKE_blendfile_userdef_write_app_template(const char *filepath, ReportList *reports)
+ {
+ 	/* if it fails, overwrite is OK. */
+ 	UserDef *userdef_default = BKE_blendfile_userdef_read(filepath, NULL);
+ 	if (userdef_default == NULL) {
+ 		return BKE_blendfile_userdef_write(filepath, reports);
+ 	}
+ 
+ 	BKE_blender_userdef_app_template_data_swap(&U, userdef_default);
+ 	bool ok = BKE_blendfile_userdef_write(filepath, reports);
+ 	BKE_blender_userdef_app_template_data_swap(&U, userdef_default);
+ 	BKE_blender_userdef_data_free(userdef_default, false);
+ 	MEM_freeN(userdef_default);
+ 	return ok;
+ }
+ 
 +WorkspaceConfigFileData *BKE_blendfile_workspace_config_read(const char *filepath, ReportList *reports)
 +{
 +	BlendFileData *bfd;
 +	WorkspaceConfigFileData *workspace_config = NULL;
 +
 +	bfd = BLO_read_from_file(filepath, reports, BLO_READ_SKIP_USERDEF);
 +	if (bfd) {
 +		workspace_config = MEM_mallocN(sizeof(*workspace_config), __func__);
 +		workspace_config->main = bfd->main;
 +		workspace_config->workspaces = bfd->main->workspaces;
 +
 +		MEM_freeN(bfd);
 +	}
 +
 +	return workspace_config;
 +}
 +
 +bool BKE_blendfile_workspace_config_write(Main *bmain, const char *filepath, ReportList *reports)
 +{
 +	int fileflags = G.fileflags & ~(G_FILE_NO_UI | G_FILE_AUTOPLAY | G_FILE_HISTORY);
 +	bool retval = false;
 +
 +	BKE_blendfile_write_partial_begin(bmain);
 +
 +	for (WorkSpace *workspace = bmain->workspaces.first; workspace; workspace = workspace->id.next) {
 +		BKE_blendfile_write_partial_tag_ID(&workspace->id, true);
 +	}
 +
 +	if (BKE_blendfile_write_partial(bmain, filepath, fileflags, reports)) {
 +		retval = true;
 +	}
 +
 +	BKE_blendfile_write_partial_end(bmain);
 +
 +	return retval;
 +}
 +
 +void BKE_blendfile_workspace_config_data_free(WorkspaceConfigFileData *workspace_config)
 +{
 +	BKE_main_free(workspace_config->main);
 +	MEM_freeN(workspace_config);
 +}
  
  /** \} */



More information about the Bf-blender-cvs mailing list