Fix #24135: Material modification not immediately updated in Outliner
authorSergey Sharybin <sergey.vfx@gmail.com>
Tue, 5 Oct 2010 11:55:54 +0000 (11:55 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Tue, 5 Oct 2010 11:55:54 +0000 (11:55 +0000)
Also fixed outliner update when changing active_material_index from Py and
when selecting texture from UI

source/blender/editors/render/render_shading.c
source/blender/editors/space_outliner/outliner.c
source/blender/editors/space_outliner/space_outliner.c
source/blender/makesrna/intern/rna_object.c

index debd13c8d992bf7270fea160e43dbbe60cea947c..71a46a16f98596cf545c056aa492d13cea35113f 100644 (file)
@@ -263,6 +263,7 @@ static int material_slot_add_exec(bContext *C, wmOperator *op)
 
        object_add_material_slot(ob);
        WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
+       WM_event_add_notifier(C, NC_OBJECT|ND_OB_SHADING, ob);
        
        return OPERATOR_FINISHED;
 }
@@ -290,6 +291,7 @@ static int material_slot_remove_exec(bContext *C, wmOperator *op)
 
        object_remove_material_slot(ob);
        WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, ob);
+       WM_event_add_notifier(C, NC_OBJECT|ND_OB_SHADING, ob);
        
        return OPERATOR_FINISHED;
 }
index aaeab9e78434ffab0e44820a5f78d037e759fd15..b876aa11ab539f7e64357693d170800df5154ed1 100644 (file)
@@ -2050,7 +2050,9 @@ static int tree_element_active_texture(bContext *C, Scene *scene, SpaceOops *soo
                }
        }
        
-       WM_event_add_notifier(C, NC_TEXTURE, NULL);
+       if(set)
+               WM_event_add_notifier(C, NC_TEXTURE, NULL);
+
        return 0;
 }
 
index d91c8caa14c215a544d789147fcb5f58babab75b..f0f9ac945efa35fdb89b089fc5536d3969de849a 100644 (file)
@@ -116,6 +116,7 @@ static void outliner_main_area_listener(ARegion *ar, wmNotifier *wmn)
                                case ND_BONE_ACTIVE:
                                case ND_BONE_SELECT:
                                case ND_PARENT:
+                               case ND_OB_SHADING:
                                        ED_region_tag_redraw(ar);
                                        break;
                                case ND_CONSTRAINT:
@@ -150,6 +151,17 @@ static void outliner_main_area_listener(ARegion *ar, wmNotifier *wmn)
                        if(wmn->action == NA_RENAME)
                                ED_region_tag_redraw(ar);
                        break;
+               case NC_MATERIAL:
+                       switch(wmn->data) {
+                               case ND_SHADING:
+                               case ND_SHADING_DRAW:
+                                       ED_region_tag_redraw(ar);
+                                       break;
+                       }
+                       break;
+               case NC_TEXTURE:
+                       ED_region_tag_redraw(ar);
+                       break;
        }
        
 }
index 3f07d953e0b1c6c9cf4bd18bfa9f357f27693249..e74bec566d54f704ceca8ec926725d345d10e6fc 100644 (file)
@@ -769,6 +769,12 @@ static void rna_MaterialSlot_name_get(PointerRNA *ptr, char *str)
                strcpy(str, "");
 }
 
+static void rna_MaterialSlot_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+       rna_Object_internal_update(bmain, scene, ptr);
+       WM_main_add_notifier(NC_OBJECT|ND_OB_SHADING, ptr->id.data);
+}
+
 /* why does this have to be so complicated?, can't all this crap be
  * moved to in BGE conversion function? - Campbell *
  *
@@ -1143,13 +1149,13 @@ static void rna_def_material_slot(BlenderRNA *brna)
        RNA_def_property_flag(prop, PROP_EDITABLE);
        RNA_def_property_pointer_funcs(prop, "rna_MaterialSlot_material_get", "rna_MaterialSlot_material_set", NULL, NULL);
        RNA_def_property_ui_text(prop, "Material", "Material datablock used by this material slot");
-       RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
+       RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_MaterialSlot_update");
 
        prop= RNA_def_property(srna, "link", PROP_ENUM, PROP_NONE);
        RNA_def_property_enum_items(prop, link_items);
        RNA_def_property_enum_funcs(prop, "rna_MaterialSlot_link_get", "rna_MaterialSlot_link_set", NULL);
        RNA_def_property_ui_text(prop, "Link", "Link material to object or the object's data");
-       RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
+       RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_MaterialSlot_update");
 
        prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
        RNA_def_property_string_funcs(prop, "rna_MaterialSlot_name_get", "rna_MaterialSlot_name_length", NULL);
@@ -1739,14 +1745,14 @@ static void rna_def_object(BlenderRNA *brna)
        RNA_def_property_pointer_funcs(prop, "rna_Object_active_material_get", "rna_Object_active_material_set", NULL, NULL);
        RNA_def_property_flag(prop, PROP_EDITABLE);
        RNA_def_property_ui_text(prop, "Active Material", "Active material being displayed");
-       RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update");
+       RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_MaterialSlot_update");
 
        prop= RNA_def_property(srna, "active_material_index", PROP_INT, PROP_UNSIGNED);
        RNA_def_property_int_sdna(prop, NULL, "actcol");
        RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
        RNA_def_property_int_funcs(prop, "rna_Object_active_material_index_get", "rna_Object_active_material_index_set", "rna_Object_active_material_index_range");
        RNA_def_property_ui_text(prop, "Active Material Index", "Index of active material slot");
-       RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, NULL);
+       RNA_def_property_update(prop, NC_MATERIAL|ND_SHADING, NULL);
        
        /* transform */
        prop= RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION);