fix [#31136] Save All Edited only works for Saved external image, not New or Packed...
authorCampbell Barton <ideasman42@gmail.com>
Fri, 4 May 2012 17:39:37 +0000 (17:39 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 4 May 2012 17:39:37 +0000 (17:39 +0000)
release/scripts/startup/bl_operators/image.py

index 1b7d5e3a40d059ea2f97643e73b0827cb58d8dcc..6af6488e86bf3303643881cef700838336777435 100644 (file)
@@ -118,16 +118,24 @@ class SaveDirty(Operator):
         unique_paths = set()
         for image in bpy.data.images:
             if image.is_dirty:
-                filepath = bpy.path.abspath(image.filepath)
-                if "\\" not in filepath and "/" not in filepath:
-                    self.report({'WARNING'}, "Invalid path: " + filepath)
-                elif filepath in unique_paths:
-                    self.report({'WARNING'},
-                                "Path used by more then one image: %r" %
-                                filepath)
+                if image.packed_file:
+                    if image.library:
+                        self.report({'WARNING'},
+                                    "Packed library image: %r from library %r can't be re-packed" %
+                                    (image.name, image.library.filepath))
+                    else:
+                        image.pack(as_png=True)
                 else:
-                    unique_paths.add(filepath)
-                    image.save()
+                    filepath = bpy.path.abspath(image.filepath, library=image.library)
+                    if "\\" not in filepath and "/" not in filepath:
+                        self.report({'WARNING'}, "Invalid path: " + filepath)
+                    elif filepath in unique_paths:
+                        self.report({'WARNING'},
+                                    "Path used by more then one image: %r" %
+                                    filepath)
+                    else:
+                        unique_paths.add(filepath)
+                        image.save()
         return {'FINISHED'}