Fix #24135: Material modification not immediately updated in Outliner

Also fixed outliner update when changing active_material_index from Py and
when selecting texture from UI
This commit is contained in:
Sergey Sharybin
2010-10-05 11:55:54 +00:00
parent 0eeeab515b
commit 629ddacd48
4 changed files with 27 additions and 5 deletions

View 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;
}

View 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;
}

View 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;
}
}

View 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);