[Bf-blender-cvs] [e810a16d75d] master: Refactor: move wmWindowManager .blend I/O to IDTypeInfo callbacks

Jacques Lucke noreply at git.blender.org
Fri Nov 6 13:05:03 CET 2020


Commit: e810a16d75d346646720814740f8e2a241f4bd8b
Author: Jacques Lucke
Date:   Fri Nov 6 13:04:44 2020 +0100
Branches: master
https://developer.blender.org/rBe810a16d75d346646720814740f8e2a241f4bd8b

Refactor: move wmWindowManager .blend I/O to IDTypeInfo callbacks

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

M	source/blender/blenloader/BLO_read_write.h
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/windowmanager/CMakeLists.txt
M	source/blender/windowmanager/intern/wm.c

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

diff --git a/source/blender/blenloader/BLO_read_write.h b/source/blender/blenloader/BLO_read_write.h
index 3600ae504a1..9ac9422c6a9 100644
--- a/source/blender/blenloader/BLO_read_write.h
+++ b/source/blender/blenloader/BLO_read_write.h
@@ -210,6 +210,7 @@ void BLO_read_pointer_array(BlendDataReader *reader, void **ptr_p);
 /* Misc. */
 bool BLO_read_requires_endian_switch(BlendDataReader *reader);
 bool BLO_read_data_is_undo(BlendDataReader *reader);
+void BLO_read_data_globmap_add(BlendDataReader *reader, void *oldaddr, void *newaddr);
 
 /* Blend Read Lib API
  * ===================
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 855d320a63d..8c457670256 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2568,21 +2568,6 @@ static void lib_link_constraint_channels(BlendLibReader *reader, ID *id, ListBas
 
 /** \} */
 
-/* -------------------------------------------------------------------- */
-/** \name Read ID: WorkSpace
- * \{ */
-
-static void lib_link_workspace_instance_hook(BlendLibReader *reader,
-                                             WorkSpaceInstanceHook *hook,
-                                             ID *id)
-{
-  WorkSpace *workspace = BKE_workspace_active_get(hook);
-  BLO_read_id_address(reader, id->lib, &workspace);
-  BKE_workspace_active_set(hook, workspace);
-}
-
-/** \} */
-
 /* -------------------------------------------------------------------- */
 /** \name Read ID: Armature
  * \{ */
@@ -4566,129 +4551,6 @@ static void direct_link_scene(BlendDataReader *reader, Scene *sce)
 
 /** \} */
 
-/* -------------------------------------------------------------------- */
-/** \name XR-data
- * \{ */
-
-static void direct_link_wm_xr_data(BlendDataReader *reader, wmXrData *xr_data)
-{
-  BKE_screen_view3d_shading_blend_read_data(reader, &xr_data->session_settings.shading);
-}
-
-static void lib_link_wm_xr_data(BlendLibReader *reader, ID *parent_id, wmXrData *xr_data)
-{
-  BLO_read_id_address(reader, parent_id->lib, &xr_data->session_settings.base_pose_object);
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Read ID: Window Manager
- * \{ */
-
-static void direct_link_windowmanager(BlendDataReader *reader, wmWindowManager *wm)
-{
-  id_us_ensure_real(&wm->id);
-  BLO_read_list(reader, &wm->windows);
-
-  LISTBASE_FOREACH (wmWindow *, win, &wm->windows) {
-    BLO_read_data_address(reader, &win->parent);
-
-    WorkSpaceInstanceHook *hook = win->workspace_hook;
-    BLO_read_data_address(reader, &win->workspace_hook);
-
-    /* This will be NULL for any pre-2.80 blend file. */
-    if (win->workspace_hook != NULL) {
-      /* We need to restore a pointer to this later when reading workspaces,
-       * so store in global oldnew-map.
-       * Note that this is only needed for versioning of older .blend files now.. */
-      oldnewmap_insert(reader->fd->globmap, hook, win->workspace_hook, 0);
-      /* Cleanup pointers to data outside of this data-block scope. */
-      win->workspace_hook->act_layout = NULL;
-      win->workspace_hook->temp_workspace_store = NULL;
-      win->workspace_hook->temp_layout_store = NULL;
-    }
-
-    BKE_screen_area_map_blend_read_data(reader, &win->global_areas);
-
-    win->ghostwin = NULL;
-    win->gpuctx = NULL;
-    win->eventstate = NULL;
-    win->cursor_keymap_status = NULL;
-    win->tweak = NULL;
-#ifdef WIN32
-    win->ime_data = NULL;
-#endif
-
-    BLI_listbase_clear(&win->queue);
-    BLI_listbase_clear(&win->handlers);
-    BLI_listbase_clear(&win->modalhandlers);
-    BLI_listbase_clear(&win->gesture);
-
-    win->active = 0;
-
-    win->cursor = 0;
-    win->lastcursor = 0;
-    win->modalcursor = 0;
-    win->grabcursor = 0;
-    win->addmousemove = true;
-    BLO_read_data_address(reader, &win->stereo3d_format);
-
-    /* Multi-view always fallback to anaglyph at file opening
-     * otherwise quad-buffer saved files can break Blender. */
-    if (win->stereo3d_format) {
-      win->stereo3d_format->display_mode = S3D_DISPLAY_ANAGLYPH;
-    }
-  }
-
-  direct_link_wm_xr_data(reader, &wm->xr);
-
-  BLI_listbase_clear(&wm->timers);
-  BLI_listbase_clear(&wm->operators);
-  BLI_listbase_clear(&wm->paintcursors);
-  BLI_listbase_clear(&wm->queue);
-  BKE_reports_init(&wm->reports, RPT_STORE);
-
-  BLI_listbase_clear(&wm->keyconfigs);
-  wm->defaultconf = NULL;
-  wm->addonconf = NULL;
-  wm->userconf = NULL;
-  wm->undo_stack = NULL;
-
-  wm->message_bus = NULL;
-
-  wm->xr.runtime = NULL;
-
-  BLI_listbase_clear(&wm->jobs);
-  BLI_listbase_clear(&wm->drags);
-
-  wm->windrawable = NULL;
-  wm->winactive = NULL;
-  wm->initialized = 0;
-  wm->op_undo_depth = 0;
-  wm->is_interface_locked = 0;
-}
-
-static void lib_link_windowmanager(BlendLibReader *reader, wmWindowManager *wm)
-{
-  LISTBASE_FOREACH (wmWindow *, win, &wm->windows) {
-    if (win->workspace_hook) { /* NULL for old files */
-      lib_link_workspace_instance_hook(reader, win->workspace_hook, &wm->id);
-    }
-    BLO_read_id_address(reader, wm->id.lib, &win->scene);
-    /* deprecated, but needed for versioning (will be NULL'ed then) */
-    BLO_read_id_address(reader, NULL, &win->screen);
-
-    LISTBASE_FOREACH (ScrArea *, area, &win->global_areas.areabase) {
-      BKE_screen_area_blend_read_lib(reader, &wm->id, area);
-    }
-
-    lib_link_wm_xr_data(reader, &wm->id, &wm->xr);
-  }
-}
-
-/** \} */
-
 /* -------------------------------------------------------------------- */
 /** \name Read ID: Screen
  * \{ */
@@ -5431,9 +5293,6 @@ static bool direct_link_id(FileData *fd, Main *main, const int tag, ID *id, ID *
   bool success = true;
 
   switch (GS(id->name)) {
-    case ID_WM:
-      direct_link_windowmanager(&reader, (wmWindowManager *)id);
-      break;
     case ID_SCR:
       success = direct_link_screen(&reader, (bScreen *)id);
       break;
@@ -5449,6 +5308,7 @@ static bool direct_link_id(FileData *fd, Main *main, const int tag, ID *id, ID *
     case ID_LI:
       direct_link_library(fd, (Library *)id, main);
       break;
+    case ID_WM:
     case ID_WS:
     case ID_PA:
     case ID_GR:
@@ -6063,9 +5923,6 @@ static void lib_link_all(FileData *fd, Main *bmain)
      * Please keep order of entries in that switch matching that order, it's easier to quickly see
      * whether something is wrong then. */
     switch (GS(id->name)) {
-      case ID_WM:
-        lib_link_windowmanager(&reader, (wmWindowManager *)id);
-        break;
       case ID_SCE:
         lib_link_scene(&reader, (Scene *)id);
         break;
@@ -6079,6 +5936,7 @@ static void lib_link_all(FileData *fd, Main *bmain)
       case ID_LI:
         lib_link_library(&reader, (Library *)id); /* Only init users. */
         break;
+      case ID_WM:
       case ID_WS:
       case ID_SCR:
       case ID_PA:
@@ -8161,6 +8019,11 @@ bool BLO_read_data_is_undo(BlendDataReader *reader)
   return reader->fd->memfile != NULL;
 }
 
+void BLO_read_data_globmap_add(BlendDataReader *reader, void *oldaddr, void *newaddr)
+{
+  oldnewmap_insert(reader->fd->globmap, oldaddr, newaddr, 0);
+}
+
 bool BLO_read_lib_is_undo(BlendLibReader *reader)
 {
   return reader->fd->memfile != NULL;
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index e4995c991e1..9bf4c6526f4 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1627,32 +1627,6 @@ static void write_scene(BlendWriter *writer, Scene *sce, const void *id_address)
   BLI_assert(sce->layer_properties == NULL);
 }
 
-static void write_wm_xr_data(BlendWriter *writer, wmXrData *xr_data)
-{
-  BKE_screen_view3d_shading_blend_write(writer, &xr_data->session_settings.shading);
-}
-
-static void write_windowmanager(BlendWriter *writer, wmWindowManager *wm, const void *id_address)
-{
-  BLO_write_id_struct(writer, wmWindowManager, id_address, &wm->id);
-  BKE_id_blend_write(writer, &wm->id);
-  write_wm_xr_data(writer, &wm->xr);
-
-  LISTBASE_FOREACH (wmWindow *, win, &wm->windows) {
-    /* update deprecated screen member (for so loading in 2.7x uses the correct screen) */
-    win->screen = BKE_workspace_active_screen_get(win->workspace_hook);
-
-    BLO_write_struct(writer, wmWindow, win);
-    BLO_write_struct(writer, WorkSpaceInstanceHook, win->workspace_hook);
-    BLO_write_struct(writer, Stereo3dFormat, win->stereo3d_format);
-
-    BKE_screen_area_map_blend_write(writer, &win->global_areas);
-
-    /* data is written, clear deprecated data again */
-    win->screen = NULL;
-  }
-}
-
 /* Keep it last of write_foodata functions. */
 static void write_libraries(WriteData *wd, Main *main)
 {
@@ -1911,15 +1885,13 @@ static bool write_file_handle(Main *mainvar,
         }
 
         switch ((ID_Type)GS(id->name)) {
-          case ID_WM:
-            write_windowmanager(&writer, (wmWindowManager *)id_buffer, id);
-            break;
           case ID_SCE:
             write_scene(&writer, (Scene *)id_buffer, id);
             break;
           case ID_OB:
             write_object(&writer, (Object *)id_buffer, id);
             break;
+          case ID_WM:
           case ID_WS:
           case ID_SCR:
           case ID_PA:
diff --git a/source/blender/windowmanager/CMakeLists.txt b/source/blender/windowmanager/CMakeLists.txt
index 07e962aaf89..3a6d5705a79 100644
--- a/source/blender/windowmanager/CMakeLists.txt
+++ b/source/blender/windowmanager/CMakeLists.txt
@@ -43,6 +43,9 @@ set(INC
   ../../../intern/glew-mx
   ../../../intern/guardedalloc
   ../../../intern/memutil
+
+  # for writefile.c: dna_type_offsets.h
+  ${CMAKE_BINARY_DIR}/source/blender/makesdna/intern
 )
 
 set(INC_SYS
diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c
index 68547323761..a10284e9740 100644
--- a/source/blender/windowmanager/intern/wm.c
+++ b/source/blender/windowmanager/intern/wm.c
@@ -25,6 +25,9 @@
  * Also Blender's main event loop (WM_main).
  */
 
+/* Allow using deprecated functionality for .blend file I/O. */
+#define DNA_DEPRECATED_ALLOW
+
 #include <stddef.h>
 #include <string.h>
 
@@

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list