merge with/from trunk at r35190
[blender.git] / source / blender / makesrna / intern / rna_main_api.c
index 4ba9b7dd367f5b79c55f2bf13ae4ff1697038bac..9b3f4209edd90adf249f671dd5704f9df0673735 100644 (file)
@@ -1,4 +1,4 @@
-/**
+/*
  * $Id: rna_main_api.c 21094 2009-06-23 00:09:26Z gsrb3d $
  *
  * ***** BEGIN GPL LICENSE BLOCK *****
 
 #include "ED_screen.h"
 
-Tex *rna_Main_add_texture(Main *bmain, char *name)
+Tex *rna_Main_add_texture(Main *bmain, const char *name)
 {
        return add_texture(name);
 }
 
-Camera *rna_Main_cameras_new(Main *bmain, char* name)
+Camera *rna_Main_cameras_new(Main *bmain, const char *name)
 {
-       return add_camera(name);
+       ID *id= add_camera(name);
+       id_us_min(id);
+       return (Camera *)id;
 }
 void rna_Main_cameras_remove(Main *bmain, ReportList *reports, struct Camera *camera)
 {
@@ -98,7 +100,7 @@ void rna_Main_cameras_remove(Main *bmain, ReportList *reports, struct Camera *ca
        /* XXX python now has invalid pointer? */
 }
 
-Scene *rna_Main_scenes_new(Main *bmain, char* name)
+Scene *rna_Main_scenes_new(Main *bmain, const char *name)
 {
        return add_scene(name);
 }
@@ -116,12 +118,13 @@ void rna_Main_scenes_remove(Main *bmain, bContext *C, ReportList *reports, struc
                return;
        }
 
-       ED_screen_set_scene(C, newscene);
+       if(CTX_wm_screen(C)->scene == scene)
+               ED_screen_set_scene(C, newscene);
 
        unlink_scene(bmain, scene, newscene);
 }
 
-Object *rna_Main_objects_new(Main *bmain, ReportList *reports, char* name, ID *data)
+Object *rna_Main_objects_new(Main *bmain, ReportList *reports, const char *name, ID *data)
 {
        Object *ob;
        int type= OB_EMPTY;
@@ -159,11 +162,11 @@ Object *rna_Main_objects_new(Main *bmain, ReportList *reports, char* name, ID *d
                        }
                }
 
-               data->us++;
+               id_us_plus(data);
        }
 
        ob= add_only_object(type, name);
-       ob->id.us--;
+       id_us_min(&ob->id);
 
        ob->data= data;
        test_object_materials(ob->data);
@@ -173,27 +176,20 @@ Object *rna_Main_objects_new(Main *bmain, ReportList *reports, char* name, ID *d
 
 void rna_Main_objects_remove(Main *bmain, ReportList *reports, struct Object *object)
 {
-       /*
-         NOTE: the following example shows when this function should _not_ be called
-
-         ob = bpy.data.add_object()
-         scene.add_object(ob)
-
-         # ob is freed here
-         scene.remove_object(ob)
-
-         # don't do this since ob is already freed!
-         bpy.data.remove_object(ob)
-       */
-       if(ID_REAL_USERS(object) <= 0)
+       if(ID_REAL_USERS(object) <= 0) {
+               unlink_object(object); /* needed or ID pointers to this are not cleared */
                free_libblock(&bmain->object, object);
-       else
+       }
+       else {
                BKE_reportf(reports, RPT_ERROR, "Object \"%s\" must have zero users to be removed, found %d.", object->id.name+2, ID_REAL_USERS(object));
+       }
 }
 
-struct Material *rna_Main_materials_new(Main *bmain, char* name)
+struct Material *rna_Main_materials_new(Main *bmain, const char *name)
 {
-       return add_material(name);
+       ID *id= (ID *)add_material(name);
+       id_us_min(id);
+       return (Material *)id;
 }
 void rna_Main_materials_remove(Main *bmain, ReportList *reports, struct Material *material)
 {
@@ -205,11 +201,13 @@ void rna_Main_materials_remove(Main *bmain, ReportList *reports, struct Material
        /* XXX python now has invalid pointer? */
 }
 
-// XXX, commended for now, need to see how this can be used with node groups.
-struct bNodeTree *rna_Main_nodetree_new(Main *bmain, int type)
+struct bNodeTree *rna_Main_nodetree_new(Main *bmain, const char *name, int type)
 {
-       bNodeTree *tree = ntreeAddTree(type);
-       tree->id.us--;
+       bNodeTree *tree = ntreeAddTree(name, type, TRUE);
+
+//     ntreeMakeGroupSockets(tree);
+
+       id_us_min(&tree->id);
        return tree;
 }
 void rna_Main_nodetree_remove(Main *bmain, ReportList *reports, struct bNodeTree *tree)
@@ -222,10 +220,10 @@ void rna_Main_nodetree_remove(Main *bmain, ReportList *reports, struct bNodeTree
        /* XXX python now has invalid pointer? */
 }
 
-Mesh *rna_Main_meshes_new(Main *bmain, char* name)
+Mesh *rna_Main_meshes_new(Main *bmain, const char *name)
 {
        Mesh *me= add_mesh(name);
-       me->id.us--;
+       id_us_min(&me->id);
        return me;
 }
 void rna_Main_meshes_remove(Main *bmain, ReportList *reports, Mesh *mesh)
@@ -238,10 +236,11 @@ void rna_Main_meshes_remove(Main *bmain, ReportList *reports, Mesh *mesh)
        /* XXX python now has invalid pointer? */
 }
 
-Lamp *rna_Main_lamps_new(Main *bmain, char* name)
+Lamp *rna_Main_lamps_new(Main *bmain, const char *name, int type)
 {
        Lamp *lamp= add_lamp(name);
-       lamp->id.us--;
+       lamp->type= type;
+       id_us_min(&lamp->id);
        return lamp;
 }
 void rna_Main_lamps_remove(Main *bmain, ReportList *reports, Lamp *lamp)
@@ -254,19 +253,19 @@ void rna_Main_lamps_remove(Main *bmain, ReportList *reports, Lamp *lamp)
        /* XXX python now has invalid pointer? */
 }
 
-Image *rna_Main_images_new(Main *bmain, char* name, int width, int height, int alpha, int float_buffer)
+Image *rna_Main_images_new(Main *bmain, const char *name, int width, int height, int alpha, int float_buffer)
 {
        float color[4]= {0.0, 0.0, 0.0, 1.0};
        Image *image= BKE_add_image_size(width, height, name, alpha ? 32:24, float_buffer, 0, color);
-       image->id.us--;
+       id_us_min(&image->id);
        return image;
 }
-Image *rna_Main_images_load(Main *bmain, ReportList *reports, char *filepath)
+Image *rna_Main_images_load(Main *bmain, ReportList *reports, const char *filepath)
 {
        Image *ima;
 
        errno= 0;
-       ima= BKE_add_image_file(filepath, 0);
+       ima= BKE_add_image_file(filepath);
 
        if(!ima)
                BKE_reportf(reports, RPT_ERROR, "Can't read: \"%s\", %s.", filepath, errno ? strerror(errno) : "Unsupported image format");
@@ -283,10 +282,10 @@ void rna_Main_images_remove(Main *bmain, ReportList *reports, Image *image)
        /* XXX python now has invalid pointer? */
 }
 
-Lattice *rna_Main_lattices_new(Main *bmain, char* name)
+Lattice *rna_Main_lattices_new(Main *bmain, const char *name)
 {
        Lattice *lt= add_lattice(name);
-       lt->id.us--;
+       id_us_min(&lt->id);
        return lt;
 }
 void rna_Main_lattices_remove(Main *bmain, ReportList *reports, struct Lattice *lt)
@@ -297,10 +296,10 @@ void rna_Main_lattices_remove(Main *bmain, ReportList *reports, struct Lattice *
                BKE_reportf(reports, RPT_ERROR, "Lattice \"%s\" must have zero users to be removed, found %d.", lt->id.name+2, ID_REAL_USERS(lt));
 }
 
-Curve *rna_Main_curves_new(Main *bmain, char* name, int type)
+Curve *rna_Main_curves_new(Main *bmain, const char *name, int type)
 {
        Curve *cu= add_curve(name, type);
-       cu->id.us--;
+       id_us_min(&cu->id);
        return cu;
 }
 void rna_Main_curves_remove(Main *bmain, ReportList *reports, struct Curve *cu)
@@ -311,10 +310,10 @@ void rna_Main_curves_remove(Main *bmain, ReportList *reports, struct Curve *cu)
                BKE_reportf(reports, RPT_ERROR, "Curve \"%s\" must have zero users to be removed, found %d.", cu->id.name+2, ID_REAL_USERS(cu));
 }
 
-MetaBall *rna_Main_metaballs_new(Main *bmain, char* name)
+MetaBall *rna_Main_metaballs_new(Main *bmain, const char *name)
 {
        MetaBall *mb= add_mball(name);
-       mb->id.us--;
+       id_us_min(&mb->id);
        return mb;
 }
 void rna_Main_metaballs_remove(Main *bmain, ReportList *reports, struct MetaBall *mb)
@@ -325,7 +324,7 @@ void rna_Main_metaballs_remove(Main *bmain, ReportList *reports, struct MetaBall
                BKE_reportf(reports, RPT_ERROR, "MetaBall \"%s\" must have zero users to be removed, found %d.", mb->id.name+2, ID_REAL_USERS(mb));
 }
 
-VFont *rna_Main_fonts_load(Main *bmain, ReportList *reports, char *filepath)
+VFont *rna_Main_fonts_load(Main *bmain, ReportList *reports, const char *filepath)
 {
        VFont *font;
 
@@ -348,11 +347,11 @@ void rna_Main_fonts_remove(Main *bmain, ReportList *reports, VFont *vfont)
        /* XXX python now has invalid pointer? */
 }
 
-Tex *rna_Main_textures_new(Main *bmain, char* name, int type)
+Tex *rna_Main_textures_new(Main *bmain, const char *name, int type)
 {
        Tex *tex= add_texture(name);
        tex_set_type(tex, type);
-       tex->id.us--;
+       id_us_min(&tex->id);
        return tex;
 }
 void rna_Main_textures_remove(Main *bmain, ReportList *reports, struct Tex *tex)
@@ -363,10 +362,10 @@ void rna_Main_textures_remove(Main *bmain, ReportList *reports, struct Tex *tex)
                BKE_reportf(reports, RPT_ERROR, "Texture \"%s\" must have zero users to be removed, found %d.", tex->id.name+2, ID_REAL_USERS(tex));
 }
 
-Brush *rna_Main_brushes_new(Main *bmain, char* name)
+Brush *rna_Main_brushes_new(Main *bmain, const char *name)
 {
        Brush *brush = add_brush(name);
-       brush->id.us--;
+       id_us_min(&brush->id);
        return brush;
 }
 void rna_Main_brushes_remove(Main *bmain, ReportList *reports, struct Brush *brush)
@@ -377,10 +376,10 @@ void rna_Main_brushes_remove(Main *bmain, ReportList *reports, struct Brush *bru
                BKE_reportf(reports, RPT_ERROR, "Brush \"%s\" must have zero users to be removed, found %d.", brush->id.name+2, ID_REAL_USERS(brush));
 }
 
-World *rna_Main_worlds_new(Main *bmain, char* name)
+World *rna_Main_worlds_new(Main *bmain, const char *name)
 {
        World *world = add_world(name);
-       world->id.us--;
+       id_us_min(&world->id);
        return world;
 }
 void rna_Main_worlds_remove(Main *bmain, ReportList *reports, struct World *world)
@@ -391,29 +390,29 @@ void rna_Main_worlds_remove(Main *bmain, ReportList *reports, struct World *worl
                BKE_reportf(reports, RPT_ERROR, "World \"%s\" must have zero users to be removed, found %d.", world->id.name+2, ID_REAL_USERS(world));
 }
 
-Group *rna_Main_groups_new(Main *bmain, char* name)
+Group *rna_Main_groups_new(Main *bmain, const char *name)
 {
        return add_group(name);
 }
-void rna_Main_groups_remove(Main *bmain, ReportList *reports, Group *group)
+void rna_Main_groups_remove(Main *bmain, Group *group)
 {
        unlink_group(group);
        free_libblock(&bmain->group, group);
        /* XXX python now has invalid pointer? */
 }
 
-Text *rna_Main_texts_new(Main *bmain, char* name)
+Text *rna_Main_texts_new(Main *bmain, const char *name)
 {
        return add_empty_text(name);
 }
-void rna_Main_texts_remove(Main *bmain, ReportList *reports, Text *text)
+void rna_Main_texts_remove(Main *bmain, Text *text)
 {
        unlink_text(bmain, text);
        free_libblock(&bmain->text, text);
        /* XXX python now has invalid pointer? */
 }
 
-Text *rna_Main_texts_load(Main *bmain, ReportList *reports, char* filepath)
+Text *rna_Main_texts_load(Main *bmain, ReportList *reports, const char *filepath)
 {
        Text *txt;
 
@@ -426,10 +425,10 @@ Text *rna_Main_texts_load(Main *bmain, ReportList *reports, char* filepath)
        return txt;
 }
 
-bArmature *rna_Main_armatures_new(Main *bmain, char* name)
+bArmature *rna_Main_armatures_new(Main *bmain, const char *name)
 {
        bArmature *arm= add_armature(name);
-       arm->id.us--;
+       id_us_min(&arm->id);
        return arm;
 }
 void rna_Main_armatures_remove(Main *bmain, ReportList *reports, bArmature *arm)
@@ -442,10 +441,10 @@ void rna_Main_armatures_remove(Main *bmain, ReportList *reports, bArmature *arm)
        /* XXX python now has invalid pointer? */
 }
 
-bAction *rna_Main_actions_new(Main *bmain, char* name)
+bAction *rna_Main_actions_new(Main *bmain, const char *name)
 {
        bAction *act= add_empty_action(name);
-       act->id.us--;
+       id_us_min(&act->id);
        act->id.flag &= ~LIB_FAKEUSER;
        return act;
 }
@@ -459,10 +458,10 @@ void rna_Main_actions_remove(Main *bmain, ReportList *reports, bAction *act)
        /* XXX python now has invalid pointer? */
 }
 
-ParticleSettings *rna_Main_particles_new(Main *bmain, char* name)
+ParticleSettings *rna_Main_particles_new(Main *bmain, const char *name)
 {
        ParticleSettings *part = psys_new_settings(name, bmain);
-       part->id.us--;
+       id_us_min(&part->id);
        return part;
 }
 void rna_Main_particles_remove(Main *bmain, ReportList *reports, ParticleSettings *part)
@@ -475,6 +474,35 @@ void rna_Main_particles_remove(Main *bmain, ReportList *reports, ParticleSetting
        /* XXX python now has invalid pointer? */
 }
 
+/* tag functions, all the same */
+void rna_Main_cameras_tag(Main *bmain, int value) { tag_main_lb(&bmain->camera, value); }
+void rna_Main_scenes_tag(Main *bmain, int value) { tag_main_lb(&bmain->scene, value); }
+void rna_Main_objects_tag(Main *bmain, int value) { tag_main_lb(&bmain->object, value); }
+void rna_Main_materials_tag(Main *bmain, int value) { tag_main_lb(&bmain->mat, value); }
+void rna_Main_node_groups_tag(Main *bmain, int value) { tag_main_lb(&bmain->nodetree, value); }
+void rna_Main_meshes_tag(Main *bmain, int value) { tag_main_lb(&bmain->mesh, value); }
+void rna_Main_lamps_tag(Main *bmain, int value) { tag_main_lb(&bmain->lamp, value); }
+void rna_Main_libraries_tag(Main *bmain, int value) { tag_main_lb(&bmain->library, value); }
+void rna_Main_screens_tag(Main *bmain, int value) { tag_main_lb(&bmain->screen, value); }
+void rna_Main_window_managers_tag(Main *bmain, int value) { tag_main_lb(&bmain->wm, value); }
+void rna_Main_images_tag(Main *bmain, int value) { tag_main_lb(&bmain->image, value); }
+void rna_Main_lattices_tag(Main *bmain, int value) { tag_main_lb(&bmain->latt, value); }
+void rna_Main_curves_tag(Main *bmain, int value) { tag_main_lb(&bmain->curve, value); }
+void rna_Main_metaballs_tag(Main *bmain, int value) { tag_main_lb(&bmain->mball, value); }
+void rna_Main_fonts_tag(Main *bmain, int value) { tag_main_lb(&bmain->vfont, value); }
+void rna_Main_textures_tag(Main *bmain, int value) { tag_main_lb(&bmain->tex, value); }
+void rna_Main_brushes_tag(Main *bmain, int value) { tag_main_lb(&bmain->brush, value); }
+void rna_Main_worlds_tag(Main *bmain, int value) { tag_main_lb(&bmain->world, value); }
+void rna_Main_groups_tag(Main *bmain, int value) { tag_main_lb(&bmain->group, value); }
+void rna_Main_shape_keys_tag(Main *bmain, int value) { tag_main_lb(&bmain->key, value); }
+void rna_Main_scripts_tag(Main *bmain, int value) { tag_main_lb(&bmain->script, value); }
+void rna_Main_texts_tag(Main *bmain, int value) { tag_main_lb(&bmain->text, value); }
+void rna_Main_sounds_tag(Main *bmain, int value) { tag_main_lb(&bmain->sound, value); }
+void rna_Main_armatures_tag(Main *bmain, int value) { tag_main_lb(&bmain->armature, value); }
+void rna_Main_actions_tag(Main *bmain, int value) { tag_main_lb(&bmain->action, value); }
+void rna_Main_particles_tag(Main *bmain, int value) { tag_main_lb(&bmain->particle, value); }
+void rna_Main_gpencil_tag(Main *bmain, int value) { tag_main_lb(&bmain->gpencil, value); }
+
 #else
 
 void RNA_api_main(StructRNA *srna)
@@ -488,7 +516,7 @@ void RNA_api_main(StructRNA *srna)
        /*
        func= RNA_def_function(srna, "add_image", "rna_Main_add_image");
        RNA_def_function_ui_description(func, "Add a new image.");
-       parm= RNA_def_string(func, "filepath", "", 0, "", "File path to load image from.");
+       parm= RNA_def_string_file_path(func, "filepath", "", 0, "", "File path to load image from.");
        RNA_def_property_flag(parm, PROP_REQUIRED);
        parm= RNA_def_pointer(func, "image", "Image", "", "New image.");
        RNA_def_function_return(func, parm);
@@ -502,8 +530,8 @@ void RNA_def_main_cameras(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainCameras");
-       srna= RNA_def_struct(brna, "MainCameras", NULL);
+       RNA_def_property_srna(cprop, "BlendDataCameras");
+       srna= RNA_def_struct(brna, "BlendDataCameras", NULL);
        RNA_def_struct_ui_text(srna, "Main Cameras", "Collection of cameras");
 
        func= RNA_def_function(srna, "new", "rna_Main_cameras_new");
@@ -519,6 +547,10 @@ void RNA_def_main_cameras(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove a camera from the current blendfile.");
        parm= RNA_def_pointer(func, "camera", "Camera", "", "Camera to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_cameras_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 
 void RNA_def_main_scenes(BlenderRNA *brna, PropertyRNA *cprop)
@@ -527,8 +559,8 @@ void RNA_def_main_scenes(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainScenes");
-       srna= RNA_def_struct(brna, "MainScenes", NULL);
+       RNA_def_property_srna(cprop, "BlendDataScenes");
+       srna= RNA_def_struct(brna, "BlendDataScenes", NULL);
        RNA_def_struct_ui_text(srna, "Main Scenes", "Collection of scenes");
 
        func= RNA_def_function(srna, "new", "rna_Main_scenes_new");
@@ -552,8 +584,8 @@ void RNA_def_main_objects(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainObjects");
-       srna= RNA_def_struct(brna, "MainObjects", NULL);
+       RNA_def_property_srna(cprop, "BlendDataObjects");
+       srna= RNA_def_struct(brna, "BlendDataObjects", NULL);
        RNA_def_struct_ui_text(srna, "Main Objects", "Collection of objects");
 
        func= RNA_def_function(srna, "new", "rna_Main_objects_new");
@@ -573,6 +605,10 @@ void RNA_def_main_objects(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_flag(func, FUNC_USE_REPORTS);
        parm= RNA_def_pointer(func, "object", "Object", "", "Object to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_objects_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 
 void RNA_def_main_materials(BlenderRNA *brna, PropertyRNA *cprop)
@@ -581,8 +617,8 @@ void RNA_def_main_materials(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainMaterials");
-       srna= RNA_def_struct(brna, "MainMaterials", NULL);
+       RNA_def_property_srna(cprop, "BlendDataMaterials");
+       srna= RNA_def_struct(brna, "BlendDataMaterials", NULL);
        RNA_def_struct_ui_text(srna, "Main Material", "Collection of materials");
 
        func= RNA_def_function(srna, "new", "rna_Main_materials_new");
@@ -598,27 +634,32 @@ void RNA_def_main_materials(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove a material from the current blendfile.");
        parm= RNA_def_pointer(func, "material", "Material", "", "Material to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_materials_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 void RNA_def_main_node_groups(BlenderRNA *brna, PropertyRNA *cprop)
 {
        StructRNA *srna;
-//     FunctionRNA *func;
-//     PropertyRNA *parm;
+       FunctionRNA *func;
+       PropertyRNA *parm;
 
-/*     static EnumPropertyItem node_nodetree_items[] = {
+       static EnumPropertyItem node_nodetree_items[] = {
        {0, "SHADER",       0,    "Shader",       ""},
        {1, "COMPOSITE",    0,    "Composite",    ""},
        {2, "TEXTURE",      0,    "Texture",      ""},
-       {0, NULL, 0, NULL, NULL}}; */
+       {0, NULL, 0, NULL, NULL}};
 
-       RNA_def_property_srna(cprop, "MainNodeTrees");
-       srna= RNA_def_struct(brna, "MainNodeTrees", NULL);
+       RNA_def_property_srna(cprop, "BlendDataNodeTrees");
+       srna= RNA_def_struct(brna, "BlendDataNodeTrees", NULL);
        RNA_def_struct_ui_text(srna, "Main Node Trees", "Collection of node trees");
 
-#if 0 // need to see some examples of using these functions before enabling.
        func= RNA_def_function(srna, "new", "rna_Main_nodetree_new");
        RNA_def_function_ui_description(func, "Add a new node tree to the main database");
-       parm= RNA_def_enum(func, "type", node_nodetree_items, 0, "Type", "The type of curve object to add");
+       parm= RNA_def_string(func, "name", "NodeGroup", 0, "", "New name for the datablock.");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
+       parm= RNA_def_enum(func, "type", node_nodetree_items, 0, "Type", "The type of node_group to add");
        RNA_def_property_flag(parm, PROP_REQUIRED);
        /* return type */
        parm= RNA_def_pointer(func, "tree", "NodeTree", "", "New node tree datablock.");
@@ -629,7 +670,10 @@ void RNA_def_main_node_groups(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove a node tree from the current blendfile.");
        parm= RNA_def_pointer(func, "tree", "NodeTree", "", "Node tree to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
-#endif
+
+       func= RNA_def_function(srna, "tag", "rna_Main_node_groups_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 void RNA_def_main_meshes(BlenderRNA *brna, PropertyRNA *cprop)
 {
@@ -637,8 +681,8 @@ void RNA_def_main_meshes(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainMeshes");
-       srna= RNA_def_struct(brna, "MainMeshes", NULL);
+       RNA_def_property_srna(cprop, "BlendDataMeshes");
+       srna= RNA_def_struct(brna, "BlendDataMeshes", NULL);
        RNA_def_struct_ui_text(srna, "Main Meshes", "Collection of meshes");
 
        func= RNA_def_function(srna, "new", "rna_Main_meshes_new");
@@ -654,6 +698,10 @@ void RNA_def_main_meshes(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove a mesh from the current blendfile.");
        parm= RNA_def_pointer(func, "mesh", "Mesh", "", "Mesh to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_meshes_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 void RNA_def_main_lamps(BlenderRNA *brna, PropertyRNA *cprop)
 {
@@ -661,14 +709,16 @@ void RNA_def_main_lamps(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainLamps");
-       srna= RNA_def_struct(brna, "MainLamps", NULL);
+       RNA_def_property_srna(cprop, "BlendDataLamps");
+       srna= RNA_def_struct(brna, "BlendDataLamps", NULL);
        RNA_def_struct_ui_text(srna, "Main Lamps", "Collection of lamps");
 
        func= RNA_def_function(srna, "new", "rna_Main_lamps_new");
        RNA_def_function_ui_description(func, "Add a new lamp to the main database");
        parm= RNA_def_string(func, "name", "Lamp", 0, "", "New name for the datablock.");
        RNA_def_property_flag(parm, PROP_REQUIRED);
+       parm= RNA_def_enum(func, "type", lamp_type_items, 0, "Type", "The type of texture to add");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
        /* return type */
        parm= RNA_def_pointer(func, "lamp", "Lamp", "", "New lamp datablock.");
        RNA_def_function_return(func, parm);
@@ -678,18 +728,55 @@ void RNA_def_main_lamps(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove a lamp from the current blendfile.");
        parm= RNA_def_pointer(func, "lamp", "Lamp", "", "Lamp to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_lamps_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
+
 void RNA_def_main_libraries(BlenderRNA *brna, PropertyRNA *cprop)
 {
+       StructRNA *srna;
+       FunctionRNA *func;
+       PropertyRNA *parm;
+
+       RNA_def_property_srna(cprop, "BlendDataLibraries");
+       srna= RNA_def_struct(brna, "BlendDataLibraries", NULL);
+       RNA_def_struct_ui_text(srna, "Main Libraries", "Collection of libraries");
 
+       func= RNA_def_function(srna, "tag", "rna_Main_libraries_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
+
 void RNA_def_main_screens(BlenderRNA *brna, PropertyRNA *cprop)
 {
+       StructRNA *srna;
+       FunctionRNA *func;
+       PropertyRNA *parm;
+
+       RNA_def_property_srna(cprop, "BlendDataScreens");
+       srna= RNA_def_struct(brna, "BlendDataScreens", NULL);
+       RNA_def_struct_ui_text(srna, "Main Screens", "Collection of screens");
 
+       func= RNA_def_function(srna, "tag", "rna_Main_screens_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
+
 void RNA_def_main_window_managers(BlenderRNA *brna, PropertyRNA *cprop)
 {
-    
+       StructRNA *srna;
+       FunctionRNA *func;
+       PropertyRNA *parm;
+
+       RNA_def_property_srna(cprop, "BlendDataWindowManagers");
+       srna= RNA_def_struct(brna, "BlendDataWindowManagers", NULL);
+       RNA_def_struct_ui_text(srna, "Main Window Managers", "Collection of window managers");
+
+       func= RNA_def_function(srna, "tag", "rna_Main_window_managers_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 void RNA_def_main_images(BlenderRNA *brna, PropertyRNA *cprop)
 {
@@ -697,8 +784,8 @@ void RNA_def_main_images(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainImages");
-       srna= RNA_def_struct(brna, "MainImages", NULL);
+       RNA_def_property_srna(cprop, "BlendDataImages");
+       srna= RNA_def_struct(brna, "BlendDataImages", NULL);
        RNA_def_struct_ui_text(srna, "Main Images", "Collection of images");
 
        func= RNA_def_function(srna, "new", "rna_Main_images_new");
@@ -706,9 +793,11 @@ void RNA_def_main_images(BlenderRNA *brna, PropertyRNA *cprop)
        parm= RNA_def_string(func, "name", "Image", 0, "", "New name for the datablock.");
        RNA_def_property_flag(parm, PROP_REQUIRED);
        parm= RNA_def_int(func, "width", 1024, 1, INT_MAX, "", "Width of the image.", 0, INT_MAX);
+       RNA_def_property_flag(parm, PROP_REQUIRED);
        parm= RNA_def_int(func, "height", 1024, 1, INT_MAX, "", "Height of the image.", 0, INT_MAX);
-       parm= RNA_def_boolean(func, "alpha", 0, "Alpha", "Use alpha channel");
-       parm= RNA_def_boolean(func, "float_buffer", 0, "Float Buffer", "Create an image with floating point color");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
+       RNA_def_boolean(func, "alpha", 0, "Alpha", "Use alpha channel");
+       RNA_def_boolean(func, "float_buffer", 0, "Float Buffer", "Create an image with floating point color");
        /* return type */
        parm= RNA_def_pointer(func, "image", "Image", "", "New image datablock.");
        RNA_def_function_return(func, parm);
@@ -716,7 +805,7 @@ void RNA_def_main_images(BlenderRNA *brna, PropertyRNA *cprop)
        func= RNA_def_function(srna, "load", "rna_Main_images_load");
        RNA_def_function_flag(func, FUNC_USE_REPORTS);
        RNA_def_function_ui_description(func, "Load a new image into the main database");
-       parm= RNA_def_string(func, "filepath", "File Path", 0, "", "path of the file to load.");
+       parm= RNA_def_string_file_path(func, "filepath", "File Path", 0, "", "path of the file to load.");
        RNA_def_property_flag(parm, PROP_REQUIRED);
        /* return type */
        parm= RNA_def_pointer(func, "image", "Image", "", "New image datablock.");
@@ -727,6 +816,10 @@ void RNA_def_main_images(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove an image from the current blendfile.");
        parm= RNA_def_pointer(func, "image", "Image", "", "Image to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_images_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 
 void RNA_def_main_lattices(BlenderRNA *brna, PropertyRNA *cprop)
@@ -735,8 +828,8 @@ void RNA_def_main_lattices(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainLattices");
-       srna= RNA_def_struct(brna, "MainLattices", NULL);
+       RNA_def_property_srna(cprop, "BlendDataLattices");
+       srna= RNA_def_struct(brna, "BlendDataLattices", NULL);
        RNA_def_struct_ui_text(srna, "Main Lattices", "Collection of lattices");
 
        func= RNA_def_function(srna, "new", "rna_Main_lattices_new");
@@ -752,6 +845,10 @@ void RNA_def_main_lattices(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove a lattice from the current blendfile.");
        parm= RNA_def_pointer(func, "lattice", "Lattice", "", "Lattice to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_lattices_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 void RNA_def_main_curves(BlenderRNA *brna, PropertyRNA *cprop)
 {
@@ -759,8 +856,8 @@ void RNA_def_main_curves(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainCurves");
-       srna= RNA_def_struct(brna, "MainCurves", NULL);
+       RNA_def_property_srna(cprop, "BlendDataCurves");
+       srna= RNA_def_struct(brna, "BlendDataCurves", NULL);
        RNA_def_struct_ui_text(srna, "Main Curves", "Collection of curves");
 
        func= RNA_def_function(srna, "new", "rna_Main_curves_new");
@@ -778,6 +875,10 @@ void RNA_def_main_curves(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove a curve from the current blendfile.");
        parm= RNA_def_pointer(func, "curve", "Curve", "", "Curve to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_curves_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 void RNA_def_main_metaballs(BlenderRNA *brna, PropertyRNA *cprop)
 {
@@ -785,8 +886,8 @@ void RNA_def_main_metaballs(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainMetaBalls");
-       srna= RNA_def_struct(brna, "MainMetaBalls", NULL);
+       RNA_def_property_srna(cprop, "BlendDataMetaBalls");
+       srna= RNA_def_struct(brna, "BlendDataMetaBalls", NULL);
        RNA_def_struct_ui_text(srna, "Main MetaBall", "Collection of metaballs");
 
        func= RNA_def_function(srna, "new", "rna_Main_metaballs_new");
@@ -802,6 +903,10 @@ void RNA_def_main_metaballs(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove a metaball from the current blendfile.");
        parm= RNA_def_pointer(func, "metaball", "MetaBall", "", "MetaBall to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_metaballs_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 void RNA_def_main_fonts(BlenderRNA *brna, PropertyRNA *cprop)
 {
@@ -809,14 +914,14 @@ void RNA_def_main_fonts(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainFonts");
-       srna= RNA_def_struct(brna, "MainFonts", NULL);
+       RNA_def_property_srna(cprop, "BlendDataFonts");
+       srna= RNA_def_struct(brna, "BlendDataFonts", NULL);
        RNA_def_struct_ui_text(srna, "Main Fonts", "Collection of fonts");
 
        func= RNA_def_function(srna, "load", "rna_Main_fonts_load");
        RNA_def_function_flag(func, FUNC_USE_REPORTS);
        RNA_def_function_ui_description(func, "Load a new font into the main database");
-       parm= RNA_def_string(func, "filepath", "File Path", 0, "", "path of the font to load.");
+       parm= RNA_def_string_file_path(func, "filepath", "File Path", 0, "", "path of the font to load.");
        RNA_def_property_flag(parm, PROP_REQUIRED);
        /* return type */
        parm= RNA_def_pointer(func, "vfont", "VectorFont", "", "New font datablock.");
@@ -827,6 +932,10 @@ void RNA_def_main_fonts(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove a font from the current blendfile.");
        parm= RNA_def_pointer(func, "vfont", "VectorFont", "", "Font to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_fonts_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 void RNA_def_main_textures(BlenderRNA *brna, PropertyRNA *cprop)
 {
@@ -834,8 +943,8 @@ void RNA_def_main_textures(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainTextures");
-       srna= RNA_def_struct(brna, "MainTextures", NULL);
+       RNA_def_property_srna(cprop, "BlendDataTextures");
+       srna= RNA_def_struct(brna, "BlendDataTextures", NULL);
        RNA_def_struct_ui_text(srna, "Main Textures", "Collection of groups");
 
        func= RNA_def_function(srna, "new", "rna_Main_textures_new");
@@ -853,6 +962,10 @@ void RNA_def_main_textures(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove a texture from the current blendfile.");
        parm= RNA_def_pointer(func, "texture", "Texture", "", "Texture to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_textures_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 void RNA_def_main_brushes(BlenderRNA *brna, PropertyRNA *cprop)
 {
@@ -860,8 +973,8 @@ void RNA_def_main_brushes(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainBrushes");
-       srna= RNA_def_struct(brna, "MainBrushes", NULL);
+       RNA_def_property_srna(cprop, "BlendDataBrushes");
+       srna= RNA_def_struct(brna, "BlendDataBrushes", NULL);
        RNA_def_struct_ui_text(srna, "Main Brushes", "Collection of brushes");
 
        func= RNA_def_function(srna, "new", "rna_Main_brushes_new");
@@ -877,6 +990,10 @@ void RNA_def_main_brushes(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove a brush from the current blendfile.");
        parm= RNA_def_pointer(func, "brush", "Brush", "", "Brush to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_brushes_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 
 void RNA_def_main_worlds(BlenderRNA *brna, PropertyRNA *cprop)
@@ -885,8 +1002,8 @@ void RNA_def_main_worlds(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainWorlds");
-       srna= RNA_def_struct(brna, "MainWorlds", NULL);
+       RNA_def_property_srna(cprop, "BlendDataWorlds");
+       srna= RNA_def_struct(brna, "BlendDataWorlds", NULL);
        RNA_def_struct_ui_text(srna, "Main Worlds", "Collection of worlds");
 
        func= RNA_def_function(srna, "new", "rna_Main_worlds_new");
@@ -902,6 +1019,10 @@ void RNA_def_main_worlds(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove a world from the current blendfile.");
        parm= RNA_def_pointer(func, "world", "World", "", "World to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_worlds_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 
 void RNA_def_main_groups(BlenderRNA *brna, PropertyRNA *cprop)
@@ -910,8 +1031,8 @@ void RNA_def_main_groups(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainGroups");
-       srna= RNA_def_struct(brna, "MainGroups", NULL);
+       RNA_def_property_srna(cprop, "BlendDataGroups");
+       srna= RNA_def_struct(brna, "BlendDataGroups", NULL);
        RNA_def_struct_ui_text(srna, "Main Groups", "Collection of groups");
 
        func= RNA_def_function(srna, "new", "rna_Main_groups_new");
@@ -923,10 +1044,13 @@ void RNA_def_main_groups(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_return(func, parm);
 
        func= RNA_def_function(srna, "remove", "rna_Main_groups_remove");
-       RNA_def_function_flag(func, FUNC_USE_REPORTS);
        RNA_def_function_ui_description(func, "Remove a group from the current blendfile.");
        parm= RNA_def_pointer(func, "group", "Group", "", "Group to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_groups_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 void RNA_def_main_texts(BlenderRNA *brna, PropertyRNA *cprop)
 {
@@ -934,8 +1058,8 @@ void RNA_def_main_texts(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainTexts");
-       srna= RNA_def_struct(brna, "MainTexts", NULL);
+       RNA_def_property_srna(cprop, "BlendDataTexts");
+       srna= RNA_def_struct(brna, "BlendDataTexts", NULL);
        RNA_def_struct_ui_text(srna, "Main Texts", "Collection of texts");
 
        func= RNA_def_function(srna, "new", "rna_Main_texts_new");
@@ -947,7 +1071,6 @@ void RNA_def_main_texts(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_return(func, parm);
 
        func= RNA_def_function(srna, "remove", "rna_Main_texts_remove");
-       RNA_def_function_flag(func, FUNC_USE_REPORTS);
        RNA_def_function_ui_description(func, "Remove a text from the current blendfile.");
        parm= RNA_def_pointer(func, "text", "Text", "", "Text to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
@@ -956,24 +1079,42 @@ void RNA_def_main_texts(BlenderRNA *brna, PropertyRNA *cprop)
        func= RNA_def_function(srna, "load", "rna_Main_texts_load");
        RNA_def_function_flag(func, FUNC_USE_REPORTS);
        RNA_def_function_ui_description(func, "Add a new text to the main database from a file");
-       parm= RNA_def_string(func, "filepath", "Path", FILE_MAXDIR + FILE_MAXFILE, "", "path for the datablock.");
+       parm= RNA_def_string_file_path(func, "filepath", "Path", FILE_MAXDIR + FILE_MAXFILE, "", "path for the datablock.");
        RNA_def_property_flag(parm, PROP_REQUIRED);
        /* return type */
        parm= RNA_def_pointer(func, "text", "Text", "", "New text datablock.");
        RNA_def_function_return(func, parm);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_texts_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
+
 void RNA_def_main_sounds(BlenderRNA *brna, PropertyRNA *cprop)
 {
+       StructRNA *srna;
+       FunctionRNA *func;
+       PropertyRNA *parm;
+
+       RNA_def_property_srna(cprop, "BlendDataSounds");
+       srna= RNA_def_struct(brna, "BlendDataSounds", NULL);
+       RNA_def_struct_ui_text(srna, "Main Sounds", "Collection of sounds");
+
+       /* TODO, 'load' */
 
+       func= RNA_def_function(srna, "tag", "rna_Main_sounds_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
+
 void RNA_def_main_armatures(BlenderRNA *brna, PropertyRNA *cprop)
 {
        StructRNA *srna;
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainArmatures");
-       srna= RNA_def_struct(brna, "MainArmatures", NULL);
+       RNA_def_property_srna(cprop, "BlendDataArmatures");
+       srna= RNA_def_struct(brna, "BlendDataArmatures", NULL);
        RNA_def_struct_ui_text(srna, "Main Armatures", "Collection of armatures");
 
        func= RNA_def_function(srna, "new", "rna_Main_armatures_new");
@@ -989,6 +1130,10 @@ void RNA_def_main_armatures(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove a armature from the current blendfile.");
        parm= RNA_def_pointer(func, "armature", "Armature", "", "Armature to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_armatures_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 void RNA_def_main_actions(BlenderRNA *brna, PropertyRNA *cprop)
 {
@@ -996,8 +1141,8 @@ void RNA_def_main_actions(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainActions");
-       srna= RNA_def_struct(brna, "MainActions", NULL);
+       RNA_def_property_srna(cprop, "BlendDataActions");
+       srna= RNA_def_struct(brna, "BlendDataActions", NULL);
        RNA_def_struct_ui_text(srna, "Main Actions", "Collection of actions");
 
        func= RNA_def_function(srna, "new", "rna_Main_actions_new");
@@ -1013,6 +1158,10 @@ void RNA_def_main_actions(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove a action from the current blendfile.");
        parm= RNA_def_pointer(func, "action", "Action", "", "Action to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_actions_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 void RNA_def_main_particles(BlenderRNA *brna, PropertyRNA *cprop)
 {
@@ -1020,8 +1169,8 @@ void RNA_def_main_particles(BlenderRNA *brna, PropertyRNA *cprop)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       RNA_def_property_srna(cprop, "MainParticles");
-       srna= RNA_def_struct(brna, "MainParticles", NULL);
+       RNA_def_property_srna(cprop, "BlendDataParticles");
+       srna= RNA_def_struct(brna, "BlendDataParticles", NULL);
        RNA_def_struct_ui_text(srna, "Main Particle Settings", "Collection of particle settings");
 
        func= RNA_def_function(srna, "new", "rna_Main_particles_new");
@@ -1037,10 +1186,25 @@ void RNA_def_main_particles(BlenderRNA *brna, PropertyRNA *cprop)
        RNA_def_function_ui_description(func, "Remove a particle settings instance from the current blendfile.");
        parm= RNA_def_pointer(func, "particle", "ParticleSettings", "", "Particle Settings to remove.");
        RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL);
+
+       func= RNA_def_function(srna, "tag", "rna_Main_particles_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
+
 void RNA_def_main_gpencil(BlenderRNA *brna, PropertyRNA *cprop)
 {
+       StructRNA *srna;
+       FunctionRNA *func;
+       PropertyRNA *parm;
 
+       RNA_def_property_srna(cprop, "BlendDataGreasePencils");
+       srna= RNA_def_struct(brna, "BlendDataGreasePencils", NULL);
+       RNA_def_struct_ui_text(srna, "Main Grease Pencils", "Collection of grease pencils");
+
+       func= RNA_def_function(srna, "tag", "rna_Main_gpencil_tag");
+       parm= RNA_def_boolean(func, "value", 0, "Value", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED);
 }
 
 #endif