Commit: 6bf915e925cc45616642f7db622ca7fb3e7b619a
Author: Bastien Montagne
Date:   Tue Oct 27 14:46:51 2015 +0100
Branches: id-remap
https://developer.blender.org/rB6bf915e925cc45616642f7db622ca7fb3e7b619a

Merge branch 'master' into id-remap

===================================================================



===================================================================

diff --cc source/blender/blenkernel/BKE_material.h
index ad98664,d32d679..948d373
--- a/source/blender/blenkernel/BKE_material.h
+++ b/source/blender/blenkernel/BKE_material.h
@@@ -45,10 -45,11 +45,11 @@@ struct Scene
  /* materials */
  
  void init_def_material(void);
- void BKE_material_free(struct Material *ma);
 -void BKE_material_free(struct Material *sc); 
++void BKE_material_free(struct Material *ma); 
+ void BKE_material_free_ex(struct Material *ma, bool do_id_user);
  void test_object_materials(struct Main *bmain, struct ID *id);
  void BKE_material_resize_object(struct Object *ob, const short totcol, bool 
do_id_user);
- void BKE_init_material(struct Material *ma);
+ void BKE_material_init(struct Material *ma);
  void BKE_material_remap_object(struct Object *ob, const unsigned int *remap);
  struct Material *BKE_material_add(struct Main *bmain, const char *name);
  struct Material *BKE_material_copy(struct Material *ma);
diff --cc source/blender/blenkernel/intern/material.c
index 4589ad2,a69b5fd..dd5772a
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@@ -78,41 -78,53 +78,41 @@@ Material defmaterial
  /* called on startup, creator.c */
  void init_def_material(void)
  {
-       BKE_init_material(&defmaterial);
+       BKE_material_init(&defmaterial);
  }
  
 -/* not material itself */
 +/** Free (or release) any data used by this material (does not free the 
material itself). */
  void BKE_material_free(Material *ma)
  {
 -      BKE_material_free_ex(ma, true);
 -}
 -
 -/* not material itself */
 -void BKE_material_free_ex(Material *ma, bool do_id_user)
 -{
 -      MTex *mtex;
        int a;
 +
 +      BKE_animdata_free((ID *)ma);
        
        for (a = 0; a < MAX_MTEX; a++) {
 -              mtex = ma->mtex[a];
 -              if (do_id_user && mtex && mtex->tex) mtex->tex->id.us--;
 -              if (mtex) MEM_freeN(mtex);
 +              MEM_SAFE_FREE(ma->mtex[a]);
        }
        
 -      if (ma->ramp_col) MEM_freeN(ma->ramp_col);
 -      if (ma->ramp_spec) MEM_freeN(ma->ramp_spec);
 -      
 -      BKE_animdata_free((ID *)ma);
 -      
 -      if (ma->preview)
 -              BKE_previewimg_free(&ma->preview);
 -      BKE_icon_id_delete((struct ID *)ma);
 -      ma->id.icon_id = 0;
 +      MEM_SAFE_FREE(ma->ramp_col);
 +      MEM_SAFE_FREE(ma->ramp_spec);
        
        /* is no lib link block, but material extension */
        if (ma->nodetree) {
 -              ntreeFreeTree_ex(ma->nodetree, do_id_user);
 +              ntreeFreeTree(ma->nodetree);
                MEM_freeN(ma->nodetree);
 +              ma->nodetree = NULL;
        }
  
 -      if (ma->texpaintslot)
 -              MEM_freeN(ma->texpaintslot);
 +      MEM_SAFE_FREE(ma->texpaintslot);
 +
 +      GPU_material_free(&ma->gpumaterial);
  
 -      if (ma->gpumaterial.first)
 -              GPU_material_free(&ma->gpumaterial);
 +      BKE_icon_id_delete((ID *)ma);
 +      BKE_previewimg_free(&ma->preview);
  }
  
- void BKE_init_material(Material *ma)
+ void BKE_material_init(Material *ma)
  {
-       BLI_assert(MEMCMP_NULL_STRUCT_OFS(ma, id));
+       BLI_assert(MEMCMP_STRUCT_OFS_IS_ZERO(ma, id));
  
        ma->r = ma->g = ma->b = ma->ref = 0.8;
        ma->specr = ma->specg = ma->specb = 1.0;
diff --cc source/blender/blenkernel/intern/mball.c
index 3d7d4d4,bd9fd33..7e014fc
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@@ -66,15 -66,29 +66,15 @@@
  
  /* Functions */
  
 -void BKE_mball_unlink(MetaBall *mb)
 +/** Free (or release) any data used by this mball (does not free the mball 
itself). */
 +void BKE_mball_free(MetaBall *mb)
  {
 -      int a;
 -      
 -      for (a = 0; a < mb->totcol; a++) {
 -              if (mb->mat[a]) mb->mat[a]->id.us--;
 -              mb->mat[a] = NULL;
 -      }
 -}
 +      BKE_animdata_free((ID *)mb);
  
 +      MEM_SAFE_FREE(mb->mat);
  
 -/* do not free mball itself */
 -void BKE_mball_free(MetaBall *mb)
 -{
 -      BKE_mball_unlink(mb);
 -      
 -      if (mb->adt) {
 -              BKE_animdata_free((ID *)mb);
 -              mb->adt = NULL;
 -      }
 -      if (mb->mat) MEM_freeN(mb->mat);
        BLI_freelistN(&mb->elems);
-       BKE_displist_free(&mb->disp);
+       if (mb->disp.first) BKE_displist_free(&mb->disp);
  }
  
  void BKE_mball_init(MetaBall *mb)
diff --cc source/blender/blenkernel/intern/scene.c
index 5ebdf96,d73797c..139a7ba
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@@ -1082,10 -1130,8 +1082,10 @@@ void BKE_scene_base_unlink(Scene *sce, 
        /* remove rigid body object from world before removing object */
        if (base->object->rigidbody_object)
                BKE_rigidbody_remove_object(sce, base->object);
- 
+       
        BLI_remlink(&sce->base, base);
 +      if (sce->basact == base)
 +              sce->basact = NULL;
  }
  
  void BKE_scene_base_deselect_all(Scene *sce)
diff --cc source/blender/editors/space_outliner/outliner_intern.h
index 541608d,f10e6be..410a749
--- a/source/blender/editors/space_outliner/outliner_intern.h
+++ b/source/blender/editors/space_outliner/outliner_intern.h
@@@ -150,8 -150,15 +150,15 @@@ int outliner_item_do_activate(struct bC
  
  /* outliner_edit.c ---------------------------------------------- */
  
- void outliner_do_object_operation(struct bContext *C, struct Scene *scene, 
struct SpaceOops *soops, struct ListBase *lb,
-                                   void (*operation_cb)(struct bContext *C, 
struct Scene *scene, struct TreeElement *, struct TreeStoreElem *, 
TreeStoreElem *, void *));
+ void outliner_do_object_operation_ex(
+         struct bContext *C, struct Scene *scene, struct SpaceOops *soops, 
struct ListBase *lb,
+         void (*operation_cb)(struct bContext *C, struct Scene *scene,
 -                             struct TreeElement *, struct TreeStoreElem *, 
TreeStoreElem *),
++                             struct TreeElement *, struct TreeStoreElem *, 
TreeStoreElem *, void *),
+         bool recurse_selected);
+ void outliner_do_object_operation(
+         struct bContext *C, struct Scene *scene, struct SpaceOops *soops, 
struct ListBase *lb,
+         void (*operation_cb)(struct bContext *C, struct Scene *scene,
 -                             struct TreeElement *, struct TreeStoreElem *, 
TreeStoreElem *));
++                             struct TreeElement *, struct TreeStoreElem *, 
TreeStoreElem *, void *));
  
  int common_restrict_check(struct bContext *C, struct Object *ob);
  
diff --cc source/blender/editors/space_outliner/outliner_tools.c
index 02506f1,863f09d..7758f2f
--- a/source/blender/editors/space_outliner/outliner_tools.c
+++ b/source/blender/editors/space_outliner/outliner_tools.c
@@@ -522,15 -516,20 +522,20 @@@ static void group_instance_cb(bContext 
        id_lib_extern(&group->id);
  }
  
- void outliner_do_object_operation(bContext *C, Scene *scene_act, SpaceOops 
*soops, ListBase *lb, 
-                                   void (*operation_cb)(bContext *C, Scene 
*scene, TreeElement *,
-                                                        TreeStoreElem *, 
TreeStoreElem *, void *))
+ /**
+  * \param select_recurse: Set to false for operations which are already 
recursively operating on their children.
+  */
+ void outliner_do_object_operation_ex(
+         bContext *C, Scene *scene_act, SpaceOops *soops, ListBase *lb,
+         void (*operation_cb)(bContext *C, Scene *scene, TreeElement *,
 -                             TreeStoreElem *, TreeStoreElem *),
++                             TreeStoreElem *, TreeStoreElem *, void *),
+         bool select_recurse)
  {
        TreeElement *te;
-       TreeStoreElem *tselem;
        
        for (te = lb->first; te; te = te->next) {
-               tselem = TREESTORE(te);
+               TreeStoreElem *tselem = TREESTORE(te);
+               bool select_handled = false;
                if (tselem->flag & TSE_SELECTED) {
                        if (tselem->type == 0 && te->idcode == ID_OB) {
                                // when objects selected in other scenes... 
dunno if that should be allowed
@@@ -541,7 -540,8 +546,8 @@@
                                /* important to use 'scene_owner' not scene_act 
else deleting objects can crash.
                                 * only use 'scene_act' when 'scene_owner' is 
NULL, which can happen when the
                                 * outliner isn't showing scenes: Visible Layer 
draw mode for eg. */
 -                              operation_cb(C, scene_owner ? scene_owner : 
scene_act, te, NULL, tselem);
 +                              operation_cb(C, scene_owner ? scene_owner : 
scene_act, te, NULL, tselem, NULL);
+                               select_handled = true;
                        }
                }
                if (TSELEM_OPEN(tselem, soops)) {
@@@ -550,6 -552,14 +558,12 @@@
        }
  }
  
 -void outliner_do_object_operation(
 -        bContext *C, Scene *scene_act, SpaceOops *soops, ListBase *lb,
 -        void (*operation_cb)(bContext *C, Scene *scene, TreeElement *,
 -                             TreeStoreElem *, TreeStoreElem *))
++void outliner_do_object_operation(bContext *C, Scene *scene_act, SpaceOops 
*soops, ListBase *lb,
++        void (*operation_cb)(bContext *, Scene *, TreeElement *, 
TreeStoreElem *, TreeStoreElem *, void *))
+ {
+       outliner_do_object_operation_ex(C, scene_act, soops, lb, operation_cb, 
true);
+ }
+ 
  /* ******************************************** */
  
  static void clear_animdata_cb(int UNUSED(event), TreeElement *UNUSED(te),
diff --cc source/blender/makesrna/intern/rna_ID.c
index ed40f5c,43ffc77..fdd957c
--- a/source/blender/makesrna/intern/rna_ID.c
+++ b/source/blender/makesrna/intern/rna_ID.c
@@@ -981,15 -974,9 +981,15 @@@ static void rna_def_ID(BlenderRNA *brna
        RNA_def_function_return(func, parm);
  
        func = RNA_def_function(srna, "user_clear", "rna_ID_user_clear");
-       RNA_def_function_ui_description(func, "Clear the user count of a 
datablock so its not saved, "
+       RNA_def_function_ui_description(func, "Clear the user count of a 
data-block so its not saved, "
                                        "on reload the data will be removed");
  
 +      func = RNA_def_function(srna, "user_remap", "rna_ID_user_remap");
 +      RNA_def_function_ui_description(func, "Replace all usage in the .blend 
file of this ID by new given one");
 +      RNA_def_function_flag(func, FUNC_USE_MAIN);
 +      parm = RNA_def_pointer(func, "new_id", "ID", "", "New ID to use");
 +      RNA_def_property_flag(parm, PROP_NEVER_NULL);
 +
        func = RNA_def_function(srna, "animation_data_create", 
"rna_ID_animation_data_create");
        RNA_def_function_flag(func, FUNC_USE_MAIN);
        RNA_def_function_ui_description(func, "Create animation data to this 
ID, note that not all ID types support this");

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

Reply via email to