[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