Fix for [#24654] Sound Actuator doesn't find the file when Blender is reopened.
authorJoerg Mueller <nexyon@gmail.com>
Sat, 13 Nov 2010 13:44:45 +0000 (13:44 +0000)
committerJoerg Mueller <nexyon@gmail.com>
Sat, 13 Nov 2010 13:44:45 +0000 (13:44 +0000)
source/blender/blenkernel/BKE_packedFile.h
source/blender/blenkernel/intern/packedFile.c
source/blender/blenkernel/intern/sound.c
source/blender/editors/sound/sound_ops.c

index 58cf144483f4fd2419ef7654b9d0a23e187db489..ca03708edef8c4e70e247e985791ea3a224ff028 100644 (file)
@@ -50,7 +50,7 @@ void packAll(struct Main *bmain, struct ReportList *reports);
 /* unpack */
 char *unpackFile(struct ReportList *reports, char *abs_name, char *local_name, struct PackedFile *pf, int how);
 int unpackVFont(struct ReportList *reports, struct VFont *vfont, int how);
-int unpackSound(struct ReportList *reports, struct bSound *sound, int how);
+int unpackSound(struct Main *bmain, struct ReportList *reports, struct bSound *sound, int how);
 int unpackImage(struct ReportList *reports, struct Image *ima, int how);
 void unpackAll(struct Main *bmain, struct ReportList *reports, int how);
 
index e8223caed41cbc72e368a4ce8c5ac9e01be95f25..7d7f73222fa44e4ad93fefa0f5c809c6fbd5255e 100644 (file)
@@ -467,7 +467,7 @@ int unpackVFont(ReportList *reports, VFont *vfont, int how)
        return (ret_value);
 }
 
-int unpackSound(ReportList *reports, bSound *sound, int how)
+int unpackSound(Main *bmain, ReportList *reports, bSound *sound, int how)
 {
        char localname[FILE_MAXDIR + FILE_MAX], fi[FILE_MAX];
        char *newname;
@@ -486,7 +486,7 @@ int unpackSound(ReportList *reports, bSound *sound, int how)
                        freePackedFile(sound->packedfile);
                        sound->packedfile = 0;
 
-                       sound_load(NULL, sound);
+                       sound_load(bmain, sound);
 
                        ret_value = RET_OK;
                }
@@ -536,6 +536,6 @@ void unpackAll(Main *bmain, ReportList *reports, int how)
 
        for(sound=bmain->sound.first; sound; sound=sound->id.next)
                if(sound->packedfile)
-                       unpackSound(reports, sound, how);
+                       unpackSound(bmain, reports, sound, how);
 }
 
index cc941c81131f636b874842a17a38bc6f980cbd68..4a9a5fa881b8733169c353255fd2db34ed78589e 100644 (file)
@@ -236,7 +236,7 @@ void sound_delete_cache(struct bSound* sound)
        }
 }
 
-void sound_load(struct Main *UNUSED(bmain), struct bSound* sound)
+void sound_load(struct Main *bmain, struct bSound* sound)
 {
        if(sound)
        {
@@ -266,8 +266,7 @@ void sound_load(struct Main *UNUSED(bmain), struct bSound* sound)
                        if(sound->id.lib)
                                path = sound->id.lib->filepath;
                        else
-                               // XXX this should be fixed!
-                               path = /*bmain ? bmain->name :*/ G.main->name;
+                               path = bmain->name;
 
                        BLI_path_abs(fullpath, path);
 
@@ -277,7 +276,7 @@ void sound_load(struct Main *UNUSED(bmain), struct bSound* sound)
                        /* or else load it from disk */
                        else
                                sound->handle = AUD_load(fullpath);
-               } // XXX
+               }
 // XXX unused currently
 #if 0
                        break;
index 18f35502f8b7c965ac42d47e4f86598d7d11a1ce..df45bc158272268ec5ee52f632a04ced51700121 100644 (file)
@@ -275,7 +275,7 @@ static int unpack_exec(bContext *C, wmOperator *op)
        if(G.fileflags & G_AUTOPACK)
                BKE_report(op->reports, RPT_WARNING, "AutoPack is enabled, so image will be packed again on file save.");
 
-       unpackSound(op->reports, sound, method);
+       unpackSound(CTX_data_main(C), op->reports, sound, method);
 
        return OPERATOR_FINISHED;
 }