Merge branch 'master' into blender2.8
authorBastien Montagne <montagne29@wanadoo.fr>
Mon, 4 Dec 2017 12:57:26 +0000 (13:57 +0100)
committerBastien Montagne <montagne29@wanadoo.fr>
Mon, 4 Dec 2017 13:07:39 +0000 (14:07 +0100)
Conflicts:
source/blender/blenloader/BLO_readfile.h
source/blender/blenloader/intern/readfile.c
source/blender/windowmanager/intern/wm_files_link.c

1  2 
source/blender/blenloader/BLO_readfile.h
source/blender/blenloader/intern/readfile.c
source/blender/makesdna/DNA_space_types.h
source/blender/windowmanager/intern/wm_files_link.c

index 00d00e98c84ac1d149e27529f9b9027799738245,4fd2e227bc5c332f7f83c4d0c3b62a9381a44dc0..0da15fe5bbc6657c8b505c85242062cdc3ca2794
@@@ -123,10 -123,9 +133,10 @@@ struct Main *BLO_library_link_begin(str
  struct ID *BLO_library_link_named_part(struct Main *mainl, BlendHandle **bh, const short idcode, const char *name);
  struct ID *BLO_library_link_named_part_ex(
          struct Main *mainl, BlendHandle **bh,
-         const short idcode, const char *name, const short flag,
-         struct Scene *scene, struct ViewLayer *view_layer,
-         const bool use_placeholders, const bool force_indirect);
- void BLO_library_link_end(struct Main *mainl, BlendHandle **bh, short flag, struct Scene *scene, struct ViewLayer *view_layer);
+         const short idcode, const char *name, const int flag,
 -        struct Scene *scene, struct View3D *v3d);
 -void BLO_library_link_end(struct Main *mainl, BlendHandle **bh, short flag, struct Scene *scene, struct View3D *v3d);
++        struct Scene *scene, struct ViewLayer *view_layer);
++void BLO_library_link_end(
++        struct Main *mainl, BlendHandle **bh, int flag, struct Scene *scene, struct ViewLayer *view_layer);
  
  void BLO_library_link_copypaste(struct Main *mainl, BlendHandle *bh);
  
index 9e09d2e0bd16e6854f9a0228fb72d36830567f0a,caf58ba3f8624d2c72bf4f41e85d2688098011a6..6df5a5057883366363fddbc1796f52e395f41d10
@@@ -251,10 -238,9 +251,11 @@@ typedef struct OldNewMap 
  /* local prototypes */
  static void *read_struct(FileData *fd, BHead *bh, const char *blockname);
  static void direct_link_modifiers(FileData *fd, ListBase *lb);
 -static void convert_tface_mt(FileData *fd, Main *main);
  static BHead *find_bhead_from_code_name(FileData *fd, const short idcode, const char *name);
  static BHead *find_bhead_from_idname(FileData *fd, const char *idname);
- static SceneCollection *get_scene_collection_active_or_create(struct Scene *scene, struct ViewLayer *view_layer, const short flag);
 +static void expand_scene_collection(FileData *fd, Main *mainvar, SceneCollection *sc);
++static SceneCollection *get_scene_collection_active_or_create(
++        struct Scene *scene, struct ViewLayer *view_layer, const int flag);
  
  /* this function ensures that reports are printed,
   * in the case of libraray linking errors this is important!
@@@ -10418,42 -10082,31 +10421,43 @@@ static ID *link_named_part
        return id;
  }
  
- static SceneCollection *get_scene_collection_active_or_create(struct Scene *scene, struct ViewLayer *view_layer, const short flag)
 -static void link_object_postprocess(ID *id, Scene *scene, View3D *v3d, const int flag)
++static SceneCollection *get_scene_collection_active_or_create(
++        struct Scene *scene, struct ViewLayer *view_layer, const int flag)
 +{
 +      LayerCollection *lc = NULL;
 +
 +      if (flag & FILE_ACTIVE_COLLECTION) {
 +              lc = BKE_layer_collection_get_active_ensure(scene, view_layer);
 +      }
 +      else {
 +              SceneCollection *sc = BKE_collection_add(&scene->id, NULL, COLLECTION_TYPE_NONE, NULL);
 +              lc = BKE_collection_link(view_layer, sc);
 +      }
 +
 +      return lc->scene_collection;
 +}
 +
- static void link_object_postprocess(ID *id, Scene *scene, ViewLayer *view_layer, const short flag)
++static void link_object_postprocess(ID *id, Scene *scene, ViewLayer *view_layer, const int flag)
  {
        if (scene) {
 +              /* link to scene */
                Base *base;
                Object *ob;
 -
 -              base = MEM_callocN(sizeof(Base), "app_nam_part");
 -              BLI_addtail(&scene->base, base);
 +              SceneCollection *sc;
  
                ob = (Object *)id;
 -
 -              /* link at active layer (view3d if available in context, else scene one */
 -              if (flag & FILE_ACTIVELAY) {
 -                      ob->lay = BKE_screen_view3d_layer_active(v3d, scene);
 -              }
 -
                ob->mode = OB_MODE_OBJECT;
 -              base->lay = ob->lay;
 -              base->object = ob;
 -              base->flag = ob->flag;
 -              id_us_plus_no_lib((ID *)ob);
 +
 +              sc =  get_scene_collection_active_or_create(scene, view_layer, flag);
 +              BKE_collection_object_add(&scene->id, sc, ob);
 +              base = BKE_view_layer_base_find(view_layer, ob);
 +              BKE_scene_object_base_flag_sync_from_base(base);
  
                if (flag & FILE_AUTOSELECT) {
 -                      base->flag |= SELECT;
 -                      base->object->flag = base->flag;
 +                      if (base->flag & BASE_SELECTABLED) {
 +                              base->flag |= BASE_SELECTED;
 +                              BKE_scene_object_base_flag_sync_from_base(base);
 +                      }
                        /* do NOT make base active here! screws up GUI stuff, if you want it do it on src/ level */
                }
        }
@@@ -10495,13 -10148,13 +10499,13 @@@ void BLO_library_link_copypaste(Main *m
  }
  
  static ID *link_named_part_ex(
-         Main *mainl, FileData *fd, const short idcode, const char *name, const short flag,
-         Scene *scene, ViewLayer *view_layer, const bool use_placeholders, const bool force_indirect)
+         Main *mainl, FileData *fd, const short idcode, const char *name, const int flag,
 -        Scene *scene, View3D *v3d)
++        Scene *scene, ViewLayer *view_layer)
  {
-       ID *id = link_named_part(mainl, fd, idcode, name, use_placeholders, force_indirect);
+       ID *id = link_named_part(mainl, fd, idcode, name, flag);
  
        if (id && (GS(id->name) == ID_OB)) {    /* loose object: give a base */
 -              link_object_postprocess(id, scene, v3d, flag);
 +              link_object_postprocess(id, scene, view_layer, flag);
        }
        else if (id && (GS(id->name) == ID_GR)) {
                /* tag as needing to be instantiated */
@@@ -10544,12 -10195,11 +10546,11 @@@ ID *BLO_library_link_named_part(Main *m
   */
  ID *BLO_library_link_named_part_ex(
          Main *mainl, BlendHandle **bh,
-         const short idcode, const char *name, const short flag,
-         Scene *scene, ViewLayer *view_layer,
-         const bool use_placeholders, const bool force_indirect)
+         const short idcode, const char *name, const int flag,
 -        Scene *scene, View3D *v3d)
++        Scene *scene, ViewLayer *view_layer)
  {
        FileData *fd = (FileData*)(*bh);
-       return link_named_part_ex(mainl, fd, idcode, name, flag, scene, view_layer, use_placeholders, force_indirect);
 -      return link_named_part_ex(mainl, fd, idcode, name, flag, scene, v3d);
++      return link_named_part_ex(mainl, fd, idcode, name, flag, scene, view_layer);
  }
  
  static void link_id_part(ReportList *reports, FileData *fd, Main *mainvar, ID *id, ID **r_id)
@@@ -10747,12 -10397,12 +10748,12 @@@ static void library_link_end(Main *main
   * \param bh The blender file handle (WARNING! may be freed by this function!).
   * \param flag Options for linking, used for instantiating.
   * \param scene The scene in which to instantiate objects/groups (if NULL, no instantiation is done).
 - * \param v3d The active View3D (only to define active layers for instantiated objects & groups, can be NULL).
 + * \param view_layer The scene layer in which to instantiate objects/groups (if NULL, no instantiation is done).
   */
- void BLO_library_link_end(Main *mainl, BlendHandle **bh, short flag, Scene *scene, ViewLayer *view_layer)
 -void BLO_library_link_end(Main *mainl, BlendHandle **bh, short flag, Scene *scene, View3D *v3d)
++void BLO_library_link_end(Main *mainl, BlendHandle **bh, int flag, Scene *scene, ViewLayer *view_layer)
  {
        FileData *fd = (FileData*)(*bh);
 -      library_link_end(mainl, &fd, flag, scene, v3d);
 +      library_link_end(mainl, &fd, flag, scene, view_layer);
        *bh = (BlendHandle*)fd;
  }
  
index 2086ade99d29ed405408adb20bde7fb125eb5888,05c569cbaacb3fad10f6114cd1dbb2988276347e..cd6a38cb9a8b56f91896701071ef92663d1c4329
@@@ -213,9 -211,7 +213,8 @@@ static WMLinkAppendDataItem *wm_link_ap
        return item;
  }
  
 -static void wm_link_do(WMLinkAppendData *lapp_data, ReportList *reports, Main *bmain, Scene *scene, View3D *v3d)
 +static void wm_link_do(
-         WMLinkAppendData *lapp_data, ReportList *reports, Main *bmain, Scene *scene, ViewLayer *view_layer,
-         const bool use_placeholders, const bool force_indirect)
++        WMLinkAppendData *lapp_data, ReportList *reports, Main *bmain, Scene *scene, ViewLayer *view_layer)
  {
        Main *mainl;
        BlendHandle *bh;
                                continue;
                        }
  
-                       new_id = BLO_library_link_named_part_ex(
-                                    mainl, &bh, item->idcode, item->name, flag, scene, view_layer, use_placeholders, force_indirect);
 -                      new_id = BLO_library_link_named_part_ex(mainl, &bh, item->idcode, item->name, flag, scene, v3d);
++                      new_id = BLO_library_link_named_part_ex(mainl, &bh, item->idcode, item->name, flag, scene, view_layer);
  
                        if (new_id) {
                                /* If the link is successful, clear item's libs 'todo' flags.
@@@ -372,10 -329,12 +370,12 @@@ static int wm_link_append_exec(bContex
                scene = NULL;
        }
  
+       /* We need to add nothing from BLO_LibLinkFlags to flag here. */
        /* from here down, no error returns */
  
 -      if (scene && RNA_boolean_get(op->ptr, "autoselect")) {
 -              BKE_scene_base_deselect_all(scene);
 +      if (view_layer && RNA_boolean_get(op->ptr, "autoselect")) {
 +              BKE_view_layer_base_deselect_all(view_layer);
        }
        
        /* tag everything, all untagged data can be made local
        /* XXX We'd need re-entrant locking on Main for this to work... */
        /* BKE_main_lock(bmain); */
  
-       wm_link_do(lapp_data, op->reports, bmain, scene, view_layer, false, false);
 -      wm_link_do(lapp_data, op->reports, bmain, scene, CTX_wm_view3d(C));
++      wm_link_do(lapp_data, op->reports, bmain, scene, view_layer);
  
        /* BKE_main_unlock(bmain); */
  
@@@ -924,7 -868,11 +924,11 @@@ static int wm_lib_relocate_exec_do(bCon
                        }
                }
  
 -              lib_relocate_do(bmain, scene, lib, lapp_data, op->reports, do_reload);
+               if (do_reload) {
+                       lapp_data->flag |= BLO_LIBLINK_USE_PLACEHOLDERS | BLO_LIBLINK_FORCE_INDIRECT;
+               }
 +              lib_relocate_do(bmain, lib, lapp_data, op->reports, do_reload);
  
                wm_link_append_data_free(lapp_data);