[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28198] trunk/blender/source/blender/ windowmanager: fix [#22007] Saving a read-only file on windows : no warning and temporary files left there

Andrea Weikert elubie at gmx.net
Wed Apr 14 22:45:36 CEST 2010


Revision: 28198
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28198
Author:   elubie
Date:     2010-04-14 22:45:36 +0200 (Wed, 14 Apr 2010)

Log Message:
-----------
fix [#22007] Saving a read-only file on windows : no warning and temporary files left there
* small improvement to last commit: actually pass the error value from WM_write_file back to the operator and cancel the operator if not successful. This also preserves the indication that the file hasn't been saved in case of error.

Modified Paths:
--------------
    trunk/blender/source/blender/windowmanager/WM_api.h
    trunk/blender/source/blender/windowmanager/intern/wm_files.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/source/blender/windowmanager/WM_api.h
===================================================================
--- trunk/blender/source/blender/windowmanager/WM_api.h	2010-04-14 20:27:45 UTC (rev 28197)
+++ trunk/blender/source/blender/windowmanager/WM_api.h	2010-04-14 20:45:36 UTC (rev 28198)
@@ -78,7 +78,7 @@
 int			WM_read_homefile	(struct bContext *C, struct wmOperator *op);
 int			WM_write_homefile	(struct bContext *C, struct wmOperator *op);
 void		WM_read_file		(struct bContext *C, char *name, struct ReportList *reports);
-void		WM_write_file		(struct bContext *C, char *target, int fileflags, struct ReportList *reports);
+int			WM_write_file		(struct bContext *C, char *target, int fileflags, struct ReportList *reports);
 void		WM_read_autosavefile(struct bContext *C);
 void		WM_autosave_init	(struct wmWindowManager *wm);
 

Modified: trunk/blender/source/blender/windowmanager/intern/wm_files.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_files.c	2010-04-14 20:27:45 UTC (rev 28197)
+++ trunk/blender/source/blender/windowmanager/intern/wm_files.c	2010-04-14 20:45:36 UTC (rev 28198)
@@ -483,7 +483,7 @@
 		BKE_report(reports, RPT_ERROR, "Unable to make version backup");
 }
 
-void WM_write_file(bContext *C, char *target, int fileflags, ReportList *reports)
+int WM_write_file(bContext *C, char *target, int fileflags, ReportList *reports)
 {
 	Library *li;
 	int len;
@@ -494,14 +494,14 @@
 	if (len == 0) return;
 	if (len >= FILE_MAX) {
 		BKE_report(reports, RPT_ERROR, "Path too long, cannot save");
-		return;
+		return -1;
 	}
  
 	/* send the OnSave event */
 	for (li= G.main->library.first; li; li= li->id.next) {
 		if (BLI_streq(li->name, target)) {
 			BKE_report(reports, RPT_ERROR, "Cannot overwrite used library");
-			return;
+			return -1;
 		}
 	}
 	
@@ -539,9 +539,12 @@
 		else G.fileflags &= ~G_FILE_AUTOPLAY;
 
 		writeBlog();
+	} else {
+		return -1;
 	}
 
 // XXX	waitcursor(0);
+	return 0;
 }
 
 /* operator entry */

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2010-04-14 20:27:45 UTC (rev 28197)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2010-04-14 20:45:36 UTC (rev 28198)
@@ -1792,8 +1792,9 @@
 	if(RNA_boolean_get(op->ptr, "relative_remap"))	fileflags |=  G_FILE_RELATIVE_REMAP;
 	else											fileflags &= ~G_FILE_RELATIVE_REMAP;
 
-	WM_write_file(C, path, fileflags, op->reports);
-	
+	if ( WM_write_file(C, path, fileflags, op->reports) != 0)
+		return OPERATOR_CANCELLED;
+
 	WM_event_add_notifier(C, NC_WM|ND_FILESAVE, NULL);
 
 	return OPERATOR_FINISHED;





More information about the Bf-blender-cvs mailing list