Commit: 8f496e7ebf1c3b513565292ff6c4a674294f3a7d
Author: Bastien Montagne
Date:   Sat Sep 12 17:15:06 2015 +0200
Branches: id-remap
https://developer.blender.org/rB8f496e7ebf1c3b513565292ff6c4a674294f3a7d

Add remaining missing id_remap editors' callbacks.

This is far from being done though... :/

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

M       source/blender/blenkernel/intern/library.c
M       source/blender/editors/space_buttons/space_buttons.c
M       source/blender/editors/space_clip/space_clip.c
M       source/blender/editors/space_image/space_image.c
M       source/blender/editors/space_logic/space_logic.c
M       source/blender/editors/space_node/space_node.c
M       source/blender/editors/space_sequencer/space_sequencer.c
M       source/blender/editors/space_text/space_text.c
M       source/blender/makesrna/intern/rna_ID.c

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

diff --git a/source/blender/blenkernel/intern/library.c 
b/source/blender/blenkernel/intern/library.c
index 5aaeb42..5ec85d3 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -965,7 +965,8 @@ void BKE_libblock_remap(Main *bmain, ID *old_id, ID *new_id)
                free_notifier_reference_cb(old_id);
        }
 
-       /* We assume editors do not hold references to their IDs... */
+       /* We assume editors do not hold references to their IDs... This is 
false in some cases
+        * (Image is especially tricky here), editors' code is to handle 
refcound (id->us) itself then. */
        if (remap_editor_id_reference_cb) {
                remap_editor_id_reference_cb(old_id, new_id);
        }
diff --git a/source/blender/editors/space_buttons/space_buttons.c 
b/source/blender/editors/space_buttons/space_buttons.c
index 83c9663..b546282 100644
--- a/source/blender/editors/space_buttons/space_buttons.c
+++ b/source/blender/editors/space_buttons/space_buttons.c
@@ -429,6 +429,8 @@ static void buttons_id_remap(SpaceLink *slink, ID *old_id, 
ID *new_id)
                        /* TODO_REMAP: Check path further down remains valid? 
Or nullify it systematically? */
                }
        }
+
+       /* TODO_REMAP: sbuts->texuser ? */
 }
 
 /* only called once, from space/spacetypes.c */
diff --git a/source/blender/editors/space_clip/space_clip.c 
b/source/blender/editors/space_clip/space_clip.c
index f119fe2..90d6c73 100644
--- a/source/blender/editors/space_clip/space_clip.c
+++ b/source/blender/editors/space_clip/space_clip.c
@@ -45,6 +45,7 @@
 
 #include "BKE_context.h"
 #include "BKE_screen.h"
+#include "BKE_library.h"
 #include "BKE_movieclip.h"
 #include "BKE_tracking.h"
 
@@ -1512,6 +1513,18 @@ static void clip_properties_area_listener(bScreen 
*UNUSED(sc), ScrArea *UNUSED(s
 
 /********************* registration ********************/
 
+static void clip_id_remap(SpaceLink *slink, ID *old_id, ID *new_id)
+{
+       SpaceClip *sclip = (SpaceClip *)slink;
+
+       if ((ID *)sclip->clip == old_id) {
+               sclip->clip = (MovieClip *)new_id;
+               id_us_min(old_id);
+               id_us_plus(new_id);
+       }
+}
+
+
 /* only called once, from space/spacetypes.c */
 void ED_spacetype_clip(void)
 {
@@ -1531,6 +1544,7 @@ void ED_spacetype_clip(void)
        st->context = clip_context;
        st->dropboxes = clip_dropboxes;
        st->refresh = clip_refresh;
+       st->id_remap = clip_id_remap;
 
        /* regions: main window */
        art = MEM_callocN(sizeof(ARegionType), "spacetype clip region");
diff --git a/source/blender/editors/space_image/space_image.c 
b/source/blender/editors/space_image/space_image.c
index 930a626..b4055d4 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -28,6 +28,7 @@
  *  \ingroup spimage
  */
 
+#include "DNA_gpencil_types.h"
 #include "DNA_mesh_types.h"
 #include "DNA_mask_types.h"
 #include "DNA_meshdata_types.h"
@@ -985,6 +986,13 @@ static void image_id_remap(SpaceLink *slink, ID *old_id, 
ID *new_id)
 
        if ((ID *)simg->image == old_id) {
                simg->image = (Image *)new_id;
+               /* TODO_REMAP this does not work well. */
+               id_us_min(old_id);
+               id_us_plus(new_id);
+       }
+
+       if ((ID *)simg->gpd == old_id) {
+               simg->gpd = (bGPdata *)new_id;
                id_us_min(old_id);
                id_us_plus(new_id);
        }
diff --git a/source/blender/editors/space_logic/space_logic.c 
b/source/blender/editors/space_logic/space_logic.c
index 34a5fee..2b63c5e 100644
--- a/source/blender/editors/space_logic/space_logic.c
+++ b/source/blender/editors/space_logic/space_logic.c
@@ -38,7 +38,10 @@
 #include "BLI_blenlib.h"
 #include "BLI_utildefines.h"
 
+#include "DNA_gpencil_types.h"
+
 #include "BKE_context.h"
+#include "BKE_library.h"
 #include "BKE_screen.h"
 
 #include "ED_space_api.h"
@@ -300,6 +303,17 @@ static void logic_header_area_draw(const bContext *C, 
ARegion *ar)
 
 /**************************** spacetype *****************************/
 
+static void logic_id_remap(SpaceLink *slink, ID *old_id, ID *new_id)
+{
+       SpaceLogic *slog = (SpaceLogic *)slink;
+
+       if ((ID *)slog->gpd == old_id) {
+               slog->gpd = (bGPdata *)new_id;
+               id_us_min(old_id);
+               id_us_plus(new_id);
+       }
+}
+
 /* only called once, from space/spacetypes.c */
 void ED_spacetype_logic(void)
 {
@@ -317,7 +331,8 @@ void ED_spacetype_logic(void)
        st->keymap = logic_keymap;
        st->refresh = logic_refresh;
        st->context = logic_context;
-       
+       st->id_remap = logic_id_remap;
+
        /* regions: main window */
        art = MEM_callocN(sizeof(ARegionType), "spacetype logic region");
        art->regionid = RGN_TYPE_WINDOW;
diff --git a/source/blender/editors/space_node/space_node.c 
b/source/blender/editors/space_node/space_node.c
index 4031933..d120f17 100644
--- a/source/blender/editors/space_node/space_node.c
+++ b/source/blender/editors/space_node/space_node.c
@@ -28,6 +28,7 @@
  *  \ingroup spnode
  */
 
+#include "DNA_gpencil_types.h"
 #include "DNA_lamp_types.h"
 #include "DNA_material_types.h"
 #include "DNA_node_types.h"
@@ -857,6 +858,12 @@ static void node_id_remap(SpaceLink *slink, ID *old_id, ID 
*new_id)
                        snode->from = new_id;
                }
        }
+
+       if ((ID *)snode->gpd == old_id) {
+               snode->gpd = (bGPdata *)new_id;
+               id_us_min(old_id);
+               id_us_plus(new_id);
+       }
 }
 
 /* only called once, from space/spacetypes.c */
diff --git a/source/blender/editors/space_sequencer/space_sequencer.c 
b/source/blender/editors/space_sequencer/space_sequencer.c
index 5b3061b..55674f0 100644
--- a/source/blender/editors/space_sequencer/space_sequencer.c
+++ b/source/blender/editors/space_sequencer/space_sequencer.c
@@ -32,6 +32,7 @@
 #include <string.h>
 #include <stdio.h>
 
+#include "DNA_gpencil_types.h"
 #include "DNA_scene_types.h"
 #include "DNA_mask_types.h"
 
@@ -41,6 +42,7 @@
 #include "BLI_utildefines.h"
 
 #include "BKE_context.h"
+#include "BKE_library.h"
 #include "BKE_screen.h"
 #include "BKE_sequencer.h"
 #include "BKE_global.h"
@@ -687,6 +689,18 @@ static void sequencer_buttons_area_listener(bScreen 
*UNUSED(sc), ScrArea *UNUSED
                        break;
        }
 }
+
+static void sequencer_id_remap(SpaceLink *slink, ID *old_id, ID *new_id)
+{
+       SpaceSeq *sseq = (SpaceSeq *)slink;
+
+       if ((ID *)sseq->gpd == old_id) {
+               sseq->gpd = (bGPdata *)new_id;
+               id_us_min(old_id);
+               id_us_plus(new_id);
+       }
+}
+
 /* ************************************* */
 
 /* only called once, from space/spacetypes.c */
@@ -708,6 +722,7 @@ void ED_spacetype_sequencer(void)
        st->dropboxes = sequencer_dropboxes;
        st->refresh = sequencer_refresh;
        st->listener = sequencer_listener;
+       st->id_remap = sequencer_id_remap;
 
        /* regions: main window */
        art = MEM_callocN(sizeof(ARegionType), "spacetype sequencer region");
diff --git a/source/blender/editors/space_text/space_text.c 
b/source/blender/editors/space_text/space_text.c
index ff53d30..1ea4f0e 100644
--- a/source/blender/editors/space_text/space_text.c
+++ b/source/blender/editors/space_text/space_text.c
@@ -38,6 +38,7 @@
 #include "BLI_blenlib.h"
 
 #include "BKE_context.h"
+#include "BKE_library.h"
 #include "BKE_screen.h"
 #include "BKE_text.h"
 
@@ -554,6 +555,17 @@ static void text_properties_area_draw(const bContext *C, 
ARegion *ar)
        }
 }
 
+static void text_id_remap(SpaceLink *slink, ID *old_id, ID *new_id)
+{
+       SpaceText *stext = (SpaceText *)slink;
+
+       if ((ID *)stext->text == old_id) {
+               stext->text = (Text *)new_id;
+               id_us_min(old_id);
+               id_us_plus(new_id);
+       }
+}
+
 /********************* registration ********************/
 
 /* only called once, from space/spacetypes.c */
@@ -574,7 +586,8 @@ void ED_spacetype_text(void)
        st->listener = text_listener;
        st->context = text_context;
        st->dropboxes = text_dropboxes;
-       
+       st->id_remap = text_id_remap;
+
        /* regions: main window */
        art = MEM_callocN(sizeof(ARegionType), "spacetype text region");
        art->regionid = RGN_TYPE_WINDOW;
diff --git a/source/blender/makesrna/intern/rna_ID.c 
b/source/blender/makesrna/intern/rna_ID.c
index 345175f..f74dfe2 100644
--- a/source/blender/makesrna/intern/rna_ID.c
+++ b/source/blender/makesrna/intern/rna_ID.c
@@ -335,7 +335,9 @@ static void rna_ID_user_clear(ID *id)
 
 static void rna_ID_user_remap(ID *id, Main *bmain, ID *new_id)
 {
-       BKE_libblock_remap(bmain, id, new_id);
+       if (GS(id->name) == GS(new_id->name)) {
+               BKE_libblock_remap(bmain, id, new_id);
+       }
 }
 
 static AnimData * rna_ID_animation_data_create(ID *id, Main *bmain)

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

Reply via email to