bugfix [#23663] relative path dind work on linux
authorCampbell Barton <ideasman42@gmail.com>
Mon, 6 Sep 2010 13:28:57 +0000 (13:28 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 6 Sep 2010 13:28:57 +0000 (13:28 +0000)
source/blender/editors/space_image/image_ops.c

index 9992ffe781ecf6120807e0ca0682f706a9cedff0..11b39af2e03e1e36f1d07e63ecdd4e1966d84c52 100644 (file)
@@ -846,14 +846,14 @@ void IMAGE_OT_replace(wmOperatorType *ot)
 
 /* assumes name is FILE_MAX */
 /* ima->name and ibuf->name should end up the same */
-static void save_image_doit(bContext *C, SpaceImage *sima, Scene *scene, wmOperator *op, char *path)
+static void save_image_doit(bContext *C, SpaceImage *sima, Scene *scene, wmOperator *op, char *path, int do_newpath)
 {
        Image *ima= ED_space_image(sima);
        void *lock;
        ImBuf *ibuf= ED_space_image_acquire_buffer(sima, &lock);
 
        if (ibuf) {
-               int relative= RNA_boolean_get(op->ptr, "relative_path");
+               int relative= (RNA_struct_find_property(op->ptr, "relative_path") && RNA_boolean_get(op->ptr, "relative_path"));
                int save_copy= (RNA_struct_find_property(op->ptr, "copy") && RNA_boolean_get(op->ptr, "copy"));
 
                BLI_path_abs(path, G.sce);
@@ -879,8 +879,10 @@ static void save_image_doit(bContext *C, SpaceImage *sima, Scene *scene, wmOpera
                                        BLI_path_rel(path, G.sce); /* only after saving */
 
                                if(!save_copy) {
-                                       BLI_strncpy(ima->name, path, sizeof(ima->name));
-                                       BLI_strncpy(ibuf->name, path, sizeof(ibuf->name));
+                                       if(do_newpath) {
+                                               BLI_strncpy(ima->name, path, sizeof(ima->name));
+                                               BLI_strncpy(ibuf->name, path, sizeof(ibuf->name));
+                                       }
 
                                        /* should be function? nevertheless, saving only happens here */
                                        for(ibuf= ima->ibufs.first; ibuf; ibuf= ibuf->next)
@@ -897,9 +899,10 @@ static void save_image_doit(bContext *C, SpaceImage *sima, Scene *scene, wmOpera
                                BLI_path_rel(path, G.sce); /* only after saving */
 
                        if(!save_copy) {
-
-                               BLI_strncpy(ima->name, path, sizeof(ima->name));
-                               BLI_strncpy(ibuf->name, path, sizeof(ibuf->name));
+                               if(do_newpath) {
+                                       BLI_strncpy(ima->name, path, sizeof(ima->name));
+                                       BLI_strncpy(ibuf->name, path, sizeof(ibuf->name));
+                               }
 
                                ibuf->userflags &= ~IB_BITMAPDIRTY;
 
@@ -952,7 +955,7 @@ static int save_as_exec(bContext *C, wmOperator *op)
        sima->imtypenr= RNA_enum_get(op->ptr, "file_type");
        RNA_string_get(op->ptr, "filepath", str);
 
-       save_image_doit(C, sima, scene, op, str);
+       save_image_doit(C, sima, scene, op, str, TRUE);
 
        return OPERATOR_FINISHED;
 }
@@ -1051,7 +1054,7 @@ static int save_exec(bContext *C, wmOperator *op)
 
        /* if exists, saves over without fileselect */
        
-       BLI_strncpy(name, ibuf->name, FILE_MAX);
+       BLI_strncpy(name, ima->name, FILE_MAX);
        if(name[0]==0)
                BLI_strncpy(name, G.ima, FILE_MAX);
        else
@@ -1068,7 +1071,7 @@ static int save_exec(bContext *C, wmOperator *op)
                BKE_image_release_renderresult(scene, ima);
                ED_space_image_release_buffer(sima, lock);
                
-               save_image_doit(C, sima, scene, op, name);
+               save_image_doit(C, sima, scene, op, name, FALSE);
        }
        else {
                ED_space_image_release_buffer(sima, lock);