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;


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to