[Bf-blender-cvs] [c44a17ec4b2] master: Fix T84475: Outliner missing update when adding IDs to main via RNA

Philipp Oeser noreply at git.blender.org
Fri Jan 8 11:52:29 CET 2021


Commit: c44a17ec4b247b0af5e4c58bbcfca6dece51baf1
Author: Philipp Oeser
Date:   Thu Jan 7 14:06:43 2021 +0100
Branches: master
https://developer.blender.org/rBc44a17ec4b247b0af5e4c58bbcfca6dece51baf1

Fix T84475: Outliner missing update when adding IDs to main via RNA

Was reported for meshes, but was true for any type.
Now add appropriate notifier to refresh the Outliner.

Maniphest Tasks: T84475

Differential Revision: https://developer.blender.org/D10030

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

M	source/blender/editors/space_outliner/space_outliner.c
M	source/blender/makesrna/intern/rna_main_api.c

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

diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c
index 57a063a01ca..f207b6193be 100644
--- a/source/blender/editors/space_outliner/space_outliner.c
+++ b/source/blender/editors/space_outliner/space_outliner.c
@@ -196,7 +196,7 @@ static void outliner_main_region_listener(wmWindow *UNUSED(win),
       }
       break;
     case NC_ID:
-      if (wmn->action == NA_RENAME) {
+      if (ELEM(wmn->action, NA_RENAME, NA_ADDED)) {
         ED_region_tag_redraw(region);
       }
       break;
diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c
index 564acaec90a..5170d598ab5 100644
--- a/source/blender/makesrna/intern/rna_main_api.c
+++ b/source/blender/makesrna/intern/rna_main_api.c
@@ -172,6 +172,9 @@ static Camera *rna_Main_cameras_new(Main *bmain, const char *name)
 
   ID *id = BKE_camera_add(bmain, safe_name);
   id_us_min(id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return (Camera *)id;
 }
 
@@ -180,7 +183,11 @@ static Scene *rna_Main_scenes_new(Main *bmain, const char *name)
   char safe_name[MAX_ID_NAME - 2];
   rna_idname_validate(name, safe_name);
 
-  return BKE_scene_add(bmain, safe_name);
+  Scene *scene = BKE_scene_add(bmain, safe_name);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
+  return scene;
 }
 static void rna_Main_scenes_remove(
     Main *bmain, bContext *C, ReportList *reports, PointerRNA *scene_ptr, bool do_unlink)
@@ -249,6 +256,8 @@ static Object *rna_Main_objects_new(Main *bmain, ReportList *reports, const char
   ob->data = data;
   BKE_object_materials_test(bmain, ob, ob->data);
 
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return ob;
 }
 
@@ -259,6 +268,9 @@ static Material *rna_Main_materials_new(Main *bmain, const char *name)
 
   ID *id = (ID *)BKE_material_add(bmain, safe_name);
   id_us_min(id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return (Material *)id;
 }
 
@@ -309,6 +321,9 @@ static Mesh *rna_Main_meshes_new(Main *bmain, const char *name)
 
   Mesh *me = BKE_mesh_add(bmain, safe_name);
   id_us_min(&me->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return me;
 }
 
@@ -331,7 +346,12 @@ static Mesh *rna_Main_meshes_new_from_object(Main *bmain,
       return NULL;
   }
 
-  return BKE_mesh_new_from_object_to_bmain(bmain, depsgraph, object, preserve_all_data_layers);
+  Mesh *mesh = BKE_mesh_new_from_object_to_bmain(
+      bmain, depsgraph, object, preserve_all_data_layers);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
+  return mesh;
 }
 
 static Light *rna_Main_lights_new(Main *bmain, const char *name, int type)
@@ -342,6 +362,9 @@ static Light *rna_Main_lights_new(Main *bmain, const char *name, int type)
   Light *lamp = BKE_light_add(bmain, safe_name);
   lamp->type = type;
   id_us_min(&lamp->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return lamp;
 }
 
@@ -371,6 +394,9 @@ static Image *rna_Main_images_new(Main *bmain,
                                          is_data,
                                          tiled);
   id_us_min(&image->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return image;
 }
 static Image *rna_Main_images_load(Main *bmain,
@@ -397,6 +423,9 @@ static Image *rna_Main_images_load(Main *bmain,
   }
 
   id_us_min((ID *)ima);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return ima;
 }
 
@@ -407,6 +436,9 @@ static Lattice *rna_Main_lattices_new(Main *bmain, const char *name)
 
   Lattice *lt = BKE_lattice_add(bmain, safe_name);
   id_us_min(&lt->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return lt;
 }
 
@@ -417,6 +449,9 @@ static Curve *rna_Main_curves_new(Main *bmain, const char *name, int type)
 
   Curve *cu = BKE_curve_add(bmain, safe_name, type);
   id_us_min(&cu->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return cu;
 }
 
@@ -427,6 +462,9 @@ static MetaBall *rna_Main_metaballs_new(Main *bmain, const char *name)
 
   MetaBall *mb = BKE_mball_add(bmain, safe_name);
   id_us_min(&mb->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return mb;
 }
 
@@ -452,6 +490,9 @@ static VFont *rna_Main_fonts_load(Main *bmain,
                 filepath,
                 errno ? strerror(errno) : TIP_("unsupported font format"));
   }
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return font;
 }
 
@@ -463,6 +504,9 @@ static Tex *rna_Main_textures_new(Main *bmain, const char *name, int type)
   Tex *tex = BKE_texture_add(bmain, safe_name);
   BKE_texture_type_set(tex, type);
   id_us_min(&tex->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return tex;
 }
 
@@ -473,6 +517,9 @@ static Brush *rna_Main_brushes_new(Main *bmain, const char *name, int mode)
 
   Brush *brush = BKE_brush_add(bmain, safe_name, mode);
   id_us_min(&brush->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return brush;
 }
 
@@ -490,6 +537,9 @@ static World *rna_Main_worlds_new(Main *bmain, const char *name)
 
   World *world = BKE_world_add(bmain, safe_name);
   id_us_min(&world->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return world;
 }
 
@@ -498,7 +548,11 @@ static Collection *rna_Main_collections_new(Main *bmain, const char *name)
   char safe_name[MAX_ID_NAME - 2];
   rna_idname_validate(name, safe_name);
 
-  return BKE_collection_add(bmain, NULL, safe_name);
+  Collection *collection = BKE_collection_add(bmain, NULL, safe_name);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
+  return collection;
 }
 
 static Speaker *rna_Main_speakers_new(Main *bmain, const char *name)
@@ -508,6 +562,9 @@ static Speaker *rna_Main_speakers_new(Main *bmain, const char *name)
 
   Speaker *speaker = BKE_speaker_add(bmain, safe_name);
   id_us_min(&speaker->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return speaker;
 }
 
@@ -523,6 +580,9 @@ static bSound *rna_Main_sounds_load(Main *bmain, const char *name, bool check_ex
   }
 
   id_us_min(&sound->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return sound;
 }
 
@@ -531,7 +591,11 @@ static Text *rna_Main_texts_new(Main *bmain, const char *name)
   char safe_name[MAX_ID_NAME - 2];
   rna_idname_validate(name, safe_name);
 
-  return BKE_text_add(bmain, safe_name);
+  Text *text = BKE_text_add(bmain, safe_name);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
+  return text;
 }
 
 static Text *rna_Main_texts_load(Main *bmain,
@@ -551,6 +615,9 @@ static Text *rna_Main_texts_load(Main *bmain,
                 filepath,
                 errno ? strerror(errno) : TIP_("unable to load text"));
   }
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return txt;
 }
 
@@ -561,6 +628,9 @@ static bArmature *rna_Main_armatures_new(Main *bmain, const char *name)
 
   bArmature *arm = BKE_armature_add(bmain, safe_name);
   id_us_min(&arm->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return arm;
 }
 
@@ -571,6 +641,9 @@ static bAction *rna_Main_actions_new(Main *bmain, const char *name)
 
   bAction *act = BKE_action_add(bmain, safe_name);
   id_fake_user_clear(&act->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return act;
 }
 
@@ -581,6 +654,9 @@ static ParticleSettings *rna_Main_particles_new(Main *bmain, const char *name)
 
   ParticleSettings *part = BKE_particlesettings_add(bmain, safe_name);
   id_us_min(&part->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return part;
 }
 
@@ -591,6 +667,9 @@ static Palette *rna_Main_palettes_new(Main *bmain, const char *name)
 
   Palette *palette = BKE_palette_add(bmain, safe_name);
   id_us_min(&palette->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return (Palette *)palette;
 }
 
@@ -622,6 +701,9 @@ static MovieClip *rna_Main_movieclip_load(Main *bmain,
   }
 
   id_us_min((ID *)clip);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return clip;
 }
 
@@ -630,7 +712,11 @@ static Mask *rna_Main_mask_new(Main *bmain, const char *name)
   char safe_name[MAX_ID_NAME - 2];
   rna_idname_validate(name, safe_name);
 
-  return BKE_mask_new(bmain, safe_name);
+  Mask *mask = BKE_mask_new(bmain, safe_name);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
+  return mask;
 }
 
 static FreestyleLineStyle *rna_Main_linestyles_new(Main *bmain, const char *name)
@@ -640,6 +726,9 @@ static FreestyleLineStyle *rna_Main_linestyles_new(Main *bmain, const char *name
 
   FreestyleLineStyle *linestyle = BKE_linestyle_new(bmain, safe_name);
   id_us_min(&linestyle->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return linestyle;
 }
 
@@ -653,6 +742,9 @@ static LightProbe *rna_Main_lightprobe_new(Main *bmain, const char *name, int ty
   BKE_lightprobe_type_set(probe, type);
 
   id_us_min(&probe->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return probe;
 }
 
@@ -663,6 +755,9 @@ static bGPdata *rna_Main_gpencils_new(Main *bmain, const char *name)
 
   bGPdata *gpd = BKE_gpencil_data_addnew(bmain, safe_name);
   id_us_min(&gpd->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return gpd;
 }
 
@@ -674,6 +769,9 @@ static Hair *rna_Main_hairs_new(Main *bmain, const char *name)
 
   Hair *hair = BKE_hair_add(bmain, safe_name);
   id_us_min(&hair->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return hair;
 }
 #  endif
@@ -686,6 +784,9 @@ static PointCloud *rna_Main_pointclouds_new(Main *bmain, const char *name)
 
   PointCloud *pointcloud = BKE_pointcloud_add(bmain, safe_name);
   id_us_min(&pointcloud->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return pointcloud;
 }
 #  endif
@@ -697,6 +798,9 @@ static Volume *rna_Main_volumes_new(Main *bmain, const char *name)
 
   Volume *volume = BKE_volume_add(bmain, safe_name);
   id_us_min(&volume->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return volume;
 }
 
@@ -708,6 +812,9 @@ static Simulation *rna_Main_simulations_new(Main *bmain, const char *name)
 
   Simulation *simulation = BKE_simulation_add(bmain, safe_name);
   id_us_min(&simulation->id);
+
+  WM_main_add_notifier(NC_ID | NA_ADDED, NULL);
+
   return simulation;
 }
 #  endif



More information about the Bf-blender-cvs mailing list