[Bf-blender-cvs] [3042994c916] master: Link/Append: Refactor flags.

Bastien Montagne noreply at git.blender.org
Thu Sep 23 11:03:40 CEST 2021


Commit: 3042994c91667f9c8a1ecadc11e69c012c33d581
Author: Bastien Montagne
Date:   Thu Sep 23 10:43:31 2021 +0200
Branches: master
https://developer.blender.org/rB3042994c91667f9c8a1ecadc11e69c012c33d581

Link/Append: Refactor flags.

Flags controlling link/append code are split between two enums, one in
`DNA_space_types.h` and one in `BLO_readfile.h`.

This commit:
 - Moves flags exclusively used in WM and BLO code to `eBLOLibLinkFlags`
   in `BLO_readfile.h`. Flags in `eFileSel_Params_Flag` from
   `DNA_space_types.h` are now only the ones effectively used by the
   file browser editor code too.
 - Fixes some internal utils in `readfile.c` still taking `short` flag
   parameter instead of proper `int` one.

NOTE: there are a few other flags that could probably be moved to
`eBLOLibLinkFlags` (at the very least `FILE_LINK`, probably also
`FILE_AUTOSELECT` and `FILE_ACTIVE_COLLECTION`), since those are not
effectively used by the file browser, and control linking/appending
behavior, not filebrowser behavior.

However for now think it's safer to not touch that.

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

M	source/blender/blenloader/BLO_readfile.h
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/blenloader/intern/versioning_300.c
M	source/blender/makesdna/DNA_space_types.h
M	source/blender/windowmanager/intern/wm_files_link.c

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

diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h
index 4b7f29dd7dc..1f0203b45e9 100644
--- a/source/blender/blenloader/BLO_readfile.h
+++ b/source/blender/blenloader/BLO_readfile.h
@@ -209,6 +209,14 @@ typedef enum eBLOLibLinkFlags {
    * don't need to remember to set this flag.
    */
   BLO_LIBLINK_NEEDS_ID_TAG_DOIT = 1 << 18,
+  /** Set fake user on appended IDs. */
+  BLO_LIBLINK_APPEND_SET_FAKEUSER = 1 << 19,
+  /** Append (make local) also indirect dependencies of appendeds IDs. */
+  BLO_LIBLINK_APPEND_RECURSIVE = 1 << 20,
+  /** Instantiate object data IDs (i.e. create objects for them if needed). */
+  BLO_LIBLINK_OBDATA_INSTANCE = 1 << 21,
+  /** Instantiate collections as empties, instead of linking them into current view layer. */
+  BLO_LIBLINK_COLLECTION_INSTANCE = 1 << 22,
 } eBLOLibLinkFlags;
 
 /**
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 3cda1e613f8..cdae043d01c 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -4496,7 +4496,7 @@ static void add_loose_objects_to_scene(Main *mainvar,
                                        ViewLayer *view_layer,
                                        const View3D *v3d,
                                        Library *lib,
-                                       const short flag)
+                                       const int flag)
 {
   Collection *active_collection = NULL;
   const bool do_append = (flag & FILE_LINK) == 0;
@@ -4556,9 +4556,9 @@ static void add_loose_object_data_to_scene(Main *mainvar,
                                            Scene *scene,
                                            ViewLayer *view_layer,
                                            const View3D *v3d,
-                                           const short flag)
+                                           const int flag)
 {
-  if ((flag & FILE_OBDATA_INSTANCE) == 0) {
+  if ((flag & BLO_LIBLINK_OBDATA_INSTANCE) == 0) {
     return;
   }
 
@@ -4617,7 +4617,7 @@ static void add_collections_to_scene(Main *mainvar,
                                      ViewLayer *view_layer,
                                      const View3D *v3d,
                                      Library *lib,
-                                     const short flag)
+                                     const int flag)
 {
   Collection *active_collection = scene->master_collection;
   if (flag & FILE_ACTIVE_COLLECTION) {
@@ -4627,7 +4627,7 @@ static void add_collections_to_scene(Main *mainvar,
 
   /* Give all objects which are tagged a base. */
   LISTBASE_FOREACH (Collection *, collection, &mainvar->collections) {
-    if ((flag & FILE_COLLECTION_INSTANCE) && (collection->id.tag & LIB_TAG_DOIT)) {
+    if ((flag & BLO_LIBLINK_COLLECTION_INSTANCE) && (collection->id.tag & LIB_TAG_DOIT)) {
       /* Any indirect collection should not have been tagged. */
       BLI_assert((collection->id.tag & LIB_TAG_INDIRECT) == 0);
 
@@ -4830,7 +4830,7 @@ static bool library_link_idcode_needs_tag_check(const short idcode, const int fl
     if (ELEM(idcode, ID_OB, ID_GR)) {
       return true;
     }
-    if (flag & FILE_OBDATA_INSTANCE) {
+    if (flag & BLO_LIBLINK_OBDATA_INSTANCE) {
       if (OB_DATA_SUPPORT_ID(idcode)) {
         return true;
       }
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 69b67460a5d..292ca726b6f 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -3416,8 +3416,8 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
             case SPACE_FILE: {
               SpaceFile *sfile = (SpaceFile *)sl;
               if (sfile->params) {
-                sfile->params->flag &= ~(FILE_APPEND_SET_FAKEUSER | FILE_APPEND_RECURSIVE |
-                                         FILE_OBDATA_INSTANCE);
+                sfile->params->flag &= ~(FILE_PARAMS_FLAG_UNUSED_1 | FILE_PARAMS_FLAG_UNUSED_2 |
+                                         FILE_PARAMS_FLAG_UNUSED_3);
               }
               break;
             }
diff --git a/source/blender/blenloader/intern/versioning_300.c b/source/blender/blenloader/intern/versioning_300.c
index 58265bca238..9908e231452 100644
--- a/source/blender/blenloader/intern/versioning_300.c
+++ b/source/blender/blenloader/intern/versioning_300.c
@@ -1438,5 +1438,24 @@ void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain)
         }
       }
     }
+
+    LISTBASE_FOREACH (bScreen *, screen, &bmain->screens) {
+      LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) {
+        LISTBASE_FOREACH (SpaceLink *, sl, &area->spacedata) {
+          switch (sl->spacetype) {
+            case SPACE_FILE: {
+              SpaceFile *sfile = (SpaceFile *)sl;
+              if (sfile->params) {
+                sfile->params->flag &= ~(FILE_PARAMS_FLAG_UNUSED_1 | FILE_PARAMS_FLAG_UNUSED_2 |
+                                         FILE_PARAMS_FLAG_UNUSED_3 | FILE_PARAMS_FLAG_UNUSED_4);
+              }
+              break;
+            }
+            default:
+              break;
+          }
+        }
+      }
+    }
   }
 }
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index e849039fa93..cebe8fc61fe 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -984,17 +984,17 @@ typedef enum eFileSel_Action {
  * (WM and BLO code area, see #eBLOLibLinkFlags in BLO_readfile.h).
  */
 typedef enum eFileSel_Params_Flag {
-  FILE_APPEND_SET_FAKEUSER = (1 << 0),
+  FILE_PARAMS_FLAG_UNUSED_1 = (1 << 0),
   FILE_RELPATH = (1 << 1),
   FILE_LINK = (1 << 2),
   FILE_HIDE_DOT = (1 << 3),
   FILE_AUTOSELECT = (1 << 4),
   FILE_ACTIVE_COLLECTION = (1 << 5),
-  FILE_APPEND_RECURSIVE = (1 << 6),
+  FILE_PARAMS_FLAG_UNUSED_2 = (1 << 6),
   FILE_DIRSEL_ONLY = (1 << 7),
   FILE_FILTER = (1 << 8),
-  FILE_OBDATA_INSTANCE = (1 << 9),
-  FILE_COLLECTION_INSTANCE = (1 << 10),
+  FILE_PARAMS_FLAG_UNUSED_3 = (1 << 9),
+  FILE_PARAMS_FLAG_UNUSED_4 = (1 << 10),
   FILE_SORT_INVERT = (1 << 11),
   FILE_HIDE_TOOL_PROPS = (1 << 12),
   FILE_CHECK_EXISTING = (1 << 13),
diff --git a/source/blender/windowmanager/intern/wm_files_link.c b/source/blender/windowmanager/intern/wm_files_link.c
index 321c7da3765..820a5990479 100644
--- a/source/blender/windowmanager/intern/wm_files_link.c
+++ b/source/blender/windowmanager/intern/wm_files_link.c
@@ -127,10 +127,10 @@ static int wm_link_append_invoke(bContext *C, wmOperator *op, const wmEvent *UNU
   return OPERATOR_RUNNING_MODAL;
 }
 
-static short wm_link_append_flag(wmOperator *op)
+static int wm_link_append_flag(wmOperator *op)
 {
   PropertyRNA *prop;
-  short flag = 0;
+  int flag = 0;
 
   if (RNA_boolean_get(op->ptr, "autoselect")) {
     flag |= FILE_AUTOSELECT;
@@ -147,17 +147,17 @@ static short wm_link_append_flag(wmOperator *op)
   }
   else {
     if (RNA_boolean_get(op->ptr, "use_recursive")) {
-      flag |= FILE_APPEND_RECURSIVE;
+      flag |= BLO_LIBLINK_APPEND_RECURSIVE;
     }
     if (RNA_boolean_get(op->ptr, "set_fake")) {
-      flag |= FILE_APPEND_SET_FAKEUSER;
+      flag |= BLO_LIBLINK_APPEND_SET_FAKEUSER;
     }
   }
   if (RNA_boolean_get(op->ptr, "instance_collections")) {
-    flag |= FILE_COLLECTION_INSTANCE;
+    flag |= BLO_LIBLINK_COLLECTION_INSTANCE;
   }
   if (RNA_boolean_get(op->ptr, "instance_object_data")) {
-    flag |= FILE_OBDATA_INSTANCE;
+    flag |= BLO_LIBLINK_OBDATA_INSTANCE;
   }
 
   return flag;
@@ -396,7 +396,7 @@ static void wm_append_loose_data_instantiate(WMLinkAppendData *lapp_data,
 
   LinkNode *itemlink;
   Collection *active_collection = NULL;
-  const bool do_obdata = (lapp_data->flag & FILE_OBDATA_INSTANCE) != 0;
+  const bool do_obdata = (lapp_data->flag & BLO_LIBLINK_OBDATA_INSTANCE) != 0;
 
   const bool object_set_selected = (lapp_data->flag & FILE_AUTOSELECT) != 0;
   /* Do NOT make base active here! screws up GUI stuff,
@@ -472,7 +472,7 @@ static void wm_append_loose_data_instantiate(WMLinkAppendData *lapp_data,
 
       /* In case user requested instantiation of collections as empties, we do so for the one they
        * explicitly selected (originally directly linked IDs). */
-      if ((lapp_data->flag & FILE_COLLECTION_INSTANCE) != 0 &&
+      if ((lapp_data->flag & BLO_LIBLINK_COLLECTION_INSTANCE) != 0 &&
           (item->append_tag & WM_APPEND_TAG_INDIRECT) == 0) {
         /* BKE_object_add(...) messes with the selection. */
         Object *ob = BKE_object_add_only_object(bmain, OB_EMPTY, collection->id.name + 2);
@@ -626,8 +626,8 @@ static void wm_append_do(WMLinkAppendData *lapp_data,
 {
   BLI_assert((lapp_data->flag & FILE_LINK) == 0);
 
-  const bool do_recursive = (lapp_data->flag & FILE_APPEND_RECURSIVE) != 0;
-  const bool set_fakeuser = (lapp_data->flag & FILE_APPEND_SET_FAKEUSER) != 0;
+  const bool do_recursive = (lapp_data->flag & BLO_LIBLINK_APPEND_RECURSIVE) != 0;
+  const bool set_fakeuser = (lapp_data->flag & BLO_LIBLINK_APPEND_SET_FAKEUSER) != 0;
 
   LinkNode *itemlink;
 
@@ -1057,7 +1057,7 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
     return OPERATOR_CANCELLED;
   }
 
-  short flag = wm_link_append_flag(op);
+  int flag = wm_link_append_flag(op);
   const bool do_append = (flag & FILE_LINK) == 0;
 
   /* sanity checks for flag */
@@ -1066,12 +1066,10 @@ static int wm_link_append_exec(bContext *C, wmOperator *op)
                 RPT_WARNING,
                 "Scene '%s' is linked, instantiation of objects is disabled",
                 scene->id.name + 2);
-    flag &= ~(FILE_COLLECTION_INSTANCE | FILE_OBDATA_INSTANCE);
+    flag &= ~(BLO_LIBLINK_COLLECTION_INSTANCE | BLO_LIBLINK_OBDATA_INSTANCE);
     scene = NULL;
   }
 
-  /* We need to add nothing from #eBLOLibLinkFlags to flag here. */
-
   /* from here down, no error returns */
 
   if (view_layer && RNA_boolean_get(op->ptr, "autoselect")) {
@@ -1305,7 +1303,8 @@ static ID *wm_file_link_append_datablock_ex(Main *bmain,
   BKE_main_id_tag_all(bmain, LIB_TAG_PRE_EXISTING, 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list